Docker部署Tesseract并编写Python脚本对外提供接口支持
·
一、基于Ubuntu创建基础容器
1.1、拉取Ubuntu基础镜像
docker pull ubuntu:22.04
1.2、创建并进入容器(容器命名为:tesseract)
docker run -it --name tesseract ubuntu:22.04 /bin/bash
1.3、在容器内安装Tesseract相关依赖
1.3.1、更新apt
apt update && apt upgrade -y
1.3.2、安装基础依赖包
apt install -y \
wget \
curl \
gcc \
g++ \
make \
autoconf \
automake \
libtool \
pkg-config \
libpng-dev \
libjpeg-dev \
libtiff-dev \
zlib1g-dev \
libwebp-dev \
libopenjp2-7-dev \
libleptonica-dev \
locales \
apt-utils
1.3.3、配置UTF-8字符编码
# 生成UTF-8 locale
locale-gen en_US.UTF-8 zh_CN.UTF-8
# 设置环境变量
export LC_ALL=en_US.UTF-8
export LANG=en_US.UTF-8
export LANGUAGE=en_US.UTF-8
# 永久生效(写入bashrc)
echo "export LC_ALL=en_US.UTF-8" >> ~/.bashrc
echo "export LANG=en_US.UTF-8" >> ~/.bashrc
echo "export LANGUAGE=en_US.UTF-8" >> ~/.bashrc
1.4、安装Tesseract OCR
1.4.1、下载Tesseract源码并解压(版本号可调整)
# 下载
wget https://github.com/tesseract-ocr/tesseract/archive/refs/tags/5.3.0.tar.gz -O tesseract-5.3.0.tar.gz
# 解压
tar -zxvf tesseract-5.3.0.tar.gz
1.4.2、编译安装
# 进入Tesseract解压后目录
cd tesseract-5.3.0
# 编译
./autogen.sh
# 指定安装路径
./configure --prefix=/usr/local
# 多核编译并安装
make -j$(nproc)
make install
1.4.3、下载语言包(中英文)
mkdir -p /usr/local/share/tessdata
wget https://github.com/tesseract-ocr/tessdata/raw/main/chi_sim.traineddata -O /usr/local/share/tessdata/chi_sim.traineddata
wget https://github.com/tesseract-ocr/tessdata/raw/main/eng.traineddata -O /usr/local/share/tessdata/eng.traineddata
1.4.4、配置环境变量
echo "export PATH=/usr/local/bin:$PATH" >> ~/.bashrc
echo "export TESSDATA_PREFIX=/usr/local/share/tessdata" >> ~/.bashrc
source ~/.bashrc
1.4.5、验证是否安装成功
tesseract --version
1.5、测试OCR识别
# 将宿主机中图片传到容器内部
docker cp test.png tesseract:/root/test.png
# 识别简体中文图片
tesseract /root/test.png output -l chi_sim
# 查看识别结果
cat output.txt
1.6、保存自定义容器为镜像(便于后续复用)
# 退出容器
exit
# 提交容器为新镜像
docker commit tesseract tesseract:v1.0
# 查看镜像是否存在
docker images
1.7、安装时的坑
1.7.1、验证是否安装时报错
root@d302f5df0f87:/tesseract-5.3.0# tesseract --version
tesseract: error while loading shared libraries: libtesseract.so.5: cannot open shared object file: No such file or directory
错误原因:源码编译安装后,系统动态链接库缓存未更新,导致系统找不到 Tesseract 的共享库文件。
解决方法:
1、定位 libtesseract.so.5 的安装路径
# 查找libtesseract.so.5文件
find /usr/local -name "libtesseract.so.5"
# 正常输出示例
/usr/local/lib/libtesseract.so.5
说明:
如果能找到这个文件,说明编译安装成功,只是系统没识别到;
如果找不到,说明编译 / 安装步骤出错,需重新执行 make install
2、 修复动态链接库缓存
- 将 /usr/local/lib 加入系统库搜索路径;
# 编辑ld.so.conf文件
echo "/usr/local/lib" >> /etc/ld.so.conf
- 更新动态链接库缓存
# 更新
ldconfig
3、验证解决方法
# 检查Tesseract版本
tesseract --version
二、安装Python环境
2.1、进入现有容器
# 进入容器
docker exec -it tesseract /bin/bash
2.2、安装Python依赖
# 更新apt源
apt update && apt install -y python3 python3-pip
# 安装Python依赖(Flask+Pillow+pytesseract)
pip3 install flask==2.3.3 pillow==10.0.1 pytesseract==0.3.10
2.3、在容器内编写 HTTP 接口脚本
# 创建工作目录(避免文件散落)
mkdir -p /app && cd /app
# 编写ocr_server.py脚本
vi ocr_server.py
脚本内容:
from flask import Flask, request, jsonify
import pytesseract
from PIL import Image
import io
app = Flask(__name__)
app.config['JSON_AS_ASCII'] = False
pytesseract.pytesseract.tesseract_cmd = '/usr/local/bin/tesseract'
@app.route('/ocr', methods=['POST'])
def ocr_recognize():
try:
if 'file' not in request.files:
return jsonify({'code':400, 'msg':'未上传图片', 'data':''}), 400
file = request.files['file']
if file.filename == '':
return jsonify({'code':400, 'msg':'文件为空', 'data':''}), 400
allowed = {'png','jpg','jpeg','bmp'}
if not file.filename.split('.')[-1].lower() in allowed:
return jsonify({'code':400, 'msg':'仅支持PNG/JPG/BMP', 'data':''}), 400
image = Image.open(io.BytesIO(file.read()))
result = pytesseract.image_to_string(image, lang='chi_sim')
return jsonify({'code':200, 'msg':'识别成功', 'data':result.strip()}), 200
except Exception as e:
return jsonify({'code':500, 'msg':f'失败:{str(e)}', 'data':''}), 500
@app.route('/health', methods=['GET'])
def health():
return jsonify({'code':200, 'msg':'正常', 'data':'ok'}), 200
if __name__ == '__main__':
app.run(host='0.0.0.0', port=48086, debug=False)
2.4、退出容器,提交新镜像
# 退出容器
exit
# 提交新镜像
docker commit tesseract tesseract-api:v2
# 验证镜像是否存在
docker images
2.5、基于新镜像启动容器
# 启动带Python脚本的容器
docker run -d --name tesseract-api -p 48086:48086 tesseract-api:v2 python3 /app/ocr_server.py
2.6、验证接口功能
# 健康检查
curl http://localhost:48086/health
# 上传图片测试OCR(外部调用可将localhost替换成服务器地址)
curl -X POST -F "file=@test.jpg" http://localhost:48086/ocr
2.7、补充:vim 安装
容器内部可能没有 vi 或 vim文本编辑器,需要手动安装。
# 安装 vim
apt install vim
更多推荐

所有评论(0)