Hallo zusammen. @best_not_best. Dieser Artikel ist eine Fortsetzung von First Deep Learning ~ Preparation ~. Wenn Sie es nicht gelesen haben, lesen Sie es bitte zuerst.
Dieser Artikel wurde aus persönlichen Wünschen erstellt und ist nicht die offizielle Ansicht der Organisation, zu der er gehört.
Ich wollte die Google Bildsuch-API verwenden, aber gemäß dem folgenden Artikel scheinen die Nutzungsbeschränkungen streng zu sein. Sammeln von Bildern mit Web Image Search-Nodoame
Verwenden Sie die Bing Search API. Ich habe auch auf den obigen Artikel für den Quellcode verwiesen.
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 = 'Der Name Ihres Lieblingsstars'
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)
Führen Sie es mit dem folgenden Befehl aus.
$ python get_images.py
"MS_ACCTKEY" ist der primäre Kontoschlüssel von Azure Market Place, "QUERY" ist die Zeichenfolge, nach der Sie suchen möchten, und "OUTPUT_DIR_PATH" ist das Speicherverzeichnis der abgerufenen Datei. Wählen Sie sie daher entsprechend aus. Auf diese Weise erhalten Sie ungefähr 1.000 Bilder für 50 x 20 Seiten. Du hast es geschafft!
Ich wollte die vorherige cutout_face.py
so wie sie ist verwenden, aber da einige der im Web gesammelten Bilder unregelmäßig sind, habe ich beim Zuschneiden die Ausnahmebehandlung hinzugefügt. Übrigens hat mir die Tatsache nicht gefallen, dass der Name der ausgeschnittenen Bilddatei Japanisch enthielt, deshalb versuche ich, die Seriennummer als Dateinamen zu verwenden.
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
#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, 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
Die Verwendung ähnelt "cutout_face.py".
Ich bezog mich auf Folgendes. Mit der NIN von Chainer können Sie Ihren eigenen Bildsatz gründlich lernen und erkennen - Shi3z 'langes Tagebuch Können die sechs Kinder von Osomatsu-san durch tiefes Lernen identifiziert werden? ~ Implementierung ~ - Bohemia-Tagebuch
Klonen Sie die Quelle.
[work_dir]$ git clone https://github.com/shi3z/chainer_imagenet_tools.git
Die ImageNet-Quelle wird ebenfalls geklont.
[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 ..
Laden Sie Caltech 101 herunter und entpacken Sie es
[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
Fügen Sie im Verzeichnis 101_ObjectCategories
das Verzeichnis mit dem in 4 ausgeschnittenen Bild ein. Wenn es viele Verzeichnisse gibt, dauert das Lernen einige Zeit, sodass einige Verzeichnisse gelöscht wurden. Die Struktur des Verzeichnisses 101_ObjectCategories
ist wie folgt.
Panda ist süß.
drwxr-xr-x 472 talent_cutout
drwxr-xr-x 438 Faces_easy
drwxr-xr-x 438 Faces
drwxr-xr-x 41 panda
Erstellen Sie train.txt, test.txt, label.txt.
[chainer_imagenet_tools]$ python make_train_data.py 101_ObjectCategories
Stellen Sie die Bildgröße auf 256 x 256 ein.
[chainer_imagenet_tools]$ python crop.py images/ images/
Generiere mean.npy.
[chainer_imagenet_tools]$ python ../chainer/examples/imagenet/compute_mean.py train.txt
Fang an zu lernen!
[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
Es endet auch nach 14 Stunden nicht (´; ω; `)
Das ist alles für diese Zeit. (Ich werde lernen und wieder kommen.) Fahren Sie mit der letzten Folge fort (die später in diesem Jahr veröffentlicht werden soll)! !!
gelöst! → First Deep Learning ~ Lösung ~ --Qiita
Recommended Posts