树莓派微信跳一跳之Python操作

jumper

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

 

Introduction

玩法的原理看起来很简单,跳跃距离跟按压时间成正比。使用python的PILLOW库工具抓取每次跳跃之前的像素点距离,对应算出按压时间。由于算法已经有了,我这个后人也只是过来乘乘凉而已,来学习一下python的各类库函数用法(PIL等),OpenCV还有与树莓派通讯(socket)。源码参考末尾。
比较关建的一步是利用OpenCV (Open Source Computer Vision Library)找出棋子、计算边缘(高斯模糊转化为灰度图)、分析图像,计算距离

具体步骤如下:

  1. 将手机屏幕投影至电脑
  2. 使用PIL 库截取屏幕,将每一次跳跃前图像保存至后台
  3. 利用OpenCV 计算跳跃距离,获得按压时间
  4. 利用socket与树莓派建立通讯,windows端发送按压时间
  5. 树莓派端不停监听windows端时间数据,然后控制舵机动作

 

What you will need

硬件

  • 树莓派
  • iphone
  • 舵机上S3003
  • 自制电容笔
  • 自制底座
  • 杜邦线
  • 棉签,吸管等

软件

  • python with Pillow,numpy ,pyfirmata,opencv
  • Airplayer 镜像工具
  • putty
  • filezilla

What you will do

1. windows端安装运行环境:

pip install numpy
pip install opencv-python
pip install PIL

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

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

发表评论