[PYTHON] Erstes tiefes Lernen ~ Vorbereitung ~

Freut mich, dich kennenzulernen. @best_not_best. Als ich neulich bei einer internen Studiensitzung über Chainer sprach, erhielt ich eine überraschend gute Antwort. Ich möchte die Details in diesem Artikel zusammenfassen.

Was du machen willst

Ihr habt ein oder zwei eurer Lieblingsstars, oder? (Ich werde unter der Voraussetzung sprechen, dass ich es bin.) Ich halte es jedoch für unwahrscheinlich, dass ich diese Person persönlich treffen kann. Wenn es eine Person gibt, die Ihnen nahe steht ... und wenn Sie diese Person kennenlernen können ...

Hinweis

Ich kratzte unten an einer internen Site, aber dieser Artikel bestätigt dies nicht. Bitte lesen Sie es als Geschichte bis zum letzten. Wir sind nicht verantwortlich für Schäden, die durch die tatsächliche Ausführung dieses Artikels verursacht werden. Beachten Sie Ihre eigenen internen Regeln zur Informationssicherheit und viel Spaß beim Arbeiten.

Umgebung

Verfahren

  1. Sammeln Sie Bilder von Mitarbeitern
  2. Schneiden Sie den Gesichtsteil der gesammelten Mitarbeiterbilder aus
  3. Sammeln Sie Lernbilder (Lieblingsunterhalter)
  4. Schneiden Sie den Gesichtsteil des Lernbildes aus
  5. Erstellen Sie einen Diskriminator, indem Sie 4. mit Python + Chainer lernen
  6. Unterscheiden Sie das Bild in 2. mit einem Diskriminator

Trainieren

1. Sammeln Sie Bilder von Mitarbeitern

Ich denke, die Intra-Site Ihres Unternehmens verfügt über eine Mitarbeitersuchfunktion. Suchen Sie von dort aus nach einem geeigneten Mitarbeiter und suchen Sie die URL des Mitarbeiterbilds. Wenn die Mitarbeiter-ID in der URL enthalten ist, z. B. "http: // hogehoge.co.jp / image / 12345.jpg ". Je nach Unternehmen kann die ID mit MD5 usw. gehasht werden. Finden Sie auf jeden Fall die Relevanz zwischen der Mitarbeiter-ID und der Bild-URL. (Wenn Sie es nicht finden können, geben Sie auf ...)

Suchen Sie als Nächstes nach einer Liste der Mitarbeiter-IDs. Wenn Sie die Suchtaste drücken, ohne etwas in das Suchformular einzugeben, wird möglicherweise eine Liste angezeigt. Das Scraping wird auf der Listenseite durchgeführt.

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

Führen Sie es mit dem folgenden Befehl aus.

$ python abstraction_id.py > member_id.txt

Der Teil target_url = 'http: // hogehoge.co.jp / list.html' kann ein lokaler Dateipfad sein, sodass Sie nach dem Speichern der Seite kratzen können. Geben Sie den Namen des HTML-Elements, das die Mitarbeiter-ID beschreibt, in root.cssselect () ein. Dieses Mal gab es relevante Elemente in mehreren Teilen des HTML-Codes, daher bestimmen wir die Bedingungen. Dies wird festgelegt, wenn die Mitarbeiter-ID nur eine Nummer ist. Bitte ersetzen Sie sie durch einen regulären Ausdruck.

Das Bild wird lokal über die Liste der erfassten IDs erfasst.

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)

Führen Sie es mit dem folgenden Befehl aus.

$ python image_crawler.py

Für alle Fälle setzen wir time.sleep (). OUTPUT_FMT ist das Speicherzielverzeichnis, wählen Sie es also entsprechend aus.

2. Schneiden Sie den Gesichtsteil der gesammelten Mitarbeiterbilder aus

Ich werde es mit OpenCV ausschneiden. Ich habe auf den folgenden Artikel verwiesen. Py-opencv Schneiden Sie einen Teil des Bildes aus und speichern Sie es - 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

    #Datei lesen
    image = cv2.imread(input_image_path)
    #Graustufenumwandlung
    try:
        image_gray = cv2.cvtColor(image, cv2.cv.CV_BGR2GRAY)
    except cv2.error:
        continue

    #Ermitteln Sie die Merkmalsmenge des Kaskadenklassifikators
    cascade = cv2.CascadeClassifier(CASCADE_PATH)

    #Ausführung der Objekterkennung (Gesichtserkennung)
    facerect = cascade.detectMultiScale(image_gray, scaleFactor=1.1, minNeighbors=1, minSize=(1, 1))

    if len(facerect) > 0:
        #Erkennungsergebnisse speichern
        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

Führen Sie es mit dem folgenden Befehl aus.

$ python cutout_face.py

INPUT_DIR_PATH ist das Speicherzielverzeichnis im vorherigen Abschnitt, und OUTPUT_DIR_PATH ist das Speicherzielverzeichnis für die extrahierte Datei. Wählen Sie es daher entsprechend aus. Wenn Sie die Fehlermeldung "ImportError: Kein Modul mit dem Namen cv2" erhalten

import cv2

Zu

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

Ich denke, dass es durch Umschreiben vermieden werden kann.

Ich denke, dass Sie den Gesichtsteil in den meisten Bildern ausschneiden können, aber in einigen Fällen kann der Krawattenteil wie unten gezeigt als Gesicht erkannt werden. Dies ist eine zukünftige Ausgabe. 110001_2.jpg

nächstes Mal

Das ist alles für diese Zeit. (Es tut mir auf halbem Weg leid ...) Fortsetzung des Artikels vom 21. Tag des Intelligence Advent Calendar 2015!

Nachtrag

gelöst! → First Deep Learning ~ Lösung ~ --Qiita

Recommended Posts

Erstes tiefes Lernen ~ Vorbereitung ~
Erstes tiefes Lernen ~ Kampf ~
Erstes tiefes Lernen ~ Lösung ~
Tiefes Lernen
Einführung in Deep Learning ~ Codierungsvorbereitung ~
Deep Learning Memorandum
Starten Sie Deep Learning
Python Deep Learning
Deep Learning × Python
Python: Deep Learning-Praxis
Deep Learning / Aktivierungsfunktionen
Deep Learning von Grund auf neu
Deep Learning 1 Übung des Deep Learning
[AI] Deep Metric Learning
Ich habe versucht, tief zu lernen
Python: Deep Learning Tuning
Deep Learning Großtechnologie
Erstes tiefes Lernen in C # - Einführung in Python implementieren-
Deep Learning / Softmax-Funktion
Deep Learning von Grund auf 1-3 Kapitel
Deep Learning Gaiden ~ GPU-Programmierung ~
<Kurs> Tiefes Lernen: Day2 CNN
Deep Running 2 Tuning von Deep Learning
Stärkung des Lernens 6 First Chainer RL
Maschinelles Lernen mit Python! Vorbereitung
<Kurs> Tiefes Lernen: Tag 1 NN
Deep Kernel Learning mit Pyro
Versuchen Sie Deep Learning mit FPGA
Deep Learning für die Bildung von Verbindungen?
Einführung in Udacity Deep Learning Nanodegree
Themen> Deep Learning: Tag 3 RNN
Einführung in Deep Learning ~ Lernregeln ~
Stärkung des Lernens 4 CartPole erster Schritt
Tiefe Stärkung des Lernens 1 Einführung in die Stärkung des Lernens
Tiefes Lernen der Verstärkung 2 Implementierung des Lernens der Verstärkung
Generiere Pokemon mit Deep Learning
Einführung in Deep Learning ~ Backpropagation ~
Deep Learning Model Lightening Library Distiller
Deep Learning / Deep Learning von Grund auf neu 2 Kapitel 4 Memo
Identifikation der Katzenrasse mit Deep Learning
Deep Learning / Deep Learning von Grund auf neu Kapitel 3 Memo
Machen Sie ASCII-Kunst mit tiefem Lernen
Deep Learning / Deep Learning von Null 2 Kapitel 5 Memo
Implementieren Sie Deep Learning / VAE (Variational Autoencoder)
Einführung in das tiefe Lernen ~ Funktionsnäherung ~
Versuchen Sie es mit TensorFlow Part 2
Tiefes Lernen von Grund auf neu (Kostenberechnung)
Über das Projektmanagement von Deep Learning (DNN)
Tiefes Lernen, um ohne GPU zu beginnen
Organisation von Plattformen für maschinelles Lernen und tiefes Lernen
Deep Learning durch Implementierung 1 gelernt (Return Edition)
Deep Learning / Deep Learning von Null 2 Kapitel 7 Memo
Deep Learning / Deep Learning von Null 2 Kapitel 8 Memo
Microsoft Deep Learning Library "CNTK" Tutorial
Deep Learning / Deep Learning von Grund auf neu Kapitel 5 Memo
Überprüfen Sie die Kniebeugenform mit tiefem Lernen
Deep Learning / Deep Learning von Grund auf neu Kapitel 4 Memo
Deep Strengthing Learning 3 Praktische Ausgabe: Block Breaking