Bonjour à tous. @best_not_best. Cet article est une suite de First Deep Learning ~ Preparation ~. Si vous ne l'avez pas lu, veuillez d'abord le lire.
Cet article a été créé à partir de désirs personnels et n'est pas le point de vue officiel de l'organisation à laquelle il appartient.
Je souhaitais utiliser l'API de recherche d'images Google, mais selon l'article suivant, les restrictions d'utilisation semblent être strictes. Collecte d'images avec la recherche d'images Web - Nodoame
Utilisez l'API Bing Search. Je me suis également référé à l'article ci-dessus pour le code source.
get_images.py
#!/usr/bin/env python
# -*- coding: UTF-8 -*-
import sys
import os
import requests
import urllib
import urllib2
import json
BING_URL = 'https://api.datamarket.azure.com/Bing/Search/Image?'
MS_ACCTKEY = 'hogehoge'
QUERY = 'Le nom de votre célébrité préférée'
OUTPUT_DIR_PATH = './talent/'
opener = urllib2.build_opener()
urllib2.install_opener(opener)
def download_urllist(urllist):
for url in urllist:
try:
print 'url: ' + url
with open(OUTPUT_DIR_PATH + '/' + os.path.basename(url), 'wb') as f:
img = urllib2.urlopen(url, timeout = 5).read()
f.write(img)
except urllib2.URLError:
print('URLError')
except IOError:
print('IOError')
except UnicodeEncodeError:
print('EncodeError')
except OSError:
print('OSError')
if __name__ == "__main__":
query = urllib2.quote(QUERY)
step = 20
num = 50
url_param_dict = {
'Query': "'"+QUERY+"'",
'Market': "'ja-JP'",
}
url_param_base = urllib.urlencode(url_param_dict)
url_param_base = url_param_base + "&$format=json&$top=%d&$skip="%(num)
for skip in range(0, num*step, num):
url_param = url_param_base + str(skip)
url = BING_URL + url_param
print url
response = requests.get(url,
auth = (MS_ACCTKEY, MS_ACCTKEY),
headers = {'User-Agent': 'My API Robot'})
response = response.json()
urllist = [item['MediaUrl'] for item in response['d']['results']]
download_urllist(urllist)
Exécutez-le avec la commande suivante.
$ python get_images.py
MS_ACCTKEY
est la clé de compte principale d'Azure Market Place, QUERY
est la chaîne de caractères que vous souhaitez rechercher et ʻOUTPUT_DIR_PATH` est le répertoire de stockage du fichier récupéré, alors sélectionnez-le comme il convient.
Avec cela, vous pouvez obtenir environ 1000 images pour 50 x 20 pages. Tu l'as fait!
Je voulais utiliser le précédent cutout_face.py
tel quel, mais comme certaines des images collectées sur le Web sont irrégulières, j'ai ajouté la gestion des exceptions lors du recadrage. Au fait, je n'ai pas aimé le fait que le nom du fichier image découpé contienne du japonais, alors j'essaie d'utiliser le numéro de série comme nom de fichier.
cutout_talent_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 = './talent/'
OUTPUT_DIR_PATH = './talent_cutout/'
OUTPUT_FILE_FMT = '%s%d_%d%s'
count = 1
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, count, i, ext)
i += 1
try:
cv2.imwrite(output_image_path, image[y:y+h, x:x+w])
except cv2.error:
print file
continue
count += 1
L'utilisation est similaire à cutout_face.py
.
J'ai évoqué ce qui suit. Le NIN de Chainer vous permet d'apprendre en profondeur et de reconnaître votre propre jeu d'images --- le long journal de shi3z Les six enfants d'Osomatsu-san peuvent-ils être identifiés par apprentissage profond? ~ Mise en œuvre ~ - Journal de Bohême
Clonez la source.
[work_dir]$ git clone https://github.com/shi3z/chainer_imagenet_tools.git
La source ImageNet sera également clonée.
[work_dir]$ git clone https://github.com/pfnet/chainer.git
[work_dir]$ cd chainer
[chainer]$ git checkout -b 1.4.1 refs/tags/v1.4.1
[chainer]$ cd ..
Téléchargez et décompressez Caltech 101
[work_dir]$ cd chainer_imagenet_tools
[chainer_imagenet_tools]$ wget http://www.vision.caltech.edu/Image_Datasets/Caltech101/101_ObjectCategories.tar.gz
[chainer_imagenet_tools]$ tar xzvf 101_ObjectCategories.tar.gz
Dans le répertoire 101_ObjectCategories
, placez le répertoire contenant l'image découpée en 4. De plus, s'il y a de nombreux répertoires, l'apprentissage prendra du temps, donc certains répertoires ont été supprimés. La structure du répertoire 101_ObjectCategories
est la suivante.
Panda est mignon.
drwxr-xr-x 472 talent_cutout
drwxr-xr-x 438 Faces_easy
drwxr-xr-x 438 Faces
drwxr-xr-x 41 panda
Créez train.txt, test.txt, label.txt.
[chainer_imagenet_tools]$ python make_train_data.py 101_ObjectCategories
Réglez la taille de l'image sur 256 x 256.
[chainer_imagenet_tools]$ python crop.py images/ images/
Générez mean.npy.
[chainer_imagenet_tools]$ python ../chainer/examples/imagenet/compute_mean.py train.txt
Commencer à apprendre!
[chainer_imagenet_tools]$ python ../chainer/examples/imagenet/train_imagenet.py -g -1 -E 20000 train.txt test.txt 2>&1 | tee log
...
train 3315 updates (106080 samples) time: 14:22:12.501801 (2.05054842326 images/sec)epoch 110
Cela ne se termine pas même après 14 heures (´; ω; `)
C'est tout pour cette fois. (J'étudierai et reviendrai.) Continuez jusqu'à l'épisode final (qui devrait être publié plus tard cette année)! !!
résolu! → Première ~ Solution ~ de Deep Learning ~ --Qiita
Recommended Posts