文 / 西打藍 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