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.
pip3 install cv2
pip3 install matplotlib
pip3 install mtcnn
pip3 install tensorflow
Es ist genau richtig für die Überprüfung, nicht wahr? Verschiedene exponierte Gesichter. Es gibt viele andere Dinge als das Gesicht
# 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)
Alles wird richtig erkannt. Es scheint, dass dieses Bild nicht fälschlicherweise erkannt wurde.
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
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
MTCNN ... Vollständige Niederlage ... Es dauerte ungefähr 40 Stunden _| ̄|○ il||li
Ich habe versucht, nur eine zu speichern, die am größten ausgeschnitten werden kann.
# 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)
Das Rätsel ist, dass die Bilddatei von pyplot.imread
nicht gelesen werden konnte.
Es kann innerhalb einer Funktion verwendet werden ...
Recommended Posts