hiroi-sora / Umi-OCR_runtime_linux

Umi-OCR Linux 运行环境
MIT License
29 stars 3 forks source link

Docker部署无法执行OCR: "code": 803, "data": "任务提前结束。[Error] OCR init fail." #3

Closed weiweics55 closed 2 weeks ago

weiweics55 commented 1 month ago

http://localhost:1224/api/ocr

{"code": 803, "data": "\u4efb\u52a1\u63d0\u524d\u7ed3\u675f\u3002[Error] OCR init fail. Argd: {'enable_mkldnn': True, 'cpu_threads': 2, 'config_path': 'models/config_chinese.txt', 'cls': False, 'use_angle_cls': False, 'limit_side_len': 960}\nOCR init fail."} json: cannot unmarshal string into Go struct field Response.data of type []local.DataEntry

hiroi-sora commented 1 month ago

这个问题是OCR引擎没有运行起来。很大可能是CPU不具有AVX指令集,所以不兼容。

请检查CPU兼容性(在主机或容器执行均可):

lscpu | grep avx

如果CPU支持AVX指令集,则会输出一行很长的结果,其中可以找到 avx 的字样,类似如下:

Flags:          ... avx ... avx2 ...
weiweics55 commented 1 month ago

这个问题是OCR引擎没有运行起来。很大可能是CPU不具有AVX指令集,所以不兼容。

请检查CPU兼容性(在主机或容器执行均可):

lscpu | grep avx

如果CPU支持AVX指令集,则会输出一行很长的结果,其中可以找到 avx 的字样,类似如下:

Flags:          ... avx ... avx2 ...

结果如下: [root@VM-0-3-centos Umi-OCR-Docker]# lscpu | grep avx Flags: fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ss ht syscall nx lm constant_tsc rep_good nopl eagerfpu pni pclmulqdq ssse3 fma cx16 pcid sse4_1 sse4_2 x2apic movbe popcnt tsc_deadline_timer aes xsave avx f16c rdrand hypervisor lahf_lm abm 3dnowprefetch rsb_ctxsw bmi1 avx2 bmi2 rdseed adx xsaveopt [root@VM-0-3-centos Umi-OCR-Docker]#

hiroi-sora commented 1 month ago

看来CPU是没有问题的。请尝试在容器中,运行以下路径的脚本:

/app/UmiOCR-data/plugins/linux_x64_PaddleOCR-json_v140_beta/run.sh

正常情况下,应该能看到 OCR init completed. 的输出。

如果有报错或别的情况,请告诉我。

weiweics55 commented 1 month ago
[root@VM-0-3-centos Umi-OCR-Docker]# docker ps -a
CONTAINER ID   IMAGE            COMMAND             CREATED         STATUS         PORTS                                       NAMES
a90cb508e2f5   umi-ocr-paddle   "/app/umi-ocr.sh"   4 minutes ago   Up 4 minutes   0.0.0.0:1224->1224/tcp, :::1224->1224/tcp   umi-ocr
[root@VM-0-3-centos Umi-OCR-Docker]# docker exec -it a90cb508e2f5 /app/UmiOCR-data/plugins/linux_x64_PaddleOCR-json_v140_beta/run.sh
/app/UmiOCR-data/plugins/linux_x64_PaddleOCR-json_v140_beta/bin/PaddleOCR-json: /usr/lib/x86_64-linux-gnu/libstdc++.so.6: version `GLIBCXX_3.4.29' not found (required by /app/UmiOCR-data/plugins/linux_x64_PaddleOCR-json_v140_beta/bin/PaddleOCR-json)
/app/UmiOCR-data/plugins/linux_x64_PaddleOCR-json_v140_beta/bin/PaddleOCR-json: /lib/x86_64-linux-gnu/libc.so.6: version `GLIBC_2.34' not found (required by /app/UmiOCR-data/plugins/linux_x64_PaddleOCR-json_v140_beta/bin/PaddleOCR-json)
/app/UmiOCR-data/plugins/linux_x64_PaddleOCR-json_v140_beta/bin/PaddleOCR-json: /lib/x86_64-linux-gnu/libc.so.6: version `GLIBC_2.32' not found (required by /app/UmiOCR-data/plugins/linux_x64_PaddleOCR-json_v140_beta/bin/PaddleOCR-json)
/app/UmiOCR-data/plugins/linux_x64_PaddleOCR-json_v140_beta/bin/PaddleOCR-json: /lib/x86_64-linux-gnu/libc.so.6: version `GLIBC_2.33' not found (required by /app/UmiOCR-data/plugins/linux_x64_PaddleOCR-json_v140_beta/bin/PaddleOCR-json)
/app/UmiOCR-data/plugins/linux_x64_PaddleOCR-json_v140_beta/bin/PaddleOCR-json: /usr/lib/x86_64-linux-gnu/libstdc++.so.6: version `GLIBCXX_3.4.29' not found (required by /app/UmiOCR-data/plugins/linux_x64_PaddleOCR-json_v140_beta/lib/libopencv_imgcodecs.so.410)
/app/UmiOCR-data/plugins/linux_x64_PaddleOCR-json_v140_beta/bin/PaddleOCR-json: /lib/x86_64-linux-gnu/libc.so.6: version `GLIBC_2.33' not found (required by /app/UmiOCR-data/plugins/linux_x64_PaddleOCR-json_v140_beta/lib/libopencv_imgcodecs.so.410)
/app/UmiOCR-data/plugins/linux_x64_PaddleOCR-json_v140_beta/bin/PaddleOCR-json: /lib/x86_64-linux-gnu/libc.so.6: version `GLIBC_2.32' not found (required by /app/UmiOCR-data/plugins/linux_x64_PaddleOCR-json_v140_beta/lib/libopencv_imgcodecs.so.410)
/app/UmiOCR-data/plugins/linux_x64_PaddleOCR-json_v140_beta/bin/PaddleOCR-json: /lib/x86_64-linux-gnu/libc.so.6: version `GLIBC_2.34' not found (required by /app/UmiOCR-data/plugins/linux_x64_PaddleOCR-json_v140_beta/lib/libopencv_imgcodecs.so.410)
/app/UmiOCR-data/plugins/linux_x64_PaddleOCR-json_v140_beta/bin/PaddleOCR-json: /lib/x86_64-linux-gnu/libc.so.6: version `GLIBC_2.32' not found (required by /app/UmiOCR-data/plugins/linux_x64_PaddleOCR-json_v140_beta/lib/libopencv_imgproc.so.410)
/app/UmiOCR-data/plugins/linux_x64_PaddleOCR-json_v140_beta/bin/PaddleOCR-json: /usr/lib/x86_64-linux-gnu/libstdc++.so.6: version `GLIBCXX_3.4.29' not found (required by /app/UmiOCR-data/plugins/linux_x64_PaddleOCR-json_v140_beta/lib/libopencv_imgproc.so.410)
/app/UmiOCR-data/plugins/linux_x64_PaddleOCR-json_v140_beta/bin/PaddleOCR-json: /usr/lib/x86_64-linux-gnu/libstdc++.so.6: version `GLIBCXX_3.4.29' not found (required by /app/UmiOCR-data/plugins/linux_x64_PaddleOCR-json_v140_beta/lib/libopencv_core.so.410)
/app/UmiOCR-data/plugins/linux_x64_PaddleOCR-json_v140_beta/bin/PaddleOCR-json: /usr/lib/x86_64-linux-gnu/libstdc++.so.6: version `GLIBCXX_3.4.30' not found (required by /app/UmiOCR-data/plugins/linux_x64_PaddleOCR-json_v140_beta/lib/libopencv_core.so.410)
/app/UmiOCR-data/plugins/linux_x64_PaddleOCR-json_v140_beta/bin/PaddleOCR-json: /usr/lib/x86_64-linux-gnu/libstdc++.so.6: version `CXXABI_1.3.13' not found (required by /app/UmiOCR-data/plugins/linux_x64_PaddleOCR-json_v140_beta/lib/libopencv_core.so.410)
/app/UmiOCR-data/plugins/linux_x64_PaddleOCR-json_v140_beta/bin/PaddleOCR-json: /lib/x86_64-linux-gnu/libc.so.6: version `GLIBC_2.32' not found (required by /app/UmiOCR-data/plugins/linux_x64_PaddleOCR-json_v140_beta/lib/libopencv_core.so.410)
/app/UmiOCR-data/plugins/linux_x64_PaddleOCR-json_v140_beta/bin/PaddleOCR-json: /lib/x86_64-linux-gnu/libc.so.6: version `GLIBC_2.33' not found (required by /app/UmiOCR-data/plugins/linux_x64_PaddleOCR-json_v140_beta/lib/libopencv_core.so.410)
/app/UmiOCR-data/plugins/linux_x64_PaddleOCR-json_v140_beta/bin/PaddleOCR-json: /lib/x86_64-linux-gnu/libc.so.6: version `GLIBC_2.34' not found (required by /app/UmiOCR-data/plugins/linux_x64_PaddleOCR-json_v140_beta/lib/libopencv_core.so.410)
/app/UmiOCR-data/plugins/linux_x64_PaddleOCR-json_v140_beta/bin/PaddleOCR-json: /lib/x86_64-linux-gnu/libc.so.6: version `GLIBC_2.32' not found (required by /app/UmiOCR-data/plugins/linux_x64_PaddleOCR-json_v140_beta/lib/libgomp.so.1)
/app/UmiOCR-data/plugins/linux_x64_PaddleOCR-json_v140_beta/bin/PaddleOCR-json: /lib/x86_64-linux-gnu/libc.so.6: version `GLIBC_2.34' not found (required by /app/UmiOCR-data/plugins/linux_x64_PaddleOCR-json_v140_beta/lib/libgomp.so.1)
[root@VM-0-3-centos Umi-OCR-Docker]# 
hiroi-sora commented 1 month ago

从报错中看,原因是 glibclibstdc++ 的版本太旧,不兼容Paddle推理库和OpenCV组件。

理论上,Docker基础镜像 debian:11 在我的测试环境中是可以正确部署的。但可能你的主机系统版本较旧,而Docker容器又使用了主机的部分环境,导致该不兼容现象。我估计,换用新的基础镜像可以解决:


  1. 请先删除当前的容器。然后,打开主机中下载的Dockerfile,前面有一行:
    FROM debian:11-slim
  2. 将它改为版本更靠后的基础镜像,如:
    FROM debian:12-slim
  3. 然后,重新build和run。
pluto-ljl commented 1 month ago

我是本地部署遇到了这个问题,原因是 libc6libstdc++ 版本过低,解决办法是手动下载所需版本的库文件,放到插件的 lib目录下,再修改插件的启动文件。

https://pkgs.org/ 搜索需要下载的文件,最终定位到需要下载以下两个文件:

http://ftp.de.debian.org/debian/pool/main/g/gcc-12/libstdc++6_12.2.0-14_amd64.deb
http://ftp.de.debian.org/debian/pool/main/g/glibc/libc6_2.36-9+deb12u7_amd64.deb

这两个文件下载下来之后,用归档管理器打开,再打开其中的 data.tar.xz。 把 /usr/lib/x86_64-linux-gnu//lib/x86_64-linux-gnu/ 下的所有文件解压至 Umi-OCR/UmiOCR-data/plugins/linux_x64_PaddleOCR-json_v140_beta/lib/ 目录。

修改 Umi-OCR/UmiOCR-data/plugins/linux_x64_PaddleOCR-json_v140_beta/run.sh

增加一行 LD_LOCATION="$SCRIPT_DIR/lib/ld-linux-x86-64.so.2"

最后一行的中间位置增加 "$LD_LOCATION" 。这样就不依赖系统本身的 libc 库了。

最终的 run.sh

#! /bin/bash -e

# 获取当前脚本路径
SCRIPT_DIR=$( cd -- "$( dirname -- "${BASH_SOURCE[0]}" )" &> /dev/null && pwd )

# 获取PaddleOCR-json路径
EXE_LOCATION="$SCRIPT_DIR/bin/PaddleOCR-json"
LIB_LOCATION="$SCRIPT_DIR/lib/"
# 以下一行是增加的
LD_LOCATION="$SCRIPT_DIR/lib/ld-linux-x86-64.so.2"
# 运行PaddleOCR-json
# 以下行的"$LD_LOCATION"是增加的
LD_LIBRARY_PATH="$LIB_LOCATION" "$LD_LOCATION" "$EXE_LOCATION" -models_path="$SCRIPT_DIR/models" "$@"
hiroi-sora commented 2 weeks ago

v2.1.4 新版本中,重新编译了 GLIBC 版本更低的依赖项,可解决此问题。请重新下载 Dockerfile 并构建镜像。