构建情绪检测应用程序

Posted woshicver

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了构建情绪检测应用程序相关的知识,希望对你有一定的参考价值。

计算机视觉(Computer Vision,CV)可能是一个理论性很强的领域,需要有大量的ML和数学知识来理解为诸如目标检测、人脸识别和目标跟踪等主题提供动力的算法。

如果你在理论上没有经验,或者没有时间构建定制的ML/CV模型,那么AWS Rekognion使你能够通过API调用构建功能强大的CV应用程序。

AWS Rekognion是AWS提供的众多汽车AI服务之一。这些服务是为那些在ML方面没有太多背景知识的开发人员,或者是时间不多的数据科学家提供的,他们可以快速构建功能强大的ML应用程序,或者根据你可能正在开发的自定义模型对性能进行基准测试。

AWS Rekognion是AWS上用于计算机视觉的事实上的自动人工智能服务。如果你对构建自定义模型感兴趣,请查看AWS SageMaker和我关于如何在那里部署自定义TensorFlow模型的文章:https://towardsdatascience.com/training-and-deploying-custom-tensorflow-models-with-aws-sagemaker-72027722ad76。

在本文中,我们将构建一个Streamlight应用程序,该应用程序接受图像并使用Rekognion返回图像中检测到的情感。

注意:对于那些刚接触AWS的人(最好有一些经验来完全理解这篇文章),如果你想继续学习,请确保在下面的链接上创建一个帐户:https://aws.amazon.com/console/。

我还将提供我们将使用的服务列表,以及更深入的定义。如果你已经熟悉这些服务,请跳到代码演示。

目录

  1. AWS服务

  2. 设置Streamlight应用程序

  3. 整合 Rekognition

  4. 代码和结论

AWS服务

AWS Rekognition:AWS主要的汽车AI计算机视觉服务。具有从人脸检测、文本检测到目标跟踪的大量特征。

AWS S3:Amazon的存储服务,我们将使用此服务存储我们的训练数据和模型/信息。

Boto3:AWS软件开发工具包(SDK),用于Python开发人员,可以使用它来处理AWS服务。对于这个用例,我们将使用Boto3与S3访问我们的图像并调用Rekognition。

身份访问和管理(IAM):允许你通过权限和角色管理AWS服务的访问。使用我的代码时,你可能希望通过AWS CLI对用户进行身份验证。如果你需要安装方面的帮助,这里有一篇文章详细介绍了该过程:https://blog.gruntwork.io/authenticating-to-aws-with-the-credentials-file-d16c0fbcbf9e。

设置Streamlight应用程序

在开始处理Rekognition部分之前,我们需要设置web应用程序。

我们希望我们的应用程序能够上传一个文件,然后我们可以在后端使用Rekognion进行处理。

Streamlit有一个整洁的文件上传功能,我们可以在这个用例中使用它。我已经创建了一个样本图像的小目录,我们可以调用它进行分析。

import streamlit as st
import boto3 

# S3 Bucket
s3 = boto3.resource('s3', region_name = 'us-east-1')
inputFile = st.file_uploader("Image for Emotion Detection", type = "jpeg")

# 将文件上传到S3
if inputFile is not None:
    imageFileName = inputFile.name
    S3Name = "streamlit-" + imageFileName
    s3.meta.client.upload_file(f"./TestImages/{imageFileName}", imagesBucket, S3Name)

我们从示例图像目录中捕获该文件。然后,我们使用Boto3与S3协作,将本地图像存储在我们创建的S3 bucket中。

要创建S3 bucket,你可以转到AWS控制台并手动创建,或者如果你有AWS CLI设置,则只需运行AWS mb unique-bucket-name来创建你的bucket。

我们需要S3中的数据,因为Rekognition直接与S3集成用于API调用,因此需要将图像上传到S3的代码。

我们现在有了Streamlight应用程序,可以接受图像并将其推送到S3,以便与Rekognion一起工作。

整合Rekognition

我们现在可以专注于在样本图像上运行情感检测。Rekognition在detect_faces中有一个API调用,它获取输入图像并返回各种参数,例如:年龄范围、性别、睁眼、情绪等。

在本应用程序中,我们将重点关注情绪参数。我们首先需要为Rekognition创建一个boto3客户机,就像我们对S3所做的那样。

rekogClient = boto3.client('rekognition', region_name = 'us-east-1')

我们现在有了客户端,现在可以将适当的数据提供给detect_faces API调用。

# 情绪检测
response = rekogClient.detect_faces(
    Image = {
        'S3Object': {
            'Bucket': imagesBucket,
            'Name': S3Name
        }
    },
    Attributes = ['ALL']
)

现在,我们已经得到了API响应,我们希望解析输出以关注脸部检测到的情绪。下面显示了我们为演示上传的示例图像。

现在,我们解析响应以显示大多数情绪和检测到的所有其他情绪,以及Rekognion在情绪中的信心分数。

st.subheader("Main Emotion Detected")
emotions = response['FaceDetails'][0]['Emotions']
for emotion in emotions:
    confidence = emotion['Confidence']
    if confidence >= 50:
        st.write("Majority Emotion: " + emotion['Type'])
        st.write("Confidence Score: " + str(confidence))



st.subheader("All Emotions Detected")
for emotion in emotions:
    st.write(str(emotion['Type']) + ": " + str(emotion['Confidence']))

现在,如果我们使用streamlit run filename.py运行streamlit应用程序,我们将看到我们的应用程序成功运行。

我们可以看到Rekognition检测到的所有情绪,为了清理UI,你还可以添加一个CV库,如PIL,以显示你正在上传的示例图像或文件。

全部代码和结论

https://github.com/RamVegiraju/MoodDetectionApp

要访问项目的完整代码,请单击上面的链接。

自动人工智能正在迅速扩张,AWS、Azure和GCP等云提供商也在增长,并提供各种尖端服务,如Rekognion,使你能够以简单的方式使用ML为应用程序供电。

Rekognion对于数据科学家和非ML背景的人来说非常有用,可以快速启动并运行计算机视觉应用程序。

☆ END ☆

如果看到这里,说明你喜欢这篇文章,请转发、点赞。微信搜索「uncle_pn」,欢迎添加小编微信「 woshicver」,每日朋友圈更新一篇高质量博文。

扫描二维码添加小编↓

以上是关于构建情绪检测应用程序的主要内容,如果未能解决你的问题,请参考以下文章

如何使用模块化代码片段中的LeakCanary检测内存泄漏?

使用 Pygments 检测代码片段的编程语言

论文泛读181疫情期间的情绪分析和检测

论文泛读181疫情期间的情绪分析和检测

我可以在片段中构建操作栏吗?

论文泛读123跨语言情感检测