GoogleのVisionAPIをPythonからとりあえず触ってみる

# この記事について
この記事ではGCPのVisionAPIを難しいことをすっ飛ばして使ってみる方法について書いています。
初めてでも、画像の通りにすれば使えます。

# 参考ページ
Google Vision API
https://cloud.google.com/vision/docs/ocr/?hl=ja
（Google Cloud SDKをインストールせずに行けました。pipでgoogle-cloud-visionを入れたおかげ？）

# 作業準備
Windows10
Python 3.7のインストール
GCPアカウントの作成
読み取りたい画像の準備

# 作業開始
## ライブラリのインストール
最初にGoogle　Vision　APIのライブラリを取得します。
以下のコマンドを入力します。
> pip install --upgrade google-cloud-vision

インストールが出来たらテストを行います。
Pythonを開いて
> from google.cloud import vision

を実行します。
これでエラーが出なければ大丈夫です。
もしできていなければ
> Python 3.7.7 (default, May  6 2020, 11:45:54) [MSC v.1916 64 bit (AMD64)] :: Anaconda, Inc. on win32
Type "help", "copyright", "credits" or "license" for more information.
\>>> from google.cloud import vision
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ImportError: cannot import name 'vision' from 'google.cloud' (unknown location)

と表示されます。

## GCPプロジェクトの作成
今回は新規でGCPプロジェクトを立てます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/296240/c34219ec-f5a3-fc79-c1ed-9d7c854ef1a9.png)
新しいプロジェクトを押します。
プロジェクト名などはわかりやすい名前で適当に作成してください。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/296240/19164e4d-8020-dcb4-558f-8dbb82d3fb51.png)

## APIの有効化
プロジェクトを作成したら次にVision APIを有効にします。
画像の番号の順番でクリックしてください。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/296240/a556bbbf-1ace-7c31-2d5f-a06b6f03bbb9.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/296240/4983d166-8067-b820-1545-dc46b06043ed.png)

検索窓に「google vision api」と入力します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/296240/f4cefc50-65be-4adf-29e9-811aec0100ed.png)
表示された項目をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/296240/f30825fa-1ba8-43dc-a146-00e91650c131.png)
有効にするボタンをクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/296240/cd35718a-1c9d-2c2a-6c55-1ece77a87cb3.png)

## サービスアカウントの作成
画像の番号の通りに選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/296240/b8b5e2f4-79fd-ad56-5b04-e41cbc4a4650.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/296240/ad75be25-eb96-fa3c-21c2-9e7a5f7513ed.png)
適当なサービスアカウント名を入力します。
IDは自動的に入力されますので、そのままで大丈夫です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/296240/4bad1578-96db-a125-dba0-d094210a19ac.png)
適当なロールを選択してください。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/296240/ba7a3809-89d3-dc4a-5e3e-da47db35379f.png)
次の画面はそのまま完了します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/296240/9f2267fc-f7b3-19a7-04bd-cf53b7c11e37.png)
サービスアカウントが追加されました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/296240/8b651f51-4933-7799-a41b-369e284e4502.png)
操作の![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/296240/e1001515-ae67-393a-88da-31b0677bfb13.png)をクリックして、「鍵を作成」を選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/296240/6980fcff-49ac-c1e5-c161-5a13ce254d28.png)
JSONを選択して完了ボタンを押します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/296240/de3aaed7-d7bb-b6df-f4dd-563e5bf7422c.png)
ダウンロードしたファイルを任意の場所に移動します。

## 環境変数の設定
環境変数の設定を行います。
変数：GOOGLE_APPLICATION_CREDENTIALS
値　：ダウンロードしたjsonファイルの場所と名前（例：c:\user\xxxxxx\desctop\xxxxxxx.json）

以下設定手順です。
画像内の番号通りに進めます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/296240/2475c4c3-c386-e4b6-1aec-3ba0c6100223.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/296240/ead84b20-4b52-cc9f-9768-deb50414d57f.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/296240/4dad7fc2-71cc-b3d7-efbd-5dd7c7b5c7b3.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/296240/cb23b627-3e8a-2d45-6ccc-82be6b7bf710.png)

## ソースコード
Githubから持ってきたソースコードを変更します。

```Python:detext.py
"""Detects text in the file."""
from google.cloud import vision
import io
client = vision.ImageAnnotatorClient()

# [START vision_python_migration_text_detection]
path = "C:\\Users\\xxxx\\Desktop\\gcptest\\xxxxx.png"
with io.open(path, 'rb') as image_file:
    content = image_file.read()

image = vision.types.Image(content=content)

response = client.text_detection(image=image)
texts = response.text_annotations
print('Texts:')

for text in texts:
    print('\n"{}"'.format(text.description))

    vertices = (['({},{})'.format(vertex.x, vertex.y)
                for vertex in text.bounding_poly.vertices])

    print('bounds: {}'.format(','.join(vertices)))

if response.error.message:
    raise Exception(
        '{}\nFor more info on error messages, check: '
        'https://cloud.google.com/apis/design/errors'.format(
            response.error.message))
```

ソースコード内の７行目の「path = "C:\\Users\\xxxx\\Desktop\\gcptest\\xxxxx.png"」の部分を変更することで画像を変更できます。
例として以下の画像を使用します。
![IMG_1525.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/296240/fb78ac7e-5980-63d1-b2bb-6b84fe86d02c.jpeg)

出力結果
> "かんばれニッポン
明治チョコスナック
きのこの山
薫るいちご味
ほんの
TOKTO 0
20
ES
子)
©Tokyo 2020
"
bounds: (1,66),(745,66),(745,954),(1,954)
"かんばれ"
bounds: (72,80),(351,73),(353,152),(74,159)
"ニッポン"
bounds: (353,73),(619,66),(621,145),(355,152)
"明治"
bounds: (208,151),(305,150),(305,190),(208,191)
"チョコ"
bounds: (307,151),(405,150),(405,189),(307,190)
"スナック"
bounds: (394,156),(535,155),(535,184),(394,185)
"きのこ"
bounds: (33,167),(471,157),(475,354),(37,364)
"の"
bounds: (473,157),(569,155),(573,352),(477,354)
"山"
bounds: (571,155),(735,151),(739,348),(575,352)
"薫る"
bounds: (131,403),(314,390),(322,502),(139,516)
"いちご"
bounds: (315,390),(596,370),(604,482),(323,503)
"味"
bounds: (598,370),(671,365),(679,476),(606,482)
"ほんの"
bounds: (637,551),(736,527),(745,564),(646,588)
"TOKTO"
bounds: (236,697),(260,690),(263,701),(239,708)
"0"
bounds: (262,691),(277,687),(280,696),(265,701)
"20"
bounds: (1,804),(34,804),(34,829),(1,829)
"ES"
bounds: (1,828),(16,828),(16,844),(1,844)
"子"
bounds: (1,910),(18,910),(18,932),(1,932)
")"
bounds: (19,912),(24,912),(24,927),(19,927)
"©Tokyo"
bounds: (72,924),(150,921),(151,951),(73,954)
"2020"
bounds: (157,921),(210,919),(211,949),(158,951)

さすがきのこの山