Python 使用Tesseract仅检测水平文本
我有一个带有水平和垂直文本的图像。我用tesseract OCR检测文本。这是tesseract返回的数组Python 使用Tesseract仅检测水平文本,python,ocr,tesseract,python-tesseract,Python,Ocr,Tesseract,Python Tesseract,我有一个带有水平和垂直文本的图像。我用tesseract OCR检测文本。这是tesseract返回的数组 'text': ['', '', '', '', 'Some', 'other', 'text', 'horizontal', '', '', '', 'JEDIY9A', ']xO]', 'WOPUeI', 'BWOS', 'SI', 'SIUL'] 正如您所看到的,它只能正确地检测水平文本。那么,有没有办法强制tesseract只检测水平文本?所以稍后我会将图像旋转90度,然后再次传
'text': ['', '', '', '', 'Some', 'other', 'text', 'horizontal', '', '', '', 'JEDIY9A', ']xO]', 'WOPUeI', 'BWOS', 'SI', 'SIUL']
正如您所看到的,它只能正确地检测水平文本。那么,有没有办法强制tesseract只检测水平文本?所以稍后我会将图像旋转90度,然后再次传递图像以检测垂直文本(现在是水平的)
还是有一个简单的解决方案
阅读有关页面分割的内容,您将在那里看到它。psm有一个有效值,它完全符合您的要求
Page segmentation modes:
0 Orientation and script detection (OSD) only.
1 Automatic page segmentation with OSD.
2 Automatic page segmentation, but no OSD, or OCR.
3 Fully automatic page segmentation, but no OSD. (Default)
4 Assume a single column of text of variable sizes.
5 Assume a single uniform block of vertically aligned text.
6 Assume a single uniform block of text.
7 Treat the image as a single text line.
8 Treat the image as a single word.
9 Treat the image as a single word in a circle.
10 Treat the image as a single character.
11 Sparse text. Find as much text as possible in no particular order.
12 Sparse text with OSD.
13 Raw line. Treat the image as a single text line,
bypassing hacks that are Tesseract-specific.
试试看——psm 6或psm 12
或者你也可以试试这个答案,这里有一个解决方案,可以为你提供阅读有关页面分割的内容,你可以在那里找到它。psm有一个有效值,它完全符合您的要求
Page segmentation modes:
0 Orientation and script detection (OSD) only.
1 Automatic page segmentation with OSD.
2 Automatic page segmentation, but no OSD, or OCR.
3 Fully automatic page segmentation, but no OSD. (Default)
4 Assume a single column of text of variable sizes.
5 Assume a single uniform block of vertically aligned text.
6 Assume a single uniform block of text.
7 Treat the image as a single text line.
8 Treat the image as a single word.
9 Treat the image as a single word in a circle.
10 Treat the image as a single character.
11 Sparse text. Find as much text as possible in no particular order.
12 Sparse text with OSD.
13 Raw line. Treat the image as a single text line,
bypassing hacks that are Tesseract-specific.
试试看——psm 6或psm 12
或者你也可以试试这个答案,这里有一个解决方案可以为你提供
pytesseract
不是旋转不变的。因此,您需要进行额外的预处理来读取垂直文本
例如:按时钟方向将文本旋转90度
img=cv2.旋转(img,cv2.顺时针旋转90°)
当你读书的时候
print(pyteseract.image\u到\u字符串(gry.split)(“\n”)[0])
结果:
这是一些随机的垂直文本
那么你怎么能同时阅读这两篇文章呢
- 首先阅读水平文本
-
导入cv2 导入pytesseract img=cv2.imread(“7IIrb.jpg”) gry=cv2.CVT颜色(img,cv2.COLOR\u BGR2GRAY) txt=pytesseract.image\u to\u字符串(gry).split(“\n”)[0] 打印(txt)
- 然后将图像按时钟旋转90度
-
gry=cv2.旋转(gry,cv2.顺时针旋转90°) txt=pytesseract.image\u to\u字符串(gry).split(“\n”)[0] 打印(txt)
-
- 结果:
其他一些文本是水平的 这是一些随机的垂直文本
-
导入cv2
导入pytesseract
img=cv2.imread(“7IIrb.jpg”)
gry=cv2.CVT颜色(img,cv2.COLOR\u BGR2GRAY)
txt=pytesseract.image\u to\u字符串(gry).split(“\n”)[0]
打印(txt)
gry=cv2.旋转(gry,cv2.顺时针旋转90°)
txt=pytesseract.image\u to\u字符串(gry).split(“\n”)[0]
打印(txt)
pytesseract
不是旋转不变的。因此,您需要进行额外的预处理来读取垂直文本
例如:按时钟方向将文本旋转90度
img=cv2.旋转(img,cv2.顺时针旋转90°)
当你读书的时候
print(pyteseract.image\u到\u字符串(gry.split)(“\n”)[0])
结果:
这是一些随机的垂直文本
那么你怎么能同时阅读这两篇文章呢
- 首先阅读水平文本
-
导入cv2 导入pytesseract img=cv2.imread(“7IIrb.jpg”) gry=cv2.CVT颜色(img,cv2.COLOR\u BGR2GRAY) txt=pytesseract.image\u to\u字符串(gry).split(“\n”)[0] 打印(txt)
- 然后将图像按时钟旋转90度
-
gry=cv2.旋转(gry,cv2.顺时针旋转90°) txt=pytesseract.image\u to\u字符串(gry).split(“\n”)[0] 打印(txt)
-
- 结果:
其他一些文本是水平的 这是一些随机的垂直文本
-
导入cv2
导入pytesseract
img=cv2.imread(“7IIrb.jpg”)
gry=cv2.CVT颜色(img,cv2.COLOR\u BGR2GRAY)
txt=pytesseract.image\u to\u字符串(gry).split(“\n”)[0]
打印(txt)
gry=cv2.旋转(gry,cv2.顺时针旋转90°)
txt=pytesseract.image\u to\u字符串(gry).split(“\n”)[0]
打印(txt)
如果您仍然面临一些问题,请告诉我psm 6和12仍然返回检测到的文本数组,类似于我发布的问题。如果您仍然面临一些问题,请告诉我psm 6和12仍然返回检测到的文本数组,类似于我发布的问题。但是,如果您的大图像中有几行文本,则本周方法将失败。您尝试过吗?或者你在做假设?是的,我已经试过了。把它贴到问题上,这样我就可以用这个测试你的代码了,但是如果你有一个带有几行文字的大图像,这个方法就会失败。你试过了吗?还是你在做假设?是的,我已经试过了。把它贴到问题上,这样我就可以用这个测试你的代码了