小伙伴们快拿出小本本,赶紧记条记,我要开始上课了。
希望大家都能在比赛里有所收成。

这套参赛作品名字叫“智能的猫咪监视与警告设备”。
下图是这套装置的硬件,包含了庆科智能语音开拓板、友善之臂Nano PC T3 Plus、Arduino Nano、USB摄像头。

数据库做事器建在云端。
我还给猫咪监控数据做了个网站,地址

php阿里云tts庆科和阿里云正在用人工智能解救铲屎官快快快看过来 Vue.js

http://47.94.213.13/

下图是猫咪监控的网站界面,该站点建在阿里云ECS做事器上。
数据库是高性能的MySQL数据库。
这台做事器的有效期至2018年11月11日。

1、设计背景

本人是个猫奴,有时候猫咪会趁我不在家时候对盆栽下毒手。
我已经用深度神经网络算法做了一个实时识别猫咪的智能摄像头。

如果猫跑到了这个摄像头的视场里并被识别到,终端命令窗口上就会弹出警告,并且猫咪的照片会被按韶光顺序保存。

上面这个方案实现了最基本的猫咪识别和反馈。
下面我们又给它增加一些功能,让它更符合本次比赛的主题:

1、增加一台云打算做事器。
利用MySQL数据库存储监控数据。
利用Apache和PHP建网站,把监控数据可视化。

2、增加语音警告(或驱赶)功能,比如“创造猫咪”,或“给我滚”。

3、增加一台家庭物联网网关做事器,本地局域网的UDP协议数据转发云真个MySQL数据库。
做事器硬件是友善之臂NanoPC T3 Plus,8核处理器的ARM小电脑。

4、方案优化。
智能摄像头的程序和家庭物联网网关的程序,如果利用树莓派的硬件方案,建议利用两台树莓派。
一台跑智能摄像头,另一台跑物联网网关,UDP的通信地址为192.168.1.x网段的局域网地址。

如果用NanoPC T3 Plus硬件方案,由于硬件性能高,两个程序都可以放在同一台电脑上跑,UDP数据通过127.0.0.1地址发给本机的物联网网关程序。

5、猫咪识别程序的改进。
增加猫咪相对付摄像头的球坐标系角度位置打算。
并且,当有一个或多个猫咪同时被锁定时,算出识别面积最大的那只猫。
把识别结果做个网络接口,用UDP协议发到家庭物联网做事器,转发到云做事器,末了在网站上显示。

2、云打算做事器

阿里的云ECS是一种弹性可伸缩的打算做事。
云做事器的利用方法实在跟正常的传统做事器差不多的,但是更稳定、更安全。
于是我决定申请一台免费的阿里云做事器来完成这次的比赛。

我成功申请到了一台,有效期至2018年11月11日。

拿到做事器往后,第一步,安装MySQL数据库做事,并建立家庭物联网的数据表。
做事器是CantOS系统的,可以用yun命令安装软件(阿里云的linux镜像站速率非常快)。

数据表包含5个参数:监控序号(ID)、是否识别到猫咪(iscat)、猫咪在摄像头局部坐标系下的经度坐标(data1),猫咪在摄像头局部坐标系下的纬度坐标(data2),数据采集韶光。

第二步,安装Apache和PHP。
然后写个网站显示监控数据。
在浏览器里输入我的云做事器地址,可以看打如下界面。
刚开始只是一张只有台头的空表。
检测到猫咪了往后,表格会增长。

网站PHP代码我开源给大家了:

https://github.com/xukejing/MicoAli/blob/master/index.php

3、语音功能

我们利用庆科的智能语音开拓板来输出语音警告。
板子是通过串口的AT+TTS命令来输入转语音的笔墨。
这里,为了让项目更随意马虎在不同的平台之间移植,我增加了一块Arduino开拓板。

智能摄像机装置检测到猫咪往后,通过USB转串口给Arduino发指令;然后Arduino再输出编程好的指令给庆科语音开拓板。
现在的程序是这样的,摄像头的程序只要给Arduino的USB转串口发过去任意一个字符,就能让喇叭发出“创造猫咪”的报警声。
我试过了,效果很好,这个声音既能提醒主人,又能吓退猫咪。

庆科开拓板的固件SDK并不开放。
但是我的Arduino上的程序可以开源给大家,这个程序是在软串口的demo例程根本上改的。

https://github.com/xukejing/MicoAli/blob/master/softserial.ino

4、物联网网关做事器

我们搭建的阿里云做事器利用的是MySQL数据库做事,家庭物联网的UDP数据须要做一下转换才能写入数据库。
我们用一台友善之臂NanoPC T3 Plus作为物联网网关硬件。

网关做事监听本地6000端口,吸收猫咪在摄像头局部坐标系下的经度坐标和纬度坐标(单位是度),然后精确到小数点后两位发送给云真个MySQL数据库。
个中,数据格式上,又补上了3个信息,分别是数据ID编号、是否有猫、数据采集韶光。

我的网关做事程序的代码开源给大家了:

https://github.com/xukejing/MicoAli/blob/master/ali.cpp

5、深度神经网络智能摄像机

深度神经网络智能摄像机的程序现在也在NanoPC T3 Plus上面跑,每帧大约耗时0.3秒。
利用的是Mobile Net SSD检测算法,可以做多目标检测,能同时锁定多只猫咪。
检测到猫往后,再对猫的检测面积进行排序。

找到检测面积最大的那只猫,把这只猫咪在摄像头局部坐标系下的经度坐标和纬度坐标数据用UDP协议发送到家庭物联网网关做事器的6000端口。
摄像机会把有猫的照片都保存下来,按检测韶光顺序存放。

照片会从00001开始编码,满了往后回到第一张,覆盖老照片的机制类似行车记录仪。
如果检测到猫,摄像机会通过USB转串口给语音部分的Arduino板子发送一个字符。

数据上传云真个间隔是可以调度的。
实际运用时建议10秒一次。
如果猫咪进入视场后一贯赖着不走,驱赶语音也是10秒播报一次。
这个延时由智能相机的程序掌握。

测试数据链路时候,间隔可以调小一些,我试过0.1秒间隔也是没问题的,本地的UDP数据传输很快,云端阿里云做事器上的MySQL数据库的写入性能也非常好。

我的深度神经网络智能摄像机的代码也开源给大家了:

https://github.com/xukejing/MicoAli/blob/master/micocat.cpp

已经演习好的神经网络模型:

https://github.com/xukejing/NanoPCT4catdnncamera/blob/master/MobileNetSSD_deploy.caffemodel

模型的网络构造定义文件:

https://github.com/xukejing/NanoPCT4catdnncamera/blob/master/MobileNetSSD_deploy.prototxt

6、方案实物展示

阿里云做事器的MySQL数据库上,一开始是没有数据的。

我们回到NanoPC T3 Plus上来操作,先打开两个终端窗口,分别启动与阿里云MySQL连接的网关程序(ali)和与本地网关程序连接的智能摄像机程序(micocat)。

我用我家猫咪的照片试验一下,检测正常。
期间我听到了清脆悦耳的告警声音“创造猫咪”。

猫咪角度位置坐标打算正常,数据采集韶光也记录下来了。

数据库里有了记录

网站上也显示猫咪检测数据了。

7、开拓小结

这套方案紧张是做技能演示,在各组开源的框架下给大家做了个教程,先容了从云端站点搭建、自定义数据协议到物联网模块的接入的过程,本人编写的干系代码也都开源给大家了。
这是篇技能分享文章,希望我的这个教程能帮更多人系统地入门物联网。

末了,感谢庆科社区赠予的智能语音开拓板,和阿里供应的免费云做事器。

树莓派、喷鼻香蕉、荔枝糖等热门开拓板免费申请,以及理解开拓板资讯以及评测,请关注微信公号:芯板坊。