Google ML Study Jam培訓計畫上課心得[使用 Cloud ML APIs 來解析、分析及翻譯圖片中的文字內容]

Google的諸多服務一直是我很愛用的,雖然有些不知道怎麼用…  我想很多人與我是類似的感覺,所以前陣子由Google所推出的 ML Study Jam 機器學習培訓計劃 – 初級課程,當然火速報名。課程內容非常豐富,包含以下主題,都非常實用:

  1. 使用 BigQuery ML 的預測模型預測計程車費率
  2. 使用 BigQuery ML 的分類模型預測顧客購買行為
  3. 使用 Cloud Vision API 來偵測圖片中的標籤、臉孔以及地標
  4. 快速上手 Cloud Speech API
  5. 使用 Cloud Speech API 將聲音轉成文字稿
  6. 使用 Cloud Translate API 翻譯文字內容
  7. 使用 Cloud Natural Language API 分類文字內容
  8. 使用 Cloud ML APIs 來解析、分析及翻譯圖片中的文字內容
  9. 使用 Cloud Vision API 以及 Cloud Video Intelligence 來分析用戶上傳的影像內容

已經有許多朋友分享自己的心得,我也來分享 [使用 Cloud ML APIs 來解析、分析及翻譯圖片中的文字內容] 的操作過程與一點想法。政府於上個月也推動了 [高中職生AI扎根系列活動],已經不是高中生的朋友別擔心,類似的課程與資源日後一定會愈來愈多。請密切關注CAVEDU相關頻道即可。

1.進入專案頁面

本文說明的範例是「使用 Cloud ML APIs 來解析、分析及翻譯圖片中的文字內容

接著會看到很詳盡的專案說明以及學習內容(翻譯用粗體表示)

總覽:本課程透過不同的機器學習API 讓您探索機器學習的威力。首先使用Cloud Vision API 的文字偵測方法,運用Optical Character Recognition (OCR)技術來辨識影像中的各種文字。接著則是運用 Translation API 來翻譯這個文字,最後用 Natural Language API 來分析它。.

您會學到:

  • 建立一個Vision API request 並用curl 來呼叫這個API
  • 理解如何運用 Vision API 的文字偵測(OCR)方法
  • 理解如何運用來翻譯影像中的文字
  • 理解如何運用 Natural Language API 來分析文字

您需要:

  • A Google Cloud Platform Project
  • 瀏覽器,Chrome 或 Firefox 都可以

2. 登入

同意相關規範之後繼續,請注意在此都是用本次ML Study Jam所提供的帳號來上課,請不要用您個人的email來登入,因此相關兩階段登入、回復設定以及免費試用等選項都不要去理它。[AGREE AND CONTINUE]之後,會進入您這個 GCP帳號的 GCP console。


3. 進入GCP console 並開啟 Cloud shell

接著要啟動Google Cloud Shell。Google Cloud Shell 是預先載入好所需開發工具的虛擬機,提供永久性的 /home目錄(容量 5GB)並直接在 Google Cloud上執行。Google Cloud Shell 可讓您用命令列指令來存取 GCP專案資源,相當方便。

請在GCP console右上角點選 [Open Cloud Shell] 按鈕,再點選[START CLOUD SHELL] 就會開啟。

頁面上還有一些基礎的 cloud sheel 指令教學,在此省略囉

4. 建立API key

API key 的重要性應該不用多說吧,透過API key 來驗證每一次呼叫的合法性(當然還有計價). 由於後續會用 curl 來對 Vision API 發送需求,因此當然需要在 request URL 中放入一個 API key 來驗證呼叫的合法性。

下拉式選單,選擇 API Key

API key 產生之後,點選Close

現在請把 API key 存成一個環境變數,這樣後續呼叫會比較方便。請在Cloud Shell 中輸入以下<your_api_key>:

export API_KEY=<your_api_key>

5. 上傳影像到 cloud storage bucket

接下來新增一個 cloud storage bucket 來儲存所要辨識的圖片。共有兩種方法把影像發送到 Vision API,一是發送 base64 編碼後的影像字串 image string,或是把存放在Google Cloud Storage 的檔案 URL 發送過去。本課程會先建立一個 Google Cloud Storage bucket 來存放影像。

請在Cloud console中找到 Storage

點選Create bucket,給一個名稱(不可重複)之後點選Create

上傳影像到您所建立的 bucket

請下載下面這張照片,另存檔名為sign.jpg

sign_image.png

回到您剛剛建立的bucket,點選Upload files,再選擇剛剛的sign.jpg

上傳完成之後可以看到這張影片的相關資訊

現在要把這個檔案設為 public,但 bucket 本身依然為private,請點選影像檔最右邊的[…]鍵。選擇 Edit Permissions,點選Add Item並完成以下設定:

  • Entity,選擇”Group
  • Name,輸入”allUsers
  • Acceess,選擇”Reader

點選Save就完成了,現在這個檔案是公開的了。接著就是要建立一個 Vision API request 將這張圖檔的 Url 傳送過去。

建立Vision API request

在Cloud Shell環境中,建立一個ocr-request.json並加入以下內容,把my-bucket-name換成您所建立的bucket名稱。使用任何喜歡的編輯器都可以(nano, vim, emacs),也可以點選Cloud Shell 工具列上的鉛筆圖示:

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

在Cloud shell下的 Explorer 下找到 ocr-request.json,確認 gcsImageUrl 後面的路徑沒有錯,例如要改成:gs//cavedu-bucket/sign.jpg

在cloud shell中,輸入以下指令:

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

第一段結果看起來類似這樣:

OCR方法可以從影像中擷取各式各樣的文字,很酷吧!reponse中第一段是 API 在影像中找到的所有影像區塊,包含語言編碼 (以 sign.jpg 來說為法語)、一串文字與一組座標來說明文字在影像中的位置。接著是文字中找到各單字的物件,一樣也會標明座標。

但除非你是法國人,不然也不知道文字確切的意思,來試試看翻譯吧。

將影像中的文字發送到Translation API

Translation API 支援100種以上語言的翻譯,還可以自動偵測輸入語言的文字。想要把法文翻譯成英文的話,您只要把要翻譯的文字與目標語言的編碼(例如en-US)發送給Translation API就可以囉。

一樣建立translation-request.json,並加入以下內容:

{
  "q": "your_text_here",
  "target": "en"
}
translation-request.json

請在Cloud Shell 執行本指令,可以把上一步影像中所擷取的文字複製到translation-request.json中:

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

 

請在 cloud shell 中輸入以下指令:

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

執行結果如下:

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *