可触发拍照的“电子眼”
2015-09-15谢作如
谢作如
说起“电子眼”,司机们都不陌生。遍布城市各道路路口的“电子眼”(如图1),在维护交通秩序的工作中发挥了重要的作用。但是我并不是要讨论“电子眼”原理之类的问题,而是尝试用摄像头来做一个“电子眼”,研究如何实现可触发拍照。
● 触发拍照的条件分析
“电子眼”的核心功能在于触发拍照。但是如何触发呢?不同的触发条件,要采用的解决方案肯定是不一样的。如果仅仅希望按下鼠标或者键盘就拍照,我们随便找一款支持拍照或者截图功能的摄像头软件就能实现,如下页图2所示的是支持拍照功能的“Juncy魔镜之家”工作界面。
顺便提一下,makey makey和酷乐宅都可以模拟鼠标、键盘的动作,结合“魔镜之家”之类的摄像头软件,我们完全可以不用编程,就能实现用户触碰一下任何可以导电的物体,随之摄像头自动保存照片的功能,其原理如下页图3所示。
当然,使用makey makey做触发拍照太简单了,没有挑战性。因此,我选择用各种传感器来感知种种常见的触发事件,如用红外热释电传感器判断是否有人来,用红外测障判断是否出现某种物体,或者用声音传感器来触发,只要有声音,就拍照。要实现这类条件的触发,自然而然要用到Arduino这一神器了。
● 作品原理分析
按理说拍照应该用照相机,通过快门线来控制照相机也并非很困难。但是考虑到普适性,用高清摄像头来实现比较方便。
本作品的工作原理如图4所示。从制作材料看,大致需要传感器、Arduino、计算机和摄像头。
我选择了红外热释电传感器(如图5)。这一传感器能检测人或动物身体发射的红外线而输出电信号的传感器,输出开关信号,可以应用于各种需要检测运动人体的场合。在淘宝上,这种传感器的价格在20~50元之间。
● 电脑端的摄像头编程
Processing是由MIT媒体实验室美学与运算小组开发的一款专为设计师和艺术家使用的编程语言,以交互为特色。Processing可以通过串口和Arduino进行互动,同时支持摄像头的视频编程,用来实现触发拍照比较容易。
Processing的下载地址:http://www.processing.org,是一个绿色软件,解压就可以使用。
首先要导入两个库,processing.video为摄像头的库,processing.serial则为串口通讯的库。因为Processing库的使用一般都比较简单,所以代码并不复杂。具体的代码如下页图6所示。
为了让Processing保存的图片不会被覆盖,我写了一个getfile( )函数,用系统时间和程序运行时间组成一个有规律的文件名。
注意:如果你直接运行上述的代码,Processing可能会给出错误提示。一般来说,是因为你的计算机没有串口设备引起的,安装Arduino的驱动后就可以正常运行。
● Arduino端的触发器制作
触发器其实就一个传感器加Arduino核心板。为帮助大家打开思路,在左表中我选择了几个常见的传感器进行说明。当然,如果要实现比较复杂的条件判断,可能需要更多的传感器组合。
如果仅仅是单个传感器,Arduino的编程是很简单的。只要在高电平的状态下,发送1给Processing即可。用ArduBlock、Mixly等图形化编程软件,都能实现这样的功能。我将红外热释电传感器接到Arduino的4号引脚,具体的代码如下页图7所示。
● 效果测试和优化
将程序下载到Arduino后,就可以测试了。下页图8为程序界面,下页图9为定时拍摄并保存的照片。
需要提醒大家的是,照片拍摄的质量和摄像头像素和速度有关系。据说市场上已经有帧数高于150/秒的摄像头。从功能上看,我们已经完成了预设的目标,实现了类似“电子眼”的触发拍照。如果把代码迁移到树莓派之类的迷你PC里,这个作品就有了一定的应用价值。其实,利用Processing强大和简介的视频处理库,我们还可以做更多和摄像头相关的应用,如延时摄像、定时摄像,等等,请关注下一期的文章。