tesseract 4.0.0-beta.1 字符周围的边界框
Bounding boxes around characters for tesseract 4.0.0-beta.1
我正在尝试使用 tesseract 4.0.0-beta.1 进行车牌识别。在 tesseract 文档中,它被告知以 .我尝试使用 "makebox" 函数。但是,它并没有正确检测到每个字符。然后,我在某处读到此函数适用于版本 3.x。
我后来尝试了"wordstrbox"功能。但是这样创建的box文件是空的。谁能告诉我如何为 tesseract 4.0.0-beta.1 创建盒子文件。
使用pytesseract.image_to_data()
import pytesseract
import cv2
from pytesseract import Output
img = cv2.imread('image.jpg')
d = pytesseract.image_to_data(img, output_type=Output.DICT)
n_boxes = len(d['level'])
for i in range(n_boxes):
(text,x,y,w,h) = (d['text'][i],d['left'][i],d['top'][i],d['width'][i],d['height'][i])
cv2.rectangle(img, (x,y), (x+w,y+h) , (0,255,0), 2)
cv2.imshow('img',img)
cv2.waitkey(0)
pytesseract.image_to_data()返回的数据中:
left
是到边界框 upper-left 角的距离,
到图像的左边框。
top
是到边界框 upper-left 角的距离,
到图像的顶部边框。
width
和height
是边界框的宽度和高度。
conf
是模型对单词的预测的置信度
那个边界框。如果conf
为-1,则表示对应的
边界框包含一个文本块,而不仅仅是一个
单词。
pytesseract.image_to_boxes()
返回的边界框包含字母,所以我相信 pytesseract.image_to_data()
就是您要查找的内容。
我发现 AlfyFaisy 的回答非常有帮助,只是想分享代码以查看单个字符的边界框。不同之处在于 image_to_boxes
方法输出的字典的键:
import pytesseract
import cv2
from pytesseract import Output
img = cv2.imread('image.png')
height = img.shape[0]
width = img.shape[1]
d = pytesseract.image_to_boxes(img, output_type=Output.DICT)
n_boxes = len(d['char'])
for i in range(n_boxes):
(text,x1,y2,x2,y1) = (d['char'][i],d['left'][i],d['top'][i],d['right'][i],d['bottom'][i])
cv2.rectangle(img, (x1,height-y1), (x2,height-y2) , (0,255,0), 2)
cv2.imshow('img',img)
cv2.waitKey(0)
至少在我的机器上(Python 3.6.8,cv2 4.1.0)cv2 方法是 waitKey(0)
,大写 K。
这是我得到的输出:
我正在尝试使用 tesseract 4.0.0-beta.1 进行车牌识别。在 tesseract 文档中,它被告知以 .我尝试使用 "makebox" 函数。但是,它并没有正确检测到每个字符。然后,我在某处读到此函数适用于版本 3.x。
我后来尝试了"wordstrbox"功能。但是这样创建的box文件是空的。谁能告诉我如何为 tesseract 4.0.0-beta.1 创建盒子文件。
使用pytesseract.image_to_data()
import pytesseract
import cv2
from pytesseract import Output
img = cv2.imread('image.jpg')
d = pytesseract.image_to_data(img, output_type=Output.DICT)
n_boxes = len(d['level'])
for i in range(n_boxes):
(text,x,y,w,h) = (d['text'][i],d['left'][i],d['top'][i],d['width'][i],d['height'][i])
cv2.rectangle(img, (x,y), (x+w,y+h) , (0,255,0), 2)
cv2.imshow('img',img)
cv2.waitkey(0)
pytesseract.image_to_data()返回的数据中:
left
是到边界框 upper-left 角的距离, 到图像的左边框。top
是到边界框 upper-left 角的距离, 到图像的顶部边框。width
和height
是边界框的宽度和高度。conf
是模型对单词的预测的置信度 那个边界框。如果conf
为-1,则表示对应的 边界框包含一个文本块,而不仅仅是一个 单词。
pytesseract.image_to_boxes()
返回的边界框包含字母,所以我相信 pytesseract.image_to_data()
就是您要查找的内容。
我发现 AlfyFaisy 的回答非常有帮助,只是想分享代码以查看单个字符的边界框。不同之处在于 image_to_boxes
方法输出的字典的键:
import pytesseract
import cv2
from pytesseract import Output
img = cv2.imread('image.png')
height = img.shape[0]
width = img.shape[1]
d = pytesseract.image_to_boxes(img, output_type=Output.DICT)
n_boxes = len(d['char'])
for i in range(n_boxes):
(text,x1,y2,x2,y1) = (d['char'][i],d['left'][i],d['top'][i],d['right'][i],d['bottom'][i])
cv2.rectangle(img, (x1,height-y1), (x2,height-y2) , (0,255,0), 2)
cv2.imshow('img',img)
cv2.waitKey(0)
至少在我的机器上(Python 3.6.8,cv2 4.1.0)cv2 方法是 waitKey(0)
,大写 K。
这是我得到的输出: