LoginSignup
1

More than 5 years have passed since last update.

Microsoft AZURE の画像APIから1000枚以上取得する

Last updated at Posted at 2018-02-21

やりたいこと

機械学習をやっていくにあたって、学習用に画像を大量に取得しなければいけない事がありまして、MicrosoftAzureの画像検索APIを使えば、bingの検索結果から画像を取得できるようなのでやってみました。


query = #検索したい単語を入力してください
dir_name = #結果の保存先のディレクトリ名を指定してください
all_img = 1500 #取得したい画像の数を指定してください(最大数は1500です)
current_dir = #カレントディレクトリを指定してください

ENDPOINT = 'https://api.cognitive.microsoft.com/bing/v7.0/images/search'
HEADERS = { 'Ocp-Apim-Subscription-Key': '自分のAPIキーを入れてください' }
params = {'q': query,
         'mkt': 'ja-JP',
         'count': 50}

#count毎に分けてAPIから画像のURLを取得し、json形式で得られるので、ロードし
#てリストに加えます
def  GetImageUrls(endpoint, headers, params):
    ImageUrls = []
    for i in range(int(all_img) // params['count']):
        offset = i * params['count']
        params['offset'] = offset

        response_json=requests.get(endpoint
                ,headers=headers,params=params)

        response = json.loads(response_json.text)

        for i in range(params['count']):
            try:
                ImageUrls.append(response['value'][i]['contentUrl'])
            except:
                continue
    return ImageUrls

#保存するディレクトリがなければ作ります
def mkdir(dir_name):
    if os.path.isdir(current_dir + '\\' + dir_name) == False:
        os.mkdir(current_dir + '\\' + dir_name)
    else : pass

#先ほど作ったリストから画像を取得し、jpg形式で書き込みます
def DLimages(ImageUris, dir_name):
    mkdir(dirname)
    timeout = 5
    num_err = 0
    num_suc = 0
    i = 1
    for ImageUrl in ImageUrls:
        try:
            response_image = requests.get(ImageUrl, timeout=timeout)
            image = response_image.content
        except requests.exceptions.RequestException:
            num_err += 1
            continue

        with open(current_dir + '\\' + dir_name + '\\' + str(i) + ".jpg", 'wb') as f:
            f.write(image)
            f.close()

        i += 1

        num_suc += 1
    print('error:' + str(num_err))
    print('suc:' + str(num_suc))

#関数を作り終わったので

image_urls = GetImageUrls(ENDPOINT, HEADERS, params)
DLimages(image_urls, dir_name)

以上で、指定したディレクトリに名前が数字のjpg画像が保存されています。
ただし、もともとbingの検索結果が1500もないと少なくなります。
また、画像のurlが指定されていないと追加されません

さらに、jpgだけに指定してしまっているので、結果を見るといくつか開けないファイルが存在します。これを防ぐためには、取得してきた時点でファイル形式を確認し、その形式に合わせて保存しなおす必要があります。

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1