介于小朋友爱玩手机,但手机伤眼。故想利用身边的物件整个墙面的手机触控投影。

一、准备材料

  1. 两个摄像头(一个要求广角120度以上,至于像素要求不高。笔者用一个720p的。另一个尽量对捕获的色彩饱和度越高越好,笔者用了个1080p的高清直播摄像头。尽量先利用身边的材料即可,后续可自行对代码进行调整)
  2. 带手机同屏的投影仪(也可以配个HDMI的投屏器,便宜。(∩_∩))
  3. 安卓手机一台(笔者用高通骁龙652,3G内存。现在估计这种二手机就二、三百元)
    自制手机触控投影_第1张图片
  4. PC一台(I3即可)
  5. 红色LED发光件(可以淘宝看看 儿童玩具发光戒指 等,笔者是把发光耳勺的头部换成红色LED再套个红色塑料壳。下文表述为发光笔)
    自制手机触控投影_第2张图片

二、原理描述
自制手机触控投影_第3张图片
1.两个摄像头各自分管,协同配合。顶部的判断发光笔触摸到墙面否,主摄像头识别发光笔在投影中正面的点击位置。
2.投影仪通过同屏方法连接手机屏幕。
3.PC上实现将摄像头识别的点击信息传递给手机,控制其进行相应的点击、滑动操作。

三、实现代码
代码用python完成。具体已上传至github(https://github.com/chenfengyan/Touch-projector)
代码中需要根据自己的实际信息修改相应配置。
const.py 中 填写 手机的device id (可用adb devices查看)
phone_operator.py 中 填写 'phone_location_in_capture' (按序是 竖屏时左上点、右下点 横屏时左上点、右下点 坐标 以及 手机屏幕高度的分辨率)
最后,调用K12_touch_projector.py 的main函数可以开始执行。笔者连接两个摄像头到PC上后,cv2.VideoCapture(0)是Top_camera, cv2.VideoCapture(1)是Main_camera.需按情况自行调整

四、实现情况和待改进点
自制手机触控投影_第4张图片
当前使用情况,可以看看B站上的视频,毕竟只有视频才能更好的让人体验使用的延时。https://www.bilibili.com/video/av82652147/
改进点:

  1. 当前只有命令行下的python脚本,没有GUI界面。后续考虑加个 Twkinter 的GUI面板,再打成windows的安装包。
  2. 触控有延时。
    图像识别PC处理摄像头的帧率可以到25FPS,还算满意。
    但是下发到手机的触控命令(adb命令)耗时久(约0.1s)。原因是PC到手机的adb连接效率不高。暂时的换性能高的手机。市面上触控投影由于是内嵌安卓系统,故通信上没有这层限制。

以上如果大家有什么建议或感受,欢迎留言。