预备软件(这几个都百度一下,攻略多,不难):
1.intellij idea下载
2.python下载
3.requests、AIP 、PIL安装
4.adb下载(用于手机截图)
https://www.lfd.uci.edu/~gohlke/pythonlibs/
这个网址有很多python可以直接下载的
首先将整个过程分为几步:
os.system('adb shell screencap -p /sdcard/image.png')
os.system('adb pull /sdcard/image.png')
图片预处理:保存的图片需要进行裁剪,使用img.crop()函数操作,里面的4个参数分别是图片的左上和右下(一个坐标是两个参数)。如果题目和答案在一起,中间没有任何其他汉字,就只需进行一次裁剪即可拿去文字识别,如果中间有汉字,就将题目和答案分布裁剪下来,剩下可以选择将题目和答案分开进行文字识别,或者将题目和答案拼接在一张图上,我选的方法是后者。首先创建一个空图片,然后用paste函数将题目和答案粘贴上去,合成一张,识别一次即可。
裁剪需要根据位置,自己试几次,我这个是找的VX里面 头脑王者做得试验。
文字识别:使用的OCR,百度一下‘百度AI’,进入官网,右上角有个控制台,点击文字识别,自己创建一个项目,记录下面代码所需的三个参数即可.(我建了一个项目后,第二天就有人打电话过来问我是不是在百度上使用了智能工具,吓我一跳,还以为咋了,最后知道是来推销的不用管)
# 文字识别
APP_ID = '16227766'
API_KEY = 'FgubvnxtReF32vR4jGsS4FY4'
SECRET_KEY = 'R5YbhWyY2NMF102wRZTwVm9U4hjeAwQG'
client = AipOcr(APP_ID, API_KEY, SECRET_KEY)
i = open(r'D:\dati\new_img_fb.png', 'rb')
img = i.read()
img_res = client.basicGeneral(img)
return img_res
# 进行百度
url = 'https://www.baidu.com/s'
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.121 Safari/537.36'
}
data = {
'wd': question
}
res = requests.get(url=url, params=data, headers=headers)
res.encoding = 'utf-8'
html = res.text
answers = [x['words'] for x in info['words_result'][-4:]]
question = ''.join([x['words'] for x in info['words_result'][:-4]])
resy = baidu(question, answers)
print(resy)
使用的答题判定比较简单,就是通过百度你的问题,然后在该网页上找到4个答案中,出现频率最高的答案,然后进行排序,第一个答案就是正确答案(感觉这种方式,答案正确率不是很高,一旦问的是以下哪个不是,必定出错)
整个过程说起来很简单,但毕竟刚开始学python,很多不明就里,自己好多地方出错过,自己百度后一个一个函数验证的。
整个代码贴在下面(新手写代码,不喜欢写注释,见谅):
import requests
import os
from PIL import Image
from aip import AipOcr
def get_screenshot():
# 截屏
os.system('adb shell screencap -p /sdcard/image.png')
os.system('adb pull /sdcard/image.png')
def get_word_by_img():
# 文字识别
APP_ID = '16227766'
API_KEY = 'FgubvnxtReF32vR4jGsS4FY4'
SECRET_KEY = 'R5YbhWyY2NMF102wRZTwVm9U4hjeAwQG'
client = AipOcr(APP_ID, API_KEY, SECRET_KEY)
i = open(r'D:\dati\new_img_fb.png', 'rb')
img = i.read()
img_res = client.basicGeneral(img)
return img_res
def baidu(question, answers):
# 进行百度
url = 'https://www.baidu.com/s'
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.121 Safari/537.36'
}
data = {
'wd': question
}
res = requests.get(url=url, params=data, headers=headers)
res.encoding = 'utf-8'
html = res.text
for i in range(len(answers)):
answers[i] = (html.count(answers[i]), answers[i], i)
answers.sort(reverse=True)
return answers
def run():
while True:
input("回车答题")
get_screenshot()
img = Image.open('D:\dati\image.png')
title_img = img.crop((80, 500, 1000, 880))
answers_img = img.crop((80, 960, 1000, 1720))
new_img = Image.new('RGBA', (920, 1140))
new_img.paste(title_img, (0, 0, 920, 380))
new_img.paste(answers_img, (0, 380, 920, 1140))
new_img.save('new_img_fb.png')
info = get_word_by_img()
answers = [x['words'] for x in info['words_result'][-4:]]
question = ''.join([x['words'] for x in info['words_result'][:-4]])
resy = baidu(question, answers)
print(resy)
if __name__ == '__main__':
run()
E:\新建文件夹\python.exe D:/dati/main.py
回车答题
[ 11%] /sdcard/image.png
[ 23%] /sdcard/image.png
[ 35%] /sdcard/image.png
[ 47%] /sdcard/image.png
[ 59%] /sdcard/image.png
[ 71%] /sdcard/image.png
[ 82%] /sdcard/image.png
[ 94%] /sdcard/image.png
[100%] /sdcard/image.png
/sdcard/image.png: 1 file pulled. 23.0 MB/s (552991 bytes in 0.023s)
[(19, '路飞', 0), (3, '汉库克', 2), (0, '路由器', 1), (0, '路夫', 3)]
回车答题
Process finished with exit code -1
正确率跟题目类型有关.
终于搞定了