GCPの画像認識APIの紹介
虎の穴ラボ株式会社
片岡 宏
2022/3/8 Web API LT会 - vol.3
Copyright (C) 2022 Toranoana Inc. All Rights Reserved.
● 所属 : 虎の穴ラボ株式会社 

● 担当 : DXチーム

● 経歴:

   2015 ~ 2017 オンラインゲーム会社


   2018 ~ 2021 高知に移住、Webエンジニア


   2021 ~ 虎の穴ラボ株式会社、Webエンジニア


自己紹介

Copyright (C) 2022 Toranoana Inc. All Rights Reserved.
アジェンダ
1.Web API とは
2.APIを使う場合の注意点
3.Web APIの実用例
- GCPのCloud Funtionで画像認識Vision APIの実装
4.まとめ
Copyright (C) 2022 Toranoana Inc. All Rights Reserved.
Web API

(Application Programming Interface)は何?

● エンジニア1年目のときの疑問

Copyright (C) 2022 Toranoana Inc. All Rights Reserved.
例:171時報 = API
今何時?
19:55分
Copyright (C) 2022 Toranoana Inc. All Rights Reserved.
なぜWeb APIが必要か?
APIはアプリケーションの開発工程を大幅に削減するメリットがある
● 地図情報が欲しい : Google MapのAPIを使う
● 天気情報が欲しい : Weather APIを使う
巨人の肩に立つ
Copyright (C) 2022 Toranoana Inc. All Rights Reserved.
初心者の頃:WebエンジニアのAPI入門課題
東京都の現在の天気を取得し、画面に表
示する
livedoor apiで取得できた (天気サービス
は2020/7/31で終了)
右側は取得したデータの一部の内容
"forecasts": [
{
"dateLabel": "今日",
"telop": "曇り",
"date": "2020-04-23",
"temperature": {
"min": null,
"max": null
},
"image": {
"width": 50,
"url":
"http://weather.livedoor.com/img/icon/8.gif",
"title": "曇り",
"height": 31
}
},
Copyright (C) 2022 Toranoana Inc. All Rights Reserved.
初心者の頃:WebエンジニアのAPI入門課題
(JS)エンドポイント:
const URL = "http://weather.livedoor.com/forecast/webservice/json/v1?city=130010";
const getWeather = async () => {
const res = await axios.get(URL);
const item = res.data;
return item.forecasts[0].telop;
};
結果:
"forecasts": [
{
"dateLabel": "今日",
"telop": "曇り",
}
]
Copyright (C) 2022 Toranoana Inc. All Rights Reserved.
APIを使う場合の注意点
1.OSS以外のAPIはほとんど課金必要がある
Google Map API (従量課金)
OpenWeather API (Free ~ Enterprise)個人開発、商業使用までのプランがあ
る
aws rekognition (従量課金) リアルタイム顔認証システム実装可能
Copyright (C) 2022 Toranoana Inc. All Rights Reserved.
APIを使う場合の注意点
2.APIがバージョンアップなどする際に、自分のプログラムを対応必要がある
 例:api v1 => api v2アップデートされる、v1はxx月xx日から使えなくなるみたいな
通知が来る、対応を忘れたら、自分のプログラムが動かなくなる
APIバージョンアップ時によくある変更点:
● 引数が変わる
● 返すデータが変わる
もちろんテストが必要
Copyright (C) 2022 Toranoana Inc. All Rights Reserved.
APIを使う場合の注意点
3.APIに対して一定時間内に多くのアクセスがあると、負荷がかかり過ぎてAPIの
サーバがダウンしてしまう可能性がある
 多くのAPIが一定時間あたりに使用できる回数を設けている。その制限を超えて
APIを利用する場合には、提携関係を結んで利用料を払うことで制限なく利用させた
りしている。
Copyright (C) 2022 Toranoana Inc. All Rights Reserved.
Web APIの実用例
Copyright (C) 2022 Toranoana Inc. All Rights Reserved.
GCPで画像認識Vision APIの実装

FrontEnd:

ionic Native フレームワーク (カメラ、デバイスストレージなどを利用) 

Google Cloud API:

Vision APIで画像認識(ラベル付け)する、
Translate APIで英語を日本語に翻訳する



システム仕様:

1.写真を撮影し、バックエンドにアップロードする

2.FireStoreの写真ファイルをCloud Function上で実装したコードを実行し、画像を認識する、ラベルを付ける

3.検知した画像のラベルをTranslate APIで日本語化してからデータベースに保存する

4.FireBaseのデータベースからラベルデータを取得し、アプリの画面上に表示する

Copyright (C) 2022 Toranoana Inc. All Rights Reserved.
Vision API
今回の例:
AutoML Vision を使用して、カスタムラベルで画像を分類する機械学習モデルを利
用しました。
デモ(Google)
Copyright (C) 2022 Toranoana Inc. All Rights Reserved.
Translate API
Google Translate APIは、グーグルが提供するREST形式の翻訳APIです。APIに渡した文字列がど
の言語で記述されたものかを検出したり、翻訳したりできます。そしてテキストだけじゃなくて音声も翻
訳できます。
Copyright (C) 2022 Toranoana Inc. All Rights Reserved.
Translate API
Copyright (C) 2022 Toranoana Inc. All Rights Reserved.
Cloud FunctionでCloud Vision APIの使用例
import * as vision from '@google-cloud/vision';
export const imageVisionFunc = functions.storage.bucket('//bucket名前').object().onFinalize(async event
=> {
const docRef = admin.firestore().collection('photos').doc(event.name);
const imageUri = `画像のファイルパス`;
const visionClient = new vision.ImageAnnotatorClient();
const results = await visionClient.labelDetection(imageUri); // ラベル解析の関数を呼ぶ
const labels = results[0].labelAnnotations.map(obj => obj.description);
return docRef.set({labels, imageUri}); // ファイル名と分析した結果をDBに書き込む
});
Copyright (C) 2022 Toranoana Inc. All Rights Reserved.
Cloud FunctionでTranslate APIの使用例
function createTranslationPromise(text, imageUri, docRef) {
let label: string;
return requestP(createTranslateUrl('ja', text), {resolveWithFullResponse: true}).then(response => {
if (response.statusCode === 200) {
const resData = JSON.parse(response.body).data;
label = resData.translations[0].translatedText;
const labels = label.split('、');
return docRef.set({labels, imageUri});
}
else throw response.body;
});
}
Copyright (C) 2022 Toranoana Inc. All Rights Reserved.
Cloud FunctionでTranslate APIの使用例
function createTranslateUrl(lang, text) {
const apiKey = '[API KEY]'
return
`https://www.googleapis.com/language/translate/v2?key=${apiKey}&source=
en&target=${lang}&q=${text}`;
}
Copyright (C) 2022 Toranoana Inc. All Rights Reserved.
APIのレスポンス結果:(Google translate apiを経由して、英語→日本語変換しました )
"床" "フローリング" "ウッドフローリング" "ラミネートフローリング " "ハードウッド"
"ウッド" "インテリアデザイン" "ロビー" "ロフト" "オフィス"
Copyright (C) 2022 Toranoana Inc. All Rights Reserved.
まとめ
1.機械学習は分からないけど、手軽に画像認識のアプリを実装できた
2.Googleの機械学習のAPIの実装は非常に簡単
3.料金は非常に安い、個人勉強プロジェクトやプロトタイプの実装など相性が良
い(動画などストリーミング利用は慎重に)
Copyright (C) 2022 Toranoana Inc. All Rights Reserved.
エンジニア職 採用募集
開発エンジニア【とらのあな通販】
事業拡大・業界発展を目指し、
ECサイトの大々的な新機能開発が
必要になります。その開発において、要件定義から開発まで一連を
担当いただくポジションです。
詳しくは▶https://yumenosora.co.jp/archives/job/1734
開発エンジニア【ファンティア】
新規機能開発や要件定義、運用保守開発をご担当いただきます。
No.1のクリエイター支援サービスを目指すべく、メンバーと一緒に
Fantiaの改善を担っていくポジションです。
詳しくは▶https://yumenosora.co.jp/archives/job/1724
開発エンジニア【新規事業】
WEBサービスの新規機能開発・保守運用。
今よりももっと良いオタクの未来を創るために、技術を駆使して新規
機能を開発するポジションです。
詳しくは▶https://yumenosora.co.jp/archives/job/1739
とらのあなインフラ部門のサーバ・ネットワーク構築設計、運用全
般を行っていただきます。
とらのあなのこれから、また業界のこれからをインフラの視点から
支えていただくポジションです。
詳しくは▶https://yumenosora.co.jp/archives/job/2050
インフラエンジニア(NW ・サーバー)
エンジニア目線での中途エンジニア採用全般をご担当いただきま
す。より良いサービス開発のためには、多くのエンジニアが求めら
れます。エンジニアの採用を促進し、とらのあなエンジニア体制を
強化することによって、とらのあなのサービスおよび会社を支える
ポジションです。
詳しくは▶https://yumenosora.co.jp/archives/job/1741
エンジニア採用戦略担当
Copyright (C) 2022 Toranoana Inc. All Rights Reserved.
技術書典13
虎の穴ラボの薄い本。vol.5 (無料)
とらのあなのシステム開発を担う『虎の穴ラボ』エンジニア達が執筆した技術書本
(AWS Amplify、AWS認定試験、Deno、サーバーサイドKotlin、他)です。
https://techbookfest.org/product/60453152935
11680?productVariantID=6092412562702336
Copyright (C) 2022 Toranoana Inc. All Rights Reserved.

GCPの画像認識APIの紹介