如何在python中使用tesserocr调用tesseract C++ API
tesserocr是 Tesseract C++ API的 python封装;我们所熟知的pytesseract是tesseract-ocr CLI的python封装,CLI即Command Line Interface。
本文将主要介绍如何在win10+X64+python3.10下安装与使用tesserocr。
参考链接
tesserocr与pytesseract有哪些差异?
1. 因受限于tesseract的CLI,pytesseract可调用的函数有限;而tesserocr可调用的函数(Tesseract C++ API)则丰富很多。
2. pytesseract每一次调用都需要加载和初始化语言文件,在处理图像时会先将图像存入本地硬盘再进行下一步处理,OCR的结果也会先写入文件,再从文件中读出,参考Is there any way of speeding things up。如果不需要更改语言文件,在处理不同图片时,tesserocr可以只加载一次语言文件,且不需要将输入图片或者识别结果先写入硬盘。
tesserocr怎样安装?
这里我们只讨论windows10中的安装,如下图所示,可以通过Conda或者通过pip来安装与自己windows和python版本匹配的版本。
但如果我们希望通过pip来安装,但是tesserocr提供的安装版本中没有与我们环境相匹配的版本,这时我们可以根据tesserocr README中的说明自行编译源码,我用了自行编译源码的方式来进行安装。
接下来记录我在Win10+X64+python3.10的前提下编译源码的细节记录。
编译完成的文件以及使用方法请参考tesserocr_python310 [https://github.com/livezingy/tesserocr_python310]
1. Install Visual Studio Community with C++
2. Install CMake (available here),设置相应环境变量
3. Install Git (available here)
4. 在D盘根目录或者其他任意目录建立临时文件夹temp,用于暂存编译过程中生成的文件。以管理员身份打开命令提示符,切换至目录D:\temp运行以下命令:
1 2 |
set INSTALL_DIR=D:\temp set PATH=%PATH%;%INSTALL_DIR%\bin |
5. 在D:\temp目录下建立文件夹project并进入该文件夹运行以下命令,注意这里需要自己电脑中安装的vcvar64.bat的路径。
1 |
"c:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Auxiliary\Build\vcvars64.bat" x64 |
6. 下载zlib1211 并解压至路径D:\temp\project\zlib1211中,命令提示符运行如下命令
1 2 3 |
mkdir build.msvs && cd build.msvs cmake .. -DCMAKE_INSTALL_PREFIX=%INSTALL_DIR% cmake --build . --config Release --target install |
上述编译完成后,zlib1211编译得到的相应文件会分别被安装在D:\temp\bin, D:\temp\include, D:\temp\lib中。
7. 下载lpng1637并解压至路径D:\temp\project\lpng1637中,命令提示符在路径D:\temp\project\lpng1637下运行如下命令:
1 2 3 |
mkdir build.msvs && cd build.msvs cmake .. -DCMAKE_INSTALL_PREFIX=%INSTALL_DIR% cmake --build . --config Release --target install |
上述编译完成后,lpng1637编译得到的相应文件会分别被安装在D:\temp\bin, D:\temp\include, D:\temp\lib中。
8. 下载 leptonica,并解压至路径D:\temp\project\leptonica-master>中,命令提示符在路径D:\temp\project\leptonica-master>下运行如下命令:
1 2 3 4 |
cd leptonica-master mkdir build.msvs && cd build.msvs cmake -DCMAKE_INSTALL_PREFIX=%INSTALL_DIR% -DCMAKE_PREFIX_PATH=%INSTALL_DIR% -DCMAKE_BUILD_TYPE=Release -DBUILD_PROG=OFF -DSW_BUILD=OFF -DBUILD_SHARED_LIBS=ON cmake --build . --config Release --target install |
上述编译完成后,leptonica编译得到的相应文件会分别被安装在D:\temp\bin, D:\temp\include, D:\temp\lib中。
9. 下载tesseract-5.0.1并解压至路径D:\temp\project\tesseract-5.0.1中,命令提示符在路径D:\temp\project\tesseract-5.0.1下运行如下命令:
1 2 |
cmake .. -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=%INSTALL_DIR% -DCMAKE_PREFIX_PATH=%INSTALL_DIR% -DBUILD_TRAINING_TOOLS=OFF -DSW_BUILD=OFF -DBUILD_SHARED_LIBS=ON -DOPENMP_BUILD=OFF -DLeptonica_DIR=%INSTALL_DIR%\lib\cmake cmake --build . --config Release --target install |
上述编译完成后,tesseract编译得到的相应文件会分别被安装在D:\temp\bin, D:\temp\include, D:\temp\lib中。
注:有的同学可能会疑惑是否能使用Windows – Tesseract at UB Mannheim安装版本。亲测过不行,因为在后续步骤中编译tesserocr时需要tesseract的inlucde和lib文件夹路径,而安装版本的没有这些文件。
10. 下载tesseract的语言文件tessdata并存放至D:\temp\project\tessdata路径中,并设置环境变量。
1 |
SET TESSDATA_PREFIX=F:\Project\tessdata |
11.确认tesseract编译安装成功
1 |
%INSTALL_DIR%\bin\tesseract -v |
12.接下来开始下载并编译tesserocr。命令提示符在路径D:\temp\project下运行如下命令:
1 2 3 4 5 6 7 8 9 10 |
git clone https://github.com/sirfz/tesserocr.git cd tesserocr SET VS90COMNTOOLS=%VS140COMNTOOLS% SET INCLUDE=%INCLUDE%;%INSTALL_DIR%\include SET LIBPATH=%LIBPATH%;%INSTALL_DIR%\lib pip install -r requirements-dev.txt python setup.py clean --all python setup.py build python setup.py bdist_wheel pip uninstall tesserocr |
注意:此时需要到目录D:\temp\project\tesserocr\dist查看并获取生成的.whl的名称,再执行如下命令:
1 2 3 4 |
D:\temp\project\tesserocr>pip install dist\tesserocr-2.5.2-cp310-cp310-win_amd64.whl Processing d:\temp\project\tesserocr\dist\tesserocr-2.5.2-cp310-cp310-win_amd64.whl Installing collected packages: tesserocr Successfully installed tesserocr-2.5.2 |
13. 最后将生成的文件拷贝至python的site-packages中。
1 |
copy D:\temp\bin\*.dll "C:\Users\jane\AppData\Local\Programs\Python\Python310\Lib\site-packages\" |
14.验证python中可以正常调用tesserocr
我们用上面的图片和如下代码来验证tesserocr:
1 2 3 4 5 6 7 8 9 |
import tesserocr from tesserocr import PyTessBaseAPI from PIL import Image with PyTessBaseAPI() as api: print(tesserocr.tesseract_version()) # print tesseract-ocr version print(tesserocr.get_languages()) # prints tessdata path and list of available languages api.SetImageFile('D:/Test/testImg/testtessrocr.png') print(api.GetUTF8Text()) |
输出如下:
1 2 3 4 5 6 |
tesseract 5.0.1 leptonica-1.83.0 (Feb 11 2022, 22:34:51) [MSC v.1929 LIB Release x64] libpng 1.6.37 : zlib 1.2.11 ('d:\\Program Files\\Tesseract-OCR\\tessdata/', ['chi_sim', 'chi_sim_vert', 'eng', 'equ', 'osd']) git clone https://github.com/sirfz/tesserocr.git cd tesserocr |