在 docker 中容器化时出现 TesseractNotFound 问题

TesseractNotFound issue when containerizing in docker

问题:

我在本地机器上安装了 tesseract,它的路径是 /usr/local/Cellar/tesseract/4.1.1/bin/tesseract。一切正常,直到我将它容器化在 docker 中,错误消息为:pytesseract.pytesseract.TesseractNotFoundError: is not installed or it's not your PATH

我试过的:

根据错误消息,这是我尝试过的:

1).将文件共享下 docker 桌面应用程序中的 PATH 添加到 /usr/local 并将文件路径从本地挂载到 docker - 仍然收到错误消息(不起作用)

2).将 tesseract.exe 从它所在的位置移动到当前本地工作目录 - 仍然收到错误消息(当然它不起作用 - 我当时在想什么?)

3).修改 docker 文件以安装 tesseract 及其依赖项。这是 docker 文件:

FROM python:3.7-alpine
RUN apk update && apk add --no-cache tesseract-ocr
WORKDIR /app
COPY ./requirements.txt ./ 
RUN pip3 install --upgrade pip
# install dependencies 
RUN pip3 install -r requirements.txt
RUN pip3 install --upgrade PyMuPDF
# bundle app source 
COPY . /app

COPY ./ChaseOCR.py /app
COPY ./BancAmericaOCR.py /app
COPY ./WellsFargoOCR.py /app

EXPOSE 8080

CMD ["python3", "MainBankClass.py"] 

在requirements.txt文件下,还包括pytesseracttesseract依赖。 - 仍然收到错误消息(不起作用)。在过去的 2 天里被困在这个问题上,有点 运行 在这里没有选择。 This link and this link 两者都不适用于我的情况。任何帮助深表感谢。提前致谢。

编辑:

感谢 Neo 的解决方案,我现在正在测试它,但它 运行 非常慢。因此,我认为最好在这里共享 requirements.txt 文件,以防其他问题与 tesseract 无关。

requirements.txt:

numpy
pandas
opencv-python
Pillow
Image
pytesseract
tesseract
PyMuPDF
python-levenshtein
tabula-py

本地文件目录:

testdockerfile
├─ .vscode
│  └─ settings.json
├─ BankofAmericaOCR.py
├─ ChaseOCR.py
├─ Dockerfile
├─ MainBankClass.py
|- __init__.py
├─ WellsFargoOCR.py
└─ requirements.txt

编辑 2:

如果有人遇到与我在 docker 中实施 tesseract 后仍然遇到 TesseractNotFound 问题相同的问题,仅供将来参考。你需要做的是如果你在本地将路径设置为运行,则注释掉pytesseract.pytesseract.tesseract_cmd = r'/path/to/your/tesseract。之后,您还需要重新构建图像和 运行 docker 中的图像。应该没问题。

编辑 3:
requirements.txt 中的一些 python 包有其他先决条件。 有了这个 Dockerfile 它成功地完成了整个构建过程。

最棘手的部分是构建 opencv
感谢 https://github.com/janza/docker-python3-opencv/blob/master/Dockerfile

.
├── Dockerfile
└── requirements.txt

Docker 文件:

FROM python:3.7

RUN apt-get update \
    && apt-get install -y \
        build-essential \
        cmake \
        git \
        wget \
        unzip \
        yasm \
        pkg-config \
        libswscale-dev \
        libtbb2 \
        libtbb-dev \
        libjpeg-dev \
        libpng-dev \
        libtiff-dev \
        libavformat-dev \
        libpq-dev \
    && rm -rf /var/lib/apt/lists/*

RUN pip install numpy

WORKDIR /
ENV OPENCV_VERSION="4.1.1"
RUN wget https://github.com/opencv/opencv/archive/${OPENCV_VERSION}.zip \
&& unzip ${OPENCV_VERSION}.zip \
&& mkdir /opencv-${OPENCV_VERSION}/cmake_binary \
&& cd /opencv-${OPENCV_VERSION}/cmake_binary \
&& cmake -DBUILD_TIFF=ON \
  -DBUILD_opencv_java=OFF \
  -DWITH_CUDA=OFF \
  -DWITH_OPENGL=ON \
  -DWITH_OPENCL=ON \
  -DWITH_IPP=ON \
  -DWITH_TBB=ON \
  -DWITH_EIGEN=ON \
  -DWITH_V4L=ON \
  -DBUILD_TESTS=OFF \
  -DBUILD_PERF_TESTS=OFF \
  -DCMAKE_BUILD_TYPE=RELEASE \
  -DCMAKE_INSTALL_PREFIX=$(python3.7 -c "import sys; print(sys.prefix)") \
  -DPYTHON_EXECUTABLE=$(which python3.7) \
  -DPYTHON_INCLUDE_DIR=$(python3.7 -c "from distutils.sysconfig import get_python_inc; print(get_python_inc())") \
  -DPYTHON_PACKAGES_PATH=$(python3.7 -c "from distutils.sysconfig import get_python_lib; print(get_python_lib())") \
  .. \
&& make install \
&& rm /${OPENCV_VERSION}.zip \
&& rm -r /opencv-${OPENCV_VERSION}
RUN ln -s \
  /usr/local/python/cv2/python-3.7/cv2.cpython-37m-x86_64-linux-gnu.so \
  /usr/local/lib/python3.7/site-packages/cv2.so

RUN apt-get --fix-missing update && apt-get --fix-broken install && apt-get install -y poppler-utils && apt-get install -y tesseract-ocr && \
    apt-get install -y libtesseract-dev && apt-get install -y libleptonica-dev && ldconfig && apt install -y libsm6 libxext6 && apt install -y python-opencv

COPY ./requirements.txt ./ 
RUN pip3 install --upgrade pip
# install dependencies 
RUN pip3 install -r requirements.txt

建造:

docker image build -t my-awesome-py .

运行:

docker run --rm my-awesome-py tesseract
Usage:
  tesseract --help | --help-extra | --version
  tesseract --list-langs
  tesseract imagename outputbase [options...] [configfile...]

OCR options:
  -l LANG[+LANG]        Specify language(s) used for OCR.
NOTE: These options must occur before any configfile.

Single options:
  --help                Show this help message.
  --help-extra          Show extra help for advanced users.
  --version             Show version information.
  --list-langs          List available languages for tesseract engine.