[PYTHON] Wie man relativ einfach Gesichtsbilder sammelt

Hintergrund

Als ich Gesichtsbilder für maschinelles Lernen sammelte, dachte ich: "Ist dieser Trick nicht allein ein einziger Artikel?"

Sammeln Sie Gesichtsbilder einer bestimmten Person

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.

  1. Öffnen Sie einen Webbrowser und maximieren Sie
  2. Suchen Sie in der Google-Bildersuche nach "** Akimoto Midsummer **"
  3. Nehmen Sie den Bildschirm auf und speichern Sie ihn als Bild
  4. Scrollen Sie, um die Bilder anzuzeigen, die nicht angezeigt wurden
  5. Wiederholen Sie die Schritte 3 und 4, bis keine Suchergebnisse mehr verfügbar sind
  6. Schneiden Sie mit einem Skript (das später beschrieben wird), das ein wenig mit OpenCV geschrieben wurde, nur den Gesichtsteil aus dem in 3 gespeicherten Bild aus.

Sammeln Sie Gesichtsbilder von jeder Person

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.

  1. Öffnen Sie einen Webbrowser und maximieren Sie
  2. Suchen Sie in der Google-Bildersuche nach "** Gruppenfoto **"
  3. Laden Sie Bilder mit vielen Personen manuell herunter, bis Sie Lust dazu haben
  4. Schneiden Sie mit einem Skript (das später beschrieben wird), das ein wenig mit OpenCV geschrieben wurde, nur den Gesichtsteil aus dem in 3 gespeicherten Bild aus.

Ein Skript, das nur den Gesichtsteil aus dem Bild ausschneidet

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.

abschließend

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

Wie man relativ einfach Gesichtsbilder sammelt
So sammeln Sie Bilder in Python
So fügen Sie OpenCV in Raspberry Pi ein und sammeln mit Python ganz einfach Bilder von Gesichtserkennungsergebnissen
Sammeln von Daten zum maschinellen Lernen
So zeigen Sie Bilder in Djangos Admin an
So zeichnen Sie ein OpenCV-Bild mit Pygame
So löschen Sie ein Protokoll mit Docker, nicht um ein Protokoll zu sammeln
So zeigen Sie Bilder kontinuierlich mit matplotlib Memo an
Erfahren Sie, wie Sie Bilder aus dem TensorFlow-Code aufblasen
So zeigen Sie mehrere Bilder einer Galaxie in Kacheln an
Verwendung von xml.etree.ElementTree
Verwendung von virtualenv
Schaben 2 Wie man kratzt
Wie benutzt man Seaboan?
Verwendung von Image-Match
Wie man Shogun benutzt
So installieren Sie Python
Verwendung von Pandas 2
Wie man PyPI liest
So installieren Sie pip
Verwendung von Virtualenv
Verwendung von numpy.vectorize
So aktualisieren Sie easy_install
So installieren Sie archlinux
Verwendung von pytest_report_header
Wie man Gunicorn neu startet
So installieren Sie Python
Wie zum virtuellen Host
Wie man Selen debuggt
Wie man teilweise verwendet
Wie man JSON liest
Verwendung von SymPy
Wie man x-means benutzt
Verwendung von WikiExtractor.py
So aktualisieren Sie Spyder
Verwendung von IPython
So installieren Sie BayesOpt
Verwendung von virtualenv
Wie benutzt man Matplotlib?
Verwendung von iptables
Wie benutzt man numpy?
Sammeln Sie Bilder mit icrawler
Verwendung von TokyoTechFes2015
Wie benutzt man venv
Verwendung des Wörterbuchs {}
Wie benutzt man Pyenv?
Wie man Dotfiles züchtet
Verwendung der Liste []
Wie man Python-Kabusapi benutzt
"Wie man Fukashigi zählt"
So installieren Sie Nbextensions
Verwendung von OptParse
Verwendung von return
So installieren Sie Prover9
So bedienen Sie NumPy
Wie man Imutils benutzt