如何将 tesseract-ocr 与为 Azure Functions 构建的无服务器 Java 应用程序捆绑在一起?
How to bundle tesseract-ocr with a serverless Java application built for Azure Functions?
我正在添加 Apache Tika,用于从文档和图像中提取文本(使用 TikaOcr)到基于 AppService 的 Azure Functions 中的现有服务。现在,Apache Tika 需要在机器本地安装 tesseract。为了克服这个问题,我使用 apt-get 设置(通过 ssh-ing)到服务器,但是(据我所知)设置是在基础 AppService 层上执行的。结果,并发 OCR 命令的调用确实减慢了我的功能。由于没有正式的 Tesseract 二进制文件,我想知道是否有以下任何一种可能:
- 将 Tesseract 与我的 Functions 应用程序捆绑在一起
- 使用 Tesseract 构建 docker 图像。
- 使用 tesseract 运行时映像构建多容器 docker 应用程序 (tesseract-shadow/tesseract-ocr-re)
我已经尝试使用 tesseract 和以下 docker 文件构建 docker 图像(按照 here 的说明),但是 Apache Tika 无法用它执行 OCR。
ARG JAVA_VERSION=11
# This image additionally contains function core tools – useful when using custom extensions
#FROM mcr.microsoft.com/azure-functions/java:3.0-java$JAVA_VERSION-core-tools AS installer-env
FROM mcr.microsoft.com/azure-functions/java:3.0-java$JAVA_VERSION-build AS installer-env
RUN apt-get update && apt-get install -y tesseract-ocr
COPY . /src/functions-tika-extraction
RUN cd /src/functions-tika-extraction && \
mkdir -p /home/site/wwwroot && \
mvn clean package && \
cd ./target/azure-functions/ && \
cd $(ls -d */|head -n 1) && \
cp -a . /home/site/wwwroot
# This image is ssh enabled
FROM mcr.microsoft.com/azure-functions/java:3.0-java$JAVA_VERSION-appservice
# This image isn't ssh enabled
#FROM mcr.microsoft.com/azure-functions/java:3.0-java$JAVA_VERSION
ENV AzureWebJobsScriptRoot=/home/site/wwwroot \
AzureFunctionsJobHost__Logging__Console__IsEnabled=true
COPY --from=installer-env ["/home/site/wwwroot", "/home/site/wwwroot"]
我是 Docker 和 Azure 平台的新手,所以我可能在这里遗漏了一些东西,但是如何使用 Docker 或任何其他方法让我的 Azure Functions 与 Tesseract 一起工作?
阅读完 docker 文档并了解了一些关于 docker 的基础知识后,我终于弄清楚 tesseract 实际上是安装在 Azure AppService 层下面的,它以某种方式不允许容器来访问它。如果安装在最上层,通过将 Tesseract 包含在 Dockerfile 的底部,可以使 Tesseract 对 Azure Functions 可用,如下所示:
ARG JAVA_VERSION=11
FROM mcr.microsoft.com/azure-functions/java:3.0-java$JAVA_VERSION-build AS installer-env
# remove this line
# RUN apt-get update && apt-get install -y tesseract-ocr
COPY . /src/functions-tika-extraction
RUN cd /src/functions-tika-extraction && \
mkdir -p /home/site/wwwroot && \
mvn clean package && \
cd ./target/azure-functions/ && \
cd $(ls -d */|head -n 1) && \
cp -a . /home/site/wwwroot
# This image is ssh enabled
FROM mcr.microsoft.com/azure-functions/java:3.0-java$JAVA_VERSION-appservice
# add the line here
RUN apt-get update && apt-get install -y tesseract-ocr
ENV AzureWebJobsScriptRoot=/home/site/wwwroot \
AzureFunctionsJobHost__Logging__Console__IsEnabled=true
COPY --from=installer-env ["/home/site/wwwroot", "/home/site/wwwroot"]
虽然它确实满足了我将 tesseract-ocr 与 Azure Functions Java 应用程序捆绑在一起的要求,但不幸的是调用仍然很慢。
我正在添加 Apache Tika,用于从文档和图像中提取文本(使用 TikaOcr)到基于 AppService 的 Azure Functions 中的现有服务。现在,Apache Tika 需要在机器本地安装 tesseract。为了克服这个问题,我使用 apt-get 设置(通过 ssh-ing)到服务器,但是(据我所知)设置是在基础 AppService 层上执行的。结果,并发 OCR 命令的调用确实减慢了我的功能。由于没有正式的 Tesseract 二进制文件,我想知道是否有以下任何一种可能:
- 将 Tesseract 与我的 Functions 应用程序捆绑在一起
- 使用 Tesseract 构建 docker 图像。
- 使用 tesseract 运行时映像构建多容器 docker 应用程序 (tesseract-shadow/tesseract-ocr-re)
我已经尝试使用 tesseract 和以下 docker 文件构建 docker 图像(按照 here 的说明),但是 Apache Tika 无法用它执行 OCR。
ARG JAVA_VERSION=11
# This image additionally contains function core tools – useful when using custom extensions
#FROM mcr.microsoft.com/azure-functions/java:3.0-java$JAVA_VERSION-core-tools AS installer-env
FROM mcr.microsoft.com/azure-functions/java:3.0-java$JAVA_VERSION-build AS installer-env
RUN apt-get update && apt-get install -y tesseract-ocr
COPY . /src/functions-tika-extraction
RUN cd /src/functions-tika-extraction && \
mkdir -p /home/site/wwwroot && \
mvn clean package && \
cd ./target/azure-functions/ && \
cd $(ls -d */|head -n 1) && \
cp -a . /home/site/wwwroot
# This image is ssh enabled
FROM mcr.microsoft.com/azure-functions/java:3.0-java$JAVA_VERSION-appservice
# This image isn't ssh enabled
#FROM mcr.microsoft.com/azure-functions/java:3.0-java$JAVA_VERSION
ENV AzureWebJobsScriptRoot=/home/site/wwwroot \
AzureFunctionsJobHost__Logging__Console__IsEnabled=true
COPY --from=installer-env ["/home/site/wwwroot", "/home/site/wwwroot"]
我是 Docker 和 Azure 平台的新手,所以我可能在这里遗漏了一些东西,但是如何使用 Docker 或任何其他方法让我的 Azure Functions 与 Tesseract 一起工作?
阅读完 docker 文档并了解了一些关于 docker 的基础知识后,我终于弄清楚 tesseract 实际上是安装在 Azure AppService 层下面的,它以某种方式不允许容器来访问它。如果安装在最上层,通过将 Tesseract 包含在 Dockerfile 的底部,可以使 Tesseract 对 Azure Functions 可用,如下所示:
ARG JAVA_VERSION=11
FROM mcr.microsoft.com/azure-functions/java:3.0-java$JAVA_VERSION-build AS installer-env
# remove this line
# RUN apt-get update && apt-get install -y tesseract-ocr
COPY . /src/functions-tika-extraction
RUN cd /src/functions-tika-extraction && \
mkdir -p /home/site/wwwroot && \
mvn clean package && \
cd ./target/azure-functions/ && \
cd $(ls -d */|head -n 1) && \
cp -a . /home/site/wwwroot
# This image is ssh enabled
FROM mcr.microsoft.com/azure-functions/java:3.0-java$JAVA_VERSION-appservice
# add the line here
RUN apt-get update && apt-get install -y tesseract-ocr
ENV AzureWebJobsScriptRoot=/home/site/wwwroot \
AzureFunctionsJobHost__Logging__Console__IsEnabled=true
COPY --from=installer-env ["/home/site/wwwroot", "/home/site/wwwroot"]
虽然它确实满足了我将 tesseract-ocr 与 Azure Functions Java 应用程序捆绑在一起的要求,但不幸的是调用仍然很慢。