GoogleのCloud Vision APIの使い方
こんにちは。管理人のピヨ猫でーす。
1.画像解析API製品の紹介
AI事業を営む大手IT企業
AIを取り巻く現状は、Google、IBM、Amazon、Microsoftが大きく先に進んでおり、他の追随を許さない状況です。
特に、AIブームはGoogleのAlpah Goが囲碁の世界チャンピオンに勝利したことIBMのWatsonがアメリカのクイズ番組で優勝したことが火付け役の一つになりました。
そのため、GoogleとIBMは特にAIの分野に強みを発揮しています。
大手IT企業の画像解析API
ベンダー | API | リンク |
---|---|---|
Google Cloud Vision API | cloud.google.com | |
IBM | Watson Visual Recognition | www.ibm.com |
Amazon | Amazon Rekognition | aws.amazon.com |
Microsoft | Azure Computer Vision API | azure.microsoft.com |
初めて利用する場合はどこの会社の製品を使うのが良いか?
画像解析はAI(機械学習)の最も得意とするところで、画像解析の精度で各社に大きな違いは無いと思います。なので、どこを使うかは判断が難しいです。画像解析に大きな違いはありませんが、音声認識や性格診断などの分野で各社に特色があるので、画像解析以外の機能で使いたいものがある企業を選ぶのが良いかと思います。
なお、多少私見が入りますがGoogleのCloud Vision APIはネット上に使い方の情報が多かったです。なので、まず画像解析APIを試してみようという方は、GoogleのCloud Vision APIを選ぶのが良いかと思います。
本記事ではGoogleのCloud Vision APIを使った画像解析のやり方を照会します。
【(参考)画像解析APIの比較サイト】 qiita.com ad-ron.jp
Google Cloudのアカウント登録
GoogleのCloud Vision APIを使うには、Google Cloudのアカウント登録が必要になります。Google Cloudにアカウントを登録する方法は以下の記事を参考にしてください。 qiita.com
GoolgeのCloud Vison APIのAPIキーの取得
GoolgeのCloud Vison APIを実行するためには、APIキーというものを取得する必要があります。 GoolgeのCloud Vison APIのAPIキーの取得方法は以下の記事を参考にしてください。 qiita.com
Google Cloud Vision APIを使って画像からテキストを抽出するサンプルコードを掲載します。
サンプルソース
<!DOCTYPE html>
<html>
<head></head>
<body>
<img style="max-width: 400px;"><input type="file" accept="image/*" />
<pre></pre>
<script type="text/javascript">
// API KEYの定義(Cloud Vision API管理コンソールにて事前にAPIキーを取得しておいたものを設定する
// 参考)Cloud Vision API管理コンソールのURL
// https://console.cloud.google.com/home/dashboard?project=winter-legend-218002
const api_key = `XxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxX`;
/**
* Cloud Vision API
* images:annotate 画像注釈API
* @param base64string 対象画像(Base64形式)
*/
const cvAPI = (base64string) => {
let xhr = new XMLHttpRequest();
// 画像注釈APIのURI
// https://vision.googleapis.com/v1/images:annotate?key=APIキー
xhr.open('POST',
`https://vision.googleapis.com/v1/images:annotate?key=${api_key}`,
true);
xhr.setRequestHeader('Content-Type', 'application/json');
const p = new Promise((resolve, reject) => {
xhr.onreadystatechange = () => {
if (xhr.readyState != XMLHttpRequest.DONE) return;
if (xhr.status >= 400) return reject({message: `Failed with ${xhr.status}:${xhr.statusText}`});
resolve(JSON.parse(xhr.responseText));
};
})
// 画像注釈APIのリクエスト
xhr.send(JSON.stringify({
requests: [
{
"image": {
content: base64string
},
"features": [
{type: 'TEXT_DETECTION'}
]}
]
}));
return p;
}
/**
* 入力ファイルの読み込み関数
* @param file 入力ファイル
* @return
*/
const readFile = (file) => {
let reader = new FileReader();
const p = new Promise((resolve, reject) => {
reader.onload = (ev) => {
document.querySelector('img').setAttribute('src', ev.target.result);
resolve(ev.target.result.replace(/^data:image\/(png|jpeg);base64,/, ''));
};
})
reader.readAsDataURL(file);
return p;
};
//
// Event Handlerの登録処理
// ファイル入力欄の変更時にCloud Vision APIを起動する処理を追加する
//
document.querySelector('input').addEventListener('change', ev => {
if (!ev.target.files || ev.target.files.length == 0) return;
Promise.resolve(ev.target.files[0])
.then(readFile)
.then(cvAPI)
.then(res => {
console.log('SUCCESS!', res);
document.querySelector('pre').innerHTML = JSON.stringify(res, null, 2);
})
.catch(err => {
console.log('FAILED:(', err);
document.querySelector('pre').innerHTML = JSON.stringify(err, null, 2);
});
});
</script>
</body>
</html>
実行結果
ちゃんと画像を解析して文字が抽出できました。
画像解析をディープラーニングなどを使い自分で実現するのは、かなり難しいのですが、APIを使うことで簡単に画像解析を行うことが出来ました。
Google Cloud Vision APIを使う際の注意点
当記事では簡単のためにブラウザからJavaScriptでAPIを実行していますが、絶対に公開サイトでやらないでください!! API KEYが流出してしまい不正にAPIを利用される可能性があります!! 通常は証明書を発行しサーバーサイドからアクセスしましょう。IPアドレスも絞った方が良いです。
Google Cloud Vision APIのマニュアル
GoogleのCloud Vision APIの利用方法は本家Googleのサイトに詳しく掲載されています。
GoogleのCloud Vision APIの使い方は本家サイトを見るのが間違いがないので、本家GoogleのGoogleのCloud Vision APIのマニュアルサイトのリンクを掲載します。
cloud.google.com
本家GoogleのCloud Vision APIのマニュアルサイトには、チュートリアル、APIリファレンスからサンプルソースまで全て揃っています。
至れり尽くせりなので、本家サイトを見るのが一番ですが、時間の無い方のために、本家サイトに掲載されていることをこれから簡単にご紹介します。
チュートリアル
チュートリアルではプログラム要らずで、ドラッグ&ドロップで画像解析を確認することが出来ます。
Quickstarts | Cloud Vision API Documentation | Google Cloud
入門ガイド
Google Cloud Vision APIの入門ガイドでは、Cloud Vision APIのセットアップ方法からAPIの実行の仕方までが掲載されています。
How-to Guides | Cloud Vision API Documentation | Google Cloud
APIリファレンス
Google Cloud Vision APIの仕様書です。
API Reference | Cloud Vision API Documentation | Google Cloud
良く利用するのはannotateメソッド(画像解析API)になります。
Method: images.annotate | Cloud Vision API | Google Cloud
ここを見ると色々な解析が出来ることが分かります。
【Cloud Vision APIで出来ること】※2018/12/2時点
TYPE | 説明 | 説明(日本語) |
---|---|---|
TYPE_UNSPECIFIED | Unspecified feature type. | 未指定 |
FACE_DETECTION | Run face detection. | 顔検出を実行する。 |
LANDMARK_DETECTION | Run landmark detection. | ランドマーク検出を実行します。 |
LOGO_DETECTION | Run logo detection. | ロゴの検出を実行します。 |
LABEL_DETECTION | Run label detection. | ラベル検出を実行します。 |
TEXT_DETECTION | Run text detection / optical character recognition (OCR). Text detection is optimized for areas of text within a larger image; if the image is a document, use DOCUMENT_TEXT_DETECTION instead. | テキスト検出/光学式文字認識(OCR)を実行する。テキスト検出は、大きな画像内のテキストの領域に最適化されています。イメージがドキュメントの場合は、代わりにDOCUMENT_TEXT_DETECTIONを使用します。 |
DOCUMENT_TEXT_DETECTION | Run dense text document OCR. Takes precedence when both DOCUMENT_TEXT_DETECTION and TEXT_DETECTION are present. | 高密度テキスト文書OCRを実行します。DOCUMENT_TEXT_DETECTIONとTEXT_DETECTIONの両方が存在する場合に優先されます。 |
SAFE_SEARCH_DETECTION | Run Safe Search to detect potentially unsafe or undesirable content. | 安全な検索を実行して、潜在的に安全でないコンテンツや望ましくないコンテンツを検出します。 |
IMAGE_PROPERTIES | Compute a set of image properties, such as the image's dominant colors. | 画像の中で優勢な色などのイメージプロパティのセットを計算します。 |
CROP_HINTS | Run crop hints. | クロップヒントを実行します。 |
WEB_DETECTION | Run web detection. | Web検出を実行します。 |
OBJECT_LOCALIZATION | Run localizer for object detection. | オブジェクト検出のためにローカライザを実行します。 |
サンプルプログラム
サンプルプログラムでは、顔検出、ラベル(文字)検出等のサンプルソースが、 C#、GO、JAVA、NODE.JS等の主要な言語で掲載されています。
Samples | Cloud Vision API Documentation | Google Cloud
前節で紹介した通り、Google Cloud Vision APIは画像から文字を抜き出すだけでなく、顔検出、ロゴ検出、ラベル検出、ランドマーク検出、テキスト検出などの色々な画像解析を行うことが出来ます。
繰り返しになりますが、Google Cloud Vision APIで出来ることを掲載します。
TYPE | 説明 |
---|---|
FACE_DETECTION | 顔検出 |
LANDMARK_DETECTION | ランドマーク検出 |
LOGO_DETECTION | ロゴの検出 |
LABEL_DETECTION | ラベル検出 |
TEXT_DETECTION | テキスト検出/光学式文字認識(OCR) |
DOCUMENT_TEXT_DETECTION | 高密度テキスト文書OCRを実行します。 |
SAFE_SEARCH_DETECTION | 潜在的に安全でないコンテンツや望ましくないコンテンツを検出する |
IMAGE_PROPERTIES | 画像の中で優勢な色などのイメージプロパティのセットを計算する。 |
CROP_HINTS | クロップヒントを実行する |
WEB_DETECTION | Web検出 |
画像解析の技術は色々な分野に活用されています。もっとも身近なものはカメラの顔認識機能です。カメラが自動で人の顔を認識し、フォーカスを自動調整してくれています。他にも、医療診断、検品、自動運転技術などの幅広い分野で画像解析の技術が利用されています。
このような便利な画像解析をGoogle Cloud Vison APIを使うと簡単に実現できることが分かりました。しかし、Google Cloud Vison APIで出来ることは顔検出、ロゴ検出、ラベル検出、ランドマーク検出、テキスト検出などの汎用的な画像解析になります。顔検出やテキスト検出を使ったアプリやサービスを作って提供するにはもってこいですが、汎用的でないこと、例えば医療診断や検品ということを実現使用とすると、Google Cloud Vision APIを初めとする大手ベンダーが提供する機械学習APIでは実現が難しくなります。そういう場合には自前でAI(学習済モデル)を作る必要があります。
本ブログでは各社が提供するAPIと、自作の学習モデルを作る方法の両方を紹介していきたいと思いますので、引き続き読んでもらえると嬉しいです。宜しくお願いします。
詳解 ディープラーニング TensorFlow・Kerasによる時系列データ処理 [ 巣籠 悠輔 ] 価格:3,672円 |
【送料無料】 機械学習 データを読み解くアルゴリズムの技法 / 竹村彰通 【本】 価格:6,696円 |