Hallo zusammen.
Heute werde ich ein Rauchererkennungs- und Gesichtserkennungsprojekt mit Ihnen teilen. An vielen öffentlichen Orten, in Produktionsstätten und in Schulen gibt es Rauchverbote. Es ist weiterhin notwendig, eine Rauchverbotsüberwachung durchzuführen und die KI das Rauchverhalten automatisch erkennen zu lassen und zu erkennen, wer raucht.
Verwenden Sie den Zielerkennungsalgorithmus, um das Rauchverhalten zu bestimmen, das Gesicht des Rauchers zu extrahieren und mithilfe des Gesichtserkennungsalgorithmus festzustellen, wer raucht. Die Idee ist relativ einfach, aber die Details sind immer noch etwas mühsam.
Die im Projekt verwendeten Trainingsdaten und Quellcode wurden gepackt. Es ist immer noch dasselbe wie zuvor, lesen Sie es im Kommentarbereich.
Ich habe 5.000 markierte Rauchdaten als Trainingsdaten verwendet
und sie im Datensatzverzeichnis abgelegt.
Trainieren Sie das YOLOv5-Zielerkennungsmodell.
Der erste Schritt besteht darin, data/coco128.yaml nach Smoke.yaml zu kopieren und das Datensatzverzeichnis und die Kategoriekonfigurationsinformationen zu ändern.
path: ../dataset/smoke # dataset root dir train: images/train# train images (relative to 'path') 128 images val: images/test# val images (relative to 'path') 128 images test:# test images (optional) # Classes names: 0: smoke
Der zweite Schritt besteht darin, ./models/yolov5s.yaml nach Smoke.yaml zu kopieren und nc zu ändern
nc: 1# number of classes
Der dritte Schritt besteht darin, das vorab trainierte Modell yolov5s.pt herunterzuladen und im Verzeichnis {yolov5-Verzeichnis}/weights abzulegen
Führen Sie den folgenden Befehl aus, um zu trainieren
python ./train.py --data ./data/smoke.yaml --cfg ./models/smoke.yaml --weights ./weights/yolov5s.pt --batch-size 30 --epochs 120 --workers 8 --name smoke --project smoke_s
Nachdem das Training abgeschlossen ist, werden Sie kann die folgende Ausgabe sehen:
Es ist in Ordnung, es richtig zu nennen.
Nach Abschluss des Trainings kann die best.pt-Position gefunden und später zur Zigarettenerkennung verwendet werden.
model = torch.hub.load('../28_people_counting/yolov5', 'custom', './weights/ciga.pt', source='local') results = self.model(img[:, :, ::-1]) pd = results.pandas().xyxy[0] ciga_pd = pd[pd['class'] == 0]
Nachdem wir Zigaretten identifizieren konnten, müssen wir noch feststellen, ob wir derzeit rauchen.
Sie können den IOU mithilfe des Zigarettenerkennungsrahmens und des Munderkennungsrahmens berechnen, um festzustellen, ob sich die beiden Rahmen überschneiden.
Munderkennungsrahmen, der Gesichtsschlüsselpunkte zur Identifizierung verwendet.
Es gibt viele ausgereifte Modelle für Gesichtserkennungsalgorithmen. Wir müssen sie nicht selbst trainieren, wir können die Datenbank einfach direkt anpassen.
Ich verwende hier die dlib-Bibliothek, die 68 Schlüsselpunkte auf einem Gesicht identifizieren und Gesichtsmerkmale basierend auf diesen 68 Schlüsselpunkten extrahieren kann.
face_detector = dlib.get_frontal_face_detector() face_sp = dlib.shape_predictor('./weights/shape_predictor_68_face_landmarks.dat') dets = face_detector(img, 1) face_list = [] for face in dets: l, t, r, b = face.left(), face.top(), face.right(), face.bottom() face_shape = face_sp(img, face)
face_detector kann Gesichter erkennen und den Gesichtserkennungsrahmen zurückgeben. face_sp basiert auf dem Gesichtserkennungsrahmen und identifiziert 68 Schlüsselpunkte des Gesichts.
Anhand dieser 68 Schlüsselpunkte können wir den Munderkennungsrahmen erhalten, um festzustellen, ob Sie rauchen.
Abschließend hoffen wir immer noch, Gesichtserkennungsalgorithmen nutzen zu können, um zu erkennen, wer raucht.
Der erste Schritt besteht darin, Gesichtsmerkmale zu extrahieren
face_feature_model = dlib.face_recognition_model_v1('./weights/dlib_face_recognition_resnet_model_v1.dat') face_descriptor = face_feature_model.compute_face_descriptor(img, face_shape)
face_descriptorBerechnen Sie einen Merkmalsvektor für jedes Gesicht basierend auf der Position und dem Abstand zwischen den 68 Schlüsselpunkten des Gesichts. Dieses Prinzip ähnelt dem zuvor geteilten word2vec oder dem Zuordnen von Videos zu N-dimensionalen Vektoren.
Der zweite Schritt besteht darin, die vorhandenen Gesichter in die Gesichtsdatenbank einzutragen. Ich habe 3 Rauchverhaltensweisen in Filmen und Fernsehserien vorbereitet
Schneiden Sie Gesichter aus den Videos aus, vektorisieren Sie sie und schreiben Sie sie in die Gesichtsdatenbank (ersetzt durch Dateien)
Der dritte Schritt, das Rauchverhalten, erfolgt schließlich. Wir können das Gesicht des Rauchers ausschneiden, den Gesichtsvektor berechnen, ihn mit den Merkmalen der Gesichtsdatenbank vergleichen, das ähnlichste Gesicht finden und den entsprechenden Namen zurückgeben erweitert werden, zum Beispiel: Das von mir bereitgestellte Video hat nur ein einziges Gesicht, aber in der tatsächlichen Überwachung müssen mehrere Gesichter vorhanden sein. Zu diesem Zeitpunkt können Sie den MOT-Algorithmus verwenden, um Fußgänger zu verfolgen und dann jede Person einzeln für das Rauchen zu identifizieren. Außerdem können Sie einen separaten Statistikbereich erstellen, um das identifizierte Rauchverhalten zu speichern und es als Beweis für Warnungen und Strafen zu verwenden.
Das obige ist der detaillierte Inhalt vonKI-Rauchverbot ist okay! Rauchererkennung + Gesichtserkennung. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!