Cloud Vision APIで、写真内の猫をAIでカウントするには、物体検出(object_localization)を使用します。
具体的には、物体検出でCatが検出された場合、猫1匹としてカウントします。
目次
AIで写真内のネコをカウントするには
入力画像
猫4匹.jpg
サンプルプログラム
### sample.py ###
# 写真内の猫カウントのサンプル #
from google.cloud import vision
from google.oauth2 import service_account
import io
# 身元証明書のjson読み込み
credentials = service_account.Credentials.from_service_account_file('key.json')
client = vision.ImageAnnotatorClient(credentials=credentials)
#ローカル画像を読み込み、imageオブジェクト作成
with io.open("./猫4匹.jpg", 'rb') as image_file:
content = image_file.read()
image = vision.Image(content=content)
#Cloud Vision APIにアクセスして、物体検出
response = client.object_localization(image=image)
# 物体検出結果からCatをカウント
labels = response.localized_object_annotations
num = 0
for label in labels:
if label.name=="Cat":
num += 1
# 猫カウント結果を表示
print("猫カウント:./猫4匹.jpg")
print("猫数:" + str(num))
# エラー処理
if response.error.message:
raise Exception(
'{}\nFor more info on error messages, check: '
'https://cloud.google.com/apis/design/errors'.format(response.error.message))
実行コマンド
>py sample.py
結果
猫カウント:./猫4匹.jpg
猫数:4
4匹の写真内の猫様を、正しくカウントできています!
サンプルプログラム解説
物体検出
まず、写真画像をCloud Vision APIに渡して、物体検出した結果を受け取ります。
with io.open("./猫4匹.jpg", 'rb') as image_file:
content = image_file.read()
image = vision.Image(content=content)
response = client.object_localiz ation(image=image)
猫の数をカウント
上記の物体検出結果であるjsonデータのresponse内で、nameがCatの数をカウントします。
labels = response.localized_object_annotations
num = 0
for label in labels:
if label.name=="Cat":
num += 1
カウント結果を表示
print("猫カウント:./猫4匹.jpg")
print("猫数:" + str(num))
表示
猫カウント:./猫4匹.jpg
猫数:4
写真内の猫を、正しくカウントできています。
しかも顔しか見えていない右奥の猫も、正しくカウントできています。
いろいろな写真で猫カウントした結果
入力画像①
子猫5匹.jpg
結果①
猫カウント:./子猫5匹.jpg
猫数:5
後ろ向きの猫も、正しくカウントできています。
入力画像②
地べた猫8匹.jpg
結果②
猫カウント:./地べた猫8匹.jpg
猫数:7
枯れ葉と土の背景に溶け込んでいる猫たちも、1匹検出が漏れているものの、他の猫たちは正しく検出できています。
入力画像③
キャットステップ猫7匹.jpg
結果③
猫カウント:./キャットステップ猫7匹.jpg
猫数:7
いろいろな種類の猫が7匹いますが、正しくカウントできています。
まとめ
本記事では、Google Cloud Vision APIで、写真の猫をカウントする方法を解説しました。
猫の場合、簡単なプログラムで、人の検出よりも意外に高い精度で検出できています。
みなさんも、Cloud Vision APIでご自身のお好きな動物をカウントしてみてはどうでしょうか。
今回は以上です。