May 9, 2019

Google 機器學習培訓計劃心得

Cloud Vision API 圖片辨識


文 / 西打藍 Siddharam

前言


五月,是科技大廠展演的季節,在 在 2019 Google I/O 大會 期間,同事在 slack 貼了 ML Study Jam 機器學習培訓計劃的活動,想說 Google 的服務只玩過 firebase 和語音 API,這次就試試看其他的吧。

這次共玩了四個,分別是偵測圖片中的標籤、臉孔以及地標的 Cloud Vision API,還有將聲音轉成文字稿的 Cloud Speech API,翻譯文字內容的 Cloud Translation API,以及分類文字內容的 Cloud Natural Language API

跟著它的步驟做,每一個課程約半小時就能做完,需要打的程式幾乎沒有,就算不會寫程式,也能體驗一番,且多數是系統指令。那我們開始吧。

圖片分析 Cloud Vision API


首先,選擇課程後,點擊右上角的 join,確認有預訂課程後,就能看到內容。

之後開啟 Google Console,接下來,幾乎所有機器學習的操作都會在這裡。

最上方可以建立不同的專案,右上角有個 Cloud Shell,是 Linux 作業環境,支援主流的後端語言,啟動後,右上方有一枝筆,可以打開網頁版 IDE 進行操作。

有幾個指令可以做測試:

1. 顯示帳戶

gcloud auth list

2. 顯示專案名稱

gcloud config list project 接下來,為了要啟用 API,需要先建立憑證(Credentials),接著將它複製,建立環境變數:

export API_KEY=YOUR_API_KEY

請自行將 YOUR_API_KEY 取代成自己的。

接下來,我們要建立容器(Bucket),用來存取靜態資料,有點像是 firebase 裡的 storage,或是 AWS 的 S3。請從左欄開啟 Storage,並點選建立容器並取名。

容器(Bucket)

接著,你可以上傳任意一張圖片進行分析,上傳完畢後,要讓它可以對外存取,所以右側開啟權限 Permissions,並新增項目(Add Item),輸入:

Entity: Group
Name: allUsers
Access: Reader

輸入完畢後,打開編輯器,建立 request.json:


{
  "requests": [
      {
        "image": {
          "source": {
              "gcsImageUri": "gs://my-bucket-name/donuts.png"
          }
        },
        "features": [
          {
            "type": "LABEL_DETECTION",
            "maxResults": 10
          }
        ]
      }
  ]
}


request.json

儲存後,運行 API:

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

就會看到圖片的分析結果。

圖片分析結果。左側是結果,右側是測試圖片。

如果是輸入:


{
  "requests": [
      {
        "image": {
          "source": {
              "gcsImageUri": "gs://my-bucket-name/donuts.png"
          }
        },
        "features": [
          {
            "type": "WEB_DETECTION",
            "maxResults": 10
          }
        ]
      }
  ]
}


運行 API:

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

會看到 Google 從圖片搜尋中,找到的相似圖片。

相似圖片分析結果。左側是結果,右側是測試圖片。

最後還有特徵辨識:



{
  "requests": [
      {
        "image": {
          "source": {
              "gcsImageUri": "gs://my-bucket-name/selfie.png"
          }
        },
        "features": [
          {
            "type": "FACE_DETECTION"
          },
          {
            "type": "LANDMARK_DETECTION"
          }
        ]
      }
  ]
}


運行 API:

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

會回傳臉部特徵的 X、Y 軸:



{
      "faceAnnotations": [
        {
          "boundingPoly": {
            "vertices": [
              {
                "x": 669,
                "y": 324
              },
              ...
            ]
          },
          "fdBoundingPoly": {
            ...
          },
          "landmarks": [
            {
              "type": "LEFT_EYE",
              "position": {
                "x": 692.05646,
                "y": 372.95868,
                "z": -0.00025268539
              }
            },
            ...
          ],
          "rollAngle": 0.21619819,
          "panAngle": -23.027969,
          "tiltAngle": -1.5531756,
          "detectionConfidence": 0.72354823,
          "landmarkingConfidence": 0.20047489,
          "joyLikelihood": "POSSIBLE",
          "sorrowLikelihood": "VERY_UNLIKELY",
          "angerLikelihood": "VERY_UNLIKELY",
          "surpriseLikelihood": "VERY_UNLIKELY",
          "underExposedLikelihood": "VERY_UNLIKELY",
          "blurredLikelihood": "VERY_UNLIKELY",
          "headwearLikelihood": "VERY_LIKELY"
        }
        ...
     }
}


其他的測試,我就沒有截圖,但跑的流程相似。




閱讀量




聯絡與合作


訂閱電子報,領「我當前 10+ 以上收入源有哪些」一文。

有文字採訪、網站開發,或是諮詢需求,皆可至個人網站參考作品,並聯繫 IG

或是想分享心情、聊聊天、交朋友,可以來秘密通道找我唷。

Email: frank@siddharam.com