Ich habe versucht, das Gesicht aus dem Video zu erkennen (OpenCV: Python-Version)

Auslösen

So speichern Sie nur einen Teil eines langen Videos mit OpenCV So nehmen Sie ein aufgenommenes Bild aus einem Video auf (OpenCV) Ich habe OpenCV aus dem Kandidaturvideo verwendet, um die Umgebung vorzubereiten, die für die Bildverarbeitung notwendig zu sein scheint. Von hier aus wollen wir mit Funktionen und Bibliotheken verarbeiten. Das erste ist die Gesichtserkennung.

Vorbereitung

Da es auf einem Mac entwickelt wurde, installieren Sie es von Homebrew.

brew install opencv

Daher gibt es unter "/ usr / local / Cellar / opencv / 4.1.1_2 / share / opencv4 / haarcascades /" einen Teil, der als Kaskade (Verteiler) bezeichnet wird und zum Erkennen des Gesichts und des gesamten Körpers erforderlich ist. Die Typen sind in [Gesichtserkennung mit OpenCV (Haar-like Feature Classifier)](https://qiita.com/hitomatagi/items/04b1b26c1bc2e8081427#haar-like Feature Classifier) beschrieben.

Hier,

--haarcascade_frontalface_alt_tree.xml Vorderseite --haarcascade_eye.xml Beide Augen --haarcascade_righteye_2splits.xml rechtes Auge --haarcascade_lefteye_2splits.xml Linkes Auge

Ich werde es versuchen.

Prozessablauf

Hier

  1. Das Gesicht befindet sich im Rahmen
  2. Schneiden Sie das Bild aus, das der ROI (Region of Interest) von 1 sein soll. Unterteilt in rechten und linken Bereich (Baron Ashura-Methode).
  3. Stellen Sie in 2 fest, ob sowohl das rechte als auch das linke Auge im Bild sichtbar sind. 4.3 Wenn die Bedingungen von 3 erfüllt sind, schließen Sie das Gesicht, das rechte Auge und das linke Auge mit einem Quadrat ein

Wird verarbeitet.

Entwicklung von

Entwickelt basierend auf dem obigen Verarbeitungsablauf.

Version beurteilt durch Teilen des rechten und des linken Auges


import cv2
import os
import time

if __name__ == '__main__':

	cap = cv2.VideoCapture('one_minutes.mp4')

	cap_width = int(cap.get(cv2.CAP_PROP_FRAME_WIDTH))
	cap_height = int(cap.get(cv2.CAP_PROP_FRAME_HEIGHT))
	fps = cap.get(cv2.CAP_PROP_FPS)

	fourcc = cv2.VideoWriter_fourcc('m','p','4','v')
	writer = cv2.VideoWriter('detect_face.mp4',fourcc, fps, (cap_width, cap_height))

	cascade_base_path = "/usr/local/Cellar/opencv/4.1.1_2/share/opencv4/haarcascades/"
    #Machen Sie sich bereit Kaskade
	face_cascade = cv2.CascadeClassifier(os.path.join(cascade_base_path, 'haarcascade_frontalface_alt_tree.xml'))
	right_eye_cascade = cv2.CascadeClassifier(os.path.join(cascade_base_path, 'haarcascade_righteye_2splits.xml'))
	left_eye_cascade = cv2.CascadeClassifier(os.path.join(cascade_base_path, 'haarcascade_lefteye_2splits.xml'))

	start = time.time()

	try :
		while True:

			if not cap.isOpened():
				break

			ret, frame = cap.read()

			img_gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
            # 1.Das Gesicht ist im Rahmen
			face_points = face_cascade.detectMultiScale(img_gray)
			
			for (fx,fy,fw,fh) in face_points:
				
                #2. ROI(Region of Interest:Zielgebiet)Schneiden Sie das Bild aus, das wird
                #Unterteilt in rechten und linken Bereich(Baron Ashura Methode)
				width_center = fx + int(fw * 0.5)
				face_right_gray = img_gray[fy:fy+fh, fx:width_center]
				face_left_gray = img_gray[fy:fy+fh, width_center:fx+fw]
				#3.Stellen Sie fest, ob sowohl das rechte als auch das linke Auge sichtbar sind
				right_eye_points = right_eye_cascade.detectMultiScale(face_right_gray)
				left_eye_points = left_eye_cascade.detectMultiScale(face_left_gray)

				if 0 < len(right_eye_points) and 0 < len(left_eye_points):
					(rx,ry,rw,rh) = right_eye_points[0]
					(lx,ly,lw,lh) = left_eye_points[0]
				        
                    #4.Umgeben Sie das Gesicht, das rechte und das linke Auge mit einem Quadrat
					#Das rechte Auge ist orange
					cv2.rectangle(frame,(fx+rx,fy+ry),(fx+rx+rw,fy+ry+rh),(0,255,255),2)
					#Das linke Auge ist rot
					cv2.rectangle(frame,(width_center+lx,fy+ly),(width_center+lx+lw,fy+ly+lh),(0,0,255),2)
					#Das ganze Gesicht ist grün
					cv2.rectangle(frame,(fx,fy),(fx+fw,fy+fh),(0,255,0),2)

			writer.write(frame)
	except cv2.error as e:
		print(e)

	print("Verarbeitungszeit{}Sekunden".format(time.time() - start))
	writer.release()
	cap.release()

Zum Vergleich werde ich auch die mit beiden Augen "haarcascade_eye.xml" geben.

Version mit beiden Augen


import cv2
import os
import time

if __name__ == '__main__':

	cap = cv2.VideoCapture('one_minutes.mp4')

	cap_width = int(cap.get(cv2.CAP_PROP_FRAME_WIDTH))
	cap_height = int(cap.get(cv2.CAP_PROP_FRAME_HEIGHT))
	fps = cap.get(cv2.CAP_PROP_FPS)

	fourcc = cv2.VideoWriter_fourcc('m','p','4','v')
	writer = cv2.VideoWriter('detect_face_2.mp4',fourcc, fps, (cap_width, cap_height))

	cascade_base_path = "/usr/local/Cellar/opencv/4.1.1_2/share/opencv4/haarcascades/"

	face_cascade = cv2.CascadeClassifier(os.path.join(cascade_base_path, 'haarcascade_frontalface_alt_tree.xml'))
	eyes_cascade = cv2.CascadeClassifier(os.path.join(cascade_base_path, 'haarcascade_eye.xml'))

	start = time.time()

	try :
		while True:

			if not cap.isOpened():
				break

			ret, frame = cap.read()

			img_gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
			face_points = face_cascade.detectMultiScale(img_gray)
			
			for (fx,fy,fw,fh) in face_points:
				
				face_gray = img_gray[fy:fy+fh, fx:fx+fw]				
				eyes_points = eyes_cascade.detectMultiScale(face_gray)
				
				if 0 < len(eyes_points):
					for (ex,ey,ew,eh) in eyes_points:
						#Die Augen sind orange
						cv2.rectangle(frame,(fx+ex,fy+ey),(fx+ex+ew,fy+ey+eh),(0,255,255),2)
						#Das ganze Gesicht ist grün
						cv2.rectangle(frame,(fx,fy),(fx+fw,fy+fh),(0,255,0),2)

			writer.write(frame)
	except cv2.error as e:
		print(e)

	print("Verarbeitungszeit{}Sekunden".format(time.time() - start))
	writer.release()
	cap.release()

Ergebnis

face_main.gif

face_sub.gif

Was ich fand

――Das Trennen des rechten und des linken Auges war genauer. Besonders als ich die Konkurrenz sah, erkannte ich sie mehr als beide Augen! ――Es ist das Erkennen beider Augen, aber das Erkennen anderer als der Augen ――Selbst wenn Ihr Gesicht ein wenig geneigt ist, sinkt die Genauigkeit stark. Ich habe N ○ H nicht gebrochen. Es ist möglicherweise am besten, jetzt Deep Learning zu verwenden. Sicherlich denke ich, dass die Genauigkeit gut zu sein scheint, weil ich lerne, nachdem ich ein Datenelement in der Bibliothek durch Kippen, Ändern der Größe, Verwischen usw. dupliziert habe: Denken: (Ich muss mich wieder an neue Dinge erinnern. Ist es ...: müde: Ich habe nicht die Energie und körperliche Stärke: thermometer_face :)

abschließend

Vor einigen Tagen wurde Gesichtserkennung mit OpenCV in Echtzeit versuchen veröffentlicht und gelöscht: schreien: Die Zusammenstellung dauerte länger als die Entwicklung: müde:

Referenzierter Link

Recommended Posts

Ich habe versucht, das Gesicht aus dem Video zu erkennen (OpenCV: Python-Version)
Ich habe versucht, die Videowiedergabezeit anzuzeigen (OpenCV: Python-Version)
Ich habe versucht, das Gesicht mit OpenCV zu erkennen
Ich habe versucht, das Masami-Broadcast-Video wie IPPON Grand Prix (OpenCV: Python-Version) zu machen.
Ich habe versucht, das Bild mit Python + OpenCV zu "glätten"
Ich habe versucht, das Bild mit Python + OpenCV zu "differenzieren"
Ich habe versucht, das Bild mit Python + OpenCV zu "binarisieren"
Ich habe versucht, das Gesicht mit Face ++ zu erkennen
Ich habe versucht, das Bild mit Python + OpenCV "gammakorrektur" zu machen
Ich habe versucht, die Python-Bibliothek von Ruby mit PyCall zu verwenden
Ich habe versucht, das Lachproblem mit Keras zu erkennen.
Versuchen Sie die Gesichtserkennung mit Python + OpenCV
Gesichtserkennung mit Kamera mit opencv3 + python2.7
Ich habe versucht, das Python-Skript unter Windows 10 von 2.7.11 auf 3.6.0 zu ändern
Ich habe versucht, ein Standbild aus dem Video auszuschneiden
Ich habe versucht, mit Python + opencv nicht realistisch zu rendern
Ich habe versucht, die UnityCloudBuild-API von Python zu verwenden
[python, openCV] base64 Gesichtserkennung in Bildern
Python: Ich habe das Problem des Handlungsreisenden ausprobiert
Ich habe das Python Tornado Testing Framework ausprobiert
[Python] Ich habe versucht, den Funktionsnamen durch den Funktionsnamen zu ersetzen
Ich habe versucht, die Qiita-API von Anfang an zu aktivieren
vprof - Ich habe versucht, den Profiler für Python zu verwenden
Ich habe versucht, Objekte mit Python und OpenCV zu erkennen
Ich habe versucht, "Birthday Paradox" mit Python zu simulieren
Ich habe die Methode der kleinsten Quadrate in Python ausprobiert
Ich habe Python ausprobiert! ] Heute Abschluss von "Jeder Python! Was ist Python!"!
Ich habe zum ersten Mal versucht, Python zu programmieren.
Probieren Sie Progate Free Edition [Python I]
Ich habe versucht, das Datetime-Modul von Python zu verwenden
Ich habe versucht, den Bildfilter von OpenCV zu verwenden
[IBM Cloud] Ich habe versucht, über Cloud Funtions (Python) auf die Tabelle Db2 on Cloud zuzugreifen.
Ich habe versucht, zwei Jetson Nano-Hardware-PWMs aus der Jetson.GPIO Python-Bibliothek auszuführen.
[Python] Ich habe versucht, den Typnamen als Zeichenfolge aus der Typfunktion abzurufen
[Python] Ich habe die gleiche Berechnung versucht wie die Vorhersage von LSTM von Grund auf [Keras]
Ich habe Python> autopep8 ausprobiert
Ich habe Python> Decorator ausprobiert
Ich habe versucht, die in Python installierten Pakete grafisch darzustellen
Ich habe Python zum ersten Mal auf dem Mac ausprobiert.
Ich habe pipenv und asdf für die Python-Versionskontrolle ausprobiert
Ich habe versucht, Iris aus dem Kamerabild zu erkennen
[Python] Extrahiere die Video-ID aus der YouTube-Video-URL [Hinweis]
Ich habe versucht, eine CSV-Datei mit Python zu berühren
[OpenCV / Python] Ich habe versucht, Bilder mit OpenCV zu analysieren
Ich habe versucht, Python aus einer Bat-Datei auszuführen
Ich habe versucht, Soma Cube mit Python zu lösen
Ich habe Python zum ersten Mal mit Heroku ausprobiert
Ich wollte die Python-Bibliothek von MATLAB verwenden
[Python] Ich habe versucht, die Top 10 der Lidschatten grafisch darzustellen
Ich habe versucht, das Problem mit Python Vol.1 zu lösen
Python Open CV hat versucht, das Bild im Text anzuzeigen.
Ich habe versucht, das Bild mit Python + OpenCV "morphologisch zu konvertieren"
Ich habe versucht, die API mit dem Python-Client von echonest zu erreichen
Ich habe versucht, die String-Operationen von Python zusammenzufassen
Ich habe die Python-Version von 2 auf 3 erhöht, aber jedes Mal, wenn ich das Ubuntu-Terminal neu starte, bleibt die Version 2.
(Python: OpenCV) Ich habe versucht, einen Wert auszugeben, der den Abstand zwischen Regionen angibt, während das Video in Echtzeit binärisiert wurde.
Ich habe versucht, die Entropie des Bildes mit Python zu finden
Ich habe fp-Wachstum mit Python versucht
Ich habe versucht, mit Python zu kratzen