RapidOCR icon indicating copy to clipboard operation
RapidOCR copied to clipboard

Bug: 不能识别单字的图像

Open SWHL opened this issue 1 year ago • 19 comments

问题描述 / Problem Description

本问题来自RapidVideOCR Discussions #61 对于电影字幕中,存在一帧图像仅有单字的情况。例如下图:

rec.png

0_05_13_400__0_05_14_039_0000009351920011319201080

rapidocr_onnxruntime==1.3.24版本中,可以检测到该文字,但是识别阶段未能成功识别

运行环境 / Runtime Environment

  • rapidocr_onnxruntime: 1.3.24
  • OS: macOS 14.5
  • python: 3.10

复现代码 / Reproduction Code


from rapidocr_onnxruntime import RapidOCR

engine = RapidOCR()

image_path = "rec.png"
with open(image_path, "rb") as f:
    img = f.read()

result, elapse_list = engine(img)
print(result)
# 输出结果
# [['', 0.0]]

可能解决方案 / Possible solutions

尝试将检测到的文字左右扩增,有的可以识别,有的反而识别错误了,需要多造一些测试集来评估该策略有效性。示例如下:

t.png t


from rapidocr_onnxruntime import RapidOCR

engine = RapidOCR()

image_path = "t.png"
with open(image_path, "rb") as f:
    img = f.read()

result, elapse_list = engine(img, use_cls=False, use_det=False, use_rec=True)
print(result)
# 输出
# [['嗯', 0.4284239]]

SWHL avatar Aug 01 '24 01:08 SWHL

image 这个后面的数字也是识别不出来。

failable avatar Oct 11 '24 07:10 failable

Image

也不行

Ruibin-Liu avatar Feb 21 '25 07:02 Ruibin-Liu

我遇到问题测试了下,文字(宽或高)在图像中占比过高时就会这样,主要是v5模型会直接错误,不过v4也可能会出现重复识别的情况,将边缘扩展一下减少占比就能正常识别了,不能精确裁剪识别 用v5会错误 用v4会出现重复识别

SwakinX avatar Jun 10 '25 14:06 SwakinX

v5确实不太能用

failable avatar Jun 10 '25 22:06 failable

@SwakinX 这种单行的文字,只用rec,不要用det和cls,应该就没问题了

SWHL avatar Jun 11 '25 00:06 SWHL

@SWHL 确实可行,之前尝试单模块时是多行文本,效果并不好就没考虑了,谢谢提醒

SwakinX avatar Jun 11 '25 00:06 SwakinX

Image 个别文字被重复检测有没有什么好办法?

kssion avatar Jul 22 '25 09:07 kssion

@kssion 请给出具体复现代码和原图。从你这结果来看,似乎用的不是现在OCR模型

SWHL avatar Jul 22 '25 10:07 SWHL

主要在V5中出现,V4没问题,网页上跟我代码的结果还不太一样

复现代码:

import cv2
from rapidocr import RapidOCR, OCRVersion

engine = RapidOCR(params={
    'Det.ocr_version': OCRVersion.PPOCRV5,
    'Rec.ocr_version': OCRVersion.PPOCRV5,
})

im = cv2.imread('1751977986623333800_0.jpg')
r = engine(im)
vis = r.vis()
cv2.imshow('image', vis)
cv2.waitKey(0)
cv2.destroyAllWindows()

原图:

Image

代码识别结果

Image

网页识别结果

Image

kssion avatar Jul 22 '25 12:07 kssion

@kssion 你从网页上导出当前配置,用在离线代码上,看看呢。网页的推理代码也是开源的。我猜测不一样的原因可能是图像读取方式导致的。例如用Pillow读和Opencv读,会有些许差异。

SWHL avatar Jul 23 '25 01:07 SWHL

@SWHL 我从网页上导出了配置,然后几种读取图片都试了,结果没有任何区别。

这是我的代码

import cv2
from PIL import Image
from rapidocr import RapidOCR

engine = RapidOCR(config_path="config.yaml")

# im = cv2.imread('1751977986623333800_0.jpg')
# im = Image.open('1751977986623333800_0.jpg')
r = engine('1751977986623333800_0.jpg')
vis = r.vis()
cv2.imshow('image', vis)
cv2.waitKey(0)
cv2.destroyAllWindows()

kssion avatar Jul 23 '25 01:07 kssion

我原来在M1测试的,然后又在Linux上测试了是否跟硬件和系统有关,但是结果都一样。

kssion avatar Jul 23 '25 02:07 kssion

@SWHL 我找到原因了,网页输入的是RGB图像,在代码中用RGB时结果跟网页是一样的,但是还是会有字符重复的情况,图中小字部分

Image

kssion avatar Jul 23 '25 02:07 kssion

@kssion 我知道了,你这用的是单字模式。单字模式是根据整行文本框估计单字符宽度,计算出来了,不是太准哈。

SWHL avatar Jul 23 '25 06:07 SWHL

@SWHL 没有设置单字模式,网页上没设置,代码里也没有

是这个吗? Image

kssion avatar Jul 23 '25 11:07 kssion

@kssion 我在网页demo上识别是这样的:

Image Image

和你贴的不太一样呀。我试试我的参数。

SWHL avatar Jul 24 '25 00:07 SWHL

@SWHL 你检测用的是V4,我是都用的V5,那可能跟V5检测有关系。目前看来用V4检测V5识别比较好

kssion avatar Jul 24 '25 00:07 kssion

嗯呢,建议仅识别用v5,其他的用v4

---- 回复的原邮件 ---- | 发件人 | @.> | | 发送日期 | 2025年07月24日 08:51 | | 收件人 | RapidAI/RapidOCR @.> | | 抄送人 | SWHL @.>, Mention @.> | | 主题 | Re: [RapidAI/RapidOCR] Bug: 不能识别单字的图像 (Issue #210) | kssion left a comment (RapidAI/RapidOCR#210)

@SWHL 你检测用的是V4,我是都用的V5,那可能跟V5检测有关系。

— Reply to this email directly, view it on GitHub, or unsubscribe. You are receiving this because you were mentioned.Message ID: @.***>

SWHL avatar Jul 24 '25 00:07 SWHL

@SWHL 好的,感谢!

kssion avatar Jul 24 '25 04:07 kssion