文本检测出来的框过小
GG22G2 opened this issue · comments
使用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参数好像也不起作用
可以把
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的步骤,直接拿整张图片进行文本识别。
暂时不会发新的Release,请从main分支编译代码,或者使用下面我编译的测试版:(扔到正式版的目录中使用)
PaddleOCR-json_v1.3.1.dev.1.zip
另外请注意,禁用det 适用于图片中仅有一行文本,且基本占满图片的情况。如果图片中有过多空位,或者有多行文本,禁用det会导致识别率严重下降。