hiroi-sora / PaddleOCR-json

OCR离线图片文字识别命令行windows程序,以JSON字符串形式输出结果,方便别的程序调用。提供各种语言API。由 PaddleOCR C++ 编译。

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

文本检测出来的框过小

GG22G2 opened this issue · comments

commented

我有一种图片:
1688495758747
这个图片是992*48的

使用paddle0cr识别结果是:
{code=100, data=[RecognizedText{text='天单,', box=[8, 0][132, 3][132, 39][8, 36], score=0.8951358795166016}, RecognizedText{text='墙壁和地板', box=[662, 7][894, 7][894, 37][662, 37], score=0.9648885726928711}, RecognizedText{text='伯', box=[933, 7][980, 7][980, 36][933, 36], score=0.41533949971199036}, RecognizedText{text='大', box=[454, 18][628, 13][628, 28][454, 33], score=0.26688411831855774}], msg='null', hotUpdate='null'}

可以看到识别了四部分,并且检测框的高度分别是36,30,29,15,这些检测框过小导致识别结果错误。

我使用paddleocr官方模型,不开启文本检测,只做识别时:
('天里,我甚至尝试过拆掉屋顶、墙壁和地板,但', 0.977444589138031)
这时候可以完全识别正确。

我尝试关闭det=false参数好像也不起作用

commented

可以把
std::vector<OCRPredictResult> PPOCR::ocr(cv::Mat img, bool det, bool rec, bool cls)
头部改成

  std::vector<OCRPredictResult> ocr_result;
  std::vector<cv::Mat> img_list;
 
  if (det) {
      this->det(img, ocr_result);
      for (int j = 0; j < ocr_result.size(); j++) {
          cv::Mat crop_img;
          crop_img = Utility::GetRotateCropImage(img, ocr_result[j].box);
          img_list.push_back(crop_img);
      }
  }
  else {
      ocr_result.resize(1);
      img_list.push_back(img);
  }

嗯,感谢提出。

不过ocr_result应该不能简单的resize(1),还要将第1个文本框的大小设为整张图片的大小。

之后有空我会搞搞这个问题

这个问题搞了吗,大佬

@yangyunlv 感谢提醒,一忙起来就忘了。

这个问题我已经修复了,现在传入 -det=0 的启动参数就能跳过det的步骤,直接拿整张图片进行文本识别。

image

暂时不会发新的Release,请从main分支编译代码,或者使用下面我编译的测试版:(扔到正式版的目录中使用)

PaddleOCR-json_v1.3.1.dev.1.zip

另外请注意,禁用det 适用于图片中仅有一行文本,且基本占满图片的情况。如果图片中有过多空位,或者有多行文本,禁用det会导致识别率严重下降。

image
不知道为什么,我不管是否传入这个参数,识别的结果都是一样的

哎呀 好像是我的y轴搞错了 现在正常了
image