You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

R中tesseract OCR无法识别PNG小字号Reference No.文本如何解决

识别失败原因与调整方案

识别不到目标文本主要是4个问题,对应调整即可:

  • 图片路径错误:代码里读取的是https://i.sstatic.net/aLOo1.png,和你提到的包含目标小字的图片地址不一致,首先要修正输入链接。
  • 小字号增强不足:默认预处理逻辑没有把小字号放大到tesseract适合识别的尺寸,字高小于20像素时tesseract识别率会大幅下降。
  • 预处理缺少对比度强化:仅转灰度没有拉开浅灰小字和背景的差异,引擎会把小字当成背景噪点过滤。
  • OCR参数不匹配:默认页面分割模式优先识别大段排版规整的文本,边角零散的小字会被直接忽略。

调整后的可运行代码如下:

library(magick)
library(tesseract)

# 图片预处理
input <- image_read("https://i.sstatic.net/mECch.png") %>% 
  image_convert(type = 'Grayscale') %>%
  # 强化对比度,拉开小字和背景差
  image_contrast(sharpen = 2) %>%
  image_rotate(90) %>% 
  image_deskew() %>% 
  # 提高resize倍率,保证小字号字高达到30像素以上
  image_resize("4000x") %>%
  # 自适应二值化去除背景噪点
  image_threshold(type = "black", threshold = "40%") %>%
  image_threshold(type = "white", threshold = "85%")

# 调用OCR时指定稀疏文本识别模式,不遗漏零散位置的文字
ocr_res <- ocr(
  input, 
  engine = tesseract(lang = "eng", options = list(tessedit_pageseg_mode = 11))
)

# 匹配时加忽略大小写参数,避免因OCR识别出大小写偏差漏匹配
target_text <- ocr_res %>% 
  strsplit("\n") %>%
  unlist() %>% 
  grep("Reference No\\.", ., value = TRUE, ignore.case = TRUE)

print(target_text)

额外优化技巧

  • 如果识别结果仍有偏差,可以先用image_crop()裁剪出Reference No.所在的局部区域,去掉其余无关的图片内容再做OCR,识别精度会明显提升。
  • 建议将tesseract升级到5.0及以上版本,低版本对小字号、稀疏文本的识别能力差距较大。
  • 预处理完成后可以用image_write(input, "test_pre.png")把处理后的图片存到本地查看,确认目标小字清晰无糊化,再跑OCR逻辑。

内容的提问来源于stack exchange,提问作者anderwyang

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.31 00:51:24