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.
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 ...
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.
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.
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.
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!
gelöst! → First Deep Learning ~ Lösung ~ --Qiita
Recommended Posts