相关文章推荐
沉着的苦咖啡  ·  nodejs mysql2 ...·  1 年前    · 
读研的枕头  ·  dotenv-cli + vue3 ...·  1 年前    · 
该图像是在 Hebrew 语言。 我在nodejs中已经试过了,就是用在 宇宙魔方 但在希伯来语中,它不能很好地识别文本。 我还试着把图片转换成pdf,然后再从pdf中解析,但在希伯来语中效果不好。 有谁已经尝试过这样做了? 我想做的是类似于云端视觉的谷歌文本

5 个评论
你在Python中使用什么库将图像转换为pdf? 可能建议使用 PyMuPDF 但不确定该软件包是否能识别希伯来语
在Python中我没有尝试,在nodejs中是pdf-parser。
These two links [ github.com/pymupdf/PyMuPDF/issues/398][https://github.com/… 可能对你有用。基于git上的开放问题。 PyMuPDF might not supportive for Hebrew but polyglot does
the second link not works
python
node.js
image-processing
text
Manspof
Manspof
发布于 2020-06-30
2 个回答
Herbal Tea
Herbal Tea
发布于 2020-06-30
0 人赞同

你有没有试过对你送入魔方的图像进行预处理?如果你没有,我会尝试使用OpenCV的轮廓检测,特别是Hough Line Transform,然后把它清理一下。 https://www.youtube.com/watch?v=lhMXDqQHf9g&list=PLQVvvaa0QuDeETZEOy4VdocT7TOjfSA8a&index=5 这家伙并不完全做你的东西,但如果你花时间滚动一下,你可以看到它是多么有用。

是的,我试着用魔方,但它对希伯来语的效果并不好。
liamsuma
liamsuma
发布于 2020-06-30
0 人赞同

根据我们在OP中的谈话。这里有一些选择供你考虑。

Option 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 

Option 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)

Option 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)))))