文档结构  
翻译进度:已翻译     翻译赏金:0 元 (?)    ¥ 我要打赏

概述

进行这个项目主要有两个原因:其一,我本身想要学习更多的神经网络软件;其二:让邻居家那只可爱的小猫去除了我的前院的别的地方溜达吧。

项目只包括三个硬件: Nvidia Jetson TX1 板,  Foscam FI9800P IP相机, 以及和 继电器相连的Particle Photon 。首先将相机安装在了房子的侧面用来监控前院的状况。它通过由前院的Jetson维持的Wifi接入点访问。Photon和继电器安装在我的喷水灭火系统的控制盒里,并和厨房的WIFI接入相连。

第 1 段(可获 2 积分)

实际中,我们用相机观测院子的变化。当发生变化时,相机FTPs一秒传送7帧图片到Jetson。运行在Jetson上的一种服务负责监控传输的图片并将其上传到Caffe的深度神经网络中。如果在网络中检测到猫,Jetson会通知云服务上的Photon服务器,并向Photon传送消息。作为回应,Photon会代开洒水装置两分钟。

下图,猫走入了摄像范围触发了相机:

Cat Image

之后猫咪出现在院子的正中间,再次触发了相机,洒水装置随之触发:

第 2 段(可获 2 积分)

Cat Image

安装相机

方法和平常安装相机相同。唯一的长久连接是一个从屋檐下小洞中引出的12V电压线。我将相机固定在相机前院的木头盒子上,盒子里隐藏了连接相机的线。下面是相机放置位置的一张照片:

Camera Image

按照Foscam的说明书将其与Jetson相连(如下)。在我的设置中Jetson的IP是10.42.0.1。之所以设置成固定IP是为了寻找它更加容易。一旦完成如上设置,将笔记本电脑和相机相连并设置“警报”为触发一个变化。设置系统警报时的FTP传输帧率为7幅图像。之后设置Jetson的用户ID和密码。我的相机会传送大小为 640x360的图像到根目录。

第 3 段(可获 2 积分)

下面是相机的一些可选属性参数:

SectionParameterValueNetwork: IP Configuration Obtain IP from DHCPNot checked IP Address10.42.0.11 Gateway10.42.0.1Network: FTP Settings FTP Serverftp://10.42.0.1/ Port21 UsernameJetson_login_name_for_camera PasswordJetson_login_password_for_cameraVideo Snapshot Settings   Pictures Save ToFTP Enable timing to captureNot checked Enable Set FilenameNot checkedDetector Motion Detection   Trigger Interval7s Take SnapshotChecked Timer Interval1s

第 4 段(可获 2 积分)

安装 Particle Photon

Photon很好设置. 具体可查看下面软件部分的代码。我把它放在了洒水控制盒里,如下图:

左侧带绿色LED的黑色盒子是从EBay上买的24VAC至5VDC转换器。此外在继电器板上有一个白色的继电器,它前面是蓝色的连接器。Photon板在连接器的右侧。所有这些东西都被固定在了一块perfboard上。

Photon的VIN pin脚和转换器的5V输出相连。继电器板是以模拟信号为基础:包括一个3.3V输入的开集NPN晶体管和一个3V的继电器。但是Photon不能给继电器提供足够的电流,因此我将晶体管通过一个15欧1/2瓦的限流电阻连接到5V输入上。继电器的触点在水阀出,并联到了整个电路中。

第 5 段(可获 2 积分)

下面是所有的连线关系:

24VAC转换器 24VAC<--->控制盒 24VAC 输出 24VAC 转换器 +5V<--->Photon VIN, 电阻继电器板 +3.3V24VAC 转换器 GND<--->Photon GND, Relay GNDPhoton D0<--->Relay board signal inputRelay COM<--->控制盒 24VAC OUTRelay NO<--->前院的水阀

安装Jetson

我给Jetson增加了一个SATA SSD驱动器和一个Belkin USB集线器。集线器有两个无线加密狗和键盘、鼠标进行通讯。

SSD没有问题的情况下将其格式化为EXT4模式,并安装/caffe。我强烈建议将所有项目代码,git控制版本库以及应用程序数据在Jetson的内部SD卡中备份,因为在Jetpack升级时经常会擦除系统。

第 6 段(可获 2 积分)

按照这个教程 设置无线接入点,这很简单。在Ubuntu菜单下进行设置.

我安装了vsftpd作为 FTP 服务器。配置很容易。 我不允许匿名FTP登录,并给了相机唯一的登录名和密码。

我使用 JetsonHacks recipe安装Caffe。我相信现在的发布版本不会再存在 LMDB_MAP_SIZE的问题,因此在做出改变前先试着生成下。你需要能够跑通测试以及JetsonHacks安装shell脚本提到的计时。我目前使用Cuda 7.0 但是我不确定在此种情况下这个很重要。记得使用CDNN,在这种小系统时它能节省连续的内存空间。一旦生成成功,将生成路径添加到你的PATH变量中,以便脚本能够找到Caffe。童谣田间Caffe的python lib目录到你的PYTONPATH中。

第 7 段(可获 2 积分)
~ $ echo $PATH
/home/rgb/bin:/caffe/drive_rc/src:/caffe/drive_rc/std_caffe/caffe/build/tools:/usr/local/cuda-7.0/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
~ $ echo $PYTHONPATH
/caffe/drive_rc/std_caffe/caffe/python:
~ $ echo $LD_LIBRARY_PATH
/usr/local/cuda-7.0/lib:/usr/local/lib

我运行了 语意分割的全卷积神经网络(FCN)的一个变种. 参考 Berkeley Model Zoo, github.

我尝试了许多其他网络最终选用FCN。选择过程的介绍之后将会介绍。Tcn32s在TX1上运行良好,他需要1G多一点的存储空间,10s左右内启动,分割 640x360大小的图像需要约1/3秒。现在的github库的设置脚本写的很好,且和图像大小无关——通过将输入图像大小resize到网络所需图像大小实现。

第 8 段(可获 2 积分)

为了进行测试,你需要下载预先训练好的 Caffe 模型,这可能需要花费数分钟,因为  fcn32s-heavy-pascal.caffemodel 文件超过 500MB.

    $ cd voc-fcn32s
    $ wget `cat caffemodel-url`

打开并编辑 infer.py ,修复 Image.open() 命令中的路径到一个可用的 .jpg 文件。修改 net 一行代码指向你刚下载的模型文件:

    -net = caffe.Net('fcn8s/deploy.prototxt', 'fcn8s/fcn8s-heavy-40k.caffemodel', caffe.TEST)
    +net = caffe.Net('voc-fcn32s/deploy.prototxt', 'voc-fcn32s/fcn32s-heavy-pascal.caffemodel', caffe.TEST)

你还需要 voc-fcn32s/deploy.prototxt 文件。这个可以从 voc-fcn32s/train.prototxt 方便的生成。你可以查看 voc-fcn8s/train.prototxt 和 voc-fcn8s/deploy.prototxt 文件之间的差异来了解如何做。或者可以从我的 chasing-cats 仓库中获取。

第 9 段(可获 2 积分)

你可以使用以下命令来运行:

    $ python infer.py

我的代码仓库中包含多个版本的 infer.py, 这是一个 Python 的工具用来识别这些分段文件,以及 Photon 代码、控制脚本和一些操作脚本,这些可以用来运行和监控系统。我将在接下来的文章中介绍更多详细内容。

祝你驱猫愉快!

第 10 段(可获 2 积分)

文章评论