在centos上安装 tesseract
并在springboot项目中使用
确认使用的版本tesseract和test4j版本需要匹配,这里选择最新版 tesseract5.3.3 ,test4j 5.9.0
版本匹配可查看
Releases · nguyenq/tess4j · GitHub
或者 【这个更新不及时】 Tess4J & Lept4J API Documentation
将对于版本的tar.gz包下载,解压 tar -zxvf 包名
进入解压后的文件夹
分开执行
./autogen.sh
./configure
make
sudo make install
编辑~/.bashrc,加入 export TESSDATA_PREFIX=/usr/share/tesseract 路径为包含tessdata语言包路径
问题:如果在执行./configure报错configure: error: Your compiler does not have the necessary C++17 support! Cannot proceed.,需要升级c++编译器
具体为
wget https://ftp.gnu.org/gnu/gcc/gcc-10.2.0/gcc-10.2.0.tar.gz
tar -zxvf gcc-10.2.0.tar.gz
cd gcc-10.2.0
./contrib/download_prerequisites
./configure
make
sudo make install
问题:在./configure中报错configure: error: Leptonica 1.74 or higher is required. Try to install libleptonica-dev,说明leptonica的版本低于最低要求,需要更新Leptonica,如果yum或者其他包管理工具中有对应版本则直接下载,否则,手动下载并安装
这里安装后一定要配置环境变量,否则系统仍然使用老版本Leptonica
mkdir build
cd build
cmake -DLEPTONICA_ROOT=/usr/local ..
make
sudo make install
其余问题:
大多都是依赖不完全,比如 tensorflow,ICU版本过低等
在./configure中日志 checking for libarchive... no checking for ICU_UC... no checking for ICU_I18N... no,这个说明需要添加icu_uc的依赖,用于对unicode的支持,同样通过yum或者编译返回安装
wget https://github.com/unicode-org/icu/releases/download/release-69-1/icu4c-69_1-src.tgz
tar -xzvf icu4c-69_1-src.tgz
cd icu/source
./configure --prefix=/usr/local/icu
make
sudo make install
因为使用编译方式安装需要自己配置依赖,比如libtiff、Leptonica等
如果需要快速安装,则可以直接使用yum 安装,但是这里库中只有3.0版本的
这里找到了snap安装方式,里面有5.0版本的【这个安装方式暂时没找到如何添加语言包】
具体过程为:
yum install epel-release
yum install snapd
systemctl enable --now snapd.socket
如果查询服务状态是inactive (dead),那么重启服务,如果仍然dead,尝试重新生成密钥
sudo snap install snapd --edge
sudo systemctl restart snapd
snap install --edge tesseract
# 1.查看snap安装位置
which snap
/usr/bin/snap
# 2.查看tesseract版本
/usr/bin/snap run tesseract -v
tesseract 5.0.0-alpha-20201224
leptonica-1.74.2
libjpeg 8d (libjpeg-turbo 1.4.2) : libpng 1.2.54 : libtiff 4.0.6 : zlib 1.2.8
Found AVX512BW
Found AVX512F
Found AVX2
Found AVX
Found FMA
Found SSE
Found OpenMP 201307
# 3.将/usr/bin/snap run配置到环境变量中
# 在~/.bashrc中加入下面命令
alias tesseract='/usr/bin/snap run tesseract'
# 4.在此检查版本
tesseract -v
tesseract 5.0.0-alpha-20201224
leptonica-1.74.2
libjpeg 8d (libjpeg-turbo 1.4.2) : libpng 1.2.54 : libtiff 4.0.6 : zlib 1.2.8
Found AVX512BW
Found AVX512F
Found AVX2
Found AVX
Found FMA
Found SSE
Found OpenMP 201307
使用conda进行安装
Free Download | Anaconda
将下载的脚本在目标机中执行
# 执行安装脚本,途中都选yes
bash Anaconda3-2023.09-0-Linux-x86_64.sh
# 激活
source ~/.bashrc
# 验证
conda --version
版本无法下载最新版,目前是5.2版本
# 安装
conda install -c conda-forge tesseract
# 验证
tesseract --version
安装中文简体语言包,下载后将其放到/usr/share/tesseract/tessdata目录下
wget https://github.com/tesseract-ocr/tessdata/raw/main/chi_sim.traineddata
# tesseract --list-langs
List of available languages in "/usr/share/tesseract/tessdata/" (1):
chi_sim
保存一张图片
然后执行命令
这将进行识别图片并将结果保存到文本文件中
tesseract your_image.png output.txt
思路:
通过docker容器卷加载conda环境到容器中,并配置环境变量,让springboot使用宿主机上的tesseract
具体可参见步骤一的版本依赖选择
net.sourceforge.tess4j
tess4j
5.3.0
将识别test.png并返回识别结果
String imagePath = "/usr/share/tesseract/test.png";
File imageFile = new File(imagePath);
ITesseract tesseract = new Tesseract();
tesseract.setDatapath("/usr/share/tesseract/tessdata"); // 设置 Tesseract 数据目录,根据实际情况修改
tesseract.setLanguage("chi_sim"); // 设置中文语言包
try {
String result = tesseract.doOCR(imageFile);
return result;
} catch (Exception e) {
e.printStackTrace();
return "Error during OCR processing";
}
Dockerfile中将conda的路径配置到环境变量中,将conda的lib也加入,将语言包路径加入环境变量
如果通过编译安装的tesseract,则将tesseract可执行路径添加到环境变量
FROM eclipse-temurin:8-jre
LABEL org.opencontainers.image.authors="[email protected]"
# 设置 Tesseract 可执行文件路径添加到 PATH
ENV PATH="/root/anaconda3/bin:${PATH}"
ENV LD_LIBRARY_PATH="/root/anaconda3/lib:${LD_LIBRARY_PATH}"
ENV TESSDATA_PREFIX="/usr/share/tesseract/"
COPY remarkback.jar /usr/local/
WORKDIR /usr/local
CMD ["java", "-jar", "remarkback.jar"]
volumes:
- /root/anaconda3:/root/anaconda3
- /usr/share/tesseract/:/usr/share/tesseract/
通过编译安装的tesseract,需要设置环境变量略微复杂一些
将该文件夹下路径拷贝到容器卷文件夹下 【容器卷文件夹:待会需要加载到容器中,并且是添加到path路径下】
#/home/opencv_so 是加载到容器中的可执行位置
cp -r ./* /home/opencv_so
将libgomp.so.1也拷贝进去【后续运行测试时可能也会报错,比如什么文件不存在,那么就在物理机拷贝到容器卷文件中再测试】
so文件需要配置
# 1.通过命令查看安装路径
whereis tesseract
# 说明执行路径位置和 语言包位置
tesseract: /usr/local/bin/tesseract /usr/share/tesseract
# 2.docker file 配置环境变量
# 设置so文件夹位置,容器内
ENV OPENCV_DIR /usr/local/opencv
RUN mkdir -p $OPENCV_DIR
# 本地库文件环境变量
ENV LD_LIBRARY_PATH $OPENCV_DIR/lib64:$LD_LIBRARY_PATH
# tesseract环境变量
ENV PATH="/usr/bin/tesseract:${PATH}"
# tesseract数据路径
ENV TESSDATA_PREFIX="/usr/share/tesseract/"
# so可执行文件的位置,和docker file需要一致
- /home/docker/remark/back/img/opencv_so:/usr/local/opencv/lib64
# tesseract命令行位置
- /usr/bin/tesseract:/usr/bin/tesseract
# tesseract 语言包位置
- /usr/share/tesseract:/usr/share/tesseract
进入运行的容器,查看是否能正常使用tesseract
docker exec -it ecfaf8883424 bash
root@ecfaf8883424:/usr/local# tesseract -v
tesseract 5.2.0
leptonica-1.82.0
libgif 5.2.1 : libjpeg 9e : libpng 1.6.39 : libtiff 4.5.1 : zlib 1.2.13 : libwebp 1.2.4 : libopenjp2 2.4.0
Found AVX512BW
Found AVX512F
Found AVX2
Found AVX
Found FMA
Found SSE4.1
Found OpenMP 201511
Found libarchive 3.6.2 zlib/1.2.13 liblzma/5.4.2 bz2lib/1.0.8 liblz4/1.9.4 libzstd/1.5.2
再调用接口,查看是否能正常返回