IOT-Tree AI Edge是IOT-Tree Server的配套开源项目,使用python实现,此项目管理摄像头和相关的AI算法,并为IOT-Tree Server提供基础支持。
其中包含了基于摄像头的手势识别,支持左右手且每个手包含如下手势识别结果:"Closed_Fist", "Open_Palm", "Pointing_Up", "Thumb_Down", "Thumb_Up", "Victory"

要在IOT-Tree Server中使用 IOT-Tree AI Edge提供的支持,可以在IOT-Tree项目消息流中进行配置。
如果你对IOT-Tree Server不了解,可以看如下内容:
IOT-Tree Server是个开源物联网软件,可以作为组态软件成为自动化系统的上位软件。她提供了各种设备接入、数据组织管理、数据分享使用、消息流控制逻辑和人机交互多个方面的功能。当然,你也可以仅仅使用这个软件作为数据采集终端或边缘计算的软件。
这是IOT-Tree Server相关的系列文章,你可以参考其他文章更多了解IOT-Tree能给你带来的好处:
使用IOT-Tree Server通过MC协议连接三菱Q系列PLC
使用IOT-Tree Server通过FINS协议连接欧姆龙CP2E-N系列PLC
系列文章还包含IOT-Tree完成一个具体项目的过程,非常详细,如下:
1,准备IOT-Tree AI Edge运行实例
AI Edge项目地址如下:iottree-ai-edge 。下载项目到本地目录,建议目录不要有空格和非ascii支付。
1.1 python conda运行环境
安装python 和conda运行环境------此部分内容参考网络资料,本文不展开。
建议使用miniconda创建python独立运行的环境。在iottree-ai-edge目录下,使用下述命令,确保环境安装和激活成功。
conda env create -f environment.yaml
conda activate iottree-edge
1.2 运行iottree-edge
在conda的iottree-edge环境下,运行命令
python server.py
python server.py
INFO:__main__:服务启动中...
* Serving Flask app 'server'
* Debug mode: on
INFO:werkzeug:WARNING: This is a development server. Do not use it in a production deployment. Use a production WSGI server instead.
* Running on all addresses (0.0.0.0)
* Running on http://127.0.0.1:9091
* Running on http://192.168.10.225:9091
INFO:werkzeug:Press CTRL+C to quit
INFO:werkzeug: * Restarting with stat
INFO:__main__:服务启动中...
WARNING:werkzeug: * Debugger is active!
INFO:werkzeug: * Debugger PIN: 757-757-148
出现如上运行提示,说明IOT-Tree AI Edge已经运行成功。请确保运行AI Edge的主机有摄像头,或者能否访问其他某个网络摄像头。
2,IOT-Tree项目调用过程
假设你已经建立了一个IOT-Tree运行实例,并且已经准备好了内部项目(此部分具体内容请参考上面提供的相关参考资料------本文假设你已经熟悉这些基本内容和消息流的基本概念)。
2.1 IOTTree Edge节点的添加和摄像头列表配置
在项目管理主界面,建立并打开消息流,本文以"手势控制"这个消息流为例。选择"AI"分类下的"IOTTree Edge"模块节点,拖拽到绘图区,就完成了一个AI Edge节点的添加。如下图:

双击此节点,弹出对话框进行配置:

其中Edge Host和Port是我们之前启动的IOT-Tree AI Edge运行主机和端口。如果你的IOT-Tree Server和Edge不在同一台主机,那么对应修改即可。
而Edge Cameras这个表格,对应此IOT-Tree AI Edge当前支持的摄像头列表。本文的AI Edge自带了一个本地摄像头,因此自动显示在列表中。
而IP Cameras表格,允许你手工为IOT-Tree AI Edge添加网络摄像头。点击+按钮,填写摄像头名称和地址加入即可,然后可以点击"synchronize to edge"添加到Edge中。如果添加成功,这上面的Edge Cameras表格就会列出,也就可以被挑选使用了------这部分内容不展开了,你如果有自己的网络摄像头,可以自己尝试。
2.2 添加手势识别子节点
鼠标单击选中"IOTTree Edge 1"节点,可以看到左下角弹出了模块子节点列表,选择"手势识别"节点,拖拽到绘图区,完成模块子节点的添加。

双击此新加的节点,可以看到下拉Camera列表中,显示了"IOTTree Edge 1"配置对应的所有摄像头,选择需要的摄像头即可。

而Check Interval是识别算法对摄像头数据帧进行识别的时间间隔毫秒数,数值越小代表需要的计算量就越大。
注意:此手势识别节点有消息输出时才会触发打开摄像头进行识别。如果一定的时间段(如5秒)内没有任何输入消息,则会自动停止识别并关闭摄像头------用来支持计算资源的自动释放。因此,只需要控制此节点的输入消息也就可以轻松控制识别算法的启动和自动停止。
2.3 设置定时器触发识别和结果输出
本文使用一个1秒定时器触发这个手势识别,并使用调试节点查看识别结果输出。如下图:

只需要启动这个定时触发器节点,就可以启动"手势识别 1"的运行。
3,运行效果和后续可能应用
启动项目或只单独启动这个消息流,可以看到"定时触发器 1"进入工作状态,有1秒间隔的消息输出。如果一切正常你会发现摄像头指示灯打开,进入工作状态。
此时,你在摄像头面前摆出上面说的相关手势,就会发现识别有结果输出,如下:

而停止消息流运行,等待若干秒时间,摄像头指示灯会关闭,说明已经退出了识别状态。
以上整个过程非常简单,你可以使用这个功能,为你的应用提供特殊功能:
如可以为你的智能家居提供手势控制功能(适合一些老年人),也可以为你的一些设备提供虚空启动或关闭支持。。。