Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/62.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 使用Tesseract仅检测水平文本_Python_Ocr_Tesseract_Python Tesseract - Fatal编程技术网

Python 使用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度,然后再次传

我有一个带有水平和垂直文本的图像。我用tesseract OCR检测文本。这是tesseract返回的数组

'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仍然返回检测到的文本数组,类似于我发布的问题。但是,如果您的大图像中有几行文本,则本周方法将失败。您尝试过吗?或者你在做假设?是的,我已经试过了。把它贴到问题上,这样我就可以用这个测试你的代码了,但是如果你有一个带有几行文字的大图像,这个方法就会失败。你试过了吗?还是你在做假设?是的,我已经试过了。把它贴到问题上,这样我就可以用这个测试你的代码了