本文来源吾爱破解论坛
本帖最后由 slofLeo 于 2019-5-18 00:26 编辑 QQ截图20190412075448.png (21.72 KB, 下载次数: 0)
下载附件
保存到相册
应网友要求,把代码放上了,自己去配置文件改api参数吧。小白首次发帖,大神轻喷。
最近给孩子整理错题,发现手抄,键盘输入等都效率太低,网上找了几个错题整理的APP,也不是很满意,不是识别较差就是不能修改,要不就要先买个会员。再说手机拍照后还要涂涂抹抹,用手机修改题目也不太方便。没办法,现学现卖,网上查了几天资料,拼凑了一段代码,初步实现了功能。
目前整理错题流程如下:手机拍照,用微信或QQ批量传到电脑上,然后打开图片,运行程序,选择区域,识别后自动写到result.txt中,然后再对照图片修改识别错误,保存,下一张图片,再识别,然后回到Notepad++,提示文件已被修改,自动重新打开,再修改错误,依次循环。最后复制到word中查找替换,简单排版。感觉效率还可以接受。如果有更有效的方法还请大家教我。
使用python3.7实现的,用了tkinter做的界面,需要PIL库和百度api,原谅我不厚道的在帖子代码中去掉了我的api-key,附件里的py文件中有,欢迎土豪打赏。
打开百度AI开放平台,进入控制台中的文字识别应用(需要有百度账号)。创建一个应用,并进入管理应用,记下 AppID, API Key, Secrect Key,调用 API需用到。最后安装 python 的百度ai接口的的库。
pip install baidu-aip
[Python] 纯文本查看 复制代码
import tkinter import tkinter.filedialog import os from PIL import ImageGrab from time import sleep from aip import AipOcr from os import path root = tkinter.Tk() #设置窗口大小与位置 root.geometry('100x40+1000+300') #设置窗口大小不可改变 root.resizable(False, False) def baiduOCR(picfile,outfile='result.txt'): """利用百度api识别文本,并保存提取的文字 picfile: 图片文件名 outfile: 输出文件,默认result.txt """ filename = path.basename(picfile) APP_ID = '你的AppID' # 你的AppID API_KEY = '你的API Key' # 你的API Key SECRECT_KEY = '你的Secret Key' # 你的Secret Key client = AipOcr(APP_ID, API_KEY, SECRECT_KEY) i = open(picfile, 'rb') img = i.read() print("正在识别图片:\t" + filename) """ 可选参数,可识别旋转的图像 """ options = {} options["detect_direction"] = "true" message = client.basicGeneral(img, options) # 通用文字识别 # message = client.basicAccurate(img, options) # 通用文字高精度识别 print("识别成功!") i.close() with open(outfile, 'a+') as fo: # fo.writelines("+" * 60 + '\n') # fo.writelines("识别图片:\t" + filename + "\n" * 2) # fo.writelines("文本内容:\n") # 输出文本内容 for text in message.get('words_result'): fo.writelines(text.get('words') + '\n') fo.writelines('\n') print("文本导出成功!") #用来显示全屏幕截图并响应二次截图的窗口类 class MyCapture: def __init__(self, png): #变量X和Y用来记录鼠标左键按下的位置 self.X = tkinter.IntVar(value=0) self.Y = tkinter.IntVar(value=0) #屏幕尺寸 screenWidth = root.winfo_screenwidth() screenHeight = root.winfo_screenheight() #创建顶级组件容器 self.top = tkinter.Toplevel(root, width=screenWidth, height=screenHeight) #不显示最大化、最小化按钮 self.top.overrideredirect(True) self.canvas = tkinter.Canvas(self.top,bg='white', width=screenWidth, height=screenHeight) #显示全屏截图,在全屏截图上进行区域截图 self.image = tkinter.PhotoImage(file=png) self.canvas.create_image(screenWidth//2, screenHeight//2, image=self.image) #鼠标左键按下的位置 def onLeftButtonDown(event): self.X.set(event.x) self.Y.set(event.y) #开始截图 self.sel = True self.canvas.bind('<Button-1>', onLeftButtonDown) #鼠标左键移动,显示选取的区域 def onLeftButtonMove(event): if not self.sel: return global lastDraw try: #删除刚画完的图形,要不然鼠标移动的时候是黑乎乎的一片矩形 self.canvas.delete(lastDraw) except Exception as e: pass lastDraw = self.canvas.create_rectangle(self.X.get(), self.Y.get(), event.x, event.y, outline='black') self.canvas.bind('<B1-Motion>', onLeftButtonMove) #获取鼠标左键抬起的位置,保存区域截图 def onLeftButtonUp(event): self.sel = False try: self.canvas.delete(lastDraw) except Exception as e: pass sleep(0.1) #考虑鼠标左键从右下方按下而从左上方抬起的截图 left, right = sorted([self.X.get(), event.x]) top, bottom = sorted([self.Y.get(), event.y]) pic = ImageGrab.grab((left+1, top+1, right, bottom)) fileName = 'tmp2.png' if fileName: pic.save(fileName) print("图片识别...") baiduOCR(fileName) sleep(0.1) os.remove(fileName) #关闭当前窗口 self.top.destroy() self.canvas.bind('<ButtonRelease-1>', onLeftButtonUp) #让canvas充满窗口,并随窗口自动适应大小 self.canvas.pack(fill=tkinter.BOTH, expand=tkinter.YES) #开始截图 def buttonCaptureClick(): #最小化主窗口 root.state('icon') sleep(0.2) filename = 'temp.png' #grab()方法默认对全屏幕进行截图 im = ImageGrab.grab() im.save(filename) im.close() #显示全屏幕截图 w = MyCapture(filename) buttonCapture.wait_window(w.top) #截图结束,恢复主窗口,并删除临时的全屏幕截图文件 root.state('normal') os.remove(filename) buttonCapture = tkinter.Button(root, text='截图识别', command=buttonCaptureClick) buttonCapture.place(x=10, y=10, width=80, height=20) #启动消息主循环 root.mainloop()
土豪专用链接:
土豪打赏
下载积分: 吾爱币 -1 CB
下载积分: 吾爱币 -1 CB
版权声明:
本站所有资源均为站长或网友整理自互联网或站长购买自互联网,站长无法分辨资源版权出自何处,所以不承担任何版权以及其他问题带来的法律责任,如有侵权或者其他问题请联系站长删除!站长QQ754403226 谢谢。
- 上一篇: python抓取百度图片
- 下一篇: python控制浏览器爬取百度贴吧回复并写入Excel