TensorFlowを使ってDir en greyの顔分類器を作ってみた - ③画像収集編

# はじめに
画像を収集しますが、既に自力で100枚以上の画像を集められる方はここをすっ飛ばしてください。

# API
## 紹介
- Bing Image Search API
- https://azure.microsoft.com/ja-jp/services/cognitive-services/bing-image-search-api/
- 5,000リクエスト/月。
- 1リクエストで最大150枚までしか取得できないらしいです。

## APIキーの取得
Microsoftアカウントを作成してください。または、FacebookやGithubアカウントがあればそれからOAuthでログインできます。
※ ページ内部がとても迷うので心の余裕があるときが望ましいです。

# プログラム（適当に書いていて恥ずかしいので凝視しないでください）
```php:image_crawler.php
<?php
 
for ($j = 0; $j < 9; $j++) {
    $offset = $j * 150;
 
    if ($offset == 0) {
        $url = 'https://api.cognitive.microsoft.com/bing/v5.0/images/search?q=direngrey+shinya&count=150';
    } else {
        $url = 'https://api.cognitive.microsoft.com/bing/v5.0/images/search?q=direngrey+shinya&count=150&offset=' . $offset;
    }
 
    $curl = curl_init();
 
    curl_setopt_array(
        $curl,
        array(
            CURLOPT_URL => $url,
            CURLOPT_HTTPHEADER => array(
                'Content-Type: multipart/form-data',
                'Ocp-Apim-Subscription-Key: ｛APIキー｝'
              ),
              CURLOPT_POST => true,
              CURLOPT_POSTFIELDS  => true,
              CURLOPT_RETURNTRANSFER => true,
              CURLOPT_BINARYTRANSFER => true,
        )
    );
 
    $response = curl_exec($curl);
    $result = json_decode($response);
 
    for ($i = 0; $i < 150; $i++) {
        $imageUrl = $result->value[$i]->thumbnailUrl;
 
        if ($j == 0) {
            $j = 1;
        }
 
        $filePath = '｛保存先ディレクトリ｝' . $j * ($i + 1) . '.jpg';
 
        curl_setopt_array(
            $curl,
            array(
                CURLOPT_URL => $imageUrl,
                CURLOPT_HTTPGET => true,
                CURLOPT_HTTPHEADER => array(
                    'Content-Type: multipart/form-data',
                ),
                CURLOPT_RETURNTRANSFER => true,
                CURLOPT_BINARYTRANSFER => true,
            )
        );
 
        $response = curl_exec($curl);
        file_put_contents($filePath, $response);
    }
 
    curl_close($curl);
}
```

# 実行
```zsh
php image_crawler.php
```

# 補足と言い訳
- file_get_contentsではなくcurlを使って２回も行っているのは、プロキシ的に接続が上手くいかないからです。
- 同じ画像がたくさん落ちてくるので、大変ですが手で消してください。
- 上手く取れずに空のファイルができる場合もあるので、大変ですが手で消してください。
- MacのFinderからファイル消すにはファイル選択してcommand+delete。
- 結構上手くOpenCVが読み込めないファイルが多数あるので、事前に多めに画像を用意してください。
- 検索している人物以外の人がたくさん出てくるので、検索ワードを工夫してください。
- 日本語の検索クエリはURLエンコードしてください。

# 全ページリンク
- [TensorFlowを使ってDir en greyの顔分類器を作ってみた - ①紹介編](http://qiita.com/neriai/items/bd7bc36ec42c8ef65b2e)
- [TensorFlowを使ってDir en greyの顔分類器を作ってみた - ②環境構築編](http://qiita.com/neriai/items/c0114af9c2eae627b6ce)
- [TensorFlowを使ってDir en greyの顔分類器を作ってみた - ③画像収集編](http://qiita.com/neriai/items/bac92c54ca77ebb32ecc)
- [TensorFlowを使ってDir en greyの顔分類器を作ってみた - ④顔抽出編](http://qiita.com/neriai/items/cedc0de9e3722f53287a)
- [TensorFlowを使ってDir en greyの顔分類器を作ってみた - ⑤学習データ準備編](http://qiita.com/neriai/items/b525b6c9beb5b5d2f8fb)
- [TensorFlowを使ってDir en greyの顔分類器を作ってみた - ⑥学習プログラム編](http://qiita.com/neriai/items/6a662a49054bc544806d)
- [TensorFlowを使ってDir en greyの顔分類器を作ってみた - ⑦学習モデル編](http://qiita.com/neriai/items/bd4b880e968fd41119f1)
- [TensorFlowを使ってDir en greyの顔分類器を作ってみた - ⑧学習実行編](http://qiita.com/neriai/items/791e6f4dd8d08775542b)
- [TensorFlowを使ってDir en greyの顔分類器を作ってみた - ⑨データ可視化編](http://qiita.com/neriai/items/a7b47127462ecf0fcc1d)
- [TensorFlowを使ってDir en greyの顔分類器を作ってみた - ⑩顔分類試験編](http://qiita.com/neriai/items/652ced2227b0283ce35e)
- [TensorFlowを使ってDir en greyの顔分類器を作ってみた - ⑪Web公開準備編](http://qiita.com/neriai/items/bb88858cb5004cbb24d9)
- [TensorFlowを使ってDir en greyの顔分類器を作ってみた - ⑫Web公開編](http://qiita.com/neriai/items/808ee49e276060457c14)
- [TensorFlowを使ってDir en greyの顔分類器を作ってみた - ⑬遊んでみる編（最終回）](http://qiita.com/neriai/items/6c984fa1e7876e5140cf)