告别腾讯百度图片文字识别API调用,OCR图片文字识别就用这条代码–pytesseract 与python的完美结合
上期文章我们分享了tesseract的基本安装,本期我们来分享一下如何使用python与tesseract进行代码的编程来实现tesseract的文字识别
在开始本期文章之前,请认真阅读一下小编前期分享的了tesseract的安装教程,确保你电脑里面安装了pytesseract 与tesseract,最好是4.0以上的版本
pytesseract 与python的完美结合
import pytesseract
import cv2
from pytesseract import Outpu
image = cv2.imread(’11.png’)
rgb = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)
results = pytesseract.image_to_data(rgb, output_type=Output.DICT)
首先我们导入pytesseract第三方库
使用cv2.imread读取需要检测的图片
由于CV2读取的图片是在BGR空间,这里需要cv2.cvtColor(image, cv2.COLOR_BGR2RGB)来转换为RGB空间
然后使用pytesseract.image_to_data来识别,结果保存在results里面
ok ,本期文章到此结束,就这几条代码
哈哈,开个玩笑,再怎么也得介绍一下代码的具体含义
pytesseract一般具有如下功能:
- image_to_string将图像上的Tesseract OCR运行结果返回到字符串
- image_to_boxes返回包含已识别字符及其框边界的结果
- image_to_data返回包含框边界,置信度和其他信息的结果
- image_to_osd返回包含有关方向和脚本检测的信息的结果
这里我们使用image_to_data来获取检测到的字符以及置信度与具体的边界位置,其他功能小伙伴们可以自行测试
image_to_data(image,lang = None,config =”, nice = 0,output_type = Output.STRING)
image Object,PIL Image /由Tesseract处理的图像的NumPy数组
lang String,Tesseract语言代码字符串
config String,任何其他配置为字符串
nice Integer,修改Tesseract运行的处理器优先级。Windows不支持。
output_type Class属性,指定输出的类型,默认为string
我们这里选择输入一个字典,字典里面存放着测到的字符以及置信度与具体的边界位置
for i in range(0, len(results[“text”])):
x = results[“left”][i]
y = results[“top”][i]
w = results[“width”][i]
h = results[“height”][i]
text = results[“text”][i]
conf = int(results[“conf”][i])
我们遍历整个字典,获取了检测字符串的初始位置(x,y),以及字符串的长度与高度(w,h),这样我们就可以画一个box来提示以及检测到的字符串。
text = results[“text”][i]获取识别到的字符串
conf = int(results[“conf”][i])获取识别到字符串的置信度
if conf > 50:
text = “”.join([c if ord(c) < 128 else “” for c in text]).strip()
print(text)
cv2.rectangle(image, (x, y), (x + w, y + h), (0, 255, 0), 2)
cv2.imshow(“Image”, image)
cv2.waitKey(0)
我们选择置信度大于50%的,把检测到的字符串全部打印,并显示到图片上
检测到的字符
tesseract 默认只识别英文,你若想识别其它语言,请下载对应的tessdata
https://github.com/tesseract-ocr/tessdata
image_to_data(image,lang = None,config =”, nice = 0,output_type = Output.STRING)
然后修改此处的lang=“chi_sim”或者其他语言
只检测英文