首页
学习
活动
专区
工具
TVP
发布

想上分?树莓派微信跳一跳之Python操作

第一次是看到朋友圈有只喵星人在玩这个游戏,那时候去马来西亚旅游了(好多老外也用微信),回来之后发现这游戏越来越火,网上笔算的也有,直接抓包修改分数的也有,Alex给我看了一篇用舵机做的,python+opencv写的代码,我说这个应该labview用视觉也能做吧!于是用python试了一遍,labview也试了一遍。

Introduction

玩法的原理看起来很简单,跳跃距离跟按压时间成正比。使用python的PILLOW库工具抓取每次跳跃之前的像素点距离,对应算出按压时间。由于算法已经有了,我这个后人也只是过来乘乘凉而已,来学习一下python的各类库函数用法(PIL等),OpenCV还有与树莓派通讯(socket)。源码参考末尾。

比较关建的一步是利用OpenCV (Open Source Computer Vision Library)找出棋子、计算边缘(高斯模糊转化为灰度图)、分析图像,计算距离

高斯处理

计算距离

具体步骤如下:

将手机屏幕投影至电脑

使用PIL 库截取屏幕,将每一次跳跃前图像保存至后台

利用OpenCV计算跳跃距离,获得按压时间

利用socket与树莓派建立通讯,windows端发送按压时间

树莓派端不停监听windows端时间数据,然后控制舵机动作

What you will need

硬件

树莓派

iphone

舵机上S3003

自制电容笔

自制底座

杜邦线

棉签,吸管等

软件

python with Pillow,numpy ,pyfirmata,opencv

Airplayer 镜像工具

putty

filezilla

What you will do

1.windows端安装运行环境:

2.widows安装Airplay镜像工具,打开iPhone客户端屏幕镜像,这里在windows端一定要全屏显示,因为利用python PIL截屏是按全屏像素定义的。

def pull_screenshot():

im = ImageGrab.grab((654, 0, 1264, 1080))

im.save('a.png', 'png')

3.将python舵机控制程序放至树莓派端(可以使用filezilla),并开启监听端口。

4.打开windows端python代码,设置树莓派IP地址,运行程序:

ip_addr = '192.168.1.115'

send_time函数用于发送windows端数据,开启9999端口号:

def send_time(time):

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

s.connect((ip_addr, 9999))

s.send(str(time).encode('utf-8'))

s.close()

5.制作底座和电容笔,调好按压距离。

我用了跟棉签,外面套根吸管,笔头沾水,然后包着铜线(锡纸会好一点,接触面积大),铜线接树莓派GND也可手抓住。

Refer to:

源码:

https://github.com/yangyiLTS/wechat_jump_game_iOS

https://zhuanlan.zhihu.com/p/32526110

https://opencv.org/

https://baike.baidu.com/item/电容笔/7622012?fr=aladdin

与我们一起踏上树莓派的奇幻之旅吧~

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20180304G0GNCS00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券