本帖最后由 az158 于 2018-11-19 21:01 编辑
原文:TensorFlow Object Detection with Home-Assistant
利用Home-Assistant在家庭自动化项目中使用TensorFlow对象检测。
在这个项目中使用的东西
介绍TensorFlow是一种流行的开源机器学习框架,可用于图像处理中的各种应用,特别是用于对象检测。在家庭自动化项目中存在许多需要对象检测的应用,例如用于在摄像头拍摄的图像中定位像车辆或宠物的对象,然后基于这些对象的存在来执行动作(使用自动化)。Home-Assistant是一个流行的、开源的、基于python 3,可以在Raspberry Pi上运行的家庭自动化平台。Home-Assistant 版本0.82在一些设置之后,可以使用TensorFlow对象检测,从而允许人们在家庭自动化项目中使用对象检测。Home-Assistant文档提供了开始使用TensorFlow对象检测的说明,但所描述的过程比典型的Home-Assistant组件更复杂。正如文档所述,此组件需要下载文件,在您的计算机上编译,并添加到Home Assistant配置目录中。我在Github上托管了一些代码以简化设置过程,本文介绍了熟悉的Raspberry Pi硬件上的简化设置过程。
家庭助理设置
我在Raspberry Pi 3B+上使用Hassbian部署Home-Assistant版本0.82,但请注意,Home-Assistant的其他版本部署步骤应该是相同的(警告,Hassio还不允许安装TensorFlow,所以不要尝试它)。关于硬件的说明,TensorFlow模型需要大约1 GB的RAM,因此必须以“headless”或服务器模式运行Pi,否则当TensorFlow执行对象检测时,内存会用尽。Pi 3B+CPU的时钟频率为1.4 GHz,比常规的Pi 3B(1.2 GHz时钟速度)快,这意味着3B+上的物体检测速度更快,每次检测大约需要1.5秒。
有关设置的更多信息,请参阅Hassbian文档,但基本过程是: - 将Hassbian磁盘映像闪存到SD卡(我使用的是Etcher)
- 将您的Wifi凭据添加到SD卡上的文本文件中
- 将SD卡插入Pi
- 插入键盘并显示,以监视安装过程
可以使用接到Pi的键盘完成整个TensorFlow设置,但我建议通过Hassbian脚本安装Cloud9Web IDE。此IDE允许您通过Home-Assistant前端从网络上的任何计算机执行TensorFlow设置过程。要安装Cloud9,请按照此处的说明操作,然后导航到http://hassbian.local:8181/。现在,您可以使用面板iframe在Home-Assistant GUI上显示Cloud9 IDE ,通过添加到Home-Assistant configuration.yaml文件进行配置(通过Cloud9 IDE编辑): - panel_iframe:
- cloud9:
- title: cloud9
- icon: mdi:wrench
- url: http://hassbian.local:8181/ide.html
复制代码编辑文件后,最好使用配置验证工具。要使用它,请从侧面板,配置->常规->CHECK CONFIG(在配置验证下))。
图1.配置验证工具显示OK配置。
如果从配置检查工具中获得OK,则需要重新启动Home-Assistant才能使更改生效(从侧面板配置->常规->RESTART(在服务器管理下))。重启后,您应该看到以下内容:
图2.通过Panel iframe在HA前端查看的Cloud9 IDE插件。
TensorFlow设置确保您至少运行Home-Assistant 0.82或更高版本。我建议您阅读TensorFlow组件文档以了解设置过程,但在本指南中,我们跳过了几个步骤,因为我在Github上提供了所需的代码。 第1步:安装TensorFlow。我们需要TensorFlow可用于Home-Assistant。从Cloud9 IDE中的命令行: - 从Pi切换到homeassistant用户 - > sudo -u homeassistant -H -s
- 激活homeassistant python环境 - > cd/srv/homeassistant/然后source bin/activate
- 从pypi安装tensorflow - > pip3 install tensorflow==1.11.0
第2步:从我的GitHub获取文件TensorFlow。导航到:https://github.com/robmarkcole/tensorflow_files_for_home_assistant_component并下载ZIP文件或克隆存储库。使用Cloud9 IDE将文件夹从存储库复制tensorflow/object_detection到Home-Assistant的配置文件夹中。生成的文件夹结构如图2所示。 步骤3:为对象检测选择合适的模型。我将此步骤作为自己的一部分。
型号选择
TensorFlow'模型'是二进制文件,其扩展名.pb包含TensorFlow将用于执行对象检测的神经网络的权重。这是一个不重要的细节,但需要选择合适的模型并将其放在配置目录中。正如组件文档建议的那样,互联网上有一系列模型,你甚至可以创建自己的模型。通常,在模型精度和速度之间存在折衷。由于Raspberry Pi具有有限的CPU和RAM,我们应该选择轻量级型号,例如设计用于移动电话的型号之一。该TensorFlow模型动物园提供可下载模型的列表,因此导航到动物园自述文件并选择模型。在这里,我们将遵循文档建议并选择ssd_mobilenet_v2_coco模型。从命令行,并注意到我们仍在使用homeassistant用户配置文件: - TENSORFLOW_DIR="/home/homeassistant/c9workspace/homeassistant/tensorflow"
- cd $TENSORFLOW_DIR
- curl -OL http://download.tensorflow.org/models/object_detection/ssd_mobilenet_v2_coco_2018_03_29.tar.gz
- tar -xzvf ssd_mobilenet_v2_coco_2018_03_29.tar.gz
复制代码请注意,我们设置环境变量TENSORFLOW_DIR以确保将下载的文件放在本文中配置说明所需的位置。现在我们有一个可用的模型文件,我们可以配置TensorFlow组件。
TensorFlow组件配置需要摄像头来提供图像。我只是设置了local_file摄像头,你可以使用任何摄像头。请注意相机的entity_id(我的是camera.local_file)并将以下内容添加到configuration.yaml文件中: - image_processing:
- - platform: tensorflow
- scan_interval: 20000
- source:
- - entity_id: camera.local_file
- model:
- graph: /home/homeassistant/c9workspace/homeassistant/tensorflow/ssd_mobilenet_v2_coco_2018_03_29/frozen_inference_graph.pb
复制代码
再次检查配置更改是否有效,然后重新启动Home-Assistant。
TensorFlow组件使用现在是有趣的部分,使用TensorFlow组件!请注意,重新启动Home-Assistant将在其日志中发出有关未安装OpenCV的警告,您可以忽略此信息,因为TensorFlow可以使用Pillow。另外请注意,我们配置了scan_interval: 20000,意味着TensorFlow图像处理不会自动执行(默认情况下每10秒执行一次),但这仅当我们通过调用服务触发它时scan,你可以从Home-Assistant前端的Services开发人员工具执行此操作。。下图显示了TensorFlow组件显示结果:
执行扫描后
查看Tensorflow检测数据。狗被模型正确识别。
你现在可以在Home-Assistant 自动化中使用对象检测数据了。获得好的自动化想法的地方是Home-Assistant 论坛,所以请查看。
摘要在本文中,我们完成了使用Tensorflow设置Home-Assistant以执行对象检测的过程,然后在摄像机图像上执行了对象检测。这将使你能够在家庭自动化项目中将最先进的人工智能技术投入到使用,而且工作量极少。 |