望城区住房和城乡建设局门户网站,wordpress 超级搜索,海尔建设网站的目的,广州哪家网站建设最好我没有混日子#xff0c;只是辛苦的时候没人看到罢了 一、什么是Tesseract
Tesseract是一个开源的OCR#xff08;Optical Character Recognition#xff09;引擎#xff0c;OCR是一种技术#xff0c;它可以识别和解析图像中的文本内容#xff0c;使计算机能够理解并处理… 我没有混日子只是辛苦的时候没人看到罢了 一、什么是Tesseract
Tesseract是一个开源的OCROptical Character Recognition引擎OCR是一种技术它可以识别和解析图像中的文本内容使计算机能够理解并处理这些文本。Tesseract提供了丰富的配置选项和接口使得开发者可以根据自己的需求和场景进行定制化和集成。通过使用Tesseract你可以将一张包含文字的图像如扫描文档、照片或截屏输入到引擎中然后Tesseract会通过一系列的图像处理和模式识别技术来提取出图像中的文本信息。它将识别出的文本转换为可以被计算机编辑和搜索的文本内容。
简单来说Tesseract是一个强大的OCR引擎适用于将图像中的文字提取出来并将其转换为计算机可处理的文本形式。它在许多领域和应用中被广泛使用如扫描和数字化文档、自动化数据输入、图书馆和档案管理等。
传送门
二、创建开发环境
使用conda创建一个名字为openCV的开发环境 conda create -n openCV 引入openCV包 pip install opencv-python 引入pytesseract包 三、代码实战
检测图片中的字符串并打印
先准备一张如下格式的图片 编写代码解析
testDectection.py
import cv2
import pytesseractimg cv2.imread(1.png) # 使用opencv将图片读进来
img cv2.cvtColor(img, cv2.COLOR_BGR2RGB) # 将图片的颜色通道格式由BGR转化成pytesseract能识别的RGB格式
print(pytesseract.image_to_string(img)) # 调用pytesseract引擎将图片中的内容输出出来
cv2.imshow(result, img) # 显示
cv2.waitKey(0) 输出 以上就是通过使用pytesseract简单获取图像原始信息的方法。
检测图中的字符并用红框标注
代码
import cv2
import pytesseractimg cv2.imread(1.png) # 使用opencv将图片读进来
img cv2.cvtColor(img, cv2.COLOR_BGR2RGB) # 将图片的颜色通道格式由BGR转化成pytesseract能识别的RGB格式# Detecting Characters
hImg, wImg, _ img.shape # 找出图片的宽度和高度
boxes pytesseract.image_to_boxes(img) # 使用pytesseract找出图片中字符的坐标位置
for c in boxes.splitlines():c c.split( )print(c)x, y, w, h int(c[1]), int(c[2]), int(c[3]), int(c[4])cv2.rectangle(img, (x, hImg - y), (w, hImg - h), (0, 0, 255), 3) # 使用opencv画框框使用红色厚度为3cv2.imshow(result, img) # 显示
cv2.waitKey(0)
输入两张图片
1.png 2.png 输出
每一个检测出来字符串的坐标 图像中添加识别的文本内容
import cv2
import pytesseractimg cv2.imread(1.png) # 使用opencv将图片读进来
img cv2.cvtColor(img, cv2.COLOR_BGR2RGB) # 将图片的颜色通道格式由BGR转化成pytesseract能识别的RGB格式# Detecting Characters
hImg, wImg, _ img.shape # 找出图片的宽度和高度
boxes pytesseract.image_to_boxes(img) # 使用pytesseract找出图片中字符的坐标位置
for c in boxes.splitlines():c c.split( )print(c)x, y, w, h int(c[1]), int(c[2]), int(c[3]), int(c[4])cv2.rectangle(img, (x, hImg - y), (w, hImg - h), (0, 0, 255), 3) # 使用opencv画框框使用红色厚度为3cv2.putText(img, c[0], (x, hImg - y 25), cv2.FONT_HERSHEY_COMPLEX, 1, (50, 50, 255), 2) # 向图像中添加文本cv2.imshow(result, img) # 显示
cv2.waitKey(0) 关键 cv2.putText(img, c[0], (x, hImg - y 25), cv2.FONT_HERSHEY_COMPLEX, 1, (50, 50, 255), 2) 这行代码使用OpenCV库中的putText函数向图像中添加文本。
解释如下
img表示要添加文本的图像。c[0]表示要添加的文本内容c[0]可能是一个字符串变量用于指定要添加的文本。(x, hImg - y 25)表示文本的起始位置该位置是一个元组(x, y)其中x表示文本的横坐标hImg - y 25表示文本的纵坐标。hImg可能是整个图像的高度y是用于定位白色文本的轮廓的顶端位置的变量。通过hImg - y 25可以使文本出现在轮廓下方一些距离的位置。cv2.FONT_HERSHEY_COMPLEX表示所使用的字体类型这里使用的是复杂的字体类型。1表示文本的字体缩放因子1表示原始大小。(50, 50, 255)表示文本的颜色该颜色为一个元组(B, G, R)其中B、G、R分别表示蓝色、绿色、红色通道的值。在这个例子中文本颜色是一种深红色。2表示文本的线宽即文本边框的宽度。这里设置为2使得文本边框较粗。
输出 检测连续的字符串
实际中一般不关注一个字符更多是关注连起来的字符串
import cv2
import pytesseractimg cv2.imread(1.png) # 使用opencv将图片读进来
img cv2.cvtColor(img, cv2.COLOR_BGR2RGB) # 将图片的颜色通道格式由BGR转化成pytesseract能识别的RGB格式# Detecting Characters
hImg, wImg, _ img.shape # 找出图片的宽度和高度
boxes pytesseract.image_to_data(img) # 使用pytesseract找出图片中字符的坐标位置
for x, c in enumerate(boxes.splitlines()):if x ! 0:c c.split()print(c)if len(c) 12:x, y, w, h int(c[6]), int(c[7]), int(c[8]), int(c[9])cv2.rectangle(img, (x, y), (x w, h y), (0, 0, 255), 3) # 使用opencv画框框使用红色厚度为3cv2.putText(img, c[11], (x, y), cv2.FONT_HERSHEY_COMPLEX, 1, (50, 50, 255), 2) # 向图像中添加文本cv2.imshow(result, img) # 显示
cv2.waitKey(0)输出 每个字段的含义
level代表文本在页面中的级别。这里的级别是从1开始的表示文本的嵌套层级。page_num代表文本所在的页码。在多页文档中每一页都有一个唯一的页码。block_num代表文本所在的文本块的编号。文本块是文档中的一个矩形区域包含多个段落或行。par_num代表文本所在的段落的编号。段落是文档中的一个文本段落通常由一组相关的句子组成。line_num代表文本所在行的编号。行通常是段落中的一个文本行。word_num代表文本所在单词的编号。单词是文本的最小单位通常由一个或多个字符组成。left代表文本区域的左边界相对于页面的位置。top代表文本区域的上边界相对于页面的位置。width代表文本区域的宽度。height代表文本区域的高度。conf代表文本的置信度通常在0到100之间。置信度表示OCR算法对所识别文本的可信程度。text代表识别出的文本内容。 只识别图片中的数字
import cv2
import pytesseractimg cv2.imread(1.png) # 使用opencv将图片读进来
img cv2.cvtColor(img, cv2.COLOR_BGR2RGB) # 将图片的颜色通道格式由BGR转化成pytesseract能识别的RGB格式# Detecting Characters
hImg, wImg, _ img.shape # 找出图片的宽度和高度
cong r--oem 3 --psm 6 outputbase digits
boxes pytesseract.image_to_data(img, configcong) # 使用pytesseract找出图片中字符的坐标位置
for x, c in enumerate(boxes.splitlines()):if x ! 0:c c.split()print(c)if len(c) 12:x, y, w, h int(c[6]), int(c[7]), int(c[8]), int(c[9])cv2.rectangle(img, (x, y), (x w, h y), (0, 0, 255), 3) # 使用opencv画框框使用红色厚度为3cv2.putText(img, c[11], (x, y), cv2.FONT_HERSHEY_COMPLEX, 1, (50, 50, 255), 2) # 向图像中添加文本cv2.imshow(result, img) # 显示
cv2.waitKey(0)重点 cong r--oem 3 --psm 6 outputbase digits boxes pytesseract.image_to_data(img, configcong) 参数解释
oem是一个参数用于指定OCR引擎的OCR引擎模式OCR Engine Mode。OCR引擎模式控制Tesseract在文本识别过程中的行为和算法。psm是一种页分割模式Page Segmentation Mode用于指定OCR引擎在识别文本时如何处理页面布局和分割问题。psm参数控制Tesseract在识别文本时如何将图像分割为单个字符、单词、行和文本块。