4

我在 Cygwin 上构建了 Tesseract 3.04.01。它可以识别 .bmp 文件,但无法识别 .png 文件:

$ tesseract.exe 测试/phototest.png 输出
Tesseract 开源 OCR 引擎 v3.04.01 与 Leptonica
pixReadMemPng 中的错误:函数不存在
pixReadMem 中的错误:png:没有返回像素
处理过程中出错。

我以为 leptopnica 添加了对 png 的支持?

4

2 回答 2

4

经过更多的挖掘,事实证明 leptonica 更像是 libpng 和 libtiff 等标准库的包装器,如果找不到它的库,它将默默地禁用对图像类型的支持。

运行时它给了我这个./configure

检查 -lpng 中的 png_read_png... 否

所以我不得不下载并构建 libpng。之后它仍然不起作用,因为 libpng 安装在 中/usr/local/lib,显然这不是 cygwin 的默认库路径。所以我不得不使用添加它LDFLAGS

LDFLAGS=-L/usr/local/lib ./configure

之后,它最终构建了 PNG 支持,并给出了以下信息:

checking for png_read_png in -lpng... yes

由于某种原因, Makefile - 中的链接顺序混淆了-lpng -lz,这导致链接 liblept.la 失败:

png.c:(.text+0x13ab): undefined reference to `crc32'

我可以解决这个问题的唯一方法是运行make V=1(详细模式)以查看实际命令,即:

make[2]: Entering directory '/home/sasho/leptonica-1.73/src'
/bin/sh ../libtool  --tag=CC   --mode=link gcc  -g -O2 -no-undefined -version-info 5:0:0 -Wl,--as-needed -L/usr/local/lib -o liblept.la -rpath /usr/local/lib adaptmap.lo affine.lo affinecompose.lo arrayaccess.lo bardecode.lo baseline.lo bbuffer.lo bilateral.lo bilinear.lo binarize.lo binexpand.lo binreduce.lo blend.lo bmf.lo bmpio.lo bmpiostub.lo bootnumgen1.lo bootnumgen2.lo boxbasic.lo boxfunc1.lo boxfunc2.lo boxfunc3.lo boxfunc4.lo bytearray.lo ccbord.lo ccthin.lo classapp.lo colorcontent.lo coloring.lo colormap.lo colormorph.lo colorquant1.lo colorquant2.lo colorseg.lo colorspace.lo compare.lo conncomp.lo convertfiles.lo convolve.lo correlscore.lo dewarp1.lo dewarp2.lo dewarp3.lo dewarp4.lo dnabasic.lo dwacomb.2.lo dwacomblow.2.lo edge.lo encoding.lo enhance.lo fhmtauto.lo fhmtgen.1.lo fhmtgenlow.1.lo finditalic.lo flipdetect.lo fliphmtgen.lo fmorphauto.lo fmorphgen.1.lo fmorphgenlow.1.lo fpix1.lo fpix2.lo gifio.lo gifiostub.lo gplot.lo graphics.lo graymorph.lo grayquant.lo grayquantlow.lo heap.lo jbclass.lo jp2kheader.lo jp2kheaderstub.lo jp2kio.lo jp2kiostub.lo jpegio.lo jpegiostub.lo kernel.lo leptwin.lo libversions.lo list.lo map.lo maze.lo morph.lo morphapp.lo morphdwa.lo morphseq.lo numabasic.lo numafunc1.lo numafunc2.lo pageseg.lo paintcmap.lo parseprotos.lo partition.lo pdfio1.lo pdfio1stub.lo pdfio2.lo pdfio2stub.lo pix1.lo pix2.lo pix3.lo pix4.lo pix5.lo pixabasic.lo pixacc.lo pixafunc1.lo pixafunc2.lo pixalloc.lo pixarith.lo pixcomp.lo pixconv.lo pixlabel.lo pixtiling.lo pngio.lo pngiostub.lo pnmio.lo pnmiostub.lo projective.lo psio1.lo psio1stub.lo psio2.lo psio2stub.lo ptabasic.lo ptafunc1.lo ptra.lo quadtree.lo queue.lo rank.lo rbtree.lo readbarcode.lo readfile.lo recogbasic.lo recogdid.lo recogident.lo recogtrain.lo regutils.lo rop.lo ropiplow.lo roplow.lo rotate.lo rotateam.lo rotateamlow.lo rotateorth.lo rotateshear.lo runlength.lo sarray.lo scale.lo scalelow.lo seedfill.lo seedfilllow.lo sel1.lo sel2.lo selgen.lo shear.lo skew.lo spixio.lo stack.lo stringcode.lo sudoku.lo textops.lo tiffio.lo tiffiostub.lo utils.lo viewfiles.lo warper.lo watershed.lo webpio.lo webpiostub.lo writefile.lo zlibmem.lo zlibmemstub.lo  -lz -lpng       

然后我执行了相同的命令(从./src当前目录执行,否则它将不起作用),但我-lz在最后附加了另一个命令,这导致它成功。之后,我重新运行 make,它继续构建库的其余部分。

cd src
/bin/sh ../libtool  --tag=CC   --mode=link gcc  -g -O2 -no-undefined -version-info 5:0:0 -Wl,--as-needed -L/usr/local/lib -o liblept.la -rpath /usr/local/lib adaptmap.lo affine.lo affinecompose.lo arrayaccess.lo bardecode.lo baseline.lo bbuffer.lo bilateral.lo bilinear.lo binarize.lo binexpand.lo binreduce.lo blend.lo bmf.lo bmpio.lo bmpiostub.lo bootnumgen1.lo bootnumgen2.lo boxbasic.lo boxfunc1.lo boxfunc2.lo boxfunc3.lo boxfunc4.lo bytearray.lo ccbord.lo ccthin.lo classapp.lo colorcontent.lo coloring.lo colormap.lo colormorph.lo colorquant1.lo colorquant2.lo colorseg.lo colorspace.lo compare.lo conncomp.lo convertfiles.lo convolve.lo correlscore.lo dewarp1.lo dewarp2.lo dewarp3.lo dewarp4.lo dnabasic.lo dwacomb.2.lo dwacomblow.2.lo edge.lo encoding.lo enhance.lo fhmtauto.lo fhmtgen.1.lo fhmtgenlow.1.lo finditalic.lo flipdetect.lo fliphmtgen.lo fmorphauto.lo fmorphgen.1.lo fmorphgenlow.1.lo fpix1.lo fpix2.lo gifio.lo gifiostub.lo gplot.lo graphics.lo graymorph.lo grayquant.lo grayquantlow.lo heap.lo jbclass.lo jp2kheader.lo jp2kheaderstub.lo jp2kio.lo jp2kiostub.lo jpegio.lo jpegiostub.lo kernel.lo leptwin.lo libversions.lo list.lo map.lo maze.lo morph.lo morphapp.lo morphdwa.lo morphseq.lo numabasic.lo numafunc1.lo numafunc2.lo pageseg.lo paintcmap.lo parseprotos.lo partition.lo pdfio1.lo pdfio1stub.lo pdfio2.lo pdfio2stub.lo pix1.lo pix2.lo pix3.lo pix4.lo pix5.lo pixabasic.lo pixacc.lo pixafunc1.lo pixafunc2.lo pixalloc.lo pixarith.lo pixcomp.lo pixconv.lo pixlabel.lo pixtiling.lo pngio.lo pngiostub.lo pnmio.lo pnmiostub.lo projective.lo psio1.lo psio1stub.lo psio2.lo psio2stub.lo ptabasic.lo ptafunc1.lo ptra.lo quadtree.lo queue.lo rank.lo rbtree.lo readbarcode.lo readfile.lo recogbasic.lo recogdid.lo recogident.lo recogtrain.lo regutils.lo rop.lo ropiplow.lo roplow.lo rotate.lo rotateam.lo rotateamlow.lo rotateorth.lo rotateshear.lo runlength.lo sarray.lo scale.lo scalelow.lo seedfill.lo seedfilllow.lo sel1.lo sel2.lo selgen.lo shear.lo skew.lo spixio.lo stack.lo stringcode.lo sudoku.lo textops.lo tiffio.lo tiffiostub.lo utils.lo viewfiles.lo warper.lo watershed.lo webpio.lo webpiostub.lo writefile.lo zlibmem.lo zlibmemstub.lo  -lz -lpng -lz      
cd -
make
于 2016-07-01T15:52:26.587 回答
3

出现上述错误时,可能是在编译安装leptonica之前没有安装libpng-devel。你可以试试

yum install libpng-devel

然后编译和安装 leptonica

cd leptonica/ make clean ./configure make make install 它在我的centos7上工作。

于 2018-10-11T14:08:10.817 回答