在Docker中使用Tesserocr时出现Segmentation fault问题求助
解决tesserocr在Ubuntu 14.04 Docker容器中出现Segmentation fault的问题
我之前也碰到过类似的tesseract 4.0 alpha版本在老系统环境下的段错误问题,结合你的环境配置和代码情况,给你几个实用的排查和解决方向:
1. 确认tesserocr与tesseract版本的兼容性
tesseract 4.0 alpha是早期的测试版本,和较新的tesserocr版本兼容性很差。你可以先查看当前安装的tesserocr版本:
pip show tesserocr
然后安装适配tesseract 4.0 alpha的旧版tesserocr,比如2.2.x系列:
pip install tesserocr==2.2.2
2. 重新编译安装依赖库(适配Ubuntu 14.04)
Ubuntu 14.04的系统库版本偏旧,可能和tesseract 4.0 alpha依赖的leptonica等库存在兼容性问题,建议手动编译安装对应版本的依赖:
- 先安装编译所需的基础依赖:
apt-get update && apt-get install -y autoconf automake libtool pkg-config libpng12-dev libjpeg8-dev libtiff5-dev zlib1g-dev
- 编译安装leptonica 1.74.4:
wget http://www.leptonica.org/source/leptonica-1.74.4.tar.gz tar xzf leptonica-1.74.4.tar.gz cd leptonica-1.74.4 ./configure && make && make install
- 编译安装tesseract 4.0 alpha:
wget https://github.com/tesseract-ocr/tesseract/archive/4.0.0-alpha.tar.gz tar xzf 4.0.0-alpha.tar.gz cd tesseract-4.0.0-alpha ./configure --with-leptonica=/usr/local/lib make && make install ldconfig
3. 排查代码中的参数错误
你的代码里api.GetIterator(...)的参数不完整,tesserocr的GetIterator方法需要指定页面迭代器的类型(比如文本行、单词等),正确的写法示例:
from tesserocr import PyTessBaseAPI, RIL from PIL import Image x = Image.open('image.jpg') with PyTessBaseAPI() as api: api.SetImage(x) # 可以先简化测试,直接获取文本 print(api.GetUTF8Text()) # 如果需要迭代器,指定正确的类型 ri = api.GetIterator(RIL_TEXTLINE)
另外,Recognize()方法在很多场景下是自动触发的,你可以先去掉这行代码,测试是否还会崩溃,逐步定位问题点。
4. 升级Docker基础镜像(最省心的方案)
Ubuntu 14.04已经停止维护多年,系统库的兼容性问题很难彻底解决。建议直接换成Ubuntu 16.04或更高版本的镜像,比如ubuntu:16.04,在新镜像中重新安装tesseract和tesserocr,能避开很多老版本系统带来的底层bug。
内容的提问来源于stack exchange,提问作者Vatsal Mishra
相关产品推荐
相关产品推荐

