arrow_back

Cloud ML API を使用して画像内のテキストの抽出、分析、翻訳を行う

参加 ログイン

Cloud ML API を使用して画像内のテキストの抽出、分析、翻訳を行う

50分 クレジット: 7

GSP075

Google Cloud セルフペース ラボ

概要

このラボでは、複数の機械学習 API を組み合わせて使用し、機械学習によってできることを体験します。最初に Cloud Vision API のテキスト検出メソッドを使用し、光学式文字認識(OCR)を利用して画像からテキストを抽出します。次に、そのテキストを Translation API で翻訳する方法と、Natural Language API で分析する方法を学びます。

ラボの内容

  • Vision API リクエストを作成し、curl で API を呼び出す

  • Vision API のテキスト検出(OCR)メソッドを使用する

  • Translation API を使用して画像のテキストを翻訳する

  • Natural Language API を使用して画像のテキストを分析する

必要なもの

  • Google Cloud Platform プロジェクト

  • ブラウザ(ChromeFirefox など)

設定と要件

Qwiklabs の設定

[ラボを開始] ボタンをクリックする前に

こちらの手順をお読みください。ラボの時間は記録されており、一時停止することはできません。[ラボを開始] をクリックするとスタートするタイマーは、Google Cloud のリソースを利用できる時間を示しています。

この Qwiklabs ハンズオンラボでは、シミュレーションやデモ環境ではなく、実際のクラウド環境を使ってご自身でラボのアクティビティを行うことができます。そのため、ラボの受講中に Google Cloud にログインおよびアクセスするための、新しい一時的な認証情報が提供されます。

必要なもの

このラボを完了するためには、下記が必要です。

  • 標準的なインターネット ブラウザ(Chrome を推奨)
  • ラボを完了するために十分な時間

注: すでに個人の Google Cloud アカウントやプロジェクトをお持ちの場合でも、ラボでは使用しないでください。

注: Chrome OS デバイスを使用している場合は、シークレット ウィンドウを開いてこのラボを実行してください。

Google Cloud Platform Console

ラボを開始して Google Cloud コンソールにログインする方法

  1. [ラボを開始] ボタンをクリックします。ラボの料金をお支払いいただく必要がある場合は、表示されるポップアップでお支払い方法を選択してください。 左側の [ラボの詳細] パネルには、以下が表示されます。

    • [Google コンソールを開く] ボタン
    • 残り時間
    • このラボで使用する必要がある一時的な認証情報
    • このラボを行うために必要なその他の情報(ある場合)
  2. [Google コンソールを開く] をクリックします。 ラボでリソースが起動し、別のタブで [ログイン] ページが表示されます。

    ヒント: タブをそれぞれ別のウィンドウで開き、並べて表示しておきましょう。

    注: [アカウントの選択] ダイアログが表示されたら、[別のアカウントを使用] をクリックします。
  3. 必要に応じて、[ラボの詳細] パネルから [ユーザー名] をコピーして [ログイン] ダイアログに貼り付けます。[次へ] をクリックします。

  4. [ラボの詳細] パネルから [パスワード] をコピーして [ようこそ] ダイアログに貼り付けます。[次へ] をクリックします。

    重要: 認証情報は左側のパネルに表示されたものを使用してください。Google Cloud Skills Boost の認証情報は使用しないでください。 注: このラボでご自身の Google Cloud アカウントを使用すると、追加料金が発生する場合があります。
  5. その後次のように進みます。

    • 利用規約に同意してください。
    • 一時的なアカウントなので、復元オプションや 2 要素認証プロセスは設定しないでください。
    • 無料トライアルには登録しないでください。

その後このタブで Cloud Console が開きます。

注: 左上にある [ナビゲーション メニュー] をクリックすると、Google Cloud のプロダクトやサービスのリストが含まれるメニューが表示されます。 ナビゲーション メニュー アイコン

Google Cloud Shell の有効化

Google Cloud Shell は、デベロッパー ツールと一緒に読み込まれる仮想マシンです。5 GB の永続ホーム ディレクトリが用意されており、Google Cloud で稼働します。Google Cloud Shell では、コマンドラインで GCP リソースにアクセスできます。

GCP Console の右上のツールバーにある [Cloud Shell をアクティブにする] ボタンをクリックします。

Cloud Shell アイコン

[続行] をクリックします。

cloudshell_continue

環境のプロビジョニングと接続には少し時間がかかります。接続すると、すでに認証されており、プロジェクトは PROJECT_ID に設定されています。例えば:

Cloud Shell 端末

gcloud は Google Cloud Platform のコマンドライン ツールです。このツールは、Cloud Shell にプリインストールされており、タブ補完がサポートされています。

次のコマンドを使用すると、有効なアカウント名を一覧表示できます。

gcloud auth list

出力:

ACTIVE: *
ACCOUNT: student-01-xxxxxxxxxxxx@qwiklabs.net
To set the active account, run:
    $ gcloud config set account `ACCOUNT`
	

次のコマンドを使用すると、プロジェクト ID を一覧表示できます。

gcloud config list project
	

出力:

[core]
project = <project_ID>
	

出力例:

[core]
project = qwiklabs-gcp-44776a13dea667a6
	

API キーを作成する

curl を使用して Vision API にリクエストを送信するために、リクエスト URL で渡す API キーを生成する必要があります。API キーを作成するには、次のように移動します。

[API とサービス] > [認証情報]:

api_nav.png

[認証情報を作成] をクリックします。

create_cred.png

ドロップダウン メニューで [API キー] を選択します。

api_key.png

生成された API キーをコピーし、[閉じる] をクリックします。

これで、API キーを入手できました。これを環境変数に保存して、各リクエストに API キーの値を挿入しなくても済むようにします。これは Cloud Shell で行えます。<your_api_key> の部分は、コピーしたキーに置き換えてください。

export API_KEY=<YOUR_API_KEY>

Cloud Storage バケットに画像をアップロードする

Cloud Storage バケットの作成

画像検出のために Vision API に画像を送信する方法は 2 つあります。base64 でエンコードされた画像文字列を API に送信する方法と、Google Cloud Storage に保存されたファイルの URL を渡す方法です。このラボでは、Google Cloud Storage バケットを作成して画像を保存します。

GCP Console で、[ナビゲーション メニュー] > [Storage] ブラウザの順に移動します。

storage_nav.png

[バケットを作成] をクリックします。

バケットにグローバルで一意の名前を付けて、[作成] をクリックします。

create_bucket.png

バケットに画像をアップロードする

下に示すフランス語の標示の画像を右クリックし、[名前を付けて画像を保存] をクリックして、sign.jpg という名前でローカルに保存します。

sign_image.png

Storage ブラウザで、先ほど作成したバケットに移動し、[ファイルをアップロード] をクリックします。その後、sign.jpg を選択します。

Bucket_upload_files.png

次に、バケットへのアクセスを非公開にしたままで、ファイルを公開して表示できるようにします。

画像ファイルの右側にある3つの点をクリックします。

bucket_object_3dots.png

[権限の編集] を選択します。

[エントリを追加] をクリックして、次のように設定します。

  • エンティティとして「Public」を選択します。
  • 名前は「allUsers」と入力します。
  • アクセス権は「Reader」を選択します。

bucket_object_public_perm.png

[保存] をクリックします。

ファイルに公開アクセス権が設定されます。

これで、ファイルをバケットに保存できました。次は Vision API リクエストを作成し、この画像の URL を渡します。

Vision API リクエストを作成する

Cloud Shell 環境で、ocr-request.json を作成した後、以下のコードをそのファイルに追加します。my-bucket-name は、作成したバケットの名前に置き換えてください。ファイルを作成するには、お好きなコマンドライン エディタ(nanovimemacs)を使用するか、または Cloud shell で エディタを開く をクリックし、コードエディタを開きます。

pencil.png

ocr-request.json ファイルに次の行を追加します。

{
  "requests": [
      {
        "image": {
          "source": {
              "gcsImageUri": "gs://my-bucket-name/sign.jpg"
          }
        },
        "features": [
          {
            "type": "TEXT_DETECTION",
            "maxResults": 10
          }
        ]
      }
  ]
}

次は、Vision API の TEXT_DETECTION 機能を使用し、画像に対して光学式文字認識(OCR)を実行することにより、テキストを抽出します。

Vision API のテキスト検出メソッドを呼び出す

Cloud Shell で、curl を使用して Vision API を呼び出します。

curl -s -X POST -H "Content-Type: application/json" --data-binary @ocr-request.json  https://vision.googleapis.com/v1/images:annotate?key=${API_KEY}

レスポンスの最初の部分は次のようになります。

{
  "responses": [
    {
      "textAnnotations": [
        {
          "locale": "fr",
          "description": "LE BIEN PUBLIC\nles dépêches\nPour Obama,\nla moutarde\nest\nde Dijon\n",
          "boundingPoly": {
            "vertices": [
              {
                "x": 138,
                "y": 40
              },
              {
                "x": 622,
                "y": 40
              },
              {
                "x": 622,
                "y": 795
              },
              {
                "x": 138,
                "y": 795
              }
            ]
          }
        },
        {
          "description": "LE",
          "boundingPoly": {
            "vertices": [
              {
                "x": 138,
                "y": 99
              },
              {
                "x": 274,
                "y": 82
              },
              {
                "x": 283,
                "y": 157
              },
              {
                "x": 147,
                "y": 173
              }
            ]
          }
        },
        {
          "description": "BIEN",
          "boundingPoly": {
            "vertices": [
              {
                "x": 291,
                "y": 79
              },
              {
                "x": 413,
                "y": 64
              },
              {
                "x": 422,
                "y": 139
              },
              {
                "x": 300,
                "y": 154
              }
            ]
          }
            ...
      ]
}]
}

OCR メソッドにより、画像からテキストが抽出されていることが確認できます。レスポンスを細かく見てみましょう。textAnnotations で取り出された最初のデータは、API が画像内で見つけたテキストのブロック全体です。これには、言語コード(ここではフランス語を表す fr)、テキストの文字列、画像内でテキストが見つかった場所を示す境界ボックスが含まれます。その下には、テキスト内で見つかった単語それぞれについてのオブジェクトが、該当の単語の境界ボックスも含めて示されます。

フランス語を知らなければ、このテキストの意味はわかりません。次のステップは翻訳です。

次の curl コマンドを実行してレスポンスを ocr-response.json ファイルに保存し、後で参照できるようにします。

curl -s -X POST -H "Content-Type: application/json" --data-binary @ocr-request.json  https://vision.googleapis.com/v1/images:annotate?key=${API_KEY} -o ocr-response.json

画像のテキストを Translation API に送信する

Translation API では、テキストを 100 以上の言語に翻訳できます。入力テキストの言語も検出できます。フランス語のテキストを英語に翻訳するために必要なのは、テキストとターゲット言語の言語コード(en-US)を Translation API に渡すことだけです。

まず、translation-request.json ファイルを作成して、次の行を追加します。

{
  "q": "your_text_here",
  "target": "en"
}

q は翻訳する文字列を渡す場所です。

ファイルを保存します。

Cloud Shell で次の Bash コマンドを実行し、前の手順で説明した画像テキストを抽出して、新しい translation-request.json にコピーします(これらはすべて 1 つのコマンドで行われます)。

STR=$(jq .responses[0].textAnnotations[0].description ocr-response.json) && STR="${STR//\"}" && sed -i "s|your_text_here|$STR|g" translation-request.json

これで、Translation API を呼び出す準備が整いました。次のコマンドを実行すると、レスポンスが translation-response.json ファイルにコピーされます。

curl -s -X POST -H "Content-Type: application/json" --data-binary @translation-request.json https://translation.googleapis.com/language/translate/v2?key=${API_KEY} -o translation-response.json

このファイルの内容を確認するには、次のコマンドを実行します。

cat translation-response.json

これで、標示の意味を理解できます。

{
  "data": {
    "translations": [
      {
        "translatedText": "PUBLIC PROPERTY dispatches For Obama, mustard is from Dijon",
        "detectedSourceLanguage": "fr"
      }
    ]
  }
}

レスポンスでは、translatedText に翻訳結果が含まれ、detectedSourceLanguagefr(フランス語を表す ISO 言語コード)になっています。Translation API は 100 以上の言語をサポートしています。そのすべてのリストについては、こちらをご覧ください。

画像に含まれるテキストを翻訳するだけでなく、詳細に分析したい場合があります。そのような場合は、Natural Language API が役に立ちます。次のステップに進みましょう。

Natural Language API を使用して画像のテキストを分析する

Natural Language API は、エンティティを抽出して感情と構文を分析し、テキストをカテゴリ別に分類することによって、テキストの理解を助けます。analyzeEntities メソッドを使用して、Natural Language API により画像のテキストからどのようなエンティティが見つかるかを確認してみましょう。

API リクエストを設定するため、次のような nl-request.json ファイルを作成します。

{
  "document":{
    "type":"PLAIN_TEXT",
    "content":"your_text_here"
  },
  "encodingType":"UTF8"
}

リクエストでは、送信するテキストについて次の情報を Natural Language API に知らせます。

type: サポートされている値は PLAIN_TEXT または HTML です。

content: 分析のために Natural Language API に送信するテキストを渡します。Cloud Storage に保存されているファイルを Natural Language API に送信してテキスト処理させることもできます。Cloud Storage からファイルを送信するには、contentgcsContentUri に置き換えて、Cloud Storage におけるテキスト ファイルの URI の値を指定します。

encodingType: テキストを処理するときに使用するテキスト エンコードの種類を API に指示します。API はこの情報により、特定のエンティティがテキストのどこに出現するかを調べます。

Cloud Shell で次の Bash コマンドを実行し、翻訳されたテキストを Natural Language API リクエストのコンテンツ ブロックにコピーします。

STR=$(jq .data.translations[0].translatedText  translation-response.json) && STR="${STR//\"}" && sed -i "s|your_text_here|$STR|g" nl-request.json

これで、元の画像のテキストを英語に翻訳したものが nl-request.json ファイルに挿入されました。いよいよこのテキストを分析します。

次の curl リクエストを使用して、Natural Language API の analyzeEntities エンドポイントを呼び出します。

curl "https://language.googleapis.com/v1/documents:analyzeEntities?key=${API_KEY}" \
  -s -X POST -H "Content-Type: application/json" --data-binary @nl-request.json

レスポンスには、Natural Language API により見つかったエンティティが表示されます。

{
  "entities": [
    {
      "name": "PUBLIC PROPERTY",
      "type": "OTHER",
      "metadata": {},
      "salience": 0.4682728,
      "mentions": [
        {
          "text": {
            "content": "PUBLIC PROPERTY",
            "beginOffset": 0
          },
          "type": "PROPER"
        }
      ]
    },
    {
      "name": "mustard",
      "type": "OTHER",
      "metadata": {},
      "salience": 0.2878307,
      "mentions": [
        {
          "text": {
            "content": "mustard",
            "beginOffset": 38
          },
          "type": "COMMON"
        }
      ]
    },
    {
      "name": "Obama",
      "type": "PERSON",
      "metadata": {
        "mid": "/m/02mjmr",
        "wikipedia_url": "https://en.wikipedia.org/wiki/Barack_Obama"
      },
      "salience": 0.16260329,
      "mentions": [
        {
          "text": {
            "content": "Obama",
            "beginOffset": 31
          },
          "type": "PROPER"
        }
      ]
    },
    {
      "name": "Dijon",
      "type": "LOCATION",
      "metadata": {
        "mid": "/m/0pbhz",
        "wikipedia_url": "https://en.wikipedia.org/wiki/Dijon"
      },
      "salience": 0.08129317,
      "mentions": [
        {
          "text": {
            "content": "Dijon",
            "beginOffset": 54
          },
          "type": "PROPER"
        }
      ]
    }
  ],
  "language": "en"
}

ウィキペディアに該当のページがあるエンティティの場合、API はそのページの URL とエンティティの mid をメタデータの中で提供します。mid は、Google のナレッジグラフでエンティティにマッピングされる ID です。詳細情報を取得するには、Knowledge Graph API を呼び出してこの ID を渡します。Natural Language API は、すべてのエンティティについて、テキスト内の出現箇所(mentions)、エンティティの type、および salience(テキスト全体におけるエンティティの重要度を示す [0,1] の範囲)を教えてくれます。Natural Language API では、英語だけでなくこちらにリストされた言語もサポートされます。

この画像に限れば重要なエンティティを見つけ出すのは比較的簡単ですが、数千に及ぶ画像のライブラリがある場合、人間がその作業を行うのは非常に大変です。OCR、翻訳、および自然言語処理は、大量の画像データセットから意味を抽出するのに役立ちます。

お疲れさまでした

ここでは、3 つの異なる機械学習 API を組み合わせて使用する方法を学びました。すなわち、Vision API の OCR メソッドで画像からテキストを抽出し、Translation API でそのテキストを英語に翻訳して、Natural Language API でエンティティを検出しました。

学習した内容

  • 複数の機械学習 API を組み合わせたユースケース
  • Vision API の OCR リクエストを作成し、curl を使用して API を呼び出す方法
  • Translation API を使用してテキストを翻訳する方法
  • Natural Language API を使用してテキストからエンティティを抽出する方法

ml_quest_icon.png ML-Image-Processing-badge.png

クエストの終了

この自習型ラボはQwiklabs Machine Learning APIs および Intro to ML: Image Processing クエスト。クエストは、学習パスを形成する一連の関連ラボです。クエストを完了すると、達成度を示すバッジが獲得できます。バッジを公開して、オンライン履歴書またはソーシャルメディアアカウントでそれらにリンクできます。これらのクエストに登録して、このラボを受講した場合はすぐに修了クレジットを取得してください。 他の利用可能なQwiklabsクエストをご覧ください。

次のラボの受講

Natural Language API を使用してテキストをカテゴリに分類するAwwvision: Kubernetes クラスタからの Cloud Vision API など、他の機械学習 API のラボをお試しください。

次のステップ

Google Cloud Training & Certification

Google Cloud 技術を最大限に活用できるようになります。このクラスでは、必要な技術力とベスト プラクティスを習得し、継続的に学習することができます。トレーニングは基礎レベルから上級レベルまであり、オンデマンド、ライブ、仮想環境など、多忙なスケジュールに対応できるオプションが用意されています。認定資格を取得することで、Google Cloud の技術のスキルと知識を証明できます。

マニュアルの最終更新日: 2020 年 9 月 8 日
ラボの最終テスト日: 2020 年 9 月 8 日

Copyright 2020 Google LLC All rights reserved. Google および Google のロゴは Google LLC の商標です。その他すべての企業名および商品名はそれぞれ各社の商標または登録商標です。