从图像中收集信息的能力具有巨大的商业潜力。而且,它也很有趣。在本文中,我将概述我们如何使用
简而言之,图像对象检测是检测和提取给定图像中实体信息的过程。这涉及检测物体、活动、地点、动物、产品等。
图像对象检测在各行各业都有广泛的应用。银行、保险、社交媒体、约会应用、新闻机构和金融科技等主要行业都以某种形式使用对象检测。
最近,我们接到了为一家社交媒体初创公司构建图像对象检测功能的任务。用例很简单 - 用户应该能够选择一些他们最喜欢的照片并提交它们以在该初创公司的社交媒体页面上展示。
社交媒体营销团队需要一种方法来搜索特定主题的图片提交,例如海洋、热门地标、动物、音乐会等照片。
分析图像并根据图像中的场景和物体对其进行分类并非易事。人类的视力非常了不起,而构建一个能够复制大脑检测物体能力的应用程序非常复杂。整个计算机视觉行业都致力于此。
从头开始执行对象检测通常是一个多步骤的过程,涉及:
与项目中的所有其他功能一样,我们对此功能的目标是快速构建它并尽快在生产环境中测试其效果。此外,当我们可以利用现有的云服务时,我们不想投入开发资源从头开始构建解决方案。
Cue Serverless — 这家初创公司的整个后端完全是无服务器的,并且由事件驱动。通过这种架构,我们能够让开发团队只需专注于使社交媒体应用与其他应用区分开来的功能。无服务器还使我们能够构建高度可扩展的服务,同时只需为我们使用的内容付费 — 对于一家扩展型初创公司来说,这是一个重要的考虑因素。
因此,为了实现此功能,我们使用了 Amazon Rekognition — 一项完全无服务器的图像和视频分析服务。使用 Rekognition,我们能够在几个小时内开发出这个复杂而关键的工作流程。让我们深入研究一下。
Amazon Rekognition 是一款 AWS 无服务器产品,它使用深度学习来执行图像和视频分析。完全无服务器意味着使用 Rekognition 我们无需担心底层基础设施的复杂性;我们只需按使用量付费,它为我们提供用于图像和视频分析任务的预编写软件。Rekognition 提供一系列功能,包括图像标签检测、人脸检测、名人检测、内容审核和文本检测。
最好的部分是什么?Rekognition 简化了构建、训练和分析深度学习模型的繁重工作。图像和视频分析快速而简单,只需进行最少的设置。我们无需担心构建和训练我们自己的数据集以及配置服务器容量以便扩展我们的服务。我们需要担心的只是集成。
架构很简单。我们的移动应用程序将用户手机中的图像上传到 S3 存储桶。上传到 S3 会触发 Lambda 函数,该函数又会调用 Rekognition API 并将结果存储在 DynamoDB 中以供查询。
使用 AWS 的无服务器图像对象检测架构图
编写代码很有趣,对吧?好吧,编写更少的代码会更有趣。
Rekognition 公开了一组 API,您可以将图像数据发送到这些 API 来执行分析并返回结果。对于我们的用例,我们使用了
我们的无服务器框架基础设施即代码文件的简化版本如下所示:
//serverless.yamlfunctions: imageLabelDetection: handler: image-label-detection.handler events: - s3: bucket: my-image-bucket event: s3:ObjectCreated:* existing: true iamRoleStatements: - Effect: Allow Action: rekognition:DetectLabels Resource: "*" - Effect: Allow Action: s3:GetObject Resource: arn:aws:s3:::my-image-bucket
我们的 Lambda 代码只是调用 Rekognition API 并将结果存储在 DynamoDB 中,但您可以使用任何适合您用例的方法。我们从 S3 事件中获取 S3 存储桶名称和图像的对象名称,并将它们传递给
我们还传入了两个可选参数(MaxLabels 和 MinConfidence),以指定置信度阈值和我们希望返回的最大标签数量。在下面的示例中,我们将在响应中最多获得 20 个标签,并且所有标签的置信度都将超过 80%。
//image-label-detecion.jsconst AWS = require("aws-sdk");const rekognition = new AWS.Rekognition();exports.handler = async (event) => { const imageDetails = event.Records[0].s3; const bucketName = imageDetails.bucket.name; const objectKey = imageDetails.object.key; const rekognitionResp = await rekognition .detectLabels({ Image: { S3Object: { Bucket: bucketName, Name: objectKey, }, }, MaxLabels: 20, MinConfidence: 80, }) .promise(); // Send to data store, eg DynamoDB // ... };
谁不喜欢狗的照片?下面是我们上传到 S3 存储桶的图像的响应。如您所见,Rekognition 正确地确定这是一张户外碎石路上的狗的图像(并告诉我们狗在图像中的哪个位置!)。
Rekognition 响应(左),上传的图像(右)。
那么,在生产中使用 Rekognition 几个月后,我的想法是什么?以下是一些关键要点:
TLDR:Rekognition 使我们能够快速构建准确、快速且可扩展的图像对象检测功能。