Tensorflow最近发布了用于对象检测的对象检测接口(Object Detection API),能够定位和识别图像中的对象。它能够快速检测图像允许从视频帧甚至网络摄像头进行连续检测。它也可以用于构建鼠标“Tensormouse”,一个使用网络摄像移动光标的应用程序。
你是否曾经想过使用其他物品比如香蕉来移动你的光标?我们现在就可以实现!
TensorMouse是一个小型的开源Python应用程序,它允许你通过在网络摄像头前移动任意物品(如杯子,苹果或香蕉)来移动光标,他可以做电脑鼠标或触控板的替代品。
TensorMouse允许你用香蕉玩游戏
TensorMouse记录来自网络摄像头的图像序列。然后将这些数据输入到Tensorflow对象检测接口中,返回对象的概率和位置的图。然后移动鼠标光标,使光标位置与图像上对象的位置对应。
例如,如果在图像的左上角检测到对象,光标将移动到屏幕的左上角。
应用程序的主要部分按顺序重复以下步骤:
使用Python OpenCV模块捕获来自网络摄像头的帧。它提供了一个跨平台的工具,用于快速的图像采集和缩放。然后将图像缩放到360p以提高性能。
对象检测用于确定网络摄像头框中所需对象的相对位置。它使用在COCO数据集上训练的Tensorflow对象检测接口固有的Mobilenet神经网络图。该数据集由80个不同的对象组成,主要包括杯子,苹果,餐具等家用物品。
检测到的具有带有相应概率的对象
如果检测到的对象相应的概率超过指定的阈值(一般为85%),则TensorMouse会将该对象视为检测对象,并计算检测到对象的方框的中心。
Python包的pynput为执行鼠标指针的移动提供了跨平台支持。基于检测到的对象的相对位置将光标移动到该位置。意思是如果在图像的左上角检测到物体,光标将移动到屏幕的左上角。
应用程序然后返回到步骤1以从网络摄像头检索下一个图像并重复此过程。
应用程序的源代码发布在我的Gitlab repo中(https://github.com/tadejmagajna/TensorMouse)。
TensorMouse可以在任何主流的(Windows,Linux或MacOS)平台和几乎任何机器上运行,但是要实现良好的帧速率,它需要一个好点的CPU或支持CUDA的显卡。
安装时要确保包依赖关系都已安装好。
一旦安装了依赖项并激活环境,我们可以简单地运行TensorMouse:
python tensormouse.py
然后等待约10-20秒,会有绿色消息显示Tensormouse成功启动。
这将运行Tensormouse跟踪其默认对象—杯子。但是你可以通过提供可选参数(obect="OBJECTNAME")使其与80个COCO数据集对象中的任意一个配合使用。
你还可以使用CTRL和ALT执行点击和拖动。