在本文中,我想谈谈使用Custom Vision服务从移动应用程序识别生态标签照片的方法。
CustomVision是Azure基于云的认知服务的一部分。
关于必须研究哪些技术,如何与CustomVision一起使用,它是什么以及它允许实现什么-进一步。

识别生态标签的任务出现在三年前,当时我和我的妻子开始讨论她的组织(生态领域的非政府组织)想要传播有关生态标签信息的移动应用程序。
什么是生态标签?
生态标签是由认证组织签发的证书和相应徽标,用于检查制造商-供应商的产品或服务是否符合与产品服务的生命周期相关的某些标准,并着眼于其环境友好性。 认证后,制造商可以在其产品上贴上生态标签。
同样,生态标签可归因于塑料标记,因为其成分可简化尺寸和加工以及其他类似的标志。
例如,这是一个标志:

识别技术选择过程
该应用程序的两个主要功能应该是搜索具有环保产品的商店和识别生态标签。 如果从技术上说,对于搜索商店而言,一切都相对简单,那么通过识别,它就不是那么简单。 这个词很时髦,但是如何使它不清楚。 我开始研究这个问题。
标记徽标是标准化的,并且是识别的理想对象-他将手机对准了商品包装上的图像,拍了一张照片,应用程序给出了该标记意味着什么以及是否值得信任。
我开始考虑如何进行识别并分析不同的选项-我尝试使用OpenCV的识别算法(Haar级联,SWIFT,模板匹配等),但是识别质量不是很好-在训练数十张图像的情况下,识别质量不超过70% 。
也许在某个地方我误解了某件事并且做了错事,但是我们还请另一个朋友调查这个话题,他还说,在这样的数据集上,Haar级联的最大值是70%。
与此同时,关于各种神经网络框架以及成功使用神经网络解决此类问题的材料也开始越来越多地出现。 但是到处都是,一些令人恐惧的数据集闪烁(每个类数百或数千张图像),我不熟悉Python,TensorFlow,对我的后端的需求-所有这些都有些令人恐惧。
作为.NET开发人员,我查看了Accord.NET,但也没有很快找到适合自己的东西。
这时,我们正忙于完成应用程序的定稿并在产品中启动它,我得到认可推迟了程序。
大约一年前,我遇到了一篇文章,描述了Microsoft的早期预览Custom Vision,这是一种云图像分类服务。 我在3个字符上进行了测试,并喜欢它-一个易于理解的门户网站,您可以在没有技术知识的情况下训练和测试分类器,在10到20秒的时间内训练了100张图像,即使在每个字符30张图像上,分类的质量也超过了90%-需要什么。
我与妻子分享了这一发现,并且我们开始制作该应用程序的国际化版本,该版本不包含有关商品和商店的信息,但是能够识别生态标签。
让我们继续研究正在运行的识别应用程序的技术细节。
定制愿景
CV是Azure认知服务的一部分。 现在它可以正式发行,并且将通过Azure订阅进行支付,尽管它仍列在Preview中。
因此,与任何其他Azure产品一样,CognitiveServices在Azure门户上显示和管理。
CV提供了两种REST API,一种用于培训,一种用于预测。 我将更详细地描述与预测的交互
除了Azure门户和API,CV的用户还可以访问customvision.ai门户,在该门户上可以轻松,清晰地上传图像,在其上标记,您可以查看通过API传递的图像和识别结果。
无需与Azure绑定即可开始使用customvision.ai门户和API-出于测试目的,即使没有Azure订阅也可以创建项目。 但是,如果您想将来从测试项目中创建生产项目,那么最好立即进行,否则我们必须手动复制测试项目中的图片并在生产中重新标记。
为了在Azure中创建项目,您需要在Azure中注册并创建订阅。 这是相对容易的,问题只能出在信用卡数据的输入和验证上-有时会发生这种情况。
注册后,您需要通过Azure门户创建一个ComputerVision实例。

在Azure中创建资源后,它们将在customvision.ai中可用
在门户customvision.ai上,您可以上传图像并对其进行标记-在单个图像上可以有多个标记,但不突出显示区域。 也就是说,图像属于几个类,但是在服务开发的这个阶段,不可能选择图像中的特定片段并将其分配给该类。
标记后,您需要按“训练”按钮来开始训练-70个标签和3000张图像模型的训练持续约30秒。
训练结果存储在Iteration实体中。 实际上,迭代实现版本控制。
每个Iteration可以独立使用-也就是说,您可以创建Iteration,测试结果并将其删除(如果不合适)或将其转换为默认值,然后替换为当前的默认Iteration,然后所有应用程序识别都将来自该Iteration。
一次并分别为所有类以“精确度”和“调用率”( 此处有更多详细信息)的形式显示模型的质量。

带有已上传并通过培训的图像的项目就是这样。

在门户上,您可以使用“快速测试”从磁盘或URL运行图像识别,并通过单个图像进行测试识别。
在“预测”选项卡上,您可以查看所有最新识别的结果-标签百分比直接显示在图片中。

只需单击几下鼠标,即可查看所有识别结果并将其添加到训练集中的功能非常有帮助-任何人都可以在无需任何AI或编程知识的情况下完成此操作。
API使用
Custom Vision Service具有非常简单直观的REST API,用于培训和识别。
我们的应用程序仅使用识别API,我将讨论其使用
这类识别网址:
https://southcentralus.api.cognitive.microsoft.com/customvision/v2.0/Prediction/ {您的项目GUID} /图片
在哪里
southcentralus ** -服务所在的Azure区域的名称。 到目前为止,该服务仅在美国中南部地区可用。 这并不意味着只有在那里您可以使用它! 他只是住在这里-您可以在有互联网的任何地方使用它。
{您的项目GUID} ** -您的项目的标识符。 您可以在门户网站customvision.ai上看到它
为了识别,有必要通过POST发送图像。 您还可以发送可公开访问的图片网址,该服务将自行下载。
此外,您需要将“ Prediction-Key”标头添加到标头,您可以在注册标头中传输将发布的访问键之一,这些标头可以在customvision.ai门户和Azure门户上使用。
结果包含以下字段:
"Predictions":[ {"TagId":"35ac2ad0-e3ef-4e60-b81f-052a1057a1ca","Tag":"dog","Probability":0.102716163}, {"TagId":"28e1a872-3776-434c-8cf0-b612dd1a953c","Tag":"cat","Probability":0.02037274} ]
其中,“概率”表示图像属于指定标签(类)的概率。
在C#中,它看起来像这样
var client = new HttpClient(); client.DefaultRequestHeaders.Add("Prediction-Key", "{Acess key}"); string url = "https://southcentralus.api.cognitive.microsoft.com/customvision/v2.0/Prediction/{Your project GUID}/image"; HttpResponseMessage response; List<RecognitionResult> recognitions = new List<RecognitionResult>(); using (var content = new ByteArrayContent(imageBytes)) { content.Headers.ContentType = new MediaTypeHeaderValue ("application/octet-stream"); response = await client.PostAsync(url, content); if (response.IsSuccessStatusCode) { string strRes = await response.Content.ReadAsStringAsync(); dynamic res = (dynamic) JsonConvert.DeserializeObject(strRes); foreach (var pr in res.predictions) { recognitions.Add( new RecognitionResult() { Tag = pr.tagName, RecognPercent = pr.probability }); } } else { Debug.WriteLine( "Non successful response. " + response.ToString()); } }
如您所见-绝对没有什么复杂的。 所有的魔术都发生在服务端。
该应用程序和一些选定的参数。
该应用程序非常简单,由一系列生态标签,有关什么是生态标签,如何细分以及扫描仪本身的信息组成。
主要部分是用Xamarin.Forms编写的,但扫描仪窗口可与相机配合使用,并且必须作为渲染完成并分别为每个平台实现
应用程序确定正确识别生态标签的级别> = 90%,而几乎所有图像如果或多或少都具有可接受的质量并且图片中没有其他标志,则可以识别。
这个数字是根据经验得出的-我们从80开始,但意识到90减少了误报。 而且它们很多-许多标记是相似的且包含相似的元素,并且配色方案已变为绿色。
例如,这不是以91%的精度正确识别的最高质量的图像

同时,该班级接受了45张图像的培训。
我希望这篇文章对您有所帮助,并能让感兴趣的读者了解新的AI和ML工具。