Python 打造微信小程序-加减大师辅助程序
写在前面:
主要运用python进行简单的图像处理,不得不说python用起来是真的爽,各种库的学习使得开发变得越来越简单...
其实玩过这个小程序的应该知道实现起来也不是很难,很适合新手练手。第一次到了500多题不知道是因为被检测了还是网掉了分数没提交。。。结果以后到200分就手动停了,发现提交是正常的......
话不多说先上效果:(gif太麻烦了将就着看吧......)
首先说一下思路:
1.运用投屏软件将手机屏幕投屏到电脑。(实际上也可以运用adb截图再处理,但是adb太慢到200题后速度会变得相对很快,所以运用投屏,我这里用的是:vysor,自行下载安装就好了)
2.图片处理。截图+识别(图像处理这里用的是PIL库,运用感知哈希算法、汉明距离进行图片匹配)
3.得到结果并点击。
**-***---**-**-*-**-*-*乱而华丽的分割线*--*--**-*--*--*****--*-
那就开始我们的代码吧:
1. 首先安装PIL库:https://www.cnblogs.com/mrgavin/p/8177841.html
ok很快!我们安装好了PIL。
我这这里主要用了其中的Image:
from PIL import Image
官方文档:http://effbot.org/imagingbook/image.htm
这里有个中文的自己写的:https://blog.csdn.net/icamera0/article/details/50706615(感谢大佬)
2.图片处理,我们需要得到图片的哈希值(dHash值),并运用汉明距离在我们自己做的列表中匹配最接近的。
from PIL import ImageGrab img = ImageGrab.grab((left,top, right, bottom))#截屏幕
介绍一下我们这里用的感知哈希算法:
一张图片有很多个像素点构成,每个像素点都是一个rgb,例如:
是一个440*300的图片,其中的像素点达到了13万...都计算的话显然有点吃力,所以我们缩小他的大小,把它缩小到15*20(当然你可以缩到其他的数字...主要是让他足够小并能比较准确的被识别)。然后的得到他的rgb,当然这里我们可以先对其进行二值化,然后在得到他的黑白图片,这样我们可以直接得到它的一个有 1,0组成的数组。那这个数组对于这个图片来说就是他的dHash。
这里又有一个问题就是每个图片都是不同的,不过这似乎很简单就可以解决,我们可以裁剪出其中每个数字并将其dHash然后对我们预先处理(首先得到一遍1-9以及'-','+',='的dHash存储数组)的dHash值进行比较就可以了。
再来介绍一下我们的汉明距离:
实际上很简单,对象a变成对象b需要改变几个元素,例如:字符串"1235"变成"1257"需要改变的是2,2就是它们的汉明距离。我们可以运用其匹配两个dHash,一般两个相同数字图片的汉明距离在5以内。
开始我们的主要函数:
img = Image.open(path) # 打开一张图片 img = img.convert('L') # 灰度转化 re_img = img.point(table, mode) # table可以为数组 在将灰度图像转换为位图图像(模式”1“)时,所有非零值都设置为255(白色) newimg = img.crop(left, up, right, bottom) # 裁剪 small_img = re_img.resize((width, height), mode) # 缩小图片这里用 mode=Image.LANCZOS
我们可以运用上面的某些函数将普通的img,转换为黑白图片。当然这里point中的table可能有点问题,我们直接上代码:
table = [] for i in range(256):if i > threshold:table.append(0)else:table.append(1) bin_img = img.point(table, '1')
然后我们要对其进行裁剪,分为两部分:横向,纵向。我们不难看出上面图片中每个数字之间是背景色的,转为黑白图片后就是白色的。
我们调用:
import numpy num_img = numpy.array(re_img)#将其转换为二维数组形式,其黑为1,白为0。
当然这还不足以让方便我们识别我们该剪切那一部分,我们需要将其每一列每一行求和分别得到两个一维数组。
list(numpy.sum(numpy.array(img) == 0, axis=1)) #axis为0为列求和,1为行求和 返回一维数组。(我也不太确定到底是0,1对应的是谁)
得到了他们求和的数组之后我们判断一下那一块是大于零的并用crop裁减出来就可以了。
别忘记将其缩小!别忘记将其缩小!别忘记将其缩小!
横竖裁剪完成后我们的到了每一个数字的缩小版,下面我们就要对其进汉明距离的匹配了。这里也很简单我们只要判断一下两个的dHash有哪些不同就好了,这里的dHash很明显就是我们转换每个缩小版数字的数组。找出最小的汉明距离然后返回它对应的值(这个应该是你已经初始化完成的,我们先找几个样例然后得到其dHash,手动输入他对应的数字是多少并储存)。
#如果有问题可以去下面代码借鉴一下。
运算:
上面我们终于就完成了,下面的是运算,这个其实对于学过算法的其实不难,但是python好就好在给你提供了你意想不到的库。比如说得到字符串中运算结果,例如
eval("2+5")==7
我们可以直接调用eval运算出结果并于结果对比。
3.点击:
点击还是比较容易实现的,python库如此强大!
import win32api, win32gui, win32con win32gui.GetCursorPos()#得到鼠标位置 win32api.SetCursorPos(x, y)#改变鼠标位置到x,y win32api.mouse_event(win32con.MOUSEEVENTF_LEFTDOWN | win32con.MOUSEEVENTF_LEFTUP, 0, 0)#点击。0,0为偏移量具体百度
------------------------------------------不乱但是不华丽的分割线-------------------------------------------------
注意点:我们还需要初始化获取'44'这两个数字的dHash,因为44之间是连着的所以不会被我们程序分开然后就会得到错误结果。算是个坑点吧。
这一只有图像处理与匹配的函数,具体的其他的还是蛮简单的。
项目自取:https://github.com/goodtimep/python
Python 打造微信小程序-加减大师辅助程序相关推荐
- 微信小程序 加减控件
微信小程序 加减控件 <!--index.wxml--> <view class='stepper'><text class='{{minusStatus}}' type ...
- python开发微信小程序-Python 开发者的微信小程序开发实践
导读 在知乎上,有人提问"如何使用 Python 开发微信小程序". 其实微信小程序作为一个前端的机制,Python 并不能插上边.只不过可以作为后端接口为微信小程序提供数据服务而 ...
- 用python 玩微信小程序“跳一跳”
12月28日,微信上线了小游戏「跳一跳」,瞬间成了全民游戏,如何牢牢占据排行榜的第一位呢?用Python帮助你,Python真的无所不能. 作为技术出身的我们,是不是想用技术改变排名呢? 注意:本文适 ...
- python开发微信小程序-微信小程序开发:python+sanic 实现小程序登录注册
开发微信小程序时,接入小程序的授权登录可以快速实现用户注册登录的步骤,是快速建立用户体系的重要一步.这篇文章将介绍 python + sanic + 微信小程序实现用户快速注册登录全栈方案. 微信小程 ...
- 免费微信小程序,发一发打造微信小程序Saas营销服务移动工具箱
微信是这个时代的伟大产物:小程序是微信的伟大产物:"发一发"承接伟大的产物,为广大用户提供免费的服务. 我们不知道下个时代会有什么形象级的产品诞生.但是,我们能抓住的就是眼前的所见 ...
- python玩微信小程序游戏_使用python实现微信小程序自动签到功能
功能描述目标 完成多账号微信小程序每天自动签到 输出 签到成功则向微信群发送签到成功的信息 否则提示用户签到失败,需手动签到 包管理 requests itchat time threading 程序 ...
- python写微信小程序源码示例_python实现微信小程序用户登录、模板推送
python实现微信小程序用户登录.模板推送 来源:中文源码网 浏览: 次 日期:2019年11月5日 [下载文档: python实现微信小程序用户登录.模板推送.txt ] (友情提示 ...
- 微信智慧外链接微信小程序源码下载,支持多端转换,致力打造(微信)小程序生态的基础必需品
全新运营版微信小程序智慧链接生成工具.致力打造(微信)小程序营销推广生态的基础必需品:全新UI界面及架构体系打造小程序智慧链接:只要拥有你就是手握百万流量的大佬!全新运营致富版微信小程序链接生成工具: ...
- Python Flask微信小程序登录流程及登录api实现代码
1.小程序端调用wx.login 2.判断用户是否授权 3.小程序端访问 wx.getUserInfo 4.小程序端js代码:+ wx.login({success: resp => {// 发 ...
最新文章
- JAVA爬虫--JS文件数据快速解析
- 要管理此计算机上的用户账户,win10用户账户控制 你要允许此应用 若要继续请输入管理员密码...
- go初学者安装echo框架
- sql server2008中怎样用sql语句创建数据库和数据表
- Steeltoe之Config客户端篇
- Feign 简介和使用
- IIS7 配置 PHP
- Ubuntu16.4配置caffe详细流程
- Git常用指令的使用
- ipq wifi校准
- Golang——time.Ticker定时器
- kettle命令运行工具(pan、kitchen、carte)
- 【编程原则】预则立,不预则废
- Pandas的panel结构
- 如何快速新建文件和文件夹
- 网络设备配置与管理-综合实验1
- 录屏转gif的好用小工具ScreenToGif,免费又好用!
- “辣条一哥”卫龙冲击港股IPO,我又吃出一家上市公司
- Win10 文件管理器右侧pdf 无法预览
- iOS开发-改变图片的颜色
热门文章
- gearman mysql_gearman+mysql实现持久化队列
- Servlet文件上传之FileItem类的常用方法
- 爬虫项目:爬取A股3000多家上市公司Python代码+解释
- 爬虫——喜马拉雅-话说明朝播放列表
- 计算机拒绝SFTP服务,SFTP上传文件权限被拒绝
- MySQL STRAIGHT_JOIN
- STM32外设系列—sg90(舵机)
- Collections.sort实现倒序汉字拼音排序,默认是按照正序进行汉字拼音排序MYSQL语句支持汉字排序SQL汉字排序
- CMD关闭端口号的命令
- 怎么撤销定时说说_苹果6怎样取消定时说说