Win10下R调用Tesseract报错:JPEG库版本为90,调用方期望版本80
报错核心原因
该报错本质是Windows环境下R的tesseract包依赖的底层图像解析组件存在libjpeg版本不匹配:图像读取组件预期调用libjpeg 8.0版本,但运行时优先加载了版本为9.0的libjpeg动态链接库,导致jpeg格式图片流解析失败。Windows下的冲突来源多为环境变量dll加载优先级异常、包安装残留的旧版本依赖,无需参考Linux下的apt/yum依赖安装方案。
Windows 10 按顺序尝试以下解决方法
方法1:重装匹配版本的核心依赖,清除旧缓存
先关闭所有打开的R/RStudio会话,重新启动R(启动后不要提前加载任何第三方包),运行以下代码彻底重装依赖:# 卸载存在冲突可能的相关包 remove.packages(c("tesseract", "magick")) # 安装CRAN正式发布版本,自动拉取匹配的依赖文件 install.packages(c("tesseract", "magick"), dependencies = TRUE)安装完成后重启R会话,先单独测试图片读取能力,确认无报错后再运行OCR逻辑:
library(magick) # 测试目标图片读取 test_img <- image_read("https://cdn.who.int/media/images/default-source/emergencies/disease-outbreak-news/table19f24bf8a-7733-400f-abaa-150c481f876a.jpg") # 能正常打印图片信息即代表jpeg解析正常 print(test_img)方法2:修复dll加载优先级问题
如果方法1仍报错,说明R启动时优先加载了系统里其他软件(比如独立安装的ImageMagick、GIMP、部分图像编辑工具)自带的旧版libjpeg.dll,可在脚本最开头(加载任何包之前)运行以下代码,强制R优先加载tesseract/magick包自带的匹配版本dll:# 提取magick包自带的依赖库路径,设置为最高加载优先级 magick_lib_path <- system.file("libs", .Platform$r_arch, package = "magick") Sys.setenv(PATH = paste(magick_lib_path, Sys.getenv("PATH"), sep = ";")) # 后续正常运行OCR逻辑即可 library(tesseract) eng <- tesseract("eng") text <- tesseract::ocr("https://cdn.who.int/media/images/default-source/emergencies/disease-outbreak-news/table19f24bf8a-7733-400f-abaa-150c481f876a.jpg", engine = eng)方法3:绕开远程流解析的版本校验
如果前两种方法都无效,可以先把远程图片下载到本地存储,再调用tesseract读取本地文件,避开网络流读取环节的jpeg版本校验逻辑:# 以二进制模式把远程图片下载到本地工作目录 local_img <- "ocr_test.jpg" download.file( "https://cdn.who.int/media/images/default-source/emergencies/disease-outbreak-news/table19f24bf8a-7733-400f-abaa-150c481f876a.jpg", destfile = local_img, mode = "wb" ) # 读取本地文件执行OCR library(tesseract) eng <- tesseract("eng") text <- tesseract::ocr(local_img, engine = eng)
内容的提问来源于stack exchange,提问作者Gakku
相关产品推荐
相关产品推荐

