描述:
在centos上安装 tesseract
并在springboot项目中使用
步骤一:安装
确认使用的版本tesseract和test4j版本需要匹配,这里选择最新版 tesseract5.3.3 ,test4j 5.9.0
版本匹配可查看
Releases · nguyenq/tess4j · GitHub
或者 【这个更新不及时】 Tess4J & Lept4J API Documentation
将对于版本的tar.gz包下载,解压 tar -zxvf 包名
进入解压后的文件夹
1.安装
分开执行
./autogen.sh
./configure
make
sudo make install
2. 配置环境变量
编辑~/.bashrc,加入 export TESSDATA_PREFIX=/usr/share/tesseract 路径为包含tessdata语言包路径
3. 问题
问题:如果在执行./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
- 下载并解压
- Releases · DanBloomberg/leptonica · GitHub
- tar -zxvf xxx
- 进入解压包
-
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版本的【这个安装方式暂时没找到如何添加语言包】
具体过程为:
- 下载snap
yum install epel-release yum install snapd
- 启动服务
systemctl enable --now snapd.socket
如果查询服务状态是inactive (dead),那么重启服务,如果仍然dead,尝试重新生成密钥
sudo snap install snapd --edge sudo systemctl restart snapd
- 安装tesseract
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进行安装
1 下载conda
Free Download | Anaconda
将下载的脚本在目标机中执行
# 执行安装脚本,途中都选yes
bash Anaconda3-2023.09-0-Linux-x86_64.sh
# 激活
source ~/.bashrc
# 验证
conda --version
2 下载tesseract
版本无法下载最新版,目前是5.2版本
# 安装
conda install -c conda-forge tesseract
# 验证
tesseract --version
步骤二:语言包下载
1 下载
安装中文简体语言包,下载后将其放到/usr/share/tesseract/tessdata目录下
wget https://github.com/tesseract-ocr/tessdata/raw/main/chi_sim.traineddata
2 查看
# tesseract --list-langs
List of available languages in "/usr/share/tesseract/tessdata/" (1):
chi_sim
3 验证
保存一张图片
然后执行命令
这将进行识别图片并将结果保存到文本文件中
tesseract your_image.png output.txt
步骤三:在springboot中使用
思路:
通过docker容器卷加载conda环境到容器中,并配置环境变量,让springboot使用宿主机上的tesseract
1 maven依赖
具体可参见步骤一的版本依赖选择
<dependency>
<groupId>net.sourceforge.tess4j</groupId>
<artifactId>tess4j</artifactId>
<version>5.3.0</version>
</dependency>
2 示例
将识别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";
}
3 镜像打包
Dockerfile中将conda的路径配置到环境变量中,将conda的lib也加入,将语言包路径加入环境变量
如果通过编译安装的tesseract,则将tesseract可执行路径添加到环境变量
FROM eclipse-temurin:8-jre
LABEL org.opencontainers.image.authors="fooleryang@139.com"
# 设置 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"]
在docker compose 文件中加conda通过容器卷加入到容器,将语言包也加入到容器
volumes:
- /root/anaconda3:/root/anaconda3
- /usr/share/tesseract/:/usr/share/tesseract/
4 验证
进入运行的容器,查看是否能正常使用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
再调用接口,查看是否能正常返回