[PYTHON] Comment collecter des images de visage relativement facilement

Contexte

Lorsque je collectais des images faciales pour l'apprentissage automatique, je me suis dit: "Cette astuce n'est-elle pas un seul article?"

Recueillir des images faciales d'une personne spécifique

L'une des choses que vous avez tendance à faire au début de l'apprentissage automatique est de vous faire savoir si vous êtes une personne spécifique. Pour ce faire, nous souhaitons collecter de nombreuses images de cette personne en tant que données d'enseignants. Il semble que de nombreux sites recherchés et collectés soient collectés à l'aide d'un robot d'exploration, mais vous pouvez également collecter des images faciales en suivant les étapes ci-dessous. Par exemple, supposons que vous souhaitiez collecter beaucoup d'images de Manatsu Akimoto.

  1. Ouvrez un navigateur Web et agrandissez
  2. Recherchez "** Akimoto Midsummer **" dans la recherche d'images Google.
  3. Capturez l'écran et enregistrez-le en tant qu'image
  4. Faites défiler pour afficher les images qui n'étaient pas affichées
  5. Répétez les étapes 3 et 4 jusqu'à ce qu'il n'y ait plus de résultats de recherche disponibles
  6. Découpez uniquement la partie du visage de l'image enregistrée en 3 à l'aide d'un script (décrit plus loin) qui a été un peu écrit à l'aide d'OpenCV.

Collectez des images faciales de toute personne

L'une des choses que vous avez tendance à faire au début de l'apprentissage d'opportunités est de vous laisser juger si vous êtes une personne en particulier. Vous voudrez peut-être collecter beaucoup d'images faciales autres que la bonne réponse en tant qu'images incorrectes. Il semble que de nombreux sites recherchés et collectés soient collectés à l'aide d'un robot d'exploration, mais vous pouvez également collecter des images faciales en suivant les étapes ci-dessous.

  1. Ouvrez un navigateur Web et agrandissez
  2. Recherchez "** photo de groupe **" dans la recherche d'images Google
  3. Téléchargez manuellement des images avec de nombreuses personnes jusqu'à ce que vous en ayez envie
  4. Découpez uniquement la partie du visage de l'image enregistrée en 3 à l'aide d'un script (décrit plus loin) qui a été un peu écrit à l'aide d'OpenCV.

Un script qui ne coupe que la partie du visage de l'image

Le chemin écrit dans la variable cascade_path sera probablement différent selon l'environnement, alors recherchez-le. Vous devez avoir OpenCV et python installés à l'avance.

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])

Si vous nommez cette img2face.py, par exemple

python ./img2face.py ./imgs ./face

Cela fonctionne comme ça. Si vous placez le fichier image que vous avez collecté précédemment sous ./imgs et que vous l'exécutez, l'image avec la partie de face découpée sera sortie sous ./face.

en conclusion

La préparation préalable est gênante pour l'apprentissage automatique. J'aimerais que tout le monde publie de plus en plus de méthodes pour faciliter les choses.

Recommended Posts

Comment collecter des images de visage relativement facilement
Comment collecter des images en Python
Comment mettre OpenCV dans Raspberry Pi et collecter facilement des images des résultats de détection de visage avec Python
Comment collecter des données d'apprentissage automatique
Comment afficher les images dans l'administration de Django
Comment dessiner une image OpenCV avec Pygame
Comment supprimer le journal avec Docker, ne pas collecter le journal
Comment afficher des images en continu avec matplotlib Memo
Apprenez à gonfler des images à partir du code TensorFlow
Comment afficher plusieurs images d'une galaxie en tuiles
Comment utiliser xml.etree.ElementTree
Comment utiliser virtualenv
Grattage 2 Comment gratter
Comment utiliser Seaboan
Comment utiliser la correspondance d'image
Comment utiliser le shogun
Comment installer Python
Comment utiliser Pandas 2
Comment lire PyPI
Comment installer pip
Comment utiliser Virtualenv
Comment utiliser numpy.vectorize
Comment mettre à jour easy_install
Comment installer Archlinux
Comment utiliser pytest_report_header
Comment redémarrer gunicorn
Comment installer python
Comment héberger virtuel
Comment déboguer le sélénium
Comment utiliser partiel
Comment lire JSON
Comment utiliser SymPy
Comment utiliser x-means
Comment utiliser WikiExtractor.py
Comment mettre à jour Spyder
Comment utiliser IPython
Comment installer BayesOpt
Comment utiliser virtualenv
Comment utiliser Matplotlib
Comment utiliser iptables
Comment utiliser numpy
Collectez des images à l'aide d'icrawler
Comment utiliser TokyoTechFes2015
Comment utiliser venv
Comment utiliser le dictionnaire {}
Comment utiliser Pyenv
Comment faire pousser des fichiers dot
Comment utiliser la liste []
Comment utiliser python-kabusapi
"Comment compter Fukashigi"
Comment installer Nbextensions
Comment utiliser OptParse
Comment utiliser le retour
Comment installer Prover9
Comment utiliser NumPy
Comment utiliser pyenv-virtualenv
Comment utiliser imutils