動手做 Custom Vision 並用 Python 進行圖片辨識
暨六月份與 Eric ShangKuan大大直播完運用 Azure Custom Vision 輕鬆開發智慧視覺應用程式 (最下面有影片)後,去翻了文件直接動手試試看。
微軟認知服務 Cognitive Services 推出至今,以 API 形式提供給開發者全方面AI 相關的服務,包含辨識、語音、語言、知識、搜尋與實驗室,API 提供高達 35 種項目,一覽表如下。
此外,五月的 Microsoft Build 2018 對於自訂視覺服務(Custom Vision)進一步新增 Object Detection,不僅是訓練認出物件,更可以抓出此物品在照片中的位置,提供強大的平台讓沒有專業機器學習背景的朋友只要透過上傳與標記就可以無痛訓練模型,創造屬於自己的 AI 辨識系統。
這篇文章會簡單展示如何自訂模型,以漢堡與 Pizza 為例並利用 Python 程式丟圖片去做簡單的訓練判別。
需準備:
- 微軟帳號 (Gmail、Outlook and Hotmail 都可以認證喔),這裡申請。
開啟 Custom Vision 網址 >>https://customvision.ai/
點選下方的登入,登入微軟帳號。
點選 New Project 依序輸入
1. Project Name / Description
2. Project Types 這邊我選 Classification ,因為是要 Tag 照片是哪種物件。
3. Classification Type 這次選 Multiclass 因為照片裡單只有一個物件 。
4. Domain 選 Food,有合適的 Domain 應該能優化辨識(?!
>請參考 Domain 官方文件說明點這裡。
點選 Add Imagine 丟圖片進行標記與訓練,先前只需要 5 張圖片即可訓練,但這次嘗試必須至少 15 張才能開始 Training, 可吃 .JPG, .PNG, .BMP 每張最大 6 MB。
上傳事先載好的 15 張圖片並標記,訓練模型必須要有兩個 Tag,要讓系統能夠知道你要辨識的是 A 或 B 的機率各為多少,因此上傳圖片的步驟要做 2 次並 Tag 2 種不同標籤。
點選右上方的 Train 之後即可訓練。
- Precision 表示你預測為正的樣本中多少被預測中了,換句話說,你給出的結果多少是正確的。
- Recall 表示真實標籤為正的樣本有多少被預測中了,換句話說,正確的結果有多少被你給出了。
左手邊可以手動調整 Threshold ,Precision 與 Recall 會隨之變動。
訓練完成後可以快速 Test Model 成效,在 Train 的旁邊有的一個 Quick Test 的按鈕,即可上傳圖片進行測試,可以抓 Local 端的圖片也可以抓 URL。
請注意不要上傳原本拿來訓練的圖片唷。
訓練出來的 Model 可與其他服務做串接,以下範例用 Python 來做簡單展示在本機端辨識圖片,我是把程式放在 VS Code 再用指令去看結果,以下說明各種 Key 應該要去哪邊拿。
需安裝:
- Python 2.7 or Python 3.5 >>https://www.python.org/downloads/
- Visual Studio Code >>https://code.visualstudio.com/
在本機執行指令前要先確認環境是否安裝完整。
開啟 PowerShell 安裝 Custom Vision Service SDK,輸入以下指令。
pip install azure-cognitiveservices-vision-customvision
再打開編輯器使用以下 Python 語法進行圖片辨識,輸入各項 Key 與 ID 後將語法擺入編輯器後儲存。
第 6 行的 “ Prediction Key ”
predictor = prediction_endpoint.PredictionEndpoint(“key”)
第 9 行 “ Project ID ”
results = predictor.predict_image_url(project.id, iteration.id, url=test_img_url)
分別可以在畫面中右上方的 Setting 齒輪按鈕裡找到這兩組。
“ iteration.id ” 藏在非常神祕的地方....回到 Custom Vision 裡的 Performance,點選 Prediction URL,在圖示中藍色反白的地方,有一串 iterationid = 1xxxxxxx,這串就是囉。
第 8 行這串 URL 就是要辨識的圖片連結,我現在放的是一張 Pizza 的連結。
test_img_url = “https://www.0800076666.com.tw/Files/MenuPizza/27/%E8%98%8B%E6%9E%9C%E8%82%89%E6%A1%82.png"
再次打開 PowerShell, `cd ` 到當初儲存語法的資料夾位置,再輸入 `Python 檔名 ` 指令按 `Enter ` 就會顯示辨識成果囉,再依照使用情境去做串接即可。
(希望下一篇能紀錄將這個模型串到別的服務上.........)
參考資料:
1. Custom Vision API Python tutorial
2. Cognitive Services Documentation
3. YouTube :運用 Azure Custom Vision 輕鬆開發智慧視覺應用程式
每周五歡迎鎖定 Microsoft Taiwan Tech Hub ,13:30–14:00 將努力因應時勢跟大家分享最新的技術消息,歡迎訂閱分享並告訴我你想聽甚麼唷 !