ぴよ猫ちゃんの機械学習

AI、人工知能、機械学習について色々記事にしています。

GoogleのCloud Vision APIの使い方

こんにちは。管理人のピヨ猫でーす。

疑問がある

最近はAIブームで特にAIを使うと画像解析が高い精度で出来る様になっているという話を聞いたから、僕もAIで画像解析を試してみたいんだけどお手軽に試すことは出来ないのかな?

記事の説明です

出来るよー。AIを作るというかディープラーニングをするには結構な専門知識がいるんだけど、画像認識や音声解析などの汎用的な機能はGoogleAmazonIBMMicrosoftという大手企業がAPIという使い易い形で提供してくれているんだー。だから簡単に試すことが出来るよ。

1.画像解析API製品の紹介

AI事業を営む大手IT企業

AIを取り巻く現状は、GoogleIBMAmazonMicrosoftが大きく先に進んでおり、他の追随を許さない状況です。 特に、AIブームはGoogleのAlpah Goが囲碁の世界チャンピオンに勝利したことIBMのWatsonがアメリカのクイズ番組で優勝したことが火付け役の一つになりました。
そのため、GoogleIBMは特にAIの分野に強みを発揮しています。

大手IT企業の画像解析API

ベンダー API リンク
Google 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

2.GoogleのCloud Vision APIを使う準備

Google Cloudのアカウント登録

GoogleのCloud Vision APIを使うには、Google Cloudのアカウント登録が必要になります。Google Cloudにアカウントを登録する方法は以下の記事を参考にしてください。 qiita.com

GoolgeのCloud Vison APIAPIキーの取得

GoolgeのCloud Vison APIを実行するためには、APIキーというものを取得する必要があります。 GoolgeのCloud Vison APIAPIキーの取得方法は以下の記事を参考にしてください。 qiita.com

3.Google Cloud Vision APIをまずは試してみよう(実装サンプル)

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();

    // 画像注釈APIURI 
    // 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>

実行結果

f:id:shibayu2002:20190413204432p:plain Cloud Vision APIサンプル実行結果

ちゃんと画像を解析して文字が抽出できました。
画像解析をディープラーニングなどを使い自分で実現するのは、かなり難しいのですが、APIを使うことで簡単に画像解析を行うことが出来ました。

Google Cloud Vision APIを使う際の注意点

当記事では簡単のためにブラウザからJavaScriptAPIを実行していますが、絶対に公開サイトでやらないでください!! API KEYが流出してしまい不正にAPIを利用される可能性があります!! 通常は証明書を発行しサーバーサイドからアクセスしましょう。IPアドレスも絞った方が良いです。

4.Google Cloud Vision APIの詳しい利用方法

Google Cloud Vision APIのマニュアル

GoogleのCloud Vision APIの利用方法は本家Googleのサイトに詳しく掲載されています。
GoogleのCloud Vision APIの使い方は本家サイトを見るのが間違いがないので、本家GoogleGoogleのCloud Vision APIのマニュアルサイトのリンクを掲載します。 cloud.google.com GoogleのCloud Vision APIのマニュアルサイト

本家GoogleのCloud Vision APIのマニュアルサイトには、チュートリアルAPIリファレンスからサンプルソースまで全て揃っています。
至れり尽くせりなので、本家サイトを見るのが一番ですが、時間の無い方のために、本家サイトに掲載されていることをこれから簡単にご紹介します。

チュートリアル

チュートリアルではプログラム要らずで、ドラッグ&ドロップで画像解析を確認することが出来ます。
Quickstarts  |  Cloud Vision API Documentation  |  Google Cloud GoogleのCloud Vision APIのチュートリアル

入門ガイド

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

5.Google Cloud Vision APIの色々な使い方

前節で紹介した通り、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検出

6.画像解析で何が出来るか?Google Cloud Vison APIをどう使うか?

画像解析の技術は色々な分野に活用されています。もっとも身近なものはカメラの顔認識機能です。カメラが自動で人の顔を認識し、フォーカスを自動調整してくれています。他にも、医療診断、検品、自動運転技術などの幅広い分野で画像解析の技術が利用されています。

このような便利な画像解析をGoogle Cloud Vison APIを使うと簡単に実現できることが分かりました。しかし、Google Cloud Vison APIで出来ることは顔検出、ロゴ検出、ラベル検出、ランドマーク検出、テキスト検出などの汎用的な画像解析になります。顔検出やテキスト検出を使ったアプリやサービスを作って提供するにはもってこいですが、汎用的でないこと、例えば医療診断や検品ということを実現使用とすると、Google Cloud Vision APIを初めとする大手ベンダーが提供する機械学習APIでは実現が難しくなります。そういう場合には自前でAI(学習済モデル)を作る必要があります。

本ブログでは各社が提供するAPIと、自作の学習モデルを作る方法の両方を紹介していきたいと思いますので、引き続き読んでもらえると嬉しいです。宜しくお願いします。 よろしくー


詳解 ディープラーニング TensorFlow・Kerasによる時系列データ処理 [ 巣籠 悠輔 ]

価格:3,672円
(2018/11/25 22:43時点)
感想(0件)

【送料無料】 機械学習 データを読み解くアルゴリズムの技法 / 竹村彰通 【本】

価格:6,696円
(2019/3/23 23:16時点)
感想(0件)