65.9K
CodeProject 正在变化。 阅读更多。
Home

Azure 上的 Java:利用云原生服务

starIconstarIconstarIconstarIconstarIcon

5.00/5 (1投票)

2021 年 5 月 7 日

CPOL

4分钟阅读

viewsIcon

2972

在本系列的下一部分中,我们将探讨 Azure 认知服务以及我们如何使用现有的云原生服务。

使用云服务,您可以在构建解决方案时轻松外包功能并专注于您的核心竞争力。与其开发新的复杂功能,不如利用已经存在且经过广泛使用和测试的服务。

Azure 提供了 AI 服务,您可以快速将其集成到您的应用程序中。自行开发此功能可能需要大量的精力,包括收集测试和训练机器学习解决方案所需的数据。我们将浏览可用的功能,并展示如何将其添加到应用程序中。

Azure 认知服务 拥有视觉、语音、语言和决策等类别的 API。对于我们的应用程序,我们使用视觉服务。视觉类别有助于识别人物的面部表情和情绪表达。它可以识别图像中的物体和文本,并对视频进行索引。此服务的功能超出了本文的描述。您可以在 Azure 认知服务站点的 功能 区域中浏览这些功能并在线测试它们。

对于示例应用程序,我们使用计算机视觉服务为货运添加描述性信息。该应用程序向 Azure 视觉服务提供图片。如果有人用图片运送包裹,那么计算机视觉服务会使用在图片中检测到的物体作为包裹的默认描述。通过自动添加基于图片的文本,货运记录可以基于描述进行搜索,即使发货人没有输入描述也是如此。

创建视觉资源

要使用计算机视觉服务,请登录 Azure 门户并创建一个计算机视觉资源。要创建资源,请在搜索框中键入“认知服务”,然后从结果中选择它。选择 +创建 以打开 Azure 市场。键入“计算机视觉”。计算机视觉资源会显示在结果中。选择结果和创建它的选项。要测试该功能,请选择“免费 F0”定价层。

在您选择了定价层和资源组后,继续创建资源。稍后,资源将变为可用。当您查看资源时,请注意它显示了一个端点和一个用于查看其密钥的链接。您稍后将需要此信息。

将视觉库添加到您的项目

计算机视觉服务使用 REST API。该服务不特定于任何平台,但有特定于平台的客户端访问库。您可以在 此处 找到最新版本的视觉库。

如果我们选择要使用的版本,我们可以看到要添加到项目的依赖项。选择 Maven 依赖项的复制图标,然后将依赖项声明粘贴到项目的 pom.xml 文件中。

发出视觉识别请求

您需要一些代码导入才能使用该库。

  import com.microsoft.azure.cognitiveservices.vision.computervision.*;
  import com.microsoft.azure.cognitiveservices.vision.computervision.implementation.
  ComputerVisionImpl;
  import com.microsoft.azure.cognitiveservices.vision.computervision.models.*;

创建计算机视觉客户端的实例。您将需要您的订阅密钥和端点。此信息位于 Azure 门户中您的视觉资源的页面上。

  ComputerVisionClient client =
  ComputerVisionManager.authenticate(subscriptionKey).withEndpoint(endpoint);

我们还需要一个您想要从图像中提取的特征列表。有几个 信息类别 可以提取。但对于我们的应用程序,我们不需要所有这些。我们只需要 DESCRIPTION 类别。其他类别在此处显示,仅用于演示目的。

List<VisualFeatureTypes> featureList = new ArrayList<>();
  featureList.add(VisualFeatureTypes.DESCRIPTION);
  featureList.add(VisualFeatureTypes.CATEGORIES);
  featureList.add(VisualFeatureTypes.TAGS);
  featureList.add(VisualFeatureTypes.OBJECTS);

特征列表和构成图像的字节必须传递给计算机视觉客户端。它返回一个 ImageAnalysis 对象。

  byte[] imageBytes = Files.readAllBytes(rawImage.toPath());
 ImageAnalysis analysis = compVisClient.computerVision().
   analyzeImageInStream().
   withImage(imageBytes).
   withVisualFeatures(featureList).
   execute();

分析对象包含图像的描述性单词列表。应用程序将此文本添加到以空格分隔的列表中。

  StringBuilder descriptionWords = new StringBuilder();
  for (ImageCaption caption : analysis.description().captions()) {
	String description = String.format("%s ", caption.text())	
  }
  String completeDescription = descriptionWords.toString();

以下是一些图像的样本以及视觉服务返回的描述响应。

“一个视频游戏控制器”
“一个黑色和橙色的相机”

现在,当我们向系统提供图像时,我们会收到描述图像内容的文本,这些文本附加到包裹描述中。从图像中,我们获得可搜索的文本。如果我们独立构建此功能而不使用服务,可能需要花费我们数百小时的精力。

结论

恭喜,您已经在 Azure 上构建了您的第一个云原生 Java 应用程序!这仅仅是您旅程的开始。要了解有关 Azure 认知服务可以为您做什么的更多信息,请访问 Azure 认知服务网站。您可以快速将这些服务集成到程序中并免费试用它们。要了解有关构建利用 Azure 服务的 Java 微服务的更多信息,请查看关于 Azure 和 Kubernetes 服务的 免费电子书合集

© . All rights reserved.