微軟認知服務 Computer Vision
在這一篇中將大致介紹Compute Vision這個類別提供的功能,以及如何在應用程序中使用這些功能。
Compute Vision 功能
在入門篇中提到微軟認知服務通過五個大類來提供服務。其中Vision是五大類之一,用於分析圖像和視頻。到我寫這篇博文爲止, vision之下有這幾個大類別
(截圖來自 https://docs.microsoft.com/en-us/azure/cognitive-services/):
Compute Vision 以Azure 服務的形式爲以上列舉的功能提供圖像處理的高級算法。開發者訂閱該服務後,可以通過REST API或者SDK的方式來調用這些服務,以達到輕鬆管理圖像,分析圖像的功能。
Compute Vision可以分析符合以下要求的圖像:
圖像必須以 JPEG、PNG、GIF 或 BMP 格式顯示
圖像的文件大小必須不到 4 兆字節 (MB)
圖像的尺寸必須大於 50 x 50 像素
對於讀取 API,圖像的尺寸必須介於 50 x 50 和 10000 x 10000 像素之間。
通過分析圖像檢測其視覺特徵
這一塊包含非常多的內容,具體可以參考這裏的介紹
https://docs.microsoft.com/en-us/azure/cognitive-services/computer-vision/home
https://docs.microsoft.com/zh-cn/azure/cognitive-services/computer-vision/home
簡單來講,可以檢測和識別圖像的中包含的物件包括人臉識別,品牌log識別,生成定製的縮略圖,檢測圖像屬性如是否爲線框(素描)/剪貼圖,主題顏色, 基於父/子繼承的標識分類描述(微軟定義了86個標識來描述一些分類,86個標識定義在此 https://docs.microsoft.com/zh-cn/azure/cognitive-services/computer-vision/category-taxonomy)。
此外,還有使用自然語言描述圖像內容(在通過REST API章節中提供示例 )。
從圖像中提取文本
在含有文字的圖片中提取出計算機可識別的字符流(支持25種語言),對於英語和西班牙語還支持手寫文本圖片,並達到比較高的準確率。
管理圖像的內容
檢測圖像中的成人內容,並返回不同分類的置信度分數。 且通過API提供的閥值設置項,可以根據需要返回檢測內容。
如何使用
Compute Vision API提供各種編程語言的SDK, 比如JavaScript, C#, Java和Python。
同所有azure資源一樣,使用一個資源總是從定閱開始。如果之前定閱過cognitive service的話,那麼對於這個service也可以使用之前cognitive service的定閱Key。如果沒有,請參考以下定閱步驟。
定閱compute vision,獲得使用的Key
打開https://portal.azure.com/, 進入以下頁面(無法進入該頁面的,請參考入門篇),在搜索框中輸入custom vision, 如下
選中 “compute vision”,進入以下頁面
點擊create,進入以下頁面
點擊下面的藍色按鈕後,進入初始化頁面,初始化結束後,
點擊 “Go to resource”進入, 在quick start tab 頁可以看到該資源服務的使用key
API console及testing console
點擊 API console,可以看到compute vision服務提供的所有 API。
前面截圖中提到過,POST API 的內容包含Location信息,在該頁面根據創建定閱的信息時選擇的location來選擇對應的選項可以進入API測試平臺。
進入測試控制檯後,在Ocp-Apim-Subscription-Key 右邊輸入創建定閱所得的Key
在visualFeatures 右邊的下拉框中選擇需要分析的參數,就能快速得到request API 如下
如果在Input requirements下輸入一張有效合法的圖片鏈接,點擊”send”button,便能在Response content看到圖像分析的結果。
通過REST API 調用 Compute Vision Service
構建request:
Rest API是基於URL工作的。可以參考cURL(http://www.ruanyifeng.com/blog/2019/09/curl-reference.html) 的工作方式來探討 URL的形式和組成。
一般cURL的請求會有:URL,Header ,“{body}“
compute vison REST API中URL是這樣的:
紅色部分爲參數,根據需要分析的內容而改變。
compute vison REST API中headers:
一般包括兩個,一是用來指定Ocp-Apim-Subscription-Key,一個用來指定content-Type, 如,json, octet-stream等。
compute vison REST API中{body}:
指需要上傳的圖片數據,可以用能夠訪問到圖片的url,也可以使用byte 流。
基於以上分析,在c#中可以通過以下程序構建圖像分析請求
完整代碼提供在此, https://download.csdn.net/download/mochounv/12309700
需要替換自己的key和Location api.
通過SDK本地調用 Compute Vision Service
在程序中使用compute vision SDK,需要使用創建定閱時的KEY和EndPoint (前面REST API 使用的是Location_API).
在.net中應用程序中(.netcore和.Net Framework.sdk 都可以)通過NUGET 添加Microsoft.Azure.CognitiveServices.Vision.ComputerVision 作爲reference, 就可以使用service中的API.
在這個SDK中主要的API對象有:
ComputerVisionClient, 是所有compute vision功能的入口,通過定閱信息進行初始化。
ComputerVisionClientExtensions, 包含每一個具體功能的API,比如以下將舉的例子文本識別,
就使用該extentsion 中的API RecognizeTextInStreamAsync。
可能因爲該服務的功能是不斷髮展變化的,所以微軟將功能都放在這樣的一個extensions中,以滿足後續的不斷擴展。
以下例子就通過以上SDK API實現文本識別
- 創建ComputeVisionClient 對象
protected static ApiKeyServiceClientCredentials Credentials
{
get
{
return new ApiKeyServiceClientCredentials(API_Key);
}
}
var client = new ComputerVisionClient(Credentials) { Endpoint = Endpoint }
2 調用文本識別API
3 得到分析結果
作爲輸入的文本圖片:
分析的結果效果
完整的程序代碼在此https://download.csdn.net/download/mochounv/12309704,
需要替換自己的key 和endpoint
使用OCR API時,需要注意以下限制:
模糊的圖片;手寫的或者草書,藝術字體,小號字,複雜的背景,陰影,模糊或扭曲等問題。
同時作爲分析的圖片也有以下要求:
尺寸 >=40*40 and <= 3200*3200 pixel
總像素不太於10 M
存儲不大於4M
必須爲JPEG, PNG,GIF,BMP
其它參考資料
https://docs.microsoft.com/en-us/azure/cognitive-services/computer-vision/