Als ich Gesichtsbilder für maschinelles Lernen sammelte, dachte ich: "Ist dieser Trick nicht allein ein einziger Artikel?"
Eines der Dinge, die Sie zu Beginn des maschinellen Lernens tun, ist, Sie wissen zu lassen, ob Sie eine bestimmte Person sind. Zu diesem Zweck möchten wir viele Bilder dieser bestimmten Person als Lehrerdaten sammeln. Es scheint, dass viele der Websites, die durchsucht und gesammelt werden, mit einem Crawler gesammelt werden. Sie können jedoch auch Gesichtsbilder sammeln, indem Sie die folgenden Schritte ausführen. Angenommen, Sie möchten viele Bilder von Manatsu Akimoto sammeln.
Eines der Dinge, die Sie zu Beginn des Gelegenheitslernens tun, besteht darin, zu beurteilen, ob Sie eine bestimmte Person sind. Möglicherweise möchten Sie viele andere Gesichtsbilder als die richtige Antwort als falsche Bilder sammeln. Es scheint, dass viele der Websites, die durchsucht und gesammelt werden, mit einem Crawler gesammelt werden. Sie können jedoch auch Gesichtsbilder sammeln, indem Sie die folgenden Schritte ausführen.
Der in die Variable cascade_path geschriebene Pfad unterscheidet sich wahrscheinlich je nach Umgebung. Suchen Sie daher danach. Sie müssen OpenCV und Python im Voraus installiert haben.
import cv2
import glob
import sys
import os
import imghdr
import datetime
import time
def main(srcdir, destdir, cascade_path='/home/pi/opencv-3.1.0/data/haarcascades/haarcascade_frontalface_alt.xml'):
winname = 'searching..'
cv2.namedWindow(winname, cv2.WINDOW_AUTOSIZE)
if not os.path.exists(destdir):
os.mkdir(destdir)
lastsaved = datetime.datetime.now()
prefix = lastsaved.strftime('%Y%m%d-%H%M%S_')
counter = 0
cascade = cv2.CascadeClassifier(cascade_path)
for filename in glob.glob(srcdir + "/*"):
if os.path.isdir(filename):
continue
if imghdr.what(filename) == None:
continue
print("load " + filename)
img = cv2.imread(filename)
frect = cascade.detectMultiScale(img, minSize=(64, 64))
pos = []
if len(frect) > 0:
for r in frect:
x, y, w, h = r[0], r[1], r[2], r[3]
face = img[y:y+h, x:x+w]
if len(face) != 0:
if w > 0 and h > 0:
filename = destdir + "/" + prefix + str(counter) + ".jpg "
cv2.imwrite(filename, face)
print("save " + filename)
counter += 1
pos.append(r)
for p in pos:
cv2.rectangle(img, (p[0],p[1]),(p[0]+p[2],p[1]+p[3]),(0,0,255), 8)
if len(pos) > 0:
cv2.imshow(winname, img)
cv2.waitKey(1)
cv2.destroyWindow(winname)
if __name__ == '__main__':
main(sys.argv[1], sys.argv[2])
Wenn Sie diese img2face.py zum Beispiel benennen
python ./img2face.py ./imgs ./face
Es funktioniert so. Wenn Sie die zuvor gesammelte Bilddatei unter ./imgs ablegen und dann ausführen, wird das Bild mit dem ausgeschnittenen Gesichtsteil unter ./face ausgegeben.
Die Vorbereitung auf das maschinelle Lernen ist mühsam. Ich möchte, dass jeder mehr und mehr Methoden veröffentlicht, um es einfacher zu machen.
Recommended Posts