写点什么

如何使用 AWS IoT Greengrass 在边缘安装面部识别模型

  • 2019-09-23
  • 本文字数:4186 字

    阅读完需:约 14 分钟

如何使用 AWS IoT Greengrass 在边缘安装面部识别模型

您可能已经了解如何使用 AWS IoT Core 和 AWS IoT Greengrass 进行远程设备通信和控制。通过 AWS IoT Greengrass 机器学习 (ML) 推理,您可以在本地设备上运行机器学习模型,而且不会出现任何传输延迟。在这篇博文中,我将向您展示如何在 Raspberry Pi 上使用 AWS IoT Greengrass ML 推理来执行本地面部识别,以满足家庭监控需求。


通过使用 Amazon Echo Dot(连接到 Alexa Voice Service)作为 Raspberry Pi 摄像头的控制设备,您将能够对门外的人进行拍照,然后根据照片,使用部署到 Raspberry Pi 的预先训练好的 ML 模型执行面部检测并与本地数据集进行对比。虽然对比结果也可以用于门锁或其他智能设备,但这些使用案例不在本文讨论范围之内。

先决条件

在 Raspberry Pi 设备上安装 AWS IoT Greengrass Core 软件。创建 IoT Greengrass 组和核心。有关说明,请参阅《AWS IoT Greengrass 开发人员指南》中的 AWS IoT Greengrass 入门。在部署中会用到在此创建的组和核心。


在本文中,我将使用一个预先训练好的面部检测模型,使用 TensorFlow 对其进行训练,然后将其部署到装有 AWS IoT Greengrass 的 Raspberry Pi 中。您可以使用与此相同的模型,也可以使用 Amazon SageMaker 训练自己的模型。有关如何使用 Amazon SageMaker 准备模型的信息,请参阅《Amazon SageMaker 开发人员指南》中的“入门”部分。


安装以下依赖项。


  • OpenCV 3.3

  • TensorFlow

  • Numpy

  • Scipy

  • Scikit-learn

  • Dlib

  • 所有图像处理库

  • 使用以下命令安装图像处理依赖项。


sudo apt-get install build-essentialsudo apt-get install cmake git libgtk2.0-dev pkg-config libavcodec-dev libavformat-dev libswscale-devsudo apt-get install python-dev python-numpy libtbb2 libtbb-dev libjpeg-dev libpng-dev libtiff-dev libjasper-dev libdc1394-22-dev pkg-config graphicsmagick
复制代码


使用以下命令安装 OpenCV 3.3。


git clone https://github.com/Itseez/opencv.gitgit clone https://github.com/Itseez/opencv_contrib.gitcd opencvgit checkout 3.1.0cd ../opencv_contrib/git checkout 3.1.0cd ..cd opencvmkdir releasecd releasecmake -D CMAKE_BUILD_TYPE=RELEASE \-D CMAKE_INSTALL_PREFIX=/usr/local \-D INSTALL_PYTHON_EXAMPLES=ON \-D OPENCV_EXTRA_MODULES_PATH=~/opencv_contrib/modules \-D BUILD_EXAMPLES=ON ..make -j4sudo make installsudo ldconfig
复制代码


本文使用的 ML 模型是 TensorFlow。使用以下命令将 TensorFlow 安装在您的 Raspberry Pi 上。


# Install Wheelwget https://github.com/samjabrahams/tensorflow-on-raspberry-pi/releases/download/v1.0.1/tensorflow-1.0.1-cp34-cp34m-linux_armv7l.whlsudo pip install tensorflow-1.0.1-cp34-cp34m-linux_armv7l.whlsudo pip install mock#Install Pip3sudo apt install libatlas-base-devpip install tensorflow使用以下命令安装 Numpy、Scipy 和 Scikit-learn。
pip install numpy scipy scikit-learn使用以下命令安装 Dlib。
#Modify your swapfilesudo nano /etc/dphys-swapfile
change CONF_SWAPSIZE = 100 to CONF_SWAPSIZE=1024change virtual memory from 100M to 1G
sudo /etc/init.d/dphys-swapfile restart
sudo raspi-config#Change you boot Options1)Boot Options => Desktop / CLI => Console Autologin2)Advanced Options => Memory Split => change GPU to 16
#Doanload your Dlibdownload Dlib to your device : http://dlib.net/sudo python setup.py install
复制代码

ML 模型和 AWS Lambda 函数

您将在 GitHub 上找到两个 ML 模型。


  • 面部检测模型

  • |—-haarcascade_frontalface_default.xml

  • 面部识别模型

  • |—–train_faces.model-500.data-00000-of-00001

  • |—–train_faces.model-500.index

  • |—–train_faces.model-500.meta

  • |—–checkpoint

  • 您还将找到描述本文所用的 Lambda 函数的注释。

AWS IoT Greengrass 上的 FaceDetection Lambda 函数

#open cameracam = cv2.VideoCapture(0)while True:# capture an image from video stream_, img = cam.read()# convert RBG image to grayscale imagegray_image = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)# detect facedets = detector(gray_image, 1)if not len(dets):# detect face failedkey = cv2.waitKey(30) & 0xffif key == 27:sys.exit(0)# start recognitionfor i, d in enumerate(dets):x1 = d.top() if d.top() > 0 else 0y1 = d.bottom() if d.bottom() > 0 else 0x2 = d.left() if d.left() > 0 else 0y2 = d.right() if d.right() > 0 else 0face = img[x1:y1, x2:y2]
face = cv2.resize(face, (size, size))# compare image with dataset and compose JSON format messagerecord_data = {}record_data['result'] = is_my_face(face)prepared_record_data = json.dumps(record_data)# send MQTT message to “record/webcam” topicclient.publish(topic = 'record/webcam', payload = prepared_record_data)break;Alexa 触发器 Lambda 函数def get_welcome_response():# public a message to IoT coreclient.publish(topic='listening/record',payload="Hi",qos=1)# return message of this Alexa Skillsession_attributes = {}card_title = "Welcome"speech_output = "Sure.I will check the camera now."# If the user either does not reply to the welcome message or says something# that is not understood, they will be prompted again with this text.reprompt_text = "Sure.I will check the camera now."should_end_session = Truereturn build_response(session_attributes, build_speechlet_response(card_title, speech_output, reprompt_text, should_end_session))
复制代码

开始使用

本文描述的示例架构如下所示。用于创建 AWS Lambda 函数以进行识别的面部识别模型和数据集已上传到 Amazon S3 存储桶中。AWS IoT Greengrass 会将所需文件同步到 Raspberry Pi。Echo Dot 作为触发器运行。在听到“Alexa, open Monitor”等命令时,Echo Dot 将调用 Alexa Skil 以向 AWS IoT Core 发送一条消息。AWS IoT Core 会调用识别 Lambda 函数,该函数部署在 Raspberry Pi 本地存储上,如果 Lambda 函数识别出客人的身份,门就会打开。



下面我们来准备将在 Raspberry Pi 上部署的资源。


首先,创建一个 AWS Lambda 函数,该函数将捕获 Raspberry Pi 摄像头的帧,将这些帧转换为 JPG 文件,然后调用本地 ML 模型进行分析。AWS Lambda 函数会将 JSON 格式的分析结果发送到 AWS IoT Core。


在 AWS Lambda 控制台中,选择创建函数,然后选择从头开始创建。为您的 AWS Lambda 函数指定一个类似于 greengrassFaceRecognization 的名称。对于运行时,选择 Python 2.7。由于此 Lambda 函数将部署在边缘设备上,因此您可以选择任何角色,而不会影响其在 Raspberry Pi 上的功能。



在函数代码区域中,选择上传 ZIP 文件的选项,然后从 GitHub 上传为此 Lambda 函数提供的 ZIP 包。从操作中,发布新版本。AWS IoT Greengrass 不支持 $LATEST 作为 Lambda 别名的版本,因此请确保为 Lambda 函数分配一个版本号(例如,版本 1)。



在 Lambda 函数运行时,它会调用用于面部识别的本地 ML 模型。使用以下值配置 Lambda 函数:


属性 配置


内存限制 96


超时 8


Lambda 生命周期 让此函数长时间生存,并保持无限期运行


对 /sys 目录的读取访问权限 启用


输入负载数据类型 JSON


Lambda 函数需要在 Raspberry Pi 上调用一些本地设备。将这些设备添加到您的 AWS IoT Greengrass 资源。


在 AWS IoT Core 控制台中,选择 AWS IoT Greengrass。选择组,然后选择您的 Greengrass 组(例如,greengrassFaceReco)。在左侧的导航窗格中,选择资源。在本地选项卡上,选择添加本地资源。



由于本文中的示例使用 Raspberry Pi 摄像头,因此要在 Greengrass 组中添加两台设备:


  • videoCoreSharedMemory

  • videoCoreInterface

  • 按如下方式填写字段:


完成后,您的设备配置应如下所示:



将 ML 模型添加到此 Greengrass 组。在左侧导航窗格中,依次选择资源、机器学习和添加机器学习资源。



在本例中,模型存储在 S3 存储桶中。如果您使用 Amazon SageMaker 训练模型,请选择 Amazon SageMaker 作为您的模型源。本地路径是边缘设备上用来存储模型的目录。请谨慎配置此路径。否则,您的模型将无法在边缘设备上使用。您会看到您的模型已添加到 Greengrass 组中:



现在创建一个订阅,以便可将本地分析结果发送到 AWS IoT 云进行处理。例如,将结果存储在 Amazon DynamoDB 中以及在 Amazon EMR 中执行结果分析。如果您有另一台本地设备连接到 Raspberry Pi,则可以使用 AWS IoT Greengrass Core 根据分析结果通过 AWS Lambda 对其进行控制。在本例中,通过 MQTT 消息将结果发送到 AWS IoT 云。



现在,您可以部署 Greengrass 组。从操作中选择部署。部署时间因模型大小而异。部署完成后,结果将显示在控制台中,如下所示。



您的 Raspberry Pi 现在应该能够识别 Pi 摄像头捕捉到的面部照片。使用 Echo Dot 对 Pi 摄像头进行语音控制以获取图像。


创建另一个 Lambda 函数,以通过 MQTT 消息触发 AWS IoT Greengrass 本地面部检测 Lambda 函数。触发器 Lambda 函数将通过 AWS IoT Core 向 Greengrass Core 发送一条 MQTT 消息。AWS IoT Greengrass 将通过本地面部检测 Lambda 函数处理此消息,然后触发照片分析。您可以在 GitHub 上找到这一基于 Python 2.7 的 Lambda 代码。记下此 Lambda 函数的 ARN。配置 Alexa 技能时会用到。


打开 Amazon 开发人员门户。依次选择 Alexa、Your Alexa Consoles、Skills 和 Create Skill。有关创建自己的 Alexa 技能的信息,请参阅使用 Alexa Skills Kit 构建技能。


最后,通过使用 Echo Dot 向 Raspberry Pi 发送语音控制消息,启动本地面部识别过程,构建智能家庭监控系统。结果将通过 MQTT 消息发送回 AWS IoT 云。

小结

通过使用本文中的示例,您可以在装有 AWS IoT Greengrass 的 Raspberry Pi 设备上构建小型家庭监控系统。然后,您可以通过训练其他 ML 模型并将其部署到您的 AWS IoT Greengrass 设备来进一步探索。


本文转载自博客 AWS。


原文链接:


https://amazonaws-china.com/cn/blogs/china/how-to-install-a-face-recognition-model-at-the-edge-with-aws-iot-greengrass/


2019-09-23 13:009260
用户头像

发布了 1964 篇内容, 共 168.9 次阅读, 收获喜欢 83 次。

关注

评论

发布
暂无评论
发现更多内容

区块链支付系统源码开发,USDT承兑支付平台

13530558032

数字货币钱包系统定制开发,区块链钱包源码

13530558032

【运维探讨】RPA落地实践,提升IT运维工作效能!

嘉为蓝鲸

RPA 运维自动化 标准化 系统运维 流程

架构设计复杂度来源

escray

学习 从零开始学架构 架构师预科班

Java创建对象的方法有哪些?

奈学教育

Java

一条龙!CI / CD 、打造小团队前端工程化服务

久违

Vue 大前端 jenkins React

9块钱,构建个私有网盘,关键不限速

华为云开发者联盟

网站 OBS 在线网盘 华为云 云存储

高效程序员的45个习惯:敏捷开发修炼之道(7)

石云升

敏捷开发 晨会

花两个半月吃透这份Java手打面经,成功从外包上岸到京东

Java迁哥

Java 学习 腾讯 面试 资料

【API进阶之路】破圈,用一个API代替10人内容团队

华为云开发者联盟

内容 编辑 API 华为云 文本摘要

分析HiveQL 生成的MapReduce执行程序

任小龙

LeetCode题解:84. 柱状图中最大的矩形,双循环暴力,JavaScript,详细注释

Lee Chen

大前端 LeetCode

JVM中unsafe.cpp源码

Darren

c++ 源码 JVM unsafe

Java创建对象的方法有哪些?

古月木易

Java

Java中强、软、弱、虚四种引用详解

奈学教育

Java

鲲鹏迁移第一批吃螃蟹的人,践行技术国际化

华为云开发者联盟

鲲鹏920 服务器 华为云 ARM芯片 X86

程序员如何获取一份高薪工作?阿里P8大牛给你一些中肯的建议

Java迁哥

Java 华为 程序员 面试 资料

区块链交易所开发源码,数字货币交易所app开发

13530558032

vivo商城前端架构升级-总览篇

vivo互联网技术

node.js Vue 大前端 架构设计

Java中强、软、弱、虚四种引用详解

古月木易

Java

JDK8 Unsafe.java 源码

Darren

源码 并发 CAS 代码注释 unsafe

实战案例丨使用云连接CC和数据复制服务DRS实现跨区域RDS迁移和数据同步

华为云开发者联盟

迁移 灾备 数据复制 云连接 数据同步

ArCall远比你想象的要强大的多

anyRTC开发者

WebRTC 在线教育 直播 RTC 安卓

2019年我最喜欢的三款数码产品。

徐说科技

手机 苹果

35K成功上岸华为商城事业部,只因学透了这几个开源的商城项目

Java迁哥

Java 华为 源码 资料 商城项目

合约跟单系统开发,数字货币合约跟单软件搭建

13530558032

拥抱K8S系列-01-CentOS7安装docker

张无忌

Docker centos 运维

面经手册 · 第9篇《队列是什么?什么是双端队列、延迟对列、阻塞队列,全是知识盲区!》

小傅哥

数据结构 小傅哥 队列 ArrayDeque

week12 homework

burner

Docker 网络模式详解及容器间网络通信

哈喽沃德先生

Docker 容器 微服务

为什么阿里巴巴的程序员成长速度这么快,看完他们的内部资料我明白了

Java迁哥

Java 阿里巴巴 程序员 成长 笔记

如何使用 AWS IoT Greengrass 在边缘安装面部识别模型_文化 & 方法_亚马逊云科技 (Amazon Web Services)_InfoQ精选文章