Überblick
-
Zuvor habe ich OpenCV verwendet, um die Betrachtungssituation von Kunstwerken zu visualisieren.
https://qiita.com/cami_oshimo/items/ce33491c07f9625ed121
-
Ich dachte, wenn ich dies anwendete und zur Erkennung des Mundes anstelle der Augen überging, könnte ich die Maske verwenden, um das Tragen zu beurteilen.
-
Stellen Sie zunächst einfach fest, ob Ihr Mund frei liegt, und stellen Sie dann fest, ob Sie eine Maske tragen.
Was vorzubereiten?
- Raspberry Pi3 Model B (4 ist wahrscheinlich in Ordnung)
- Fall für Raspberry Pi
- Kühlkörper für Raspberry Pi
- Raspberry Pi3 Modell B B + kompatibles Netzteil (5V 3.0A)
- Kamera für Himbeer-Pi
- Monitor mit HDMI-Eingang
- 100 Yen Shop Stativ
- Die Fernbedienung von Raspberry Pi von einem PC mit VNC erleichtert die Entwicklung.
Vorbereitung
- Richten Sie den Raspberry Pi ein.
- Halten Sie die Raspberry Pi-Kamera einsatzbereit.
https://www.raspberrypi.org/downloads/
- Stellen Sie die OpenCV-Bibliothek und die Kaskadendatei zur Verfügung.
haarcascade_frontalface_default.xml (Gesichtserkennung)
haarcascade_mcs_mouth.xml (Munderkennung)
Programmierung
- Eine Meldung, die Sie auffordert, Ihr Gesicht einzurahmen, ein Rahmen zur Gesichts- / Munderkennung und eine Warnung, wenn die Maske nicht getragen wird, werden dem Kamerabild überlagert.
- Wenn ein Gesicht und ein Mund erkannt werden, wird beurteilt, dass die Maske nicht getragen wird.
import sys
sys.path.append('/home/pi/.local/lib/python2.7/site-packages')
import numpy as np
import cv2
import time
import datetime
import ambient
args = sys.argv
face_cascade = cv2.CascadeClassifier('haarcascade_frontalface_default.xml')
mouth_cascade = cv2.CascadeClassifier('haarcascade_mcs_mouth.xml')
cap = cv2.VideoCapture(0)
while(True):
ret, frame = cap.read()
height = frame.shape[0]
width = frame.shape[1]
import sys
gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
faces = face_cascade.detectMultiScale(gray, 1.3, 5)
cv2.putText(frame, 'Please face in frame.', (350, 20), cv2.FONT_HERSHEY_PLAIN, 1.5, (0,255,0), thickness=2)
for (x,y,w,h) in faces:
roi_gray = gray[y:y+h, x:x+w]
roi_color = frame[y:y+h, x:x+w]
cv2.rectangle(frame,(x,y),(x+w,y+h),(0,255,0),2)
mouth = mouse_cascade.detectMultiScale(roi_gray)
for (ex,ey,ew,eh) in mouth:
cv2.rectangle(roi_color,(ex,ey),(ex+ew,ey+eh),(0,255,255),2)
cv2.putText(frame, 'Not masked!!', (10, 460), cv2.FONT_HERSHEY_DUPLEX, 1.0, (0,0,255), thickness=2)
resized_img = cv2.resize(frame,(width*2, height*2))
cv2.imshow('maskcheck', resized_img)
if cv2.waitKey(1) & 0xFF == ord('q'):
break
cap.release()
cv2.destroyAllWindows()
- Platzieren Sie ein Shell-Skript auf dem Desktop von RaspberryPi, damit das Python-Programm gestartet werden kann.
- Stellen Sie sicher, dass Sie zunächst auf das Symbol doppelklicken.
maskcheck.sh
#! /bin/bash
cd /home/pi/opencv_programs/
sudo python3 detect_face_camera.py
Aufgabe
- Es kann aufgrund externer Faktoren schwierig sein, dies zu erkennen. (Abstand zum Gesicht, Winkel, Lichtmenge usw.) Der Vorhang ist geschlossen, da aufgrund der Hintergrundbeleuchtung Geräusche aufgetreten sind und diese nicht mehr erkannt werden konnten.
- Je nach Art der Maske und Art des Tragens wird sie möglicherweise nicht als Gesicht erkannt.
- Ein anderer Ort als der Mund kann als Mund erkannt werden, wahrscheinlich aufgrund der kaskadierenden Datei zur Munderkennung. Es scheint, dass die Kaskadendatei geändert werden kann, sodass es möglich sein kann, sie durch zeitliche Optimierung zu lösen.
- Gesicht und Erkennung → Da die Logik darin besteht, das Vorhandensein oder Nichtvorhandensein des Mundes zu erkennen, muss das Gesicht zuerst erkannt werden. Ich habe versucht, die Munderkennung nur logisch, aber es hat nicht funktioniert. (OpenCV-Problem?)
- Ich bin gespannt, wie viel Leistung mit Raspberry Pi 4 verbessert werden kann, wenn sich Verzögerungen beim Zeichnen bemerkbar machen.