自分が管理するGCPアカウントで立ち上げたGCPプロジェクトに、手元のMacbookからsshリモート接続して、GCPのAPIを叩くシリーズの第2弾です。
__前回の記事__では、次の準備作業を行いました。
1. GCPアカウントの取得
2. GCPプロジェクトの作成
3. 作成したGCPプロジェクトの認証キー(jsonファイル)の作成と、ローカルPCへのダウンロード
1〜3の手順は、次のウェブページがわかりやすいです。私もこのウェブページに沿って、準備を行いました。
続けて、Macbookの任意の場所(ディレクトリ)に、ダウンロードした__認証キーのファイル(jsonファイル)を格納__しました。
(以下、XXYYZZAABBCCDDの部分は、各自のjsonファイル名に読み替えて下さい)
electron@diynoMacBook-Pro Desktop % cd gcp
electron@diynoMacBook-Pro gcp % ls
XXYYZZAABBCCDD.json
electron@diynoMacBook-Pro gcp %
そして、__認証キー(jsonファイル)の格納先の絶対パスを、GCPの環境変数として、Macbookへの登録__を行いました。
(以下、XXYYZZAABBCCDDの部分は、各自のjsonファイル名に読み替えて下さい)
electron@diynoMacBook-Pro gcp % export GOOGLE_APPLICATION_CREDENTIALS="/Users/electron/Desktop/gcp/XXYYZZAABBCCDD.json"
##画像ファイルの被写体ラベル検出APIを試した
第2弾の本記事では、画像ファイルをGCPのAPIに渡して、ファイルのなかに映っている被写体を描写したする英単語を、返り値として受け取ってみました。
( 参考にしたサイト )
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
>>>
見事、__画像ファイルの被写体の内容を説明する、ラベルとなる英単語__の出力に成功しました
ここからは、コードをスクリプトファイルに書いて、GCPに画像ファイルを投げてみます。
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
今度は、大谷翔平選手の投球シーンをとらえた一枚を渡してみます。
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 %
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 %
良い感じです
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 %
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 !