Deep Learningで画像識別器を作成したい場合、学習データを用意するのが大変です。
何枚も手でダウンロード指定ては日が暮れてしまうので、Pythonを使って自動で集められるようにします。
Tumblrからタグを指定して画像データを集めるコードを作成しました。
## 環境
Python 3.5.2 :: Anaconda 4.2.0 (x86_64)
## 事前準備
* TubmlrにログインしてAPI Keyを取得しておく
* 画像をダウンロードするディレクトリを作成しておく
* requestsをインストールしておく ($ pip install requests)
## ソースコード
```python
`gutter:true;
import requests
import time
API_ACCESS_COUNT = 1
TUMBLR_URL = 'https://api.tumblr.com/v2/tagged'
# 画像をダウンロードするディレクトリ 先に作成しておく事
IMAGE_DL_DIR = './DownloadImages/'
payload = {
'api_key' : 'XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX',
'tag' : 'cat',
'before' : ''
}
photo_urls = []
for i in range(API_ACCESS_COUNT):
# requestsでアクセスする, 結果はjsonで取得できる
response = requests.get(TUMBLR_URL, params=payload)
response_json = response.json()
for data in response_json['response']:
# typeがphotoでないものは省く
if data['type'] != 'photo':
continue
for photo in data['photos']:
photo_urls.append(photo['original_size']['url'])
payload['before'] = response_json['response'][len(response_json['response']) - 1]['timestamp']
print("get image url... " + str(i + 1) + ' / ' + str(API_ACCESS_COUNT))
# サーバーに負荷をかけないため, 1秒まつ
time.sleep(1)
# 写真データをDLする
total_size_of_url = len(photo_urls)
for i, url in enumerate(photo_urls):
# 後ろから3文字取得して拡張子のチェックを行う
extension = url[-3:]
if extension != 'jpg' and extension != 'png':
continue
# ダウンロード
response = requests.get(url)
if not response.ok:
continue
# ファイルに書き込み
with open(IMAGE_DL_DIR + str(i) + '.jpg', 'wb') as handler:
handler.write(response.content)
print('download image... ' + str(i + 1) + ' / ' + str(total_size_of_url))
# サーバーに負荷をかけないため1秒まつ
time.sleep(1)
```
サーバーに負荷をかけないように、APIアクセスしたら1秒待っています。
API_ACCESS_COUNTの数を変更すればより多くのURLが取得で切るので、画像もたくさんダウンロードできます。
一回のURL取得アクセスで25個ぐらいURLが取得できるので、API_ACCESS_COUNT x 25個ぐらいの画像がダウンロードできます。
0 件のコメント :
コメントを投稿