Python实现实时截图文字内容识别OCR 图片内容转文本

时间:2022-07-23
本文章向大家介绍Python实现实时截图文字内容识别OCR 图片内容转文本,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

OCR

概述

一般大家都用过“OCR”文字提取工具,不知道大家有没有注意,最近QQ给表情包提供了OCR文字识别功能,只要你把有文字的表情包点开,一般QQ会把识别的文字内容显示在下面。大家用的比较多的一般都是手机端识别,电脑端用的比较少,我现在还记得之前写论文时,一边用手机拍照识别文字,一边在把识别好的文字发送到PC端,很麻烦。最近接触了pytesseract模块,一个文字识别模块,于是乎就想到了能否利用他进行文字识别(答案是肯定的,他本来就是干这个的,我在瞎扯凑字数)。

总体分为两种策略,方案一就是采用这个第三方模块,方案二采用了百度的通用字体识别接口。

结果展示

起初只是采用pytesseract模块去实现,结果如下,效果有点子差哦,会有不少错别字。

接着查了一下,发现百度有接口可以使用就研究了一下,效果好了很多,几乎没有错别字。效果很好

工程实现

工程实现大致分为:获取文字截图、读入文字截图、识别文字截图、打印结果。

获取文字截图,就是用我一直用的Snipaste,他的截图快捷键为“F1”,复制键为“Ctrl”+“C”。这两个快捷键需要出现在程序里所以说了一下。

图片读写就是采用PIL模块读写的。

图片文字识别就是采用两中国不同策略实现,后一种识别精确度高。

打印结果可以存储到本地,也可以直接在控制台打印。

实现方案一

方案一采用pytesseract实现。具体代码参下,就四行。

import pytesseract
from PIL import Image
text = pytesseract.image_to_string(Image.open("pic.png"), lang='chi_sim')
print(text)

这样写的话,需要你提前把文字截图存放好。若想直接截图就能用,则需要加上一些键盘操作代码,增加后的代码如下。

from PIL import Image
from PIL import ImageGrab
import keyboard
import pytesseract
import time


# 1.从屏幕上截取要识别的内容,由于我的截图存储快捷方式为F1和Ctrl+C,
# 所以参数如下,若采用其他截图方式,按照快捷方式修改参数即可
keyboard.wait(hotkey="f1")
keyboard.wait(hotkey="ctrl+c")
time.sleep(0.1)

# 2.将从屏幕获取到的截图存储到与py文件的同级目录下
image = ImageGrab.grabclipboard()
image.save("pic.png")

# 3.调用pytesseract识别图片上的内容并打印
text = pytesseract.image_to_string(Image.open("pic.png"), lang='chi_sim')
print(text)

方案一代码很短,但是需要配置的东西挺多的。

1、安装pytesseract

pip install pytesseract

2、安装Tesseract-OCR并进行相关配置(网上教程很多,我在这里就不赘述了)

注意事项:若出现下面这种错误(目前网上没有人这样解决,说的都贼麻烦)

Error opening data file \Tesseract-OCR\chi_sim.traineddata

就打开Python模块对应的py文件pytesseract.py,在第337行左右给config一个初始值即可。

其中F:\Tesseract-OCR\tessdata为你的tessdata路径。

实现方案二

方案二采用了百度API接口,利用百度API去处理,效果很好,但是需要用户去百度开放平台的文字识别下面去创建一个应用,好消息就是他每天有5000次免费机会。其中百度开放平台下的文字识别为:https://ai.baidu.com/ai-doc/OCR/zk3h7xz52

创建应用成功后你就会拥有一些参数,这些参数需要你填在代码里用于调用API。

具体的实现代码如下。

from PIL import Image
from PIL import ImageGrab
import keyboard
import pytesseract
import time
from aip import AipOcr

# 1.从屏幕上截取要识别的内容,由于我的截图存储快捷方式为F1和Ctrl+C,
# 所以参数如下,若采用其他截图方式,按照快捷方式修改参数即可
keyboard.wait(hotkey="f1")
keyboard.wait(hotkey="ctrl+c")
time.sleep(0.1)

# 2.将从屏幕获取到的截图存储到与py文件的同级目录下
image = ImageGrab.grabclipboard()
image.save("pic.png")
# 此处填写你的APP参数信息
APP_ID = 'APP ID'
API_KEY = 'API Key'
SECRET_KEY = 'Secret Key'

client = AipOcr(APP_ID, API_KEY, SECRET_KEY)

# 读取图片
with open("pic.png", 'rb') as f:
    image = f.read()
    # 调用百度API通用文字识别,提取图片中的内容
    text = client.basicAccurate(image)
    result = text["words_result"]
    for i in result:
        print(i["words"])

至此,两种截图文字内容识别也就说完了,其实没啥太大的代码量,主要是搞清楚如何使用,回想当年手机识别在转发的日子,自己真是蠢到家了。