利用百度AIP打造自己的ocr程序(python+tk+PIL+百度aip)

利用百度AIP打造自己的ocr程序(python+tk+PIL+百度aip)

  • 程序

程序

import tkinter
from tkinter import *
import os
from PIL import ImageGrab
from time import sleep
from aip import AipOcr
root = tkinter.Tk()
#设置窗口大小
root.geometry('300x350')
#设置窗口名字
root.title('AIP OCR')
#设置窗口大小不可改变
root.resizable(False, False)
#用来显示全屏幕截图并响应二次截图的窗口类
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('', 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('', onLeftButtonMove)
        #获取鼠标左键抬起的位置,保存区域截图
        def onLeftButtonUp(event):
            global pic
            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))
            #弹出保存截图对话框
            pic.save('./temp.png')
            #关闭当前窗口
            self.top.destroy()
        self.canvas.bind('', onLeftButtonUp)
#让canvas充满窗口,并随窗口自动适应大小
        self.canvas.pack(fill=tkinter.BOTH, expand=tkinter.YES)
 #开始截图
def buttonCaptureClick():
    #最小化主窗口
    root.state('icon')
    sleep(0.5)
    filename = 'temp.png'
#grab()方法默认对全屏幕进行截图
    im = ImageGrab.grab()
    im.save(filename)
    im.close()
    #显示全屏幕截图
    w = MyCapture(filename)
    buttonCapture.wait_window(w.top)
    root.state('normal')
    #百度识别
    APP_ID = '21564513'
    API_KEY = 'YG4GFG0gzAdVAlXngL4IYVVN'
    SECRET_KEY = 'f2LoI0LSZQA93EuGGsZpgyquK1qDEj3S'
    client = AipOcr(APP_ID, API_KEY, SECRET_KEY)#创建连接
    data=open("./temp.png","rb").read()#打开并读取文件内容
    res=client.basicAccurate(data)#高精度
    strx=""
    for tex in res["words_result"]:#遍历结果
        strx+=tex["words"]#每一行
    T.insert(END, strx)
    #截图结束,恢复主窗口,并删除临时的全屏幕截图文件
    os.remove(filename)
buttonCapture = tkinter.Button(root, text='截图', command=buttonCaptureClick)
T = Text(root, height=21, width=100)
T.pack(side=LEFT)
buttonCapture.place(x=110, y=10, width=80, height=20)
#启动消息主循环
root.mainloop()

你可能感兴趣的:(机器学习,tkinter,python)