MacbookからGoogle Cloud Platformの画像ラベル出力APIを動かしてみた


自分が管理するGCPアカウントで立ち上げたGCPプロジェクトに、手元のMacbookからsshリモート接続して、GCPのAPIを叩くシリーズの第２弾です。

__[前回の記事](https://qiita.com/electronics_diy721/items/43710d9f7fdf1b4ae1a4)__では、次の準備作業を行いました。


__１. GCPアカウントの取得__
__２. GCPプロジェクトの作成__
__３. 作成したGCPプロジェクトの認証キー（jsonファイル）の作成と、ローカルPCへのダウンロード__

1〜３の手順は、次のウェブページがわかりやすいです。私もこのウェブページに沿って、準備を行いました。

- [Google Cloud Vision APIのOCRを使ってPythonから文字認識する方法](https://valmore.work/cloud-vision-api-ocr/)

続けて、Macbookの任意の場所（ディレクトリ）に、ダウンロードした__認証キーのファイル（jsonファイル）を格納__しました。

（以下、XXYYZZAABBCCDDの部分は、各自のjsonファイル名に読み替えて下さい）

```bash:Terminal    
electron@diynoMacBook-Pro Desktop % cd gcp
electron@diynoMacBook-Pro gcp % ls
XXYYZZAABBCCDD.json
electron@diynoMacBook-Pro gcp % 
```

そして、__認証キー（jsonファイル）の格納先の絶対パスを、GCPの環境変数として、Macbookへの登録__を行いました。

（以下、XXYYZZAABBCCDDの部分は、各自のjsonファイル名に読み替えて下さい）

```bash:Terminal
electron@diynoMacBook-Pro gcp % export GOOGLE_APPLICATION_CREDENTIALS="/Users/electron/Desktop/gcp/XXYYZZAABBCCDD.json"
```` 

##画像ファイルの被写体ラベル検出APIを試した

第２弾の本記事では、画像ファイルをGCPのAPIに渡して、ファイルのなかに映っている被写体を描写したする英単語を、返り値として受け取ってみました。

__（ 参考にしたサイト ）__

- [Cloud Vision APIを使ってみた](https://qiita.com/hiromi_iwai/items/f320e787e3d830e9dda0)

![スクリーンショット 2021-07-20 22.25.12.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1754134/410d4a44-509c-a379-a992-9a6510332321.png)


```bash:Terminal              
electron@diynoMacBook-Pro gcp %  python3                                                                                                
>>> from pathlib import Path
>>> from google.cloud import vision
>>> 
>>> client = vision.ImageAnnotatorClient()
>>>
>>> p4 = Path().parent / 'sample4.png'
>>> with p4.open('rb') as image_file:
...     content = image_file.read()
... 
>>> 
>>> image4 = vision.Image(content=content)
>>> response = client.label_detection(image=image4)
>>> labels = response.label_annotations
>>> 
>>> for label in labels:
...     print(label.description)
... 
Glasses
Smile
Coat
Sleeve
Gesture
Happy
Tie
Dress shirt
Finger
Collar
>>> 
```


見事、__画像ファイルの被写体の内容を説明する、ラベルとなる英単語__の出力に成功しました:airplane:

ここからは、コードをスクリプトファイルに書いて、GCPに画像ファイルを投げてみます。

```Python3:image_label_words.py
import io
import argparse, os
from pathlib import Path
from google.cloud import vision

# 画像ファイル名をコマンドライン引数から受け取る
parser = argparse.ArgumentParser(description='')    #
parser.add_argument('file_name')  
args = parser.parse_args()  

image_file = args.file_name

client = vision.ImageAnnotatorClient()

p = Path().parent / image_file
with p.open('rb') as image_file:
	content = image_file.read()

image = vision.Image(content=content)
response = client.label_detection(image=image)
labels = response.label_annotations

try:
	print("\n解析対象のファイル　： " + str(args.file_name) + "\n")
	if (labels is None) or (len(labels) == 0):
		print("\n出力されたラベルはありませんでした。\n")
	else:
		print(str(len(labels)) + "件のラベル単語が出力されました。 \n")
		print("\n==================\n")
		for label in labels:
			print(label.description)
		
		print("\n==================\n")
except:
	pass
```

今度は、大谷翔平選手の投球シーンをとらえた一枚を渡してみます。

![ohtani_san.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1754134/0b80395c-ebe7-f98c-a6a3-d75e03a263a5.png)


```bash:Terminal              
electron@diynoMacBook-Pro gcp % python3 image_label_words.py ohtani_san.png

解析対象のファイル　： ohtani_san.png

10件のラベル単語が出力されました。 


==================

Sports uniform
Sports equipment
Sports gear
Baseball park
Baseball equipment
Jersey
Baseball protective gear
Baseball field
Baseball
Baseball uniform

==================

electron@diynoMacBook-Pro gcp % 
```

![land.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1754134/0539544b-7efa-ccb1-e97f-80cd3bad82b2.png)

```bash:Terminal              
electron@diynoMacBook-Pro gcp %  python3 image_label_words.py land.png      

解析対象のファイル　： land.png

10件のラベル単語が出力されました。 


==================

Sky
Building
Skyscraper
Tower
Urban design
Tower block
Landmark
City
Cityscape
Engineering

==================

electron@diynoMacBook-Pro gcp % 
```

良い感じです:rainbow:

![kokugikan_1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1754134/1dbfd025-d0df-49f2-5b4a-369094e7d598.png)

```bash:Terminal              
electron@diynoMacBook-Pro gcp % python3 image_label_words.py kokugikan_1.png 

解析対象のファイル　： kokugikan_1.png

10件のラベル単語が出力されました。 


==================

Building
Water
Urban design
Tower block
Real estate
Landscape
Tower
City
Condominium
Cityscape

==================

electron@diynoMacBook-Pro gcp % 
```

![kokugikan_2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1754134/c5487507-db03-5bad-a7cc-16fa95af8a94.png)


```bash:Terminal              
electron@diynoMacBook-Pro gcp % python3 image_label_words.py kokugikan_2.png

解析対象のファイル　： kokugikan_2.png

10件のラベル単語が出力されました。 


==================

Photograph
Light
Product
Chair
Red
Musical instrument accessory
Building
Event
Sport venue
Field house

==================

electron@diynoMacBook-Pro gcp % 
```

まずまずの結果です。お疲れ様でした、__GCP__ ！