[PYTHON] Ich habe versucht, das Gesicht mit MTCNN zu erkennen

Beim maschinellen Lernen zur Gesichtserkennung habe ich nur OpenCV verwendet, einschließlich der Modellerstellung. Daher habe ich mich auch für andere entschieden. Also habe ich versucht, MTCNN zu verwenden.

MTCNN scheint Tensorflow hinter den Kulissen zu verwenden. Es fühlt sich gut an, mit einem Fuß tief zu laufen.

Vorbereitung

pip3 install cv2
pip3 install matplotlib
pip3 install mtcnn
pip3 install tensorflow

Im Test verwendetes Bild

Es ist genau richtig für die Überprüfung, nicht wahr? Verschiedene exponierte Gesichter. Es gibt viele andere Dinge als das Gesicht

test.png

Gesichtserkennung mit MTCNN

Verifizierungs-Schlüssel

# face detection with mtcnn on a photograph
from matplotlib import pyplot
from matplotlib.patches import Rectangle
from matplotlib.patches import Circle
from mtcnn.mtcnn import MTCNN
import cv2

# draw an image with detected objects
def draw_image_with_boxes(filename, result_list):
	# load the image
	data = pyplot.imread(filename)
	# plot the image
	pyplot.imshow(data)
	# get the context for drawing boxes
	ax = pyplot.gca()
	# plot each box
	for result in result_list:
		# get coordinates
		x, y, width, height = result['box']
		# create the shape
		rect = Rectangle((x, y), width, height, fill=False, color='red')
		# draw the box
		ax.add_patch(rect)
		# draw the dots
		for key, value in result['keypoints'].items():
			# create and draw dot
			dot = Circle(value, radius=2, color='red')
			ax.add_patch(dot)
	# show the plot
	pyplot.show()
 
filename = 'test.png'
# load image from file
pixels = cv2.cvtColor(cv2.imread(filename), cv2.COLOR_BGR2RGB)
# create the detector, using default weights
detector = MTCNN()
# detect faces in the image
faces = detector.detect_faces(pixels)
# display faces on the original image
draw_image_with_boxes(filename, faces)

Ergebnis

Alles wird richtig erkannt. Es scheint, dass dieses Bild nicht fälschlicherweise erkannt wurde.

result_1.png

Hier ist übrigens die mit OpenCV (haarcascade_frontalface_default). Ich kann alle Gesichter erkennen, aber sie werden fälschlicherweise erkannt. Eis ist wirklich ein Gesicht w

result_cv.png

Folgendes habe ich zuvor gemacht, weil ich mit dem Standardmodell nicht zufrieden war. Falsche Erkennungen werden nicht mehr erkannt, aber eine Person kann nicht erkannt werden.

Referenz) Eine Geschichte über einen Gopher, der OpenCV berührt https://speakerdeck.com/usk81/introduction-about-opencv-for-gophers

mine.png

MTCNN ... Vollständige Niederlage ... Es dauerte ungefähr 40 Stunden _| ̄|○ il||li

Ich habe auch versucht auszuschneiden

Ich habe versucht, nur eine zu speichern, die am größten ausgeschnitten werden kann.

Code

# face detection with mtcnn on a photograph
from matplotlib import pyplot
from mtcnn.mtcnn import MTCNN
import cv2

# draw each face separately
def save_biggest_face_image(filename, result_list):
	# load the image
	# data = pyplot.imread(filename)
	data = cv2.imread(filename)
	# plot each face as a subplot
	maxlen = -1
	for i in range(len(result_list)):
		# get coordinates
		x1, y1, width, height = result_list[i]['box']
		if width > height:
			length = width 
		else:
			length = height
		x2, y2 = x1 + length, y1 + length
		# # define subplot
		# pyplot.subplot(1, len(result_list), i+1)
		# pyplot.axis('off')
		# # plot face
		# pyplot.imshow(data[y1:y2, x1:x2])
		d = data[y1:y2, x1:x2]
		if length > 100 and length > maxlen:
			maxlen = length
			md = d
		# cv2.imwrite('/Users/komatsu/Desktop/'+str(i)+'.png', d)

	# show the plot
	# pyplot.show()
	if maxlen > 0:
		cv2.imwrite('result.png', md)
 
filename = 'test.png'
# load image from file
pixels = cv2.cvtColor(cv2.imread(filename), cv2.COLOR_BGR2RGB)
# create the detector, using default weights
detector = MTCNN()
# detect faces in the image
faces = detector.detect_faces(pixels)
# save face image
save_biggest_face_image(filename, faces)

Ergebnis

result_2.png

Bemerkungen

Das Rätsel ist, dass die Bilddatei von pyplot.imread nicht gelesen werden konnte. Es kann innerhalb einer Funktion verwendet werden ...

Recommended Posts

Ich habe versucht, das Gesicht mit MTCNN zu erkennen
Ich habe versucht, das Gesicht mit OpenCV zu erkennen
Ich habe fp-Wachstum mit Python versucht
Ich habe versucht, mit Python zu kratzen
Ich habe versucht, mit Elasticsearch Ranking zu lernen!
Ich habe versucht, das Gesicht mit Face ++ zu erkennen
Ich habe versucht, mit PyCaret zu clustern
Gesichtserkennung mit Python + OpenCV
Ich habe gRPC mit Python ausprobiert
Gesichtserkennung mit Haar Cascades
Ich habe versucht, mit Python zu kratzen
Anime-Gesichtserkennung mit OpenCV
Gesichtserkennung mit YOLO Face (Windows10, Python3.6)
Ich habe versucht, Sätze mit summpy zusammenzufassen
Gesichtserkennung mit Lambda (Python) + Erkennung
Ich habe maschinelles Lernen mit liblinear versucht
Ich habe versucht, WebScraping mit Python.
Ich habe versucht, Essen mit SinGAN zu bewegen
Ich habe versucht, DeepPose mit PyTorch zu implementieren
Ich habe versucht, Prolog mit Python 3.8.2 auszuführen.
Ich habe die SMTP-Kommunikation mit Python versucht
Ich habe versucht, Sätze mit GPT-2 zu generieren
Ich habe versucht, LightGBM mit Yellowbrick zu lernen
Hallo Welt- und Gesichtserkennung mit opencv-python 4.2
Ich habe versucht, eine SMS mit Twilio zu senden
Ich habe Linebot mit Flasche (Anaconda) + Heroku ausprobiert
Ich habe versucht, AutoEncoder mit TensorFlow zu visualisieren
Ich habe versucht, mit Hy anzufangen
Ich habe versucht, Faktoren mit Titanic-Daten zu analysieren!
Ich habe versucht, mit Kaggles Titanic (kaggle②) zu lernen.
Ich habe versucht, mit Python + opencv nicht realistisch zu rendern
Ich habe eine funktionale Sprache mit Python ausprobiert
Ich habe versucht, DeepPose mit PyTorch PartⅡ zu implementieren
Ich habe versucht, CVAE mit PyTorch zu implementieren
Ich habe versucht, mit Pillow mit dem Bild zu spielen
Ich habe versucht, TSP mit QAOA zu lösen
Ich habe mit Jupyter eine einfache Bilderkennung versucht
Ich habe versucht, CNN mit Resnet fein abzustimmen
Ich habe versucht, natürliche Sprache mit Transformatoren zu verarbeiten.
Ich habe versucht, ein Auto in 3D zu erkennen
# Ich habe so etwas wie Vlookup mit Python # 2 ausprobiert
Ich habe versucht, Objekte mit YOLO v3 (TensorFlow 2.0) auf einer Windows-CPU zu erkennen!
Ich habe versucht zu kratzen
Ich habe PyQ ausprobiert
Ich habe AutoKeras ausprobiert
Ich habe es mit Papiermühle versucht
Ich habe versucht, Django-Slack
Ich habe es mit Django versucht
Ich habe es mit Spleeter versucht
Ich habe es mit cgo versucht
Ich habe versucht, Runenfiguren mit Scikit-Learn handschriftlich zu erkennen
Ich habe versucht, nächstes Jahr mit AI vorherzusagen
Hallo Welt- und Gesichtserkennung mit OpenCV 4.3 + Python
Ich habe versucht, das Bild mit Python + OpenCV zu "glätten"
Ich habe Hunderte Millionen SQLite mit Python ausprobiert
Ich habe versucht, lightGBM, xg Boost mit Boruta zu verwenden
Ich habe versucht, Bilder mit CIFAR-10 mit Keras-Learning- zu erkennen.
Ich habe versucht, mit TF Learn die logische Operation zu lernen