我正在Golang使用OCR编写PDF到文本的解决方案。
我使用的库是Gosseract和Go-Fitz
这个程序一直在工作,直到我试图用Gosseract从内存中加载一个图像:
func ProcessDoc(file []byte) (string, error) {
var text strings.Builder
client := gosseract.NewClient()
doc, err := fitz.NewFromMemory(file)
if err != nil {
log.Println(err)
return "", nil
}
for n := 0; n < doc.NumPage(); n++ {
img, err := doc.Image(n)
if err != nil {
log.Println(err)
return "", err
}
buf := new(bytes.Buffer)
err = jpeg.Encode(buf, img, nil)
if err != nil {
log.Println(err)
return "", err
}
client.SetImageFromBytes(buf.Bytes())
res, err := client.Text()
if err != nil {
return "", err
}
text.WriteString(res)
}
return text.String(), nil
}
然后我得到这个错误:
JPEG parameter struct mismatch: library thinks size is 624, caller expects 656
Error in pixReadStreamJpeg: internal jpeg error
Error in pixReadMemJpeg: pix not read
Error in pixReadMem: jpeg: no pix returned
经过大量的搜索,我了解到libleptonica
或mupdf
可能使用不同版本的jpeglib.h
,但整个系统中只有一个该文件的示例。
我还应该注意,我从源代码编译了libjpeg
,然后编译了libmupdf
和libleptonica
,以使用该版本的libjpeg
来避免任何形式的冲突,但它仍然返回Struct Mismatch错误。
1条答案
按热度按时间xqkwcwgp1#
您是否正在从源代码编译mupdf?
默认情况下,mupdf包含它自己的libjpeg版本--有可能mupdf是根据它自己的版本编译的,而libleptonica是根据系统版本编译的。