我正在尝试从图像中提取特定的(或整个文本,然后解析它)文本。 图片使用希伯来语语言。 我在nodejs中已经尝试过的方法正在Tesseract库中使用,但是在希伯来语中,它不能识别出正确的文本。 我也尝试过将图像转换为pdf,然后从pdf解析,但是在希伯来语中效果不佳。 有人已经尝试这样做吗?也许与python或节点js? 我正在尝试做类似云视觉的Google文字
答案 0 :(得分:0)
您是否尝试过预处理输入到tesseract的图像?如果您没有,我会尝试使用OpenCV轮廓检测,尤其是Hough Line Transform,然后将其清理一下。 https://www.youtube.com/watch?v=lhMXDqQHf9g&list=PLQVvvaa0QuDeETZEOy4VdocT7TOjfSA8a&index=5这个家伙并没有完全做好您的工作,但是如果您花时间滚动一下,您会看到它如何有用。
答案 1 :(得分:0)
基于我们在OP中的对话。这是供您考虑的一些选项。
选项1:
如果您直接使用PDF作为输入文件
import fitz
input_file = '/path/to/your/pdfs/'
pdf_file = input_file
doc = fitz.open(pdf_file)
noOfPages = doc.pageCount
for pageNo in range(noOfPages):
page = doc.loadPage(pageNo)
pageTextblocks = page.getText('blocks') # This creates a list of items (x0,y0,x1,y1,"line1\nline2\nline3...",...)
pageTextblocks.sort(key=lambda block: block[3])
for block in pageTextblocks:
targetBlock = block[4] # This gets to the content of each block and you can work your logic here to get relevant data
选项2:
如果您使用图像作为输入,并且需要使用选项1中的代码段将其转换为PDF,然后再进行处理。
doc = fitz.open(input_file)
pdfbytes = doc.convertToPDF() # open it as a pdf file
pdf = fitz.open("pdf", pdfbytes) # extract data as a pdf file
在PyMuPDF中处理图像的一个有用技巧是,如果图像难以识别,可以使用zoom
因子以获得更好的分辨率。
zoom = 1.2 # scale the image by 120%
mat = fitz.Matrix(zoom,zoom)
选项3:
自从您提到tesseract以来,PyMuPDF和pytesseract的混合方法。我不确定这种方法是否适合您提取希伯来语的需求,但这是一个主意。该示例用于PDF。
import fitz
import pytesseract
pytesseract.pytesseract.tesseract_cmd = r'/path/to/your/tesseract/cmd'
input_file = '/path/to/pdfs'
pdf_file = input_file
fullText = ""
doc = fitz.open(pdf_file)
zoom = 1.2
mat = fitz.Matrix(zoom, zoom)
noOfPages = doc.pageCount
for pageNo in range(noOfPages):
page = doc.loadPage(pageNo) #number of page
pix = page.getPixmap(matrix = mat)
output = '/path/to/save/image' + str(pageNo) + '.jpg'
pix.writePNG(output)
print('Converting PDFs to Image ... ' + output)
text_of_each_page = str(((pytesseract.image_to_string(Image.open(output)))))
fullText += text_without_whitespace
fullText += '\n'
希望这会有所帮助。如果您需要有关PyMuPDF的更多信息,请click this link,并提供更详细的说明以适合您的需求。