.NET7 ASP.NET WebAPI中IronOCR在Docker读取JPG图片报错求助
问题:.NET7 WebAPI中IronOCR在Docker环境下处理JPG字节数组报错(PDF正常)
场景概述
Windows环境下运行完全正常,但部署到Docker后,对JPG图片字节数组执行OCR操作时触发报错,处理PDF文件则无异常。
核心代码
IronTesseract ocr = new IronTesseract(); using (OcrInput input = new OcrInput(data.ToArray())) // 报错位置 { input.Deskew(); input.DeNoise(); input.Invert(); OcrResult result = ocr.Read(input); return Task.FromResult(result.Text); }
错误调用栈
Error in pixReadMemJpeg: function not present Error in pixReadMem: jpeg: no pix returned Failed to load image from memory. System.Exception: Failed to load image from memory. ---> System.Exception: Failed to load image from memory. ---> System.IO.IOException: Failed to load image from memory. at .(Byte[] ) at IronOcr.OcrInput.Add(Byte[] imageAsByteArray, CropRectangle ContentArea) at IronOcr.OcrInput..ctor(Byte[] Bytes)
已尝试的Dockerfile配置
RUN apt-get update && apt-get install -y apt-utils libgdiplus libc6-dev RUN apt-get install -y libjpeg-dev zlib1g-dev libpng-dev wget pkg-config gcc g++ make RUN wget http://www.leptonica.org/source/leptonica-1.80.0.tar.gz && \ tar -xvf leptonica-1.80.0.tar.gz && \ cd leptonica-1.80.0 && \ ./configure --disable-dependency-tracking && \ make && \ make install
补充信息
IronOCR官方建议使用的基础镜像:
FROM mcr.microsoft.com/dotnet/runtime:5.0-focal AS base
对应的官方示例配置:
FROM mcr.microsoft.com/dotnet/runtime:5.0-focal AS base WORKDIR /app # install necessary packages RUN apt-get update && apt-get install -y apt-utils libgdiplus libc6-dev
当前使用的基础镜像为:
FROM mcr.microsoft.com/dotnet/aspnet:7.0 AS base
解决方案
1. 切换兼容的基础镜像
.NET7默认的aspnet镜像基于Ubuntu Jammy(22.04),与IronOCR依赖的Leptonica/Tesseract存在兼容性问题。将基础镜像替换为Ubuntu Focal(20.04)版本的.NET7镜像:
FROM mcr.microsoft.com/dotnet/aspnet:7.0-focal AS base WORKDIR /app
2. 安装完整的预编译依赖库
无需手动编译Leptonica,直接安装系统兼容的预编译包,补充JPG处理所需的完整依赖:
RUN apt-get update && apt-get install -y --no-install-recommends \ apt-utils \ libgdiplus \ libc6-dev \ libjpeg-turbo8-dev \ zlib1g-dev \ libpng-dev \ libtesseract4 \ libleptonica-dev
3. 配置动态库加载路径(可选)
若仍出现库找不到的情况,添加环境变量指定动态库路径:
ENV LD_LIBRARY_PATH=/usr/local/lib:$LD_LIBRARY_PATH
4. 验证依赖完整性
构建镜像后,可进入容器执行以下命令检查依赖是否正常加载:
ldd /usr/lib/x86_64-linux-gnu/liblept.so.5
内容的提问来源于stack exchange,提问作者Taufiq Abdur Rahman
相关产品推荐
相关产品推荐

