让现实世界的情感为人工智能所用(二)

发布时间:2020-2-21 14:10    发布者:eechina
关键词: 人工智能
在上一篇文章“让现实世界的情感为人工智能所用(一)”中,我们介绍了本项目的背景内容和工作流程,以及运作时所需的物料、工具和其他资源。接下来,我们要按照下文“软件”一节中的步骤让整个设备运作起来。

软件

6.jpg
图6:默认的Raspbian操作系统提供了编辑Python脚本以适合您的项目所需的所有工具

在本节中,我们将详细介绍本项目软件方面的内容。本项目已在Raspbian的Buster版本上通过测试,此为撰写本文时的最新版本。本项目在树莓派3B+和树莓派4上都进行了测试。

如果您没有任何将Raspbian OS刷入microSD存储卡的经验,我们建议您使用Etcher应用程序,该工具可通过Google搜索到;同时请按照这份教程来操作。

最后一点,如果您的树莓派4无法启动,则EEPROM可能已损坏。请按照这些步骤来修复该问题。

本指南余下的部分将重点介绍完成树莓派初始设置并将其成功连接到Internet之后要采取的步骤。

安装OpenVINO和经过训练的神经网络模型

要在您自己的树莓派上启动并运行本项目,您最好拥有通过命令行在Linux中导航的经验。以下是我们启动和运行英特尔OpenVINO软件所遵循的步骤。在得到指示前,请勿安装神经计算棒。

$sudo mkdir -p /opt/intel/openvino
$cd ~/Downloads/
$wget –no-check-certificate https://download.01.org/opencv/2 ... an_p_2019.2.242.tgz
$sudo tar -xf l_openvino_toolkit_runtime_raspbian_p_2019.2.242.tgz
--strip 1 -C /opt/intel/openvino
$sudo apt install cmake
$source /opt/intel/openvino/bin/setupvars.sh
$echo "source /opt/intel/openvino/bin/setupvars.sh" >> ~/.bashrc

要测试是否一切正常,请打开一个新的终端,此时您应该看到这样的内容:

[setupvars.sh] OpenVINO environment initialized

如果操作成功,接下来继续在原先的终端窗口中操作。

$sudo usermod -a -G users "$(whoami)"
$sh /opt/intel/openvino/install_dependencies/install_NCS_udev_rules.sh
$sudo apt-get install -y python3-picamera
$sudo -H pip3 install imutils --upgrade
$git clone https://github.com/Mouser-Electr ... ysicalComputing.git
$cd Emotions_and_PhysicalComputing

最后,如果您使用的是OV5647摄像头,请执行以下操作:

$python3 main.py -wd 320 -ht 240 -numncs 2 -cm 1

或者,如果您使用的是USB摄像头,请执行以下操作:

$python3 main.py -wd 320 -ht 240 -numncs 2 -cm 0

接下来,让我们更深入地研究Python文件。

项目文件

本项目GitHub存储库的Software文件夹中有以下源代码文件:

●  main.py:我们需要在此Python脚本中添加特定于项目的代码,以便获取神经网络的输出,并根据推断出的情感,通过伺服电机在现实世界中执行操作。
●  face-detection-retail-0004.xml:包含用于检测为其呈现的图像中是否存在人脸的神经网络的网络拓扑。
●  face-detection-retail-0004.bin:包含用于检测为其呈现的图像中是否存在人脸的神经网络的权值和阈值。
●  emotions-recognition-retail-0003.xml:包含用于检测人脸图像所呈现表情的神经网络的网络拓扑。
●  emotions-recognition-retail-0003.bin:包含用于检测人脸图像所呈现表情的神经网络的权值和阈值。



借助预处理程序的#include指令,可以将库添加到项目中。此举有利于代码重用;除非您有非常特殊的需求,否则没有必要自己从头重新编写代码。本项目用到了下面这些库:

●  sys:提供与解释器进行交互所需的变量和函数,例如将命令行参数传递给Python脚本。
●  numpy:也称为NumPy,是一个软件包,其中包含供脚本使用的高级数学函数。
●  os:用来访问和操作系统相关的函数,例如与文件系统和输入/输出相对接。
●  time:该库提供与时间相关的函数,例如从系统获取日期和时间,或通过sleep()设置延迟。
●  multiprocessing:该库提供了一种机制,用于生成可以同时运行的多个进程。
●  gpiozero:该库提供的函数可与带有各种执行器和传感器(例如伺服电机和LED)的40引脚GPIO接头进行交互。
●  openvino.inference_engine:使Python脚本能够与NCS2设备上的推测引擎进行交互。
●  heapq:该库提供了堆队列算法的一种实现。堆队列是一种优先级队列,它实现了一个二叉树,其中优先级最低的元素始终保留在根节点位置。
●  threading:该库提供了多线程机制,使并发线程能够立刻运行。
●  pivideostream:该库提供了一种与摄像头交互的机制。
●  imutils:该库提供了一组图像处理函数,例如旋转、平移和调整大小。

变量和常量


main.py文件中包含多个变量,这些变量使我们能够与NCS2设备和伺服电机进行交互。

以下为gpizero库的伺服模型实例,每个伺服电机都有这样的一个实例:

happyServo =Servo(12)
sadServo =Servo(13)
angreyServo= Servo(18)

这些变量用于提取由NCS2检测到的情绪,供Python脚本中的其他方法使用:

emotion =str(object_info[7])
LABELS =["neutral", "happy", "sad", "surprise","anger"]

在main.py源文件大约333行处,需要添加本项目最重要的一段代码:


out self.exec_net.requests[dev].outputs["prob_emotion"].flatten()
emotion =LABELS[int(np.argmax(out))]
if emotion== "happy":
    setServosHappy()
else ifemotion == "sad":
    setServosSad()
else ifemotion == "anger":
    setServosAngry()
else:
    setServosNeutral()
detection_list.extend([emotion])
self.resultsEm.put([detection_list])
self.inferred_request[dev]= 0


函数

●  setServosHappy():检测到快乐表情时,此函数会将GPIO12上的伺服电机设置为最大位置,同时将GPIO13和GPIO18设置为最小位置。
●  setServosSad():检测到悲伤表情时,此函数会将GPIO13上的伺服电机设置为最大位置,同时将GPIO12和GPIO18设置为最小位置。
●  setServosAngry():检测到愤怒表情时,此函数会将GPIO18上的伺服电机设置为最大位置,同时将GPIO12和GPIO13设置为最小位置。
●  setServosNeutral():当检测不到人脸或者人脸上没有表情(中性)时,此函数会将所有伺服电机设置为最小位置。

运行项目

组装好项目并且安装好软件后,我们就可以把它运行起来了,这真是激动人心的时刻!

1、在终端中输入以下命令:

$cd ~/Downloads/Emotions_and_PhysicalComputing

如果使用的是OV5647摄像头:

$python3 main.py -wd 320 -ht 240 -numncs 2 -cm 1

或者,如果使用的是USB摄像头:

$python3 main.py -wd 320 -ht 240 -numncs 2 -cm 0

7.jpg
图7:终端和摄像头输出

2、屏幕上会弹出一个小窗口,显示摄像头的视频输入以及一些文本和方框。

3、确保环境光线充足,然后站在镜头前,摆出快乐、悲伤和愤怒的表情。

4、检测到的面部表情类型应显示在屏幕上以及终端窗口中。

5、伺服器应正常工作,并根据您所做出的表情上下移动花朵。人工智能真的实现了物理计算!

故障排除提示

1、首次运行伺服电机时,请在伺服电机已连接到树莓派但尚未连接到机械组件的情况下运行代码。万一代码导致伺服电机的移动方向与实际安装方向相反,此举可以确保伺服电机不会受到损坏。

2、如果您用错了针对USB摄像头的标志和针对OV5647摄像头的标志,可能会出现问题。请务必对OV5647摄像头使用-cm 1、对USB摄像头使用-cm 0。

请确保您使用的是低压伺服电机,并且使用树莓派的5V引脚而非3V引脚。此外,也可以考虑配置专用于伺服电机的外部电源。请确保将接地线连接在一起。

8.jpg
图8:图中所示为滑块机构的设计概念,通过两块6英寸宽、带有两个反向45度切割斜面的松木块来构成一套简单的滑动机构

9.jpg
图9:项目成果拼贴画
本文地址:https://www.eechina.com/thread-577834-1-1.html     【打印本页】

本站部分文章为转载或网友发布,目的在于传递和分享信息,并不代表本网赞同其观点和对其真实性负责;文章版权归原作者及原出处所有,如涉及作品内容、版权和其它问题,我们将根据著作权人的要求,第一时间更正或删除。
您需要登录后才可以发表评论 登录 | 立即注册

厂商推荐

关于我们  -  服务条款  -  使用指南  -  站点地图  -  友情链接  -  联系我们
电子工程网 © 版权所有   京ICP备16069177号 | 京公网安备11010502021702
快速回复 返回顶部 返回列表