Closed pkuyilong closed 4 years ago
ocr = hub.Module(name="chinese_ocr_db_crnn_mobile") 使用的是paddlehub内置的模型,本质就是PaddleOCR的中文模型,只是进行了封装,可以一键调用,要用这个模型起服务的话,用这种格式的命令:hub serving start -m chinese_ocr_db_crnn_mobile -p 8866,优点是使用方便,缺点是无法替换模型,调整参数。
PaddleOCR的deploy中的hubserving部署,逻辑和上面封装好的是类似的,只是把更多接口暴露了出来,方便替换模型、调整参数,具体参数都在params.py中,还可以在module.py中改写逻辑,比如可以在这里加入使用drop_score对结果进行过滤再返回的逻辑,目前是服务端不做过滤,将所有结果返回,因为不同用户对阈值的要求可能不一样,就没有写死,你可以对返回后的结果再做过滤。
ocr = hub.Module(name="chinese_ocr_db_crnn_mobile") 使用的是paddlehub内置的模型,本质就是PaddleOCR的中文模型,只是进行了封装,可以一键调用,要用这个模型起服务的话,用这种格式的命令:hub serving start -m chinese_ocr_db_crnn_mobile -p 8866,优点是使用方便,缺点是无法替换模型,调整参数。
PaddleOCR的deploy中的hubserving部署,逻辑和上面封装好的是类似的,只是把更多接口暴露了出来,方便替换模型、调整参数,具体参数都在params.py中,还可以在module.py中改写逻辑,比如可以在这里加入使用drop_score对结果进行过滤再返回的逻辑,目前是服务端不做过滤,将所有结果返回,因为不同用户对阈值的要求可能不一样,就没有写死,你可以对返回后的结果再做过滤。
ocr.recognize_text
这个函数我从哪里可以看到?我想看一下这个函数里面做了什么操作. 非常感谢!!!box_thresh=0.5, text_thresh=0.5
两行代码, 而我在/PaddleOCR-develop/deploy/hubserving/ocr_system/params.py中看到只有cfg.det_db_box_thresh =0.5
, 而crnn部分似乎没有对text进行阈值限定, 好像根本没有可以限定的参数. 但是从两种方式的结果来看,这一点似乎对结果的影响不大, 因为两种方式预测出来的字不同,
比如原图中的文字是渴望朋友不想定期与人联系, 而hub-serving的结果是 温整明友不相发处期虹人雕紫Snle158子,而以下代码的输出是 褐整明友ynle10子 相同的部分我省略了test_img_path = [os.path.join(image_dir, name) for name in os.listdir(image_dir)]
for img_path in test_img_path:
np_images = list()
try:
image = cv2.imread(img_path)
np_images.append(image)
start_time = time.time()
results = ocr.recognize_text(
images=np_images,
use_gpu=True,
box_thresh=0.5,
text_thresh=0.5)
end_time = time.time()
print("elaspse {}".format(end_time - start_time))
predictions, polys = format_result(results)
print(predictions)
print(polys)
except Exception as e:
print(e)
ocr.recognize_text对应代码地址:https://github.com/PaddlePaddle/PaddleHub/blob/7f83b99560b2176b858dee8b9b51870a1b622e17/hub_module/modules/image/text_recognition/chinese_ocr_db_crnn_mobile/module.py#L152
“可以看到以下中有box_thresh=0.5, text_thresh=0.5两行代码, 而我在/PaddleOCR-develop/deploy/hubserving/ocr_system/params.py中看到只有cfg.det_db_box_thresh =0.5, 而crnn部分似乎没有对text进行阈值限定, 好像根本没有可以限定的参数. ”
这个过滤的逻辑建议在client端添加。
你说的这个badcase麻烦发下原图
ocr.recognize_text对应代码地址:https://github.com/PaddlePaddle/PaddleHub/blob/7f83b99560b2176b858dee8b9b51870a1b622e17/hub_module/modules/image/text_recognition/chinese_ocr_db_crnn_mobile/module.py#L152
“可以看到以下中有box_thresh=0.5, text_thresh=0.5两行代码, 而我在/PaddleOCR-develop/deploy/hubserving/ocr_system/params.py中看到只有cfg.det_db_box_thresh =0.5, 而crnn部分似乎没有对text进行阈值限定, 好像根本没有可以限定的参数. ”
这个过滤的逻辑建议在client端添加。
你说的这个badcase麻烦发下原图
这个图比较奇怪,有繁体字, 我对于其正确性没什么要求, 我只是希望解决输出结果不一致的问题,我不知道问题出在哪里
paddlehub内置模型的get_rotate_crop_image和paddleocr的predict_system.py中的有点diff:
修改一致后,图二结果都是“一起爬山吗”,predict_system更新较快,有些许diff很正常,尤其置信度不高时,预测结果容易看起来很不一样。
paddlehub内置模型的get_rotate_crop_image和paddleocr的predict_system.py中的有点diff:
修改一致后,图二结果都是“一起爬山吗”,predict_system更新较快,有些许diff很正常,尤其置信度不高时,预测结果容易看起来很不一样。
非常专业, 大赞!!!感谢您的帮助
可以看出这个模型是一个整体的模型, 没有区分detect和recognize模型
python3 tools/infer/predict_system.py --image_dir="./doc/imgs/11.jpg" --det_model_dir="./inference/ch_det_mv3_db/" --rec_model_dir="./inference/ch_rec_mv3_crnn/"
中是有drop_score = 0.5的阈值限定的.这导致hub-serving产出的结果导致召回升高, 准确下降, 结果与命令行方式不一致