【大赛作品】智能的猫咪监视与警告设备

物联网 linux 数据库 UDP 深度神经网络
xukejing
发布时间: 2018-10-19
阅读: 1738

大家好,我叫徐珂靖,住在冰城,是一个骨灰级工科男,最近得到了一块智能语音开发板(庆科VBS7100),又申请到了一台云服务器(阿里云服务器ECS),于是做了一套猫咪监控系统,来参加万物有声2018机器人创新创业大赛

我确实是来正经地参加比赛的,你看我都老老实实地把整套项目都完成了。

但我的目的不是来抢第一名的,而是来交朋友的,只想借此机会跟大伙儿聊聊有趣的技术知识。

我知道还有很多小伙伴对这次比赛感觉无从下手。别怕!来自Linux老司机的关怀这就来了!我做了个完整的物联网系统的DEMO,给大家做教材。项目里相关的代码都能在我的github地址里找到。https://github.com/xukejing/MicoAli


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

 20180906190607_24.gif

  

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

硬件.JPG

数据库服务器建在云端。我还给猫咪监控数据做了个网站,地址http://47.94.213.13/


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

网站实例.JPG

1.         设计背景

本人是个猫奴,有时候猫咪会趁我不在家时候对盆栽下毒手。我已经用深度神经网络算法做了一个实时识别猫咪的智能摄像头。如果猫跑到了这个摄像头的视场里并被识别到,终端命令窗口上就会弹出警告,并且猫咪的照片会被按时间顺序保存。这个小装置的制作发表在云汉社区:

http://www.ickey.cc/article/detail/259.html

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

1 增加一台云计算服务器。使用MySQL数据库存储监控数据。使用ApachePHP建网站,把监控数据可视化。

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

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

4 方案优化。智能摄像头的程序和家庭物联网网关的程序,如果使用树莓派的硬件方案,建议使用两台树莓派。一台跑智能摄像头,另一台跑物联网网关,UDP的通信地址为192.168.1.x网段的局域网地址。如果用NanoPC T3 Plus硬件方案,因为硬件性能高,两个程序都可以放在同一台电脑上跑,UDP数据通过127.0.0.1地址发给本机的物联网网关程序。

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

2.         云计算服务器

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

阿里ECS.JPG


我成功申请到了一台,有效期至20181111日。

我的云服务器.JPG


拿到服务器以后,第一步,安装MySQL数据库服务,并建立家庭物联网的数据表。服务器是CantOS系统的,可以用yun命令安装软件(阿里云的linux镜像站速度非常快)。数据表包含5个参数:监控序号(ID)、是否识别到猫咪(iscat)、猫咪在摄像头局部坐标系下的经度坐标(data1),猫咪在摄像头局部坐标系下的纬度坐标(data2),数据采集时间。

建立MySQL数据表.JPG


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

网页.JPG

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

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

3.         语音功能

我们使用庆科的智能语音开发板来输出语音警告。板子是通过串口的AT+TTS命令来输入转语音的文字。这里,为了让项目更容易在不同的平台之间移植,我增加了一块Arduino开发板。智能摄像机装置检测到猫咪以后,通过USB转串口给Arduino发指令;然后Arduino再输出编程好的指令给庆科语音开发板。现在的程序是这样的,摄像头的程序只要给ArduinoUSB转串口发过去任意一个字符,就能让喇叭发出“发现猫咪”的报警声。我试过了,效果很好,这个声音既能提醒主人,又能吓退猫咪。

arduino串口板.JPG

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

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

4.         物联网网关服务器

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

T3.JPG


网关服务监听本地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数据库上,一开始是没有数据的

mysql无数据.JPG

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

开启两个终端.JPG

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

猫.JPG


猫咪角度位置坐标计算正常,数据采集时间也记录下来了。

坐标和时间.JPG

数据库里有了记录

数据库里有了记录.JPG

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

有数据的网站.JPG


7.         开发小结

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

最后,感谢庆科社区赠送的智能语音开发板,和阿里提供的免费云服务器。








原创作品,未经权利人授权禁止转载。详情见转载须知 举报文章

点赞 (0)
xukejing 擅长:其他应用
评论(0)

登录后可评论,请 登录注册

相关文章推荐
X
你的打赏是对原创作者最大的认可
请选择打赏IC币的数量,一经提交无法退回 !
100IC币
500IC币
1000IC币
自定义
IC币
确定
X
提交成功 ! 谢谢您的支持
返回

我要举报该内容理由

×
请输入您举报的理由(50字以内)