[PYTHON] Premier apprentissage profond ~ Préparation ~

Ravi de vous rencontrer. @best_not_best. L'autre jour, lorsque j'ai parlé de Chainer lors d'une session d'étude interne, j'ai eu une réponse étonnamment bonne. Je voudrais résumer les détails dans cet article.

Chose que tu veux faire

Vous avez une ou deux de vos célébrités préférées, non? (Je vais parler en partant du principe que je suis là.) Mais je suis sûr qu'il est peu probable que je puisse rencontrer cette personne en personne. S'il y a une personne proche de vous ... et si vous pouvez faire connaissance avec cette personne ...

Mise en garde

Je racle un site interne ci-dessous, mais cet article ne l'approuve pas. Veuillez le lire comme une histoire jusqu'à la fin. Nous ne sommes pas responsables des dommages causés par l'exécution de cet article. Respectez vos propres règles de sécurité des informations internes et aimez travailler.

environnement

procédure

  1. Collectez des images d'employés
  2. Découpez la partie du visage des images des employés collectées
  3. Collectez des images d'apprentissage (animateurs préférés)
  4. Découpez la partie du visage de l'image d'apprentissage
  5. Créez un discriminateur en apprenant 4. avec Python + Chainer
  6. Discriminer l'image en 2. avec un discriminateur

Entraine toi

1. Collectez des images d'employés

Je pense que le site intra de votre entreprise a une fonction de recherche d'employés. Recherchez un employé approprié à partir de là et recherchez l'URL de l'image de l'employé. Si l'ID d'employé est inclus dans l'URL, par exemple http: // hogehoge.co.jp / image / 12345.jpg Selon l'entreprise, l'ID peut être haché avec MD5, etc. Quoi qu'il en soit, trouvez la pertinence entre l'identifiant d'employé et l'URL de l'image. (Si vous ne le trouvez pas, abandonnez ...)

Ensuite, recherchez une liste d'identifiants d'employés. Si vous appuyez sur le bouton de recherche sans rien entrer dans le formulaire de recherche, une liste peut apparaître. Le grattage est effectué sur la page de liste.

abstraction_id.py


#!/usr/bin/env python
# -*- coding: UTF-8 -*-

import lxml.html
from selenium import webdriver

TARGET_URL = 'http://hogehoge.co.jp/list.html'
driver = webdriver.PhantomJS()
driver.get(TARGET_URL)
root = lxml.html.fromstring(driver.page_source)
links = root.cssselect('p.class')
for link in links:
    if link.text is None:
        continue
    if link.text.isdigit():
        print link.text

Exécutez-le avec la commande suivante.

$ python abstraction_id.py > member_id.txt

La partie target_url = 'http: // hogehoge.co.jp / list.html' peut être un chemin de fichier local, vous pouvez donc gratter après avoir enregistré la page. Entrez le nom de l'élément HTML qui décrit l'ID d'employé dans root.cssselect (). Cette fois, il y avait des éléments pertinents dans plusieurs parties du HTML, donc nous déterminons les conditions. Ceci est déterminé lorsque l'ID d'employé n'est qu'un nombre, mais veuillez le remplacer par une expression régulière, le cas échéant.

L'image est acquise localement à l'aide de la liste d'identifiants acquis.

image_crawler.py


#!/usr/bin/env python
# -*- coding: UTF-8 -*-

from urllib2 import Request, urlopen, URLError, build_opener
import os
import time

ID_LIST = './member_id.txt'
URL_FMT = 'http://hogehoge.co.jp/image/%s.jpg'
OUTPUT_FMT = './photos/%s.jpg'
opener = build_opener()

for id in open(ID_LIST, 'r'):
    url = URL_FMT % id.strip()
    output = OUTPUT_FMT % id.strip()

    req = Request(url)
    try:
        response = urlopen(req)
    except URLError, e:
        if hasattr(e, 'reason'):
            err = e.reason
        elif hasattr(e, 'code'):
            err = e.code
    else:
      file = open(output, 'wb')
      file.write(opener.open(req).read())
      file.close()

    time.sleep(0.1)

Exécutez-le avec la commande suivante.

$ python image_crawler.py

Juste au cas où, mettons time.sleep (). ʻOUTPUT_FMT` sera le répertoire de destination de stockage, alors sélectionnez-le comme il convient.

2. Découpez la partie du visage des images des employés collectées

Je vais le couper en utilisant OpenCV. J'ai fait référence à l'article suivant. Py-opencv Découpez une partie de l'image et enregistrez-la --Symfoware

cutout_face.py


#!/usr/bin/env python
# -*- coding: UTF-8 -*-

import numpy
import os
import cv2

CASCADE_PATH = '/usr/local/opt/opencv/share/OpenCV/haarcascades/haarcascade_frontalface_alt.xml'
INPUT_DIR_PATH = './photos/'
OUTPUT_DIR_PATH = './cutout/'
OUTPUT_FILE_FMT = '%s%s_%d%s'
COLOR = (255, 255, 255)

files = os.listdir(INPUT_DIR_PATH)
for file in files:
    input_image_path = INPUT_DIR_PATH + file

    #Lecture de fichiers
    image = cv2.imread(input_image_path)
    #Conversion de l'échelle de gris
    try:
        image_gray = cv2.cvtColor(image, cv2.cv.CV_BGR2GRAY)
    except cv2.error:
        continue

    #Acquérir la quantité de caractéristiques du classificateur en cascade
    cascade = cv2.CascadeClassifier(CASCADE_PATH)

    #Exécution de la reconnaissance d'objets (reconnaissance faciale)
    facerect = cascade.detectMultiScale(image_gray, scaleFactor=1.1, minNeighbors=1, minSize=(1, 1))

    if len(facerect) > 0:
        #Enregistrer les résultats de la reconnaissance
        i = 1
        for rect in facerect:
            print rect
            x = rect[0]
            y = rect[1]
            w = rect[2]
            h = rect[3]

            path, ext = os.path.splitext(os.path.basename(file))
            output_image_path = OUTPUT_FILE_FMT % (OUTPUT_DIR_PATH, path, i, ext)
            cv2.imwrite(output_image_path, image[y:y+h, x:x+w])

            i += 1

Exécutez-le avec la commande suivante.

$ python cutout_face.py

ʻINPUT_DIR_PATH est le répertoire de destination de stockage dans la section précédente, et ʻOUTPUT_DIR_PATH est le répertoire de destination de stockage du fichier extrait, alors sélectionnez-le correctement. ʻImportError: Aucun module nommé cv2`

import cv2

À

import sys
sys.path.append('/usr/local/lib/python2.7/site-packages')
import cv2

Je pense que cela peut être évité en réécrivant.

Je pense que vous pouvez découper la partie du visage dans la plupart des images, mais dans certains cas, la partie de la cravate est reconnue comme un visage, comme indiqué ci-dessous. C'est un problème futur. 110001_2.jpg

la prochaine fois

C'est tout pour cette fois. (Je suis désolé à mi-chemin ...) Suite de l'article du 21e jour de Intelligence Advent Calendar 2015!

Postscript

résolu! → Première ~ Solution ~ de Deep Learning ~ --Qiita

Recommended Posts

Premier apprentissage profond ~ Préparation ~
Premier apprentissage profond ~ Lutte ~
Première solution d'apprentissage en profondeur ~
L'apprentissage en profondeur
Introduction à l'apprentissage profond ~ Préparation au codage ~
Mémorandum d'apprentissage profond
Commencer l'apprentissage en profondeur
Apprentissage en profondeur Python
Apprentissage profond × Python
Python: pratique du Deep Learning
Fonctions d'apprentissage en profondeur / d'activation
Apprentissage profond à partir de zéro
Deep learning 1 Pratique du deep learning
[AI] Apprentissage métrique profond
J'ai essayé le deep learning
Python: réglage du Deep Learning
Technologie d'apprentissage en profondeur à grande échelle
Premier apprentissage profond en C # -Imitation de l'implémentation en Python-
Fonction d'apprentissage profond / softmax
Apprentissage profond à partir de zéro 1 à 3 chapitres
Deep Learning Gaiden ~ Programmation GPU ~
<Cours> Apprentissage en profondeur: Day2 CNN
Deep running 2 Réglage de l'apprentissage profond
Renforcer l'apprentissage 6 First Chainer RL
Apprentissage automatique avec Python! Préparation
<Cours> Apprentissage en profondeur: Jour 1 NN
Apprentissage profond du noyau avec Pyro
Essayez le Deep Learning avec FPGA
Apprentissage profond pour la formation composée?
Présentation d'Udacity Deep Learning Nanodegree
Sujets> Deep Learning: Day3 RNN
Introduction au Deep Learning ~ Règles d'apprentissage ~
Renforcer l'apprentissage 4 CartPole première étape
Apprentissage par renforcement profond 1 Introduction au renforcement de l'apprentissage
Apprentissage par renforcement profond 2 Mise en œuvre de l'apprentissage par renforcement
Générez des Pokémon avec Deep Learning
Introduction au Deep Learning ~ Rétropropagation ~
Distillateur de bibliothèque d'éclaircissement de modèles d'apprentissage profond
Deep learning / Deep learning from scratch 2 Chapitre 4 Mémo
Identification de la race de chat avec Deep Learning
Deep learning / Deep learning made from scratch Chapitre 3 Mémo
Faites de l'art ASCII avec l'apprentissage en profondeur
Deep Learning / Deep Learning à partir de Zero 2 Chapitre 5 Mémo
Implémenter le deep learning / VAE (Variational Autoencoder)
Introduction à l'apprentissage en profondeur ~ Approximation des fonctions ~
Essayez l'apprentissage en profondeur avec TensorFlow Partie 2
Apprentissage profond à partir de zéro (calcul des coûts)
À propos de la gestion de projet de deep learning (DNN)
Apprentissage profond pour démarrer sans GPU
Organisez des plateformes d'apprentissage automatique et d'apprentissage en profondeur
Apprentissage profond appris par l'implémentation 1 (édition de retour)
Deep Learning / Deep Learning à partir de Zero 2 Chapitre 7 Mémo
Deep Learning / Deep Learning à partir de Zero 2 Chapitre 8 Mémo
Didacticiel "CNTK" de la bibliothèque d'apprentissage en profondeur de Microsoft
Deep learning / Deep learning made from scratch Chapitre 5 Mémo
Vérifiez la forme de squat avec l'apprentissage en profondeur
Deep learning / Deep learning made from scratch Chapitre 4 Mémo
Deep Strengthening Learning 3 Édition pratique: Briser des blocs