自分がターゲットにしたい対象物を認識させるためには、その対象物の教師画像を用意して学習させなければなりません。今回はFlickrという画像収集サイトのAPIを使って、まとめて画像を取得してきます。どのようなpython環境(Google Colab)でもできますが、ここではSageMakerで実施していきます。
(1) Flickr APIの用意
Flickrでは様々な画像を取得できますが、一度に取得するためには、APIを使った方が便利です。詳しいページもたくさんあるので、下記を参考にしてFlickr APIキーを取得して下さい。
https://worktoolsmith.com/flickr-api-key/
(2) ライブラリのインストール
最初にFlickr APIを使うためのライブラリをインストールしておきます。Jupyterファイルを用意して、ファイル名を付けて保存しておきます。そのファイルに下記2つのコマンドを書き、インストールします。
!pip install flickrapi
(3) プログラムの実行
最初に画像を格納するフォルダを作成します。今回は「image」とします。これをjupyterファイルと同じ階層に用意します。imageの中にキーワードをフォルダ名として作成し、そのキーワードフォルダの中に画像を10枚程度保存していきます。以下のプログラムを実行します。
import os | |
import time | |
import traceback | |
import flickrapi | |
from urllib.request import urlretrieve | |
import sys | |
from retry import retry | |
import sys | |
flickr_api_key = "xxxxxxxxxxxxxxxxxxxx" | |
secret_key = "xxxxxxxxxxxxxxxxxxxxxxx" | |
keyword = '富士山' | |
@retry() | |
def get_photos(url, filepath): | |
urlretrieve(url, filepath) | |
time.sleep(1) | |
if __name__ == '__main__': | |
flicker = flickrapi.FlickrAPI(flickr_api_key, secret_key, format='parsed-json') | |
response = flicker.photos.search( | |
text=keyword, | |
per_page=10, | |
media='photos', | |
sort='relevance', | |
safe_search=1, | |
extras='url_q,license' | |
) | |
photos = response['photos'] | |
try: | |
if not os.path.exists('./image/' + keyword): | |
os.mkdir('./image/' + keyword) | |
for photo in photos['photo']: | |
url_q = photo['url_q'] | |
filepath = './image/' + keyword + '/' + photo['id'] + '.jpg' | |
get_photos(url_q, filepath) | |
except Exception as e: | |
traceback.print_exc() |
プログラムをキーワードを富士山として実行すると、./image/富士山/ フォルダができ、その中に画像が格納されます。
他のキーワードでも検索を行うと、フォルダが作成され画像が格納されます。このような形で教師画像を取得することができました。
(4) 取得画像のダウンロード
S3にプログラムで転送してもいいのですが、ちょっと面倒なのでここでは、手元にダウンロードしてから、改めてS3にアップロードします。jupyterファイルに次を追加します。jupyterファイルと同じディレクトリにあるimageフォルダの中身を全てzip化します。
!zip -r image.zip ./image/*
zipファイルが作成されますので、ダウンロードして中身を確認して下さい。これでS3にアップする準備ができました。
0 件のコメント:
コメントを投稿