本文是#25DaysOfServerless的一部分。 整个12月,Microsoft Cloud Advocates每天都会发布新的挑战。 查找有关Microsoft Azure如何启用无服务器功能的更多信息。
有想法或解决方案吗? 在Twitter上分享您的想法!
您是否要允许您的应用看到,听到,听,说甚至开始推理? 别担心! 您不需要拥有机器学习的学位。 如今,您可以选择不同的AI服务。 其中之一是Azure认知服务 ,可以作为API,SDK和服务使用。 它们帮助开发人员构建智能应用程序。 认知服务被分组。 每个组支持不同的广义预测功能。 Computer Vision是用于选择处理和分析图像的服务。
通过使用Computer Vision API,可以分析和描述图像,检测对象,识别文本等。 您可以将图像上传到服务,也可以传递图像URL。
在此博客文章中,我想通过解决#25DaysOfServerless挑战之一来演示Cognitive Services API的用法。
费利克斯(Felix)在德国慕尼黑很高兴能去传统的Weihnachtsmarkt假日市场! 他不断向他的朋友安娜发送短信,告知他正在做的所有有趣的事情:喝热的格鲁芬(Glühwein),溜冰,买礼物。 但是安娜找不到眼镜,也看不清图片中的东西!
对于今天的挑战,安娜需要一种服务,该服务可以给定图像,描述图像并提供有关其内容的一些关键字。
为了解决第15个挑战,我们需要:
- 随机查找图像或使用图像API通过关键字查找图像。
- 处理和分析给定的图像以给出给定图片的匹配描述。
- (可选)显示带有标题和关键字的图像。
作者的解决方案🔥
这个挑战可以看作是挑战7的延续。可以随意扩展自己的解决方案,也可以使用以Java编写的作者的解决方案 。
我们将使用认知服务并集成计算机视觉来计算图像的描述和标签。 因此,进入门户
并搜索“ 计算机视觉” 。
免费的Tier允许您每分钟执行20个呼叫或每月执行5000个呼叫。 这远远超出了我们应对挑战所需要的。
您需要的只是Key1和您的API端点,您可以在门户网站的Quick start
入门中找到它们。
在源代码中,我们所需要做的就是对生成的密钥进行身份验证,然后让API正常工作。 因此,请考虑对特定用例感兴趣的VisualFeatureTypes
,因为我们希望将其保持为VisualFeatureTypes
kiss 。 对于这个挑战,我们只需要描述和标签,说明您可以在通过的图像上看到的内容。 要接收图像分析,请致电Computer Vision服务。
// Get environment variables and authenticate with computer vision
String CV_KEY = System . getenv ( "COMPUTER_VISION_SUBSCRIPTION_KEY" );
String CV_API = System . getenv ( "COMPUTER_VISION_ENDPOINT" );
ComputerVisionClient compVisClient = ComputerVisionManager . authenticate ( CV_KEY )
. withEndpoint ( CV_API );
// This list defines the features to be extracted from the image.
List < VisualFeatureTypes > extractDescriptionAndTags = new ArrayList <>();
extractDescriptionAndTags . add ( VisualFeatureTypes . DESCRIPTION );
extractDescriptionAndTags . add ( VisualFeatureTypes . TAGS );
// Call the Computer Vision service and tell it to analyze the loaded image.
ImageAnalysis analysis = compVisClient . computerVision (). analyzeImage (). withUrl ( imageUrl )
. withVisualFeatures ( extractDescriptionAndTags ). execute ();
提提您:我们将获得的不仅是标题和说明,还包括匹配的置信度值。 对于需要确实确定地知道随机图像是否显示(例如,圣诞树)的情况,这可能非常有用。
对于这一挑战,我们将仅在控制台中打印带有置信度值的结果,以满足开发人员的好奇心。
// Display image captions and confidence values.
System . out . println ( "\nCaptions: " );
String captionString = "" ;
for ( ImageCaption caption : analysis . description (). captions ()) {
captionString = caption . text ();
System . out . printf ( "\'%s\' with confidence %f\n" , caption . text (), caption . confidence ());
}
// Display image tags and confidence values.
System . out . println ( "\nTags: " );
StringBuilder keywords = new StringBuilder ();
for ( ImageTag tag : analysis . tags ()) {
keywords . append ( tag . name ());
keywords . append ( " " );
System . out . printf ( "\'%s\' with confidence %f\n" , tag . name (), tag . confidence ());
}
最后,我们返回带有匹配标题和关键字的图像以完成挑战。 ✨
return request . createResponseBuilder ( HttpStatus . OK ). body ( String . format ( "Search for image with keywords:%s. You can see on this picture: %s. With the keywords %s. Got url: %s" , resultText , captionString , keywords , imageUrl )). build ();
结论
我们了解了什么是认知服务,并特别关注了图像的人工理解。
因此,我们看到了一个如何使用计算机视觉服务的示例。
- 注册您的服务以接收您的API密钥。
- 创建要提取的视觉特征类型的列表。
- 分析图像。 👤
想要提交解决方案来应对这一挑战吗? 在本地构建解决方案,然后提交问题 。 如果您的解决方案不涉及代码,则可以录制一个简短的视频并将其作为问题说明中的链接提交。 确保告诉我们解决方案的挑战。 我们很高兴看到您的建造! 您有意见或问题吗? 将它们添加到下面的评论区域。
在庆祝无服务器25天的同时,在12月期间观察所有惊喜。 在我们关注挑战和解决方案的同时,请继续关注dev.to! 在Azure上注册一个免费帐户以准备应对挑战!