
Deep Learningで画像識別器を作成したい場合、学習データを用意するのが大変です。
何枚も手でダウンロード指定ては日が暮れてしまうので、Pythonを使って自動で集められるようにします。
Tumblrからタグを指定して画像データを集めるコードを作成しました。
環境
Python 3.5.2 :: Anaconda 4.2.0 (x86_64)
事前準備
- TubmlrにログインしてAPI Keyを取得しておく
- 画像をダウンロードするディレクトリを作成しておく
- requestsをインストールしておく ($ pip install requests)
ソースコード
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 | import requests import time API_ACCESS_COUNT = 1 # 画像をダウンロードするディレクトリ 先に作成しておく事 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 件のコメント :
コメントを投稿