注意!仅供学习使用!本程序仅仅是为了学习而产生,本人不提供任何二进制文件。
视频地址:
http://www.acfun.cn/v/ac4179093
https://www.bilibili.com/video/av18088334/
源代码地址:
https://github.com/Mfweb/Wechat-Jump-Game
本着学习的目的,搞了一个晚上。手机图像使用AirPlay传输到电脑;先使用了一次图片查找,查找当前位置,本打算所有物体都使用图片查找的方式,但是无奈速度太慢(Surface pro4 I5下10张图片要1S才能查找一次),后来使用处理后的图像进行特征判断来查找,勉强能达到要求。
左下角先提取到当前位置->截取当前位置的上半部分->过滤掉背景色->提取图像中符合尺寸的物体->查找顶端->查找两端位置。
2.0支持点击跳跃,点击哪个位置就会自动调到那里,同时修改了获取当前位置的方法,提高刷新速率。
蓝色方框为等待跳跃的物体,红色十字为检测到的中心:
距离较近时虽然提取独立物体出现问题,但是还能稳定的找到中心点圆形物体获取结果表面复杂物体计算错误
经过上面的方法,基本上能够查找到大部分方块,但是有时候很小的方块离得很近或者表面复杂的物体(目前为止只有魔方会每次都无法识别)的时候会失效,于是又做了一个根据延时自动计算落点的方案;这个方案虽然麻烦点但是能跳所有的位置。
简单的测试像素与时间的大概比例是6.1左右,也就是说每多跳1PX,则需要延时6.1MS。这只是简单的计算得到的,当采集比例发生变化或者屏幕尺寸改变时这个比例也会发生改变;目前跳到1000多没有发现有变化,也就是认为时间与距离是简单的一次函数关系。
图中粉色圆圈即是输入延时后落点范围。
下位机
下位机使用的是STM32,当然其他的也可以,接触点使用铝箔纸,手机处于充电状态且与STM32共地。IO初始化为开漏状态。当输出1时,IO内部MOSFET断开,此时屏幕不触发;当输出0时候,IO内部MOSFET导通,此时相当于屏幕通过铝箔接地,电容发生改变,触发触摸。要注意铝箔纸应当足够的大,否则手机的触控IC会认为是误触而忽略。
铝箔纸
超过800分就不会被上传到排行榜。。。
发表回复