如何在 Microsoft ASP.NET Core 5.2 Linux Docker 容器中运行 .NET Tesseract 6?

How to run .NET Tesseract 5.2 in Microsoft ASP.NET Core 6 Linux Docker container?

提问人:elshev 提问时间:11/17/2023 最后编辑:marc_selshev 更新时间:11/17/2023 访问量:41

问:

我的目标是在 Microsoft ASP.NET Core 6 Docker 容器中运行 .NET Tesseract 5.2:。mcr.microsoft.com/dotnet/aspnet:6.0

但是我在尝试初始化 Tesseract 引擎时出现错误:

找不到平台 x64 的库“libleptonica-1.82.0.so”

GitHub(Ex.1、Ex.2)或 Stackoverflow 中有许多线程,但它们存在一些问题:

  1. 问题(和答案)是关于 Tesseract 4.x 的
  2. 要采取一些额外的耗时步骤:编译 leptonica 和 tesseract。安装依赖项。
  3. apt-get install libleptonica-dev libtesseract-dev导致在mcr.microsoft.com/dotnet/aspnet:6.0
  4. 即使我编译或部署文件,也会发生另一个错误.soliblibdl: cannot open shared object file: No such file or directory

问题:有没有更简单的方法可以在 Microsoft ASP.NET Core 6 Linux Docker 容器中运行 Tesseract 5?

docker asp.net-core tesseract

评论


答:

2赞 elshev 11/17/2023 #1

我找到了一个需要权衡的解决方案。docker 文件的重要部分是下一个:

FROM mcr.microsoft.com/dotnet/aspnet:6.0-bookworm-slim AS base
WORKDIR /app
RUN apt-get update \
    && apt-get install -y --allow-unauthenticated \
        libleptonica-dev \
        libtesseract-dev \
    && rm -rf /var/lib/apt/lists/*
RUN ln -s /usr/lib/x86_64-linux-gnu/libdl.so.2 /usr/lib/x86_64-linux-gnu/libdl.so
WORKDIR /app/x64
RUN ln -s /usr/lib/x86_64-linux-gnu/liblept.so.5 /app/x64/libleptonica-1.82.0.so
RUN ln -s /usr/lib/x86_64-linux-gnu/libtesseract.so.5 /app/x64/libtesseract50.so
WORKDIR /app
EXPOSE 80

# Other lines are not important and can be the same as those generated by Visual Studio.
...

关键时刻

  1. 基本映像是 - 它包含比默认映像更新的 Debian 版本。如果这是您的问题,那么唯一的方法是编译您的 Linux 版本。mcr.microsoft.com/dotnet/aspnet:6.0-bookworm-slimaspnet:6.0leptonicatesseract
  2. 软链接解决了 Tesseract.NET 尝试导入库但找不到它时的问题。这是可能的,因为 Tesseract.NET 只使用了 4 个函数,这些函数也存在于 中。ln -s /usr/lib/x86_64-linux-gnu/libdl.so.2 /usr/lib/x86_64-linux-gnu/libdl.solibdllibdllibdl.so.2
  3. 在编译过程中,容器中的整个文件夹将替换为新编译的文件夹。因此,为创建并将删除的两个软链接。最好将这两行放在 Dockerfile 的末尾附近。但是,在调试模式下运行时,这将不起作用。由于 Visual Studio 速度优化,在调试中仅执行 Dockerfile 的第一部分。解决方法是,在第一次运行后(您应该会收到异常),在容器中手动运行这两行。它将在文件夹中创建两个文件。然后,每次运行后都会复制这 2 个链接文件。/app/app/x64/libleptonica-1.82.0.so/app/x64/libtesseract50.soln -s ...ln -s ...LNK[YourProject]/x64
  4. 作为一种选择,您可以在容器内使用命令行工具,而不是 。它将图像大小增加大约 20Mb。apt-get install -y libleptonica-dev libtesseract-devapt-get install -y tesseract-ocr