我正在尝试在 docker 文件中完成一些 OCR,因为我无法让它与 Tesseract 一起工作,所以我尝试重构以改用 PyMuPdf。我得到的错误很简单:
File "/code/table.py", line 35, in <module>
import fitz
ModuleNotFoundError: No module named 'fitz'
在我的本地 (windows) 机器上,我可以使用如下所示的代码运行它
import fitz
pages = fitz.open(source_path) # open document
for page in pages:
page_data = page.get_textpage_ocr(language='eng', dpi=600, full=True)
<etc>
但是在 Docker 中,完全相同的代码不起作用。
我的 Dockerfile 的相关部分看起来像这样
FROM python:3.10
WORKDIR /code
COPY ./requirements.txt ./
RUN pip install --upgrade pip
RUN pip install --no-cache-dir -r requirements.txt
# install PyMupdf
RUN pip install pymupdf
COPY . .
CMD ["python", "./run.py"]
我的需求文件中也有 pymupdf,但为了以防万一,我单独安装了它。构建图像没有错误并且可以正常工作。
Docker-compose.yml相关部分
build: .
container_name: ocr
command: python ./run.py
volumes:
- .:/code
- type: bind
source: "C:/Program Files/Tesseract-OCR/tessdata"
target: /code/tessdata
在我的
.env
文件中,我引用了绑定的安装TESS_DATA_PREFIX='/code/tessdata
我已经将
TESS_DATA_PREFIX
添加到我的环境变量中,尽管它似乎不再需要了,而且在我尝试使用 OCR 之前就发生了错误。
这个问题与 Docker 在构建过程中更改后没有更新有关。删除了所有容器和构建缓存,现在它可以工作了。
编辑:另外,正确的 ENV 变量应该称为
TESSDATA_PREFIX
,而不是 TESS_DATA_PREFIX
。这是我的下一个错误,但在将 .env
更改为正确的变量名称后,代码完全按照上面的配置工作。