APIとは
APIとは
あるソフトの一部を公開することで、その機能を外部からも利用することができるというのが大きな部分かなと思います。
メリットとしては、下記のものがあげられるようです。
- 同じような特徴を持ったサービスが開発しやすくなる。
- データを様々な業種・分野で二次利用することで、新しいビジネスにつなげることができる。
- 1から作る必要なないので、開発の効率化につながる。
参考URL
https://www.sejuku.net/blog/7087
今回したこと
GoogleAPIの画像認識API「Cloud Vision API」と翻訳API「Cloud Translatlon API」(Google翻訳)を
使用して、画像から読み取った情報を日本語に翻訳するものを作成してみました。
ディレクトリ構成

—画像認識API「Cloud Vision API」のみを使用したプログラム—
まず初めに、画像認識API「Cloud Vision API」の動きを確認して見ることにしました。
import requests
import json
import base64
import config
#configファイルを参照し、アクセスキーを設定
KEY = config.API_KEY
img_url = ‘https://vision.googleapis.com/v1/images:annotate?key=’ + KEY
# 画像読み込み
img_file_path = ‘sample3.jpg’
img = open(img_file_path, ‘rb’)
img_byte = img.read()
#base64形式にエンコード
img_content = base64.b64encode(img_byte)
# リクエストBody作成
req_body = json.dumps({
‘requests’: [{
‘image’: {
‘content’: img_content
},
‘features’: [{
‘type’: ‘LABEL_DETECTION’,
‘maxResults’: 10,
}]
}]
})
# リクエスト発行
res = requests.post(img_url, data=req_body)
# リクエストから画像情報取得
res_json = res.json()
labels = res_json[‘responses’][0][‘labelAnnotations’]
使用したサンプル画像

実行結果

「dog」とちゃんと表示されていますね!!
それ以外も日本語の意味を載せておきます。(Web google翻訳にて翻訳)
dog breed → 犬種
dog like mammal → 哺乳類のような犬
dog breed group → 犬の品種グループ
snout → 鼻
companion dog → 仲間/お供 犬(コンパニオンドッグ)
terrier → 犬(テリア)
puppy → 子犬
carnivoran → 肉食動物(カルニボラン)
—画像認識API「Cloud Vision API」と翻訳API「Cloud Translatlon API」を使用—
#! /usr/bin/python
# -*- coding: utf-8 -*-
#
import sys
import json
#
# —————————————————————-
import requests
import json
import base64
import config
#configファイルを参照し、アクセスキーを設定
KEY = config.API_KEY
img_url = ‘https://vision.googleapis.com/v1/images:annotate?key=’ + KEY
# 画像読み込み
img_file_path = ‘sample3.jpg’
img = open(img_file_path, ‘rb’)
img_byte = img.read()
#base64形式にエンコード
img_content = base64.b64encode(img_byte)
# リクエストBody作成
req_body = json.dumps({
‘requests’: [{
‘image’: {
‘content’: img_content
},
‘features’: [{
‘type’: ‘LABEL_DETECTION’,
‘maxResults’: 10,
}]
}]
})
# リクエスト発行
res = requests.post(img_url, data=req_body)
# リクエストから画像情報取得
res_json = res.json()
labels = res_json[‘responses’][0][‘labelAnnotations’]
#取得した画像情報を翻訳
for value in labels:
api_key = KEY
sentence_in = value[‘description’]
url=”https://translation.googleapis.com/language/translate/v2″
url += “?key=” + api_key
url += “&q=” + sentence_in
url += “&source=en&target=ja”
rr=requests.get(url)
unit_aa=json.loads(rr.text)
result = unit_aa[“data”][“translations”][0][“translatedText”]
print(result)
プログラムを実行して翻訳した結果

同じ結果になりましたね!しっかり日本語に変換することができました。
情報として、「犬」だけで十分な気もしますけどね(笑)
画像認識API「Google Cloud Vision」について
今回使用した画像認識API「Google Cloud Vision」にて、できることを調べたところ・・・
・ラベル検出
画像に写っているものを分類。
・不適切なコンテンツの検出コンテンツ
画像に含まれる不適切なコンテンツの検出。
・ロゴ検出
画像に含まれる商品ロゴの検出。
・ランドマーク検出
一般的なランドマーク(目印)の検出。
・光学式文字認識(OCR)
画像内の文字の検出。(幅広い言語に対応)
・顔検出
画像に含まれる複数人の感情や帽子の着用の有無も検出可能(ただし、個人を特定はできない)
・画像属性
画像中で占める色で、一番多い色を求めたりすることができる。(切り抜きヒントというものもあったが不明)
・ウェブ検出
web上から類似の画像を検出する。
・統合された REST API
REST APIを通じてアクセスを行い、画像ごとにアノテーションタイプ(様々な情報を付加したもの?)のリクエストを行うことができる。
プラスα
海の画像に雲を描いて、空みたいな画像に加工すると空と判断されるかどうか?というところが
気になったので、やってみることにしました。
サンプルの空の画像

プログラムを実行

鮮やかすぎたのか通常の画像でも「空」と表示されていますね…
でも、海とか海洋とか表示されているので、「海」であるとも理解しているみたいですね。
加工した空の画像

プログラムを実行

加工した側ですが「雰囲気」と「太陽光」が追加されました。
「雰囲気」は大気という意味もあるみたいです。「大気」と「太陽光」が判定されるようになっているので、少しだけ「空」と判断しているということではないでしょうか?
まとめ
APIについて情報が結構あったので、今後も色々なAPIに触れてみたいと思いました。