クラファンで手に入れた日本酒でAIをまなぶ

最近受かった[Azure AI Engineer Associate(Designing and Implementing an Azure AI Solution)](https://docs.microsoft.com/ja-jp/learn/certifications/exams/ai-100)のおさらいをPythonで。
ここではAzure Cognitive Servicesの[Computer Vision](https://azure.microsoft.com/ja-jp/services/cognitive-services/computer-vision/)を使って、日本酒の画像から銘柄を取り出してみる。Computer VisionはAzureが提供する画像やビデオのコンテンツを分析するAIサービス。

# コーディングの前にComputer Visionを準備する

Azureにリソースを作成するのはAzure CLIでやりたいので、[前もってインストール](https://docs.microsoft.com/ja-jp/cli/azure/install-azure-cli-windows?tabs=azure-cli)。

```powershell
# ブラウザでサインイン(MFAを有効にしてないとき)
# az login
# ブラウザでサインイン(MFAを有効にしてるとき)
# TODO: <TENANT_ID>はAzure Active Directoryで確認できるよ
az login --tenant <TENANT_ID>

# 最初に東日本リージョンに"rg-ai-wo-manabu"リソースグループを作成
$json_rg = az group create --location japaneast --name rg-ai-wo-manabu `
| ConvertFrom-Json
$json_rg

# Computer Visionリソースを"cv-nihonshu"という名前で作る
# 使うのは無料の価格プランF0
$json_cv = az cognitiveservices account create --name cv-nihonshu `
--resource-group $json_rg.name --kind ComputerVision --sku F0 `
--location $json_rg.location --yes | ConvertFrom-Json
$json_cv

# キーを確認(このあとPythonコードで使う)
$json_keys = az cognitiveservices account keys list --name $json_cv.name `
--resource-group $json_rg.name | ConvertFrom-Json
$json_keys.key1
```

# 画像からテキスト抽出（OCR）してみる

コーディング前にComputer Visionのライブラリをインストール。

```powershell
pip install --upgrade azure-cognitiveservices-vision-computervision
```

Computer Visionに食わせる画像は、昨年の秋に初めて参加したクラウドファンディング『[日本酒プロジェクト2020](https://camp-fire.jp/curations/sake2020)』で手に入れた嘉美心酒造さんの日本酒「神心（かみこころ）」(東京農大のおちょこ付き)。この画像を使って、Pythonで銘柄のテキストを抽出してみる。
![神心 - 瓶囲い -](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/494429/b3e91162-c8d8-0ade-693c-4be0665a16ca.png)

```python
from azure.cognitiveservices.vision.computervision import ComputerVisionClient
from msrest.authentication import CognitiveServicesCredentials


# Computer Visionリソースにアクセスするためのキーとエンドポイント用の変数
# TODO: subscription_keyの値を$json_keys.key1で表示されたキーに書き換える！！
subscription_key = '<$json_keys.key1で表示されたキー>'
endpoint = 'https://japaneast.api.cognitive.microsoft.com/'

# クライアントの認証
computervision_client = ComputerVisionClient(endpoint, CognitiveServicesCredentials(subscription_key))

# 神心の画像アップ先を指定
image_url = 'https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/494429/b3e91162-c8d8-0ade-693c-4be0665a16ca.png'

# OCR機能で画像から銘柄を抽出したい
ocr = computervision_client.recognize_printed_text(image_url, language='ja')
for region in ocr.regions:
    for line in region.lines:
        chars = ""
        for word in line.words:
            chars += word.text + " "
        print(chars)
```

# 結果は？

<iframe width="560" height="315" src="https://www.youtube-nocookie.com/embed/ednIgYCie8s" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>

おー、たった10行ちょっとのコードで、ラベルの下の方に印刷されてる『KAMIKOKORO』が拾えてる！！
さすがに漢字とかは拾えないのか。。。残念。
[日本語がサポートされるようになったのが最近のこと(2021年2月9日)](https://azure.microsoft.com/ja-jp/updates/computer-vision-read-ocr-languages-update-preview/)みたいだし、時間が経てば漢字も認識できるようになるのかな:thinking:
手書き文字の認識ができるらしいreadメソッドは、[まだ日本語の指定ができなさそう](https://westcentralus.dev.cognitive.microsoft.com/docs/services/computer-vision-v3-1-ga/operations/5d986960601faab4bf452005)だなぁ。そもそも縦書きはムリなのかな？？
そういえば、recognize_printed_textでlanguage='ja'を指定しなかったら、結果が『ＫＡＭＩＫＯＫＯＫＯ』になった。

# ふりかえり

ここ4か月くらいでAzureとかAWSの資格をいくつか取ったけど、Azure AI Engineer Associateの内容が一番おもしろい。クラウドのおかげでAIが簡単に使える時代になってるんですね。
酒蔵さんを応援するクラファンがあることを教えてもらって、クラファンに投資（？）したことなかったし、やってみるなら最近はまってる日本酒の酒蔵さんを応援できるのはいいなと思って入手した日本酒だったけど、AIをまなぶのに使うなんて思ってなかったなぁ。

あ、一応あとかたづけを。

```powershell
# "rg-ai-wo-manabu"リソースグループを消す
az group delete --name $json_rg.name --yes
```