Es war ziemlich schwierig, die Bilder von Gesichtern von Menschen zu sammeln, die für maschinelles Lernen notwendig sind, deshalb habe ich ein Skript erstellt, um die Arbeitsbelastung ein wenig zu reduzieren.
Installieren Sie mit dem folgenden Befehl. Übrigens ist es für Python 2.7.
python
$ sudo apt install libopencv-dev python-opencv
Wenn Sie die Bild-URL des Gruppenfotos angeben, wird das Bild aus dem Internet heruntergeladen, die Gesichtserkennung wird durchgeführt und das Bild des Erkennungsergebnisses wird gespeichert.
Laden Sie die Bibliothek, die Sie verwenden möchten.
python
import cv2
import sys
from PIL import Image
import urllib
import os
Erstellen Sie Ordner, um die Bilder für die Erkennung und die Ergebnisse zu speichern.
python
if os.path.exists("input") == False:
os.mkdir("input")
if os.path.exists("output") == False:
os.mkdir("output")
Speichert das Bild von der angegebenen URL im Eingabeordner. Es erhält auch den Namen der Bilddatei von der URL.
python
url = "http://hoge.com/photo.jpg "
#Dateinamen abrufen
tmp = url.split("/")
imgname = tmp[len(tmp)-1]
imgpath = "input/" + imgname
#Bilddaten herunterladen
response = urllib.urlopen(url)
with open(imgpath, "wb") as fout:
fout.write(response.read())
Wenn es vollfarbig ist, dauert die Verarbeitung einige Zeit. Konvertieren Sie es daher in Graustufen.
python
#Lesen von Bilddaten
image = cv2.imread(imgpath)
#Graustufenumwandlung
image_gray = cv2.cvtColor(image, cv2.cv.CV_BGR2GRAY)
Liest und erkennt trainierte Daten zur Gesichtserkennung.
python
#Bezeichnung des HAAR-Klassifikators
cascade_path = "haarcascades/haarcascade_frontalface_alt.xml"
#Ermitteln Sie die Merkmalsmenge des Kaskadenklassifikators
cascade = cv2.CascadeClassifier(cascade_path)
#Erkennungsprozess
faces = cascade.detectMultiScale(image_gray, scaleFactor=1.1, minNeighbors=1, minSize=(1, 1))
print "Erkennungsergebnis",len(faces),"Mann"
Schneiden Sie das Gesichtsbild aus den Bilddaten aus, bevor Sie es in Graustufen konvertieren, und speichern Sie es. Ändern Sie zu diesem Zeitpunkt die Bildgröße auf 50 x 50, damit sie beim maschinellen Lernen einfach verwendet werden kann.
python
img = Image.open(imgpath)
for i in range(len(faces)):
[x,y,w,h] = faces[i]
imgCroped = img.crop((x,y,x+w,y+h)).resize((50, 50))
filename = "output/%s_%02d.jpg " % (imgname.split(".")[0], i)
imgCroped.save(filename)
erledigt! !! Einige andere Dinge als das Gesicht werden erkannt, sind aber im Allgemeinen zufrieden (^ - ^)
Wenn Sie Google Sensei mit einem "Gruppenfoto" fragen, sehen Sie eine große Anzahl hochauflösender Fotos. Ich war ein wenig überrascht.
Recommended Posts