初心者がTensorFlowの画像認識を使ってお手軽に遊んでみた

#TensorFlowで画像認識を使って遊んで見る
TensorFlowの画像認識で遊んでみました。今回は、TensorFlow公式サイトの[Image Recognition](https://www.tensorflow.org/tutorials/image_recognition)に従ったお遊びです。機械学習やコード解説はありません。同じお遊びとしては、記事[「初心者がTensorFlowの画像スタイル変換を使ってお手軽に遊んでみた」](http://qiita.com/FukuharaYohei/items/828f9547bb9f8fc6febe)もあります。
実行環境は下表のとおりです(Jupyter Notebookは使っていません)。
![TensorFlowEnvironment.JPG](https://qiita-image-store.s3.amazonaws.com/0/134273/01d7e5ff-cfd8-21ac-0936-61a3918f784b.jpeg)
※TensorFlow1.5とPython3.6でも動作しました(2018/2/28確認)

#手順
##1. Githubからclassify_image.py ダウンロード
Githubから[classify_image.py](https://github.com/tensorflow/models/blob/master/tutorials/image/imagenet/classify_image.py)をダウンロードします。TensorFlowの1.1以前のバージョンだと、TensorFlowインストールで自動で含まれるという情報も見ました(未確認)。筆者の環境は、TensorFlow1.1なのでGithubからダウンロードしました。
##2. Anaconda Navigatorからターミナル起動
Anaconda Navigatorで仮想環境TensorFlow12からターミナルを開きます("12"と名付けていますがTensorFlow1.2ではありません)。
![30.TensorFlow_Install01.JPG](https://qiita-image-store.s3.amazonaws.com/0/134273/f9d2c32d-708c-1878-e6c7-fe6b0b74cfa7.jpeg)
##3. 画像認識実行
###3.1. 仮想環境有効化
まずは、ターミナルでtensorflow12の仮想環境を有効化します。

```none
activate tensorflow12
```

###3.2. パス変更
classify_image.pyを置いたディレクトリにパスを変更します。

```none
cd C:\Users\yohei.fukuhara\AppData\Local\Continuum\Anaconda3\envs\tensorflow12\Lib\site-packages\tensorflow\models\image\imagenet
```

###3.3. パラメータなし実行
まずはパラメータなしで実行してみます。パラメータなしだと、↓の絵に対して画像認識をかけます。
![Panda](https://www.tensorflow.org/images/cropped_panda.jpg)

```none
python classify_image.py
```

途中に出ている警告「The TensorFlow library wasn't compiled to use SSE instructions」は、「もっと速くなるよ」と教えてくれていてエラーではありませんでした。詳しくは[リンク先](http://blog.amedama.jp/entry/2017/03/08/223308)を参照ください。
![10.classify_imange_command.JPG](https://qiita-image-store.s3.amazonaws.com/0/134273/00a9269b-ef90-1926-ecde-537a3179d8d3.jpeg)

結果として見る部分は下記です。
パンダの可能性が約90%と推定しています。2番目の可能性としてindriとありますが、猿の一種らしいです(そんなのまで推定するのか)。

```none
giant panda, panda, panda bear, coon bear, Ailuropoda melanoleuca (score = 0.89632)
indri, indris, Indri indri, Indri brevicaudatus (score = 0.00766)
lesser panda, red panda, panda, bear cat, cat bear, Ailurus fulgens (score = 0.00266)
custard apple (score = 0.00138)
earthstar (score = 0.00104)
```

画像認識の学習データとして、[ImageNet](http://image-net.org/)の画像を使っているらしいです。[ImageNetのExplore](http://image-net.org/explore)には色々な画像があって面白いです。

###3.4. 手持ちの画像を認識
では、Google画像検索で筆者が好きな「三毛猫」の画像を使って試してみました。
![20.source01_cat.jpg](https://qiita-image-store.s3.amazonaws.com/0/134273/55dd9a76-a1c6-d407-e363-f6af356987fa.jpeg)

下記のようにパラメータとして"image_file"に画像を指定します。画像ファイル"cat.jpg"は"classify_image.py"と同じディレクトリに置いています。

```none
python classify_image.py --image_file="cat.jpg"
```

結果は、下記のように"Egyptian cat"の可能性が58%と出てきました。ちょっと自信がないようです。

```none
Egyptian cat (score = 0.57563)
tiger cat (score = 0.14126)
tabby, tabby cat (score = 0.09771)
Siamese cat, Siamese (score = 0.00449)
Ibizan hound, Ibizan Podenco (score = 0.00317)
```

同じ猫ではあるのですが、少し違いますね。"Egyptian Cat"は↓らしい。ちなみに三毛猫は英語でCalico catらしいです。ImageNetでは[リンク先](http://image-net.org/synset?wnid=n02123242)参照。
![Egiptian Cat](https://upload.wikimedia.org/wikipedia/commons/thumb/7/7f/Egyptian_Mau_Bronze.jpg/330px-Egyptian_Mau_Bronze.jpg)

#お遊び
いくつか試してみました。
##今、話題の議員
カーディガンと出ました。合っているけど違うだろー！！womanやladyかと期待しました。

![30.source01_lady.jpg](https://qiita-image-store.s3.amazonaws.com/0/134273/d41ea763-e4ba-8004-4bf2-674eeac2fdab.jpeg)

```none
cardigan (score = 0.91125)
hoopskirt, crinoline (score = 0.00667)
pajama, pyjama, pj's, jammies (score = 0.00640)
wool, woolen, woollen (score = 0.00629)
poncho (score = 0.00608)
```

##もっとわかりやすい顔
顔立ちがはっきりしているプーチン閣下なら"man"などと出るかと思いきや「スーツ」でした。どうも「男性」などと認識せずに、着ている服を認識するようです。
![30.source02_putin.jpg](https://qiita-image-store.s3.amazonaws.com/0/134273/e575aa90-6347-09d0-0135-3ee09e59bff9.jpeg)

```none
suit, suit of clothes (score = 0.51698)
Windsor tie (score = 0.40225)
groom, bridegroom (score = 0.00333)
oboe, hautboy, hautbois (score = 0.00252)
bolo tie, bolo, bola tie, bola (score = 0.00240)
```

##動物編
とても愛くるしいユキヒョウ。すごい、当たってる:hugging:
![30.source03_snowleopard.jpg](https://qiita-image-store.s3.amazonaws.com/0/134273/da122aed-6f43-0b11-dc27-28020172872d.jpeg)

```none
snow leopard, ounce, Panthera uncia (score = 0.94937)
leopard, Panthera pardus (score = 0.02441)
jaguar, panther, Panthera onca, Felis onca (score = 0.00104)
Egyptian cat (score = 0.00095)
cheetah, chetah, Acinonyx jubatus (score = 0.00076)
```

##無機物編
我が息子がこよなく愛する電車。正解！
![train](https://upload.wikimedia.org/wikipedia/commons/1/1c/JRE-E231-500-for-JRyamanote-line.jpg)

```none
electric locomotive (score = 0.57527)
passenger car, coach, carriage (score = 0.15877)
streetcar, tram, tramcar, trolley, trolley car (score = 0.04113)
freight car (score = 0.00830)
steam locomotive (score = 0.00735)
```

##その他
他にも何個か試しました。以下は、当たらなかったやつです。

|使った画像|画像認識結果|コメント|
|:--|:--|:--|
|ひまわり|ヒナギク(daisy)|似ているけど・・・|
|月|泡(bubble)|違うだろ|
|某ネズミマスコット|マスク|どこが？ まぁ、学習に困るか・・・|
|雪の結晶|蜘蛛の巣|惜しい！|
|北斎の有名な波の絵|ドラム|そりゃ難しいね|