集結國內外精選文章,掌握最新雲端技術新知與應用
簡介 Google 近期發佈了一個新的雲端機器學習API:Cloud Video Intelligence API。該 API 可用來識別影片中顯示的物體,並以 JSON 格式輸出分析結果: 透過過輸入影片檔案的 GCS URL 與辨識類型,可使用該 API 相對應的識別出影片中的個體、場景變化或是敏感內容標的。其中的辨識類型包含:Label Detection (例如人類、狗或者花之類的物體辨識)、Shot Change Detection (各個場景變化的時段偵測)、 和 Explicit Content Detection (例如成人內容之偵測)。如果想立即體驗一下 Cloud Video Intelligence API 威力的話可以按照下面的 Demo Now 範例流程: 首先,請先選擇想要辨識的影片 GCS URL 連結: 選擇好之後,只要等待約幾分鐘(視實際的影片長度而定),demo 頁面會以不同的 Tab 來顯示出不同辨識類型所整理好之最後結果: 如果你想要在自己的 GCP 環境測試的話,可以繼續閱讀下面章節並按照操作步驟以完成您自己 API 的開通與使用, 不過需要注意的是,目前發佈的 API 版本是屬於 BETA 測試版,所以官方並不保證 API 的向下相容性,所以每次在使用 API 之前都必須再次確認一下目前官方最新的文件與部落格相關資訊。 快速開始使用 API 藉由官方的 Quickstart 文件,我們得以快速的一窺 API 辨識影片的強大威力。該份文件包含了前置作業、API 的使用方式以及實際上在自身帳戶使用 API 的相關情境。 • 安裝 Google Cloud SDK 由於 Cloud Video Intelligence API 使用了 gcloud 命令列工具, 所以事前的準備工作必須要在自己的電腦上安裝 Google Cloud SDK,可以參考安裝說明。或者直接使用官方建議的Cloud Shell,則可直接使用 SDK 毋須再自行安裝。 • 基本的 gcloud 操作 這邊列出幾個常用 gcloud 指令以幫助我們釐清當前的啟用帳號或專案。詳細資料可參考 gcloud 文件或者 gcloud help 以查詢指令用法。 gcloud auth list 列出目前已設定過與目前啟用帳號 gcloud config list 列出目前的啟用帳號與使用專案 啟用 API 服務 第一次使用 API 的時候需要確認有曾經進行過以下事項以啟用您的 API 服務: • 先預設好此 API 要使用在哪一個專案(Project)上,可於 GCP 的資源管理頁面選擇既有專案或新增專案 • 於使用 API 的專案上 啟用帳單 以開啟實際使用的收費帳號 • 啟用 Cloud Video Intelligence API 設定認證資訊 要使用 API 之前,需要透過下列的幾行指令以產生 access token,用以填入 API 請求的Authorization Header 內。執行方式可以用使用本機端的 gcloud 指令或是直接使用 Cloud Shell 並且選擇目標專案。 gcloud iam service-accounts create quickstart gcloud iam service-accounts keys create key.json --iam-account \ quickstart@your-project-id.iam.gserviceaccount.com 這邊的 quickstart 是新增的 service account 應用程式帳戶的名稱,可以另外自行定義。 your-project-id 則是 API 運行專案的 ID,可於專案的詳細資料上查到。另外新產生的 key.json 則會包含 project id、private key 和 client_id 等資訊,也可以用來產生 access token。 gcloud auth activate-service-account --key-file key.json gcloud auth print-access-token 最後一行指令所印出的結果即是 access token ,也就是產生請求時需要放置在 Authorization Header 的一組字串。這邊要特別小心該組 token 不要任意洩漏出去,因為 Google 正是利用這組 token 來當作 API 使用時數的依據與收費計算。 開始使用 API 當 Access Token 準備好之後就可以開始進行我們 API 的實際測試,可以使用下列的幾種工具進行 RESTful API 請求之呼叫: 1. 官方文件使用的 curl 範例 2. GUI 工具進行相同的 API 呼叫,如 Insomnia Cloud Video Intelligence API 的呼叫方式: Step 1. API 呼叫之內容準備:包含輸入影片的 GCS URL 和辨識的類型。這邊我們使用了官方所提供的一則名為 chicago 的影片: gs://cloud-ml-sandbox/video/chicago.mp4,Video Intelligence API 目前只支援使用 Google Cloud Storage 作為辨識影片的內容輸入,影片格式則只支援:MOV, MPEG4, MP4 and AVI 等格式。至於支援的辨識類型則包含: LABEL_DETECTION, SHOT_CHANGE_DETECTION 或 EXPLICIT_CONTENT_DETECTION,詳細資訊可參考 features 章節: { "inputUri":"gs://cloud-ml-sandbox/video/chicago.mp4", "features": [ "LABEL_DETECTION" ] } 這邊的範例以方便操作起見存成 request.json 檔案 Step 2. 使用 curl 執行 videos:annotate API 搭配 Access Token 以發起辨識的 POST 請求,請求的內容即第一步驟所建立的檔案 curl -s -H 'Content-Type: application/json' \ -H 'Authorization: Bearer ACCESS_TOKEN' \ 'https://videointelligence.googleapis.com/v1beta2/videos:annotate' \ -d @request.json Step 3. Video Intelligence API 會針對你發出的請求而執行此次操作並回傳操作的名稱,由於是非同步請求,需要稍待片刻並使用此操作名稱 進行後續的結果查詢: { "name": "us-west1.18358601230245040268" } Step 4. 使用操作名稱進行 operations 之 RESTful GET 請求後: curl -s -H 'Content-Type: application/json' \ -H 'Authorization: Bearer ACCESS_TOKEN' \ 'https://videointelligence.googleapis.com/v1/operations/OPERATION_NAME' Step 5. 拿到最後辨識的結果: { "name": "OPERATION_NAME", "metadata": { "@type": "type.googleapis.com/google.cloud.videointelligence.v1beta2.AnnotateVideoProgress", "annotationProgress": [ { "inputUri": "/cloud-ml-sandbox/video/chicago.mp4", "progressPercent": 100, "startTime": "2017-02-17T22:39:00.333942Z", "updateTime": "2017-02-17T22:39:11.414399Z" } ] }, "done": true, "response": { ... 可以看到影片的處理時間大約是 11 秒左右 (updateTime 減掉 startTime), 此時的 progress percent 為 100,代表已經完成此次的辨識請求。當然如果你偏好 GUI 來操作 RESTful API 的話,可以把上述的五個步驟依樣畫葫蘆填到 GUI 相對應的欄位上,也可得到和上述步驟一樣的結果。 選擇自訂影片進行所有類型的辨識 由於 Cloud Video Intelligence API 只支援針對 Google Storage 上的影片進行辨識與分析,所以首先要啟用 Google Storage 功能並新增 Bucket 以存放自己的自訂影片進而取得該影片的 GCS 協定的 url 連結 Step 1. 新增 Bucket Step 2. 上傳影片至該 Bucket,該影片的 GCS URL 應該是 gs://your-unique-bucket- name/your-file-name (不考慮資料夾的情況) 當所有影片都上傳至 Cloud Storage 並取得相對應的 GCS URL 之後,就可以按照上一章節所描述的步驟來進行我們客製化影片的辨識並取得最後結果: Example 1. 使用 What is Cloud Vision API? 影片進行 LABEl_DETECTION 的辨識結果如下: 首先待辨識影片的長度為2分8秒,檔案大小為 16.6 MB,然後可以從上圖的辨識進度資訊看出 API 處理這個 Label 辨識請求的時間大概需要 14 秒,大約是影片長度的十分之一。 接著是內容辨識的部分,可由截圖的結果看出包含了 segmentLabelAnnotations 與shotLabelAnnotations ,其中前者包含較多針對整體影片的結果(例如 learning 實體),類似影片內容分類(例如 person 分類)。而後者則包含較多不同場景資訊的辨識。這當中的資訊分別包含可能的辨識物體(例如 vehicle 實體)、辨識信心度與相對應的影片時間。 Example 2. 使用相同的 What is Cloud Vision API? 影片進行SHOT_CHANGE_DETECTION 的辨識結果如下: 可由截圖的結果看出大概包含了多少的 shot 變換,每個 shot 的區間分別由 startTimeOffset 與 endTimeoffset 所定義。 Example 3. 使用 格雷的五十道陰影預告 影片進行 EXPLICIT_CONTENT_DETECTION 類型的 API 要求以進行出色情、裸露或是成人內容之辨識,結果如下: 截圖的結果包含了影片時間與其相對應的辨識結果之可能性,大致上 LIKELY 表示可能性高,POSSIBLE 中等,UNLIKELY 可能性低,詳細的辨識結果之可能性可參考:Likelihood。 範例程式 範例程式可參考 samples,裡面包含了 Python、Java 和 Node.js 範例,這邊我們以 Node.js 為例,示範如何使用 Node.js 進行 API 的呼叫: 1. git clone https://github.com/googleapis/nodejs-video-intelligence 2. 安裝 npm 工具 3. 輸入下令指令: cd samples npm install --save @google-cloud/video-intelligence # npm install export GOOGLE_APPLICATION_CREDENTIALS=key.json 其中 npm 相關指令是要安裝所有相依的函式庫,key.json 則是先前新增服務帳戶時所建立的 JSON 格式的 key 檔案,沒有特別指定的話,會因為拿不到合法的 access token 而造成執行時期的認證失敗等相關錯誤訊息。 4. 視需求分別執行下列的 Node.js 程式以進行前一章節所示範過的自訂影片之 label, shot change 或是 explicit content 的辨識與偵測,執行過後會得到和前幾章節一樣的結果: node analyze.js shots gs://cloud-video-intelligence-guide/What_is_Cloud_Vision_A PI.mp4 node analyze.js labels-gcs gs://cloud-video-intelligence-guide/What_is_Cloud_Vis ion_API.mp4 node analyze.js safe-search gs://cloud-video-intelligence-guide/Fifty_Shades_of_ Grey.mp4 費率說明 前 1000 分鐘免費,之後則依據三種不同的辨識類型採取以分計費,其中的 SafeSearch 則是先前章節所提過的 explicit detection。 結論 首先簡單介紹了 Cloud Video Intelligence API 並體驗了一下官方所提供的 Demo Now 頁面。接著我們由官方的 Quickstart 章節快速的示範如何使用 Cloud Video Intelligence RESTful API 進行影片內容的辨識與剖析,這當中包含了啟用 API、gcloud 指令的使用、設定認證資訊與實際辨識官方提供的影片範例與自訂影片,其中的自訂影片部分需要自行整合 Cloud Storage。最後則是介紹了官方提供的 Node.js samples 範例以作為使用 Video Intelligence API 實際撰寫程式的整合和應用。 這一系列的文章介紹並實作了 GCP 機器學習領域的每一項 api。 機器學習 – 相關文章: Machine Learning(一):Cloud Speech API 介紹與實作 Machine Learning(二):Natural Language API 介紹與實作 Machine Learning(三):Translate API 介紹與實作 Machine Learning(四):Cloud Vision API 介紹與實作 Machine Learning 是什麼? 該怎麼應用? 一份來自資深 Googler 的 ML 介紹課程
Google 近期發佈了一個新的雲端機器學習API:Cloud Video Intelligence API。該 API 可用來識別影片中顯示的物體,並以 JSON 格式輸出分析結果:
透過過輸入影片檔案的 GCS URL 與辨識類型,可使用該 API 相對應的識別出影片中的個體、場景變化或是敏感內容標的。其中的辨識類型包含:Label Detection (例如人類、狗或者花之類的物體辨識)、Shot Change Detection (各個場景變化的時段偵測)、 和 Explicit Content Detection (例如成人內容之偵測)。如果想立即體驗一下 Cloud Video Intelligence
API 威力的話可以按照下面的 Demo Now 範例流程: 首先,請先選擇想要辨識的影片 GCS URL 連結:
選擇好之後,只要等待約幾分鐘(視實際的影片長度而定),demo 頁面會以不同的 Tab 來顯示出不同辨識類型所整理好之最後結果:
如果你想要在自己的 GCP 環境測試的話,可以繼續閱讀下面章節並按照操作步驟以完成您自己 API 的開通與使用, 不過需要注意的是,目前發佈的 API 版本是屬於 BETA 測試版,所以官方並不保證 API 的向下相容性,所以每次在使用 API 之前都必須再次確認一下目前官方最新的文件與部落格相關資訊。
藉由官方的 Quickstart 文件,我們得以快速的一窺 API 辨識影片的強大威力。該份文件包含了前置作業、API 的使用方式以及實際上在自身帳戶使用 API 的相關情境。
• 安裝 Google Cloud SDK
由於 Cloud Video Intelligence API 使用了 gcloud 命令列工具, 所以事前的準備工作必須要在自己的電腦上安裝 Google Cloud SDK,可以參考安裝說明。或者直接使用官方建議的Cloud Shell,則可直接使用 SDK 毋須再自行安裝。
• 基本的 gcloud 操作
這邊列出幾個常用 gcloud 指令以幫助我們釐清當前的啟用帳號或專案。詳細資料可參考
gcloud 文件或者 gcloud help 以查詢指令用法。
gcloud auth list
列出目前已設定過與目前啟用帳號
gcloud config list
列出目前的啟用帳號與使用專案
第一次使用 API 的時候需要確認有曾經進行過以下事項以啟用您的 API 服務: • 先預設好此 API 要使用在哪一個專案(Project)上,可於 GCP 的資源管理頁面選擇既有專案或新增專案
• 於使用 API 的專案上 啟用帳單 以開啟實際使用的收費帳號 • 啟用 Cloud Video Intelligence API
要使用 API 之前,需要透過下列的幾行指令以產生 access token,用以填入 API 請求的Authorization Header 內。執行方式可以用使用本機端的 gcloud 指令或是直接使用 Cloud Shell 並且選擇目標專案。
gcloud iam service-accounts create quickstart gcloud iam service-accounts keys create key.json --iam-account \ quickstart@your-project-id.iam.gserviceaccount.com
這邊的 quickstart 是新增的 service account 應用程式帳戶的名稱,可以另外自行定義。 your-project-id 則是 API 運行專案的 ID,可於專案的詳細資料上查到。另外新產生的 key.json 則會包含 project id、private key 和 client_id 等資訊,也可以用來產生 access token。
gcloud auth activate-service-account --key-file key.json gcloud auth print-access-token
最後一行指令所印出的結果即是 access token ,也就是產生請求時需要放置在 Authorization Header 的一組字串。這邊要特別小心該組 token 不要任意洩漏出去,因為 Google 正是利用這組 token 來當作 API 使用時數的依據與收費計算。
當 Access Token 準備好之後就可以開始進行我們 API 的實際測試,可以使用下列的幾種工具進行 RESTful API 請求之呼叫: 1. 官方文件使用的 curl 範例 2. GUI 工具進行相同的 API 呼叫,如 Insomnia
Cloud Video Intelligence API 的呼叫方式:
Step 1. API 呼叫之內容準備:包含輸入影片的 GCS URL 和辨識的類型。這邊我們使用了官方所提供的一則名為 chicago 的影片: gs://cloud-ml-sandbox/video/chicago.mp4,Video Intelligence API 目前只支援使用 Google Cloud Storage 作為辨識影片的內容輸入,影片格式則只支援:MOV, MPEG4, MP4 and AVI 等格式。至於支援的辨識類型則包含: LABEL_DETECTION, SHOT_CHANGE_DETECTION 或
EXPLICIT_CONTENT_DETECTION,詳細資訊可參考 features 章節:
{ "inputUri":"gs://cloud-ml-sandbox/video/chicago.mp4", "features": [ "LABEL_DETECTION" ] }
這邊的範例以方便操作起見存成 request.json 檔案
Step 2. 使用 curl 執行 videos:annotate API 搭配 Access Token 以發起辨識的 POST 請求,請求的內容即第一步驟所建立的檔案
curl -s -H 'Content-Type: application/json' \ -H 'Authorization: Bearer ACCESS_TOKEN' \ 'https://videointelligence.googleapis.com/v1beta2/videos:annotate' \ -d @request.json
Step 3. Video Intelligence API 會針對你發出的請求而執行此次操作並回傳操作的名稱,由於是非同步請求,需要稍待片刻並使用此操作名稱 進行後續的結果查詢:
{ "name": "us-west1.18358601230245040268" }
Step 4. 使用操作名稱進行 operations 之 RESTful GET 請求後:
curl -s -H 'Content-Type: application/json' \ -H 'Authorization: Bearer ACCESS_TOKEN' \ 'https://videointelligence.googleapis.com/v1/operations/OPERATION_NAME'
Step 5. 拿到最後辨識的結果:
{ "name": "OPERATION_NAME", "metadata": { "@type": "type.googleapis.com/google.cloud.videointelligence.v1beta2.AnnotateVideoProgress", "annotationProgress": [ { "inputUri": "/cloud-ml-sandbox/video/chicago.mp4", "progressPercent": 100, "startTime": "2017-02-17T22:39:00.333942Z", "updateTime": "2017-02-17T22:39:11.414399Z" } ] }, "done": true, "response": { ...
可以看到影片的處理時間大約是 11 秒左右 (updateTime 減掉 startTime), 此時的 progress percent 為 100,代表已經完成此次的辨識請求。當然如果你偏好 GUI 來操作 RESTful API 的話,可以把上述的五個步驟依樣畫葫蘆填到 GUI 相對應的欄位上,也可得到和上述步驟一樣的結果。
由於 Cloud Video Intelligence API 只支援針對 Google Storage 上的影片進行辨識與分析,所以首先要啟用 Google Storage 功能並新增 Bucket 以存放自己的自訂影片進而取得該影片的 GCS 協定的 url 連結
Step 1. 新增 Bucket
Step 2. 上傳影片至該 Bucket,該影片的 GCS URL 應該是 gs://your-unique-bucket- name/your-file-name (不考慮資料夾的情況)
當所有影片都上傳至 Cloud Storage 並取得相對應的 GCS URL 之後,就可以按照上一章節所描述的步驟來進行我們客製化影片的辨識並取得最後結果:
Example 1. 使用 What is Cloud Vision API? 影片進行 LABEl_DETECTION 的辨識結果如下: 首先待辨識影片的長度為2分8秒,檔案大小為 16.6 MB,然後可以從上圖的辨識進度資訊看出 API 處理這個 Label 辨識請求的時間大概需要 14 秒,大約是影片長度的十分之一。
接著是內容辨識的部分,可由截圖的結果看出包含了 segmentLabelAnnotations 與shotLabelAnnotations ,其中前者包含較多針對整體影片的結果(例如 learning 實體),類似影片內容分類(例如 person 分類)。而後者則包含較多不同場景資訊的辨識。這當中的資訊分別包含可能的辨識物體(例如 vehicle 實體)、辨識信心度與相對應的影片時間。
Example 2. 使用相同的 What is Cloud Vision API? 影片進行SHOT_CHANGE_DETECTION 的辨識結果如下:
可由截圖的結果看出大概包含了多少的 shot 變換,每個 shot 的區間分別由 startTimeOffset 與 endTimeoffset 所定義。 Example 3. 使用 格雷的五十道陰影預告 影片進行 EXPLICIT_CONTENT_DETECTION 類型的 API 要求以進行出色情、裸露或是成人內容之辨識,結果如下:
截圖的結果包含了影片時間與其相對應的辨識結果之可能性,大致上 LIKELY 表示可能性高,POSSIBLE 中等,UNLIKELY 可能性低,詳細的辨識結果之可能性可參考:Likelihood。
範例程式可參考 samples,裡面包含了 Python、Java 和 Node.js 範例,這邊我們以 Node.js 為例,示範如何使用 Node.js 進行 API 的呼叫: 1. git clone https://github.com/googleapis/nodejs-video-intelligence 2. 安裝 npm 工具 3. 輸入下令指令:
cd samples npm install --save @google-cloud/video-intelligence # npm install export GOOGLE_APPLICATION_CREDENTIALS=key.json
其中 npm 相關指令是要安裝所有相依的函式庫,key.json 則是先前新增服務帳戶時所建立的 JSON 格式的 key 檔案,沒有特別指定的話,會因為拿不到合法的 access token 而造成執行時期的認證失敗等相關錯誤訊息。
4. 視需求分別執行下列的 Node.js 程式以進行前一章節所示範過的自訂影片之 label, shot change 或是 explicit content 的辨識與偵測,執行過後會得到和前幾章節一樣的結果:
node analyze.js shots gs://cloud-video-intelligence-guide/What_is_Cloud_Vision_A PI.mp4 node analyze.js labels-gcs gs://cloud-video-intelligence-guide/What_is_Cloud_Vis ion_API.mp4 node analyze.js safe-search gs://cloud-video-intelligence-guide/Fifty_Shades_of_ Grey.mp4
前 1000 分鐘免費,之後則依據三種不同的辨識類型採取以分計費,其中的 SafeSearch 則是先前章節所提過的 explicit detection。
首先簡單介紹了 Cloud Video Intelligence API 並體驗了一下官方所提供的 Demo Now 頁面。接著我們由官方的 Quickstart 章節快速的示範如何使用 Cloud Video Intelligence RESTful API 進行影片內容的辨識與剖析,這當中包含了啟用 API、gcloud 指令的使用、設定認證資訊與實際辨識官方提供的影片範例與自訂影片,其中的自訂影片部分需要自行整合 Cloud Storage。最後則是介紹了官方提供的 Node.js samples 範例以作為使用 Video Intelligence API 實際撰寫程式的整合和應用。
這一系列的文章介紹並實作了 GCP 機器學習領域的每一項 api。 機器學習 – 相關文章: Machine Learning(一):Cloud Speech API 介紹與實作 Machine Learning(二):Natural Language API 介紹與實作 Machine Learning(三):Translate API 介紹與實作 Machine Learning(四):Cloud Vision API 介紹與實作 Machine Learning 是什麼? 該怎麼應用? 一份來自資深 Googler 的 ML 介紹課程