微软认知服务 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.youkuaiyun.com/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.youkuaiyun.com/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/