小白学Python之实现OCR识别

目录
  • 前期准备
  • 界面编写
  • 截图功能实现
  • OCR实现
  • 内容显示
  • 总结

前期准备

在这个阶段主要准备整个小程序的结构,既然要实现ocr,那么输入就是一张图片,而图片这里采用屏幕截图的方式获得,输出是文字,这里采用搜狗的ocr接口,我们把截好的图片传到搜狗ocr接口中,然后把返回的文字作为输出即可。

由于想做一个小程序,所以要为程序做GUI,这里采用tkinter编制GUI界面。

界面编写

界面主要就准备一个窗体,里面有菜单,给出OCR功能。

之后我们点击菜单,则启动一个截图功能,在截图完成后,我们就把截得的图片传入ocr接口并返回文字到主窗体中。

主面板的编写则直接使用tkinter建立菜单等

	root = Tk()
	root.title("小新的OCR")
	# 创建一个顶级菜单
    menubar = Menu(root)
    # 创建一个下拉菜单“文件”,然后将它添加到顶级菜单中
    filemenu = Menu(menubar, tearoff=False)
    filemenu.add_command(label="OCR", command=buttonCaptureClick, accelerator='Ctrl+N')
    filemenu.add_command(label="帮助",command=helpClick)
    filemenu.add_command(label="退出", command=root.quit)
    menubar.add_cascade(label="操作", menu=filemenu)
    # 显示菜单
    root.config(menu=menubar)
    root.bind_all("<Control-d>", lambda event: buttonCaptureClick())
    #启动消息主循环
    root.mainloop()

这样变回产生一个窗体,用户可以和这个窗体进行交互,你可以点击菜单,然后找到其子菜单中的OCR一项,点击它便会调用一个buttonCaptureClick的函数,这个函数就来产生截图,并且保存截图。

截图功能实现

截图功能我也是参考网上的内容,原理就是先把整个屏幕给捕捉到,然后监听鼠标事件,当鼠标左边按下则作为截图的左顶点,鼠标左键松下则最为截图的右底点,这样我们截图区域就出来了,然后进行保存即可。

#用来显示全屏幕截图并响应二次截图的窗口类
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.text =""
        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 ="temp.jpg"
            pic.save(fileName)
            self.text = get_text(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')
    root.withdraw()
    sleep(0.4)
    filename = 'temp.png'
    #grab()方法默认对全屏幕进行截图
    im = ImageGrab.grab()
    im.save(filename)
    im.close()
    #显示全屏幕截图
    w = MyCapture(filename)
    root.wait_window(w.top)
    #截图结束,恢复主窗口,并删除临时的全屏幕截图文件
    root.update()
    root.deiconify()
    text1.config(state = NORMAL)
    text1.delete(0.0,END)
    text1.insert('insert',w.text)
    text1.config(state = DISABLED)
    text1.pack()
    os.remove(filename)

OCR实现

因为OCR其实是采用了搜狗的接口,所以需要做的工作也不是很多,只需要把我们的图片传入即可。

def get_text(img_path):
    print("")
    img = img_path # 图片路径
    files = {"pic_path": open(img, "rb")}  # files # 类似data数据
    url = "http://pic.sogou.com/pic/upload_pic.jsp"  # post的url
    keywords = requests.post(url, files=files).text  # requests 提交图片
    url = "http://pic.sogou.com/pic/ocr/ocrOnline.jsp?query=" + keywords  # keywords就是图片url此方式为get请求
    ocrResult = requests.get(url).json()  # 直接转换为json格式

    contents = ocrResult['result']  # 类似字典 把result的value值取出来 是一个list然后里面很多json就是识别的文字
    text = ""
    for content in contents:  # 遍历所有结果
        text+=(content['content'].strip()+'\n')  # strip去除空格 他返回的结果自带一个换行
    return text

内容显示

内容显示是在截图结束后我们把ocr识别的内容存储起来

self.text = get_text(fileName)

然后再显示到主窗体上

    text1.config(state = NORMAL)
    text1.delete(0.0,END)
    text1.insert('insert',w.text)
    text1.config(state = DISABLED)
    text1.pack()

总结

虽然是一个完整的项目,但是其中的很多模块其实都是借用其他人的模块,而我做的只是把他们结合起来做成一个小项目,所以是站在巨人的肩膀上开发。

到此这篇关于Python实现OCR识别的文章就介绍到这了,更多相关Python实现OCR识别内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

参考:

  • https://cloud.tencent.com/developer/article/1097904
  • https://morvanzhou.github.io/tutorials/python-basic/tkinter/
  • https://www.52pojie.cn/thread-708177-1-1.html
(0)

相关推荐

  • Python图像处理之图片文字识别功能(OCR)

    OCR与Tesseract介绍 将图片翻译成文字一般被称为光学文字识别(Optical Character Recognition,OCR).可以实现OCR 的底层库并不多,目前很多库都是使用共同的几个底层OCR 库,或者是在上面进行定制. Tesseract 是一个OCR 库,目前由Google 赞助(Google 也是一家以OCR 和机器学习技术闻名于世的公司).Tesseract 是目前公认最优秀.最精确的开源OCR 系统. 除 了极高的精确度,Tesseract 也具有很高的灵活性.它可

  • Python基于百度AI实现OCR文字识别

    百度AI功能还是很强大的,百度AI开放平台真的是测试接口的天堂,免费接口很多,当然有量的限制,但个人使用是完全够用的,什么人脸识别.MQTT服务器.语音识别等等,应有尽有. 看看OCR识别免费的量 快速安装:执行pip install baidu-aip即可 新建一个AipOcr: from aip import AipOcr """ 你的 APPID AK SK """ APP_ID = '你的 App ID' API_KEY = '你的 Ap

  • Python文字截图识别OCR工具实例解析

    一.简介 你一定用过那种"OCR神器",可以把图片中的文字提取出来,极大的提高工作效率. 今天,我们就来做一款实时截图识别的小工具.顾名思义,运行程序时,可以实时把你截出来的图片中的文字识别出来. 二.模块 import keyboard # 用于监控键盘按下,触发事件(pip install keyboard) import time from aip import AipOcr # 调用百度接口(pip install baidu-aip) from PIL import Imag

  • python3安装OCR识别库tesserocr过程图解

    OCR简介 OCR,即Optical Character Recognition,光学字符识别,是指通过扫描字符,然后通过其形状将其翻译成电子文本的过程,对应图形验证码来说,它们都是一些不规则的字符,这些字符是由字符稍加扭曲变换得到的内容,我们可以使用OCR技术来讲其转化为电子文本,然后将结果提取交给服务器,便可以达到自动识别验证码的过程. window环境 环境材料准备 Window10 Python-3.7.3.tgz tesserocr安装包 安装tesserocr 1.打开链接,http

  • 如何使用Python进行OCR识别图片中的文字

    朋友需要一个工具,将图片中的文字提取出来.我帮他在网上找了一些OCR的应用,都不好用.所以准备自己研究,写一个Web APP供他使用. OCR1,全称Optical character recognition,或者optical character reader,中文译名叫做光学文字识别.它是把图像文件中的手写文本,打印文本转换为机器编码文本的一种方法. OCR技术广泛用于识别打印纸张中的文字数据 -- 比如护照,支票,银行声明,收据,统计表单,邮件等.OCR的早期版本,需要对图片中的每个文字都

  • Python3实现腾讯云OCR识别

    废话不多说,在网上找了下腾讯云OCR识别的,示例不多,用Python的还是Python2.7,花了点时间改成Python3的. 先上图,腾讯自己的示例图: 下面是代码: import requests import hmac import hashlib import base64 import time import random import re appid = "你自己的appid" bucket = " 这个是优图上面的,可以不填" #参考本文开头提供的链

  • 初探利用Python进行图文识别(OCR)

    话说什么是OCR????? 简介 OCR技术是光学字符识别的缩写(Optical Character Recognition),是通过扫描等光学输入方式将各种票据.报刊.书籍.文稿及其它印刷品的文字转化为图像信息,再利用文字识别技术将图像信息转化为可以使用的计算机输入技术.可应用于银行票据.大量文字资料.档案卷宗.文案的录入和处理领域.适合于银行.税务等行业大量票据表格的自动扫描识别及长期存储.相对一般文本,通常以最终识别率.识别速度.版面理解正确率及版面还原满意度4个方面作为OCR技术的评测依

  • 基于Python实现对PDF文件的OCR识别

    最近在做一个项目的时候,需要将PDF文件作为输入,从中输出文本,然后将文本存入数据库中.为此,我找寻了很久的解决方案,最终才确定使用tesseract.所以不要浪费时间了,我们开始吧. 1.安装tesseract 在不同的系统中安装tesseract非常容易.为了简便,我们以Ubuntu为例. 在Ubuntu中你仅仅需要运行以下命令: 这将会安装支持3种不同语言的tesseract. 2.安装PyOCR 现在我们还需要安装tesseract的Python接口.幸运的是,有许多出色的Python接

  • python实现百度OCR图片识别过程解析

    这篇文章主要介绍了python实现百度OCR图片识别过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 代码如下 import base64 import requests class CodeDemo: def __init__(self,AK,SK,code_url,img_path): self.AK=AK self.SK=SK self.code_url=code_url self.img_path=img_path self.ac

  • Python 实现任意区域文字识别(OCR)操作

    本文的OCR当然不是自己从头开发的,是基于百度智能云提供的API(我感觉是百度在中国的人工智能领域值得称赞的一大贡献),其提供的API完全可以满足个人使用,相对来说简洁准确率高. 安装OCR Python SDK OCR Python SDK目录结构 ├── README.md ├── aip //SDK目录 │ ├── __init__.py //导出类 │ ├── base.py //aip基类 │ ├── http.py //http请求 │ └── ocr.py //OCR └── se

随机推荐