本项目使用OpenCV软件库进行图像识别:由语音助手Siri通过快捷方式(shortcuts)和ssh控制,伺服器(电机)将使摄像机对准目标。项目仅支持三种颜色,用户可根据设计需求添加颜色。BeagleBone®的处理器有所限制,处理每一图像帧都需要很长时间,所以只能指向图像颜色,而不是跟踪。实施足够的优化和计算能力,可以轻松将其转变为图像跟踪器。
项目所需硬件:BeagleBone® Black、伺服器、USB网络摄像头、LED或其他色彩鲜艳的物体、支持Siri的iPhone或iPad(可选)。
OpenCV是一个基于BSD许可(开源)发行的跨平台计算机视觉和机器学习软件库,可以运行在Linux、Windows、Android和Mac OS操作系统上。
硬件
图注:伺服器与相机固定
将USB相机连接到USB端口。将伺服器连接到BeagleBone®上的5V。如果伺服器未通电,则可能需要外部5V电源连接BeagleBone®。伺服器信号连接到8_13引脚。将伺服器和摄像机捆绑或粘合在一起,相机还可以用于其他用途,因此使用一些电线将相机和伺服器绑在一起。
安装说明
安装openCV,请连接到BeagleBone并键入:
如果发生错误,请键入:
通过线缆将BeagleBone®连接路由器,确保iOS设备上存在快捷方式,可以从APP商店安装。单击创建,添加快捷方式和脚本。然后选择“通过SSH运行脚本”。触摸“显示更多”以查看所有选项。转到路由器配置页面,然后找到BeagleBone®的IP地址。输入IP地址到“Host”,端口为22。用户通常是Debian,输入密码。在脚本中输入sudo python3red.py。单击刚添加模块下的+,然后再次选择脚本。选择显示通知,并将其配置为“I am pointing red”。最后,将快捷方式重命名为“point red”或Siri可识别的任何名称。如果要处理更多颜色,只需复制此快捷方式并更改其运行代码。
配置所有快捷方式后,屏幕应如下所示。
图注:快捷方式
使用说明
按下主屏幕按钮激活Siri。告诉Siri“指向红色/蓝色/绿色”,然后等待伺服器和相机指向颜色。完成此过程后,设备中将弹出一个通知,表示已完成。
图注:SSH的设置
工作原理
1、扫描颜色
因为图像处理太慢,并且伺服器的精度不是很准确,选择扫描多个角度并找到使相机和颜色对齐的最佳角度。可以在代码中更改扫描步骤,更多步骤意味着需要更多的时间才能看到结果。
2、图像处理与识别
为了处理图像并找到目标位置,使用openCV函数。VideoCapture、bitwise_and、GaussianBlur、cvtColor、inRange、erode、threshold,adaptiveThreshold,HoughCircles和imwrite。
●首先,使用VideoCapture将捕获图像帧保留在网络摄像头中。由于BeagleBone® Black上USB端口的带宽有限,必须将图像帧设置为较小尺寸。这会损害分辨率。一种解决方案是使用具有内置H.264压缩协议的其他网络摄像头。压缩图像帧并在电路板上解压缩后,将允许USB端口传输更高分辨率的图像帧。使用VideoCapture.read()捕获当前图像帧,并将其保存为矩阵。imwrite用于将图像保存在本地文件中。
●使用cvtColor将图像帧设置为COLOR_BGR2HSV,将图片转换为hsv图片。将一定范围的hsv值设置为特定颜色,然后使用inRange(hsv,lower_range,upper_range)将目标颜色与周围环境分开。函数bitwise_and(原始图片,hsv图片)用于在原始图片上显示分离的部分,并删除环境。
●GaussianBlur能够使图片模糊。
●使用cvtColor(frame,cv2.COLOR_RGB2GRAY)将图片设置为灰度。
●现在,目标对象已经与环境分离。但是,图片通常包含大量噪点,这是由复杂背景中的相似颜色引起的。erode用于消除图像噪音。
●选择Threshold”或AdaptiveThreshold使图像转换为二进制颜色。使用Threshold时,需要手动输入阈值。adaptiveThreshold能够在图像的每个小区域中使用自适应阈值。
●最后,需要从图片获得轴坐标。一种简单的方法是使用for循环遍历图片上的每个像素。由于图片为二进制颜色,因此目标已经分离。查找与周围环境不同的像素将是目标位置。另一种方法是使用HoughCircles,根据图片中找到的任何曲线绘制成圆,该信息将被保存,并且中心位置将为目标位置。
图注:原始图片、灰度调节前的图片、灰度调节后的图片