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.
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 ...
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.
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.
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.
C'est tout pour cette fois. (Je suis désolé à mi-chemin ...) Suite de l'article du 21e jour de Intelligence Advent Calendar 2015!
résolu! → Première ~ Solution ~ de Deep Learning ~ --Qiita
Recommended Posts