Serverless 架构应用 —— 图像识别红绿繁忙路口交通灯检测

· 约 8 分钟读完

随着人工智能和云计算技术的不断发展,Serverless 架构应用越来越受到开发者们的青睐。在传统的应用架构中,常常需要维护服务器和应用程序的部署和管理,而这些工作往往是耗费时间和成本的。而 Serverless 架构则摆脱了这些繁琐的工作,使开发者能够更专注于业务逻辑的开发。

本文将介绍一种在 Serverless 架构下实现图像识别红绿繁忙路口交通灯检测的方法。该方法基于云计算服务提供商 AWS 的 Lambda 和 Rekognition,实现了对路口交通灯状态的实时检测和推送。本文将详细讲解该方法的实现过程,并提供示例代码和指导意义。

实现方法

1. 上传图片到 S3 Bucket

首先,我们需要将待检测的图片上传到 AWS 的 S3 存储桶中,以供后续处理。使用 AWS 的 S3 服务有多种方式,可以通过 AWS 的控制台、CLI 或 SDK 进行。在这里,我们使用 AWS 的 Node.js SDK 进行操作:

其中,fileName 和 fileContent 是事件传入的参数,分别表示上传到 S3 的文件名和文件内容的 base64 编码格式。putObject 方法将文件的内容和元数据存储到指定的 S3 存储桶中。

2. 更改交通灯状态

接下来,我们使用 AWS 的 Rekognition 服务进行图像识别,检测交通灯的状态。Rekognition 服务提供了丰富的图像和视频分析功能,包括对象和场景识别、面部分析和情感分析等。

我们以交通灯检测为例,使用 detectLabels 方法检测图片中是否包含交通灯,以及交通灯的状态。如果检测到红灯,则向指定的 SNS 主题发送通知,以及更改交通灯的状态。同样,使用 AWS 的 Node.js SDK 来实现:

在上述代码中,detectLabels 方法将传入的图片进行分析、识别,并返回包含图像中物体或场景的标签数组。如果发现图片中包含交通灯,则通过结果中的 Traffic Light 标签找到交通灯实例,进而确定交通灯的颜色。接着,向指定的 SNS 主题发送通知,以及将相应的交通灯状态存储在 DynamoDB 数据库中进行更改。

需要注意的是,上述代码中的 TopicArn 和 TableName 都需要进行替换,分别表示 SNS 主题的 ARN 和 DynamoDB 表的名称。在使用前,需要先创建对应的 SNS 主题和 DynamoDB 表。

3. 触发函数执行

最后,我们使用 AWS 的 API Gateway 和 Lambda,将上述两个 Lambda 函数连接起来,形成完整的应用。API Gateway 是一种完全托管的服务,可以使开发者能够轻松地创建、部署、维护和监控 RESTful API。而 Lambda 是一种完全托管的服务,可以让开发者在云端运行代码,无需关注服务器的配置和管理。

我们创建一个 POST API,将上传的图片和交通灯状态变更请求传递给对应的 Lambda 函数进行处理。以下是 API Gateway 的配置和示例代码:

在上述代码中,我们使用 AWS 的 Node.js SDK 调用了另外两个 Lambda 函数:uploadToS3 和 detectTrafficLight。其中,payload 是上传至 S3 存储桶的文件名和内容。调用 Lambda 函数时,需要指定函数名称和参数。invoke 方法可以对 Lambda 函数进行同步调用,返回结果,也可以进行异步调用,无需等待结果。

到这里,我们已经完成了整个应用的构建。当上传一张包含交通灯的图片时,会自动触发两个 Lambda 函数的执行,对图片进行上传、图像识别,并通过 SNS 通知和 DynamoDB 更改交通灯的状态。

示例代码

完整的示例代码可以在 GitHub 上找到。

指导意义

通过以上示例,我们可以看到 Serverless 架构的优点:开发者只需要关注业务逻辑的开发,无需关注服务器的配置和管理。特别是在大量的数据存储和处理的场景下,Serverless 架构可以提供更高效、更灵活和更经济的方式来应对不断增长的业务需求。

除了 AWS,还有其他云计算服务提供商如阿里云、华为云、腾讯云和 Google Cloud Platform 等也提供类似的 Serverless 架构服务,开发者可以根据具体需求进行选择。

深入学习 Serverless 技术,可以参考 AWS Serverless Workshop 等资料。

来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/67d6c365a941bf7134ca27af