diff --git a/README_ch.md b/README_ch.md index 2030e73d3dd68edb2edc795c2cbb0e5c5637a7cf..b3ecd6fdf3aa362fb302b100cba39ce49ac14864 100755 --- a/README_ch.md +++ b/README_ch.md @@ -8,7 +8,8 @@ PaddleOCR同时支持动态图与静态图两种编程范式 - 静态图版本:develop分支 **近期更新** -- 2021.5.11 [FAQ](./doc/doc_ch/FAQ.md)新增5个高频问题,总数218个,每周一都会更新,欢迎大家持续关注。 +- 2021.5.17 [FAQ](./doc/doc_ch/FAQ.md)新增5个高频问题,总数223个,每周一都会更新,欢迎大家持续关注。 +- PaddleOCR研发团队对最新发版内容技术深入解读,4月13日晚上19:00,[直播地址](https://live.bilibili.com/21689802)。 - 2021.4.8 release 2.1版本,新增AAAI 2021论文[端到端识别算法PGNet](./doc/doc_ch/pgnet.md)开源,[多语言模型](./doc/doc_ch/multi_languages.md)支持种类增加到80+。 - 2021.2.8 正式发布PaddleOCRv2.0(branch release/2.0)并设置为推荐用户使用的默认分支. 发布的详细内容,请参考: https://github.com/PaddlePaddle/PaddleOCR/releases/tag/v2.0.0 - 2021.1.26,28,29 PaddleOCR官方研发团队带来技术深入解读三日直播课,1月26日、28日、29日晚上19:30,[直播地址](https://live.bilibili.com/21689802) @@ -103,8 +104,8 @@ PaddleOCR同时支持动态图与静态图两种编程范式 - [效果展示](#效果展示) - FAQ - [【精选】OCR精选10个问题](./doc/doc_ch/FAQ.md) - - [【理论篇】OCR通用41个问题](./doc/doc_ch/FAQ.md) - - [【实战篇】PaddleOCR实战147个问题](./doc/doc_ch/FAQ.md) + - [【理论篇】OCR通用43个问题](./doc/doc_ch/FAQ.md) + - [【实战篇】PaddleOCR实战170个问题](./doc/doc_ch/FAQ.md) - [技术交流群](#欢迎加入PaddleOCR技术交流群) - [参考文献](./doc/doc_ch/reference.md) - [许可证书](#许可证书) diff --git a/deploy/hubserving/ocr_det/params.py b/deploy/hubserving/ocr_det/params.py index bc75cc404e43e0a6e9242c2684d615b4575e5d8f..ec0c447f447009a40fc2138cc33988e13c7f4243 100755 --- a/deploy/hubserving/ocr_det/params.py +++ b/deploy/hubserving/ocr_det/params.py @@ -24,11 +24,6 @@ def read_params(): cfg.use_dilation = False cfg.det_db_score_mode = "fast" - # #EAST parmas - # cfg.det_east_score_thresh = 0.8 - # cfg.det_east_cover_thresh = 0.1 - # cfg.det_east_nms_thresh = 0.2 - cfg.use_pdserving = False cfg.use_tensorrt = False diff --git a/deploy/lite/readme.md b/deploy/lite/readme.md index 0b71e8b49d4d9ec0c0c83b4dd9a5bd58ec26aa81..223d5c5642f2b9d03cbfca0e1406c8a08107c818 100644 --- a/deploy/lite/readme.md +++ b/deploy/lite/readme.md @@ -125,7 +125,7 @@ cd build.opt/lite/api/ ``` # 【推荐】 下载PaddleOCR V2.0版本的中英文 inference模型 wget https://paddleocr.bj.bcebos.com/dygraph_v2.0/slim/ch_ppocr_mobile_v2.0_det_slim_infer.tar && tar xf ch_ppocr_mobile_v2.0_det_slim_infer.tar -wget https://paddleocr.bj.bcebos.com/dygraph_v2.0/slim/ch_ppocr_mobile_v2.0_rec_slim_nfer.tar && tar xf ch_ppocr_mobile_v2.0_rec_slim_infer.tar +wget https://paddleocr.bj.bcebos.com/dygraph_v2.0/slim/ch_ppocr_mobile_v2.0_rec_slim_infer.tar && tar xf ch_ppocr_mobile_v2.0_rec_slim_infer.tar wget https://paddleocr.bj.bcebos.com/dygraph_v2.0/slim/ch_ppocr_mobile_v2.0_cls_slim_infer.tar && tar xf ch_ppocr_mobile_v2.0_cls_slim_infer.tar # 转换V2.0检测模型 ./opt --model_file=./ch_ppocr_mobile_v2.0_det_slim_infer/inference.pdmodel --param_file=./ch_ppocr_mobile_v2.0_det_slim_infer/inference.pdiparams --optimize_out=./ch_ppocr_mobile_v2.0_det_slim_opt --valid_targets=arm --optimize_out_type=naive_buffer @@ -238,7 +238,7 @@ use_direction_classify 0 # 是否使用方向分类器,0表示不使用,1 上述步骤完成后就可以使用adb将文件push到手机上运行,步骤如下: ``` - # 执行编译,得到可执行文件ocr_db_crnn + # 执行编译,得到可执行文件ocr_db_crnn,第一次执行此命令会下载opencv等依赖库,下载完成后,需要再执行一次 make -j # 将编译的可执行文件移动到debug文件夹中 diff --git a/deploy/lite/readme_en.md b/deploy/lite/readme_en.md index c458823607db8f60bead879cd41c3c5af51d687f..00cad73994ad21ac12a5c299b36b6aa3f428ac66 100644 --- a/deploy/lite/readme_en.md +++ b/deploy/lite/readme_en.md @@ -237,7 +237,8 @@ use_direction_classify 0 # Whether to use the direction classifier, 0 means no After the above steps are completed, you can use adb to push the file to the phone to run, the steps are as follows: ``` - # Execute the compilation and get the executable file ocr_db_crnn + # Execute the compilation and get the executable file ocr_db_crnn. + # The first execution of this command will download dependent libraries such as opencv. After the download is complete, you need to execute it again make -j # Move the compiled executable file to the debug folder mv ocr_db_crnn ./debug/ diff --git a/doc/doc_ch/FAQ.md b/doc/doc_ch/FAQ.md index ed01b87b8e5aff7bba09aa5198fa4c25bcfd38ce..3d2d9c94234c037ee2b846c6706246035d4962db 100755 --- a/doc/doc_ch/FAQ.md +++ b/doc/doc_ch/FAQ.md @@ -9,40 +9,55 @@ ## PaddleOCR常见问题汇总(持续更新) -* [近期更新(2021.5.11)](#近期更新) +* [近期更新(2021.5.17)](#近期更新) * [【精选】OCR精选10个问题](#OCR精选10个问题) * [【理论篇】OCR通用43个问题](#OCR通用问题) * [基础知识13题](#基础知识) * [数据集9题](#数据集2) * [模型训练调优21题](#模型训练调优2) -* [【实战篇】PaddleOCR实战165个问题](#PaddleOCR实战问题) - * [使用咨询65题](#使用咨询) +* [【实战篇】PaddleOCR实战170个问题](#PaddleOCR实战问题) + * [使用咨询68题](#使用咨询) * [数据集18题](#数据集3) * [模型训练调优36题](#模型训练调优3) - * [预测部署46题](#预测部署3) + * [预测部署48题](#预测部署3) -## 近期更新(2021.5.11) +## 近期更新(2021.5.17) -#### Q3.1.64: config yml文件中的ratio_list参数的作用是什么? -**A**: 在动态图中,ratio_list在有多个数据源的情况下使用,ratio_list中的每个值是每个epoch从对应数据源采样数据的比例。如ratio_list=[0.3,0.2],label_file_list=['data1','data2'],代表每个epoch的训练数据包含data1 30%的数据,和data2里 20%的数据,ratio_list中数值的和不需要等于1。ratio_list和label_file_list的长度必须一致。 +### Q3.1.66: iaa里面添加的数据增强方式,是每张图像训练都会做增强还是随机的?如何添加一个数据增强方法? -静态图检测数据采样的逻辑与动态图不同,但基本不影响训练精度。 +**A**:iaa增强的训练配置参考:[链接](https://github.com/PaddlePaddle/PaddleOCR/blob/0ccc1720c252beb277b9e522a1b228eb6abffb8a/configs/det/ch_ppocr_v2.0/ch_det_mv3_db_v2.0.yml#L82) +其中{ 'type': Fliplr, 'args': { 'p': 0.5 } } p是概率。新增数据增强,可以参考这个[方法](https://github.com/PaddlePaddle/PaddleOCR/blob/release%2F2.1/doc/doc_ch/add_new_algorithm.md#%E6%95%B0%E6%8D%AE%E5%8A%A0%E8%BD%BD%E5%92%8C%E5%A4%84%E7%90%86) -在静态图中,使用 检测 dataloader读取数据时,会先设置每个epoch的数据量,比如这里设置为1000,ratio_list中的值表示在1000中的占比,比如ratio_list是[0.3, 0.7],则表示使用两个数据源,每个epoch从第一个数据源采样1000*0.3=300张图,从第二个数据源采样700张图。ratio_list的值的和也不需要等于1。 +### Q3.1.67: PGNet训练中文弯曲数据集,可视化时弯曲文本无法显示。 +**A**: 可能是因为安装的OpenCV里,cv2.putText不能显示中文的原因,可以尝试用Pillow来添加显示中文,需要改draw_e2e_res函数里面的代码,可以参考如下代码: +``` +box = box.astype(np.int32).reshape((-1, 1, 2)) +cv2.polylines(src_im, [box], True, color=(255, 255, 0), thickness=2) -#### Q3.1.65: 支持动态图模型的android和ios demo什么时候上线? -**A**: 支持动态图模型的android demo已经合入dygraph分支,欢迎试用(https://github.com/PaddlePaddle/PaddleOCR/blob/dygraph/deploy/android_demo/README.md); ios demo暂时未提供动态图模型版本,可以基于静态图版本(https://github.com/PaddlePaddle/PaddleOCR/blob/develop/deploy/ios_demo)自行改造。 +from PIL import ImageFont, ImageDraw, Image +img = Image.fromarray(cv2.cvtColor(img, cv2.COLOR_BGR2RGB)) +draw = ImageDraw.Draw(img) +fontStyle = ImageFont.truetype( +"font/msyh.ttc", 16, encoding="utf-8") +draw.text((int(box[0, 0, 0]), int(box[0, 0, 1])), text, (0, 255, 0), font=fontStyle) -#### Q3.3.36: 训练starnet网络,印章数据可以和非弯曲数据一起训练吗。 -**A**: 可以的,starnet里的tps模块会对印章图片进行校正,使其和非弯曲的图片一样。 +src_im= cv2.cvtColor(np.asarray(img), cv2.COLOR_RGB2BGR) +``` +### Q3.1.68: 用PGNet做进行端到端训练时,数据集标注的点的个数必须都是统一一样的吗? 能不能随意标点数,只要能够按顺时针从左上角开始标这样? + +**A**: 目前代码要求标注为统一的点数。 + +#### Q3.4.47: 请教如何优化检测阶段时长? + +**A**: 预测单张图会慢一点,如果批量预测,第一张图比较慢,后面就快了,因为最开始一些初始化操作比较耗时。服务部署的话,访问一次后,后面再访问就不会初始化了,推理的话每次都需要初始化的。 + +### Q3.4.48: paddle serving 本地启动调用失败,怎么判断是否正常工作? + +**A**:没有打印出预测结果,说明启动失败。可以参考这篇文档重新配置下动态图的paddle serving:https://github.com/PaddlePaddle/PaddleOCR/blob/dygraph/deploy/pdserving/README_CN.md -#### Q3.4.45: win下C++部署中文识别乱码的解决方法 -**A**: win下编码格式不是utf8,而ppocr_keys_v1.txt的编码格式的utf8,将ppocr_keys_v1.txt 的编码从utf-8修改为 Ansi 编码格式就行了 -#### Q3.4.46: windows 3060显卡GPU模式启动 加载模型慢。 -**A**: 30系列的显卡需要使用cuda11。 ## 【精选】OCR精选10个问题 @@ -653,6 +668,31 @@ repo中config.yml文件的前后处理参数和inference预测默认的超参数 #### Q3.1.65: 支持动态图模型的android和ios demo什么时候上线?? **A**: 支持动态图模型的android demo已经合入dygraph分支,欢迎试用(https://github.com/PaddlePaddle/PaddleOCR/blob/dygraph/deploy/android_demo/README.md); ios demo暂时未提供动态图模型版本,可以基于静态图版本(https://github.com/PaddlePaddle/PaddleOCR/blob/develop/deploy/ios_demo)自行改造。 +### Q3.1.66: iaa里面添加的数据增强方式,是每张图像训练都会做增强还是随机的?如何添加一个数据增强方法? + +**A**:iaa增强的训练配置参考:https://github.com/PaddlePaddle/PaddleOCR/blob/0ccc1720c252beb277b9e522a1b228eb6abffb8a/configs/det/ch_ppocr_v2.0/ch_det_mv3_db_v2.0.yml#L82, +其中{ 'type': Fliplr, 'args': { 'p': 0.5 } } p是概率。新增数据增强,可以参考这个方法:https://github.com/PaddlePaddle/PaddleOCR/blob/release%2F2.1/doc/doc_ch/add_new_algorithm.md#%E6%95%B0%E6%8D%AE%E5%8A%A0%E8%BD%BD%E5%92%8C%E5%A4%84%E7%90%86 + +### Q3.1.67: PGNet训练中文弯曲数据集,可视化时弯曲文本无法显示。 + +**A**: 可能是因为安装的OpenCV里,cv2.putText不能显示中文的原因,可以尝试用Pillow来添加显示中文,需要改draw_e2e_res函数里面的代码,可以参考如下代码: +``` +box = box.astype(np.int32).reshape((-1, 1, 2)) +cv2.polylines(src_im, [box], True, color=(255, 255, 0), thickness=2) + +from PIL import ImageFont, ImageDraw, Image +img = Image.fromarray(cv2.cvtColor(img, cv2.COLOR_BGR2RGB)) +draw = ImageDraw.Draw(img) +fontStyle = ImageFont.truetype( +"font/msyh.ttc", 16, encoding="utf-8") +draw.text((int(box[0, 0, 0]), int(box[0, 0, 1])), text, (0, 255, 0), font=fontStyle) + +src_im= cv2.cvtColor(np.asarray(img), cv2.COLOR_RGB2BGR) +``` +### Q3.1.68: 用PGNet做进行端到端训练时,数据集标注的点的个数必须都是统一一样的吗? 能不能随意标点数,只要能够按顺时针从左上角开始标这样? + +**A**: 目前代码要求标注为统一的点数。 + ### 数据集 @@ -1141,3 +1181,11 @@ nvidia-smi --lock-gpu-clocks=1590 -i 0 #### Q3.4.46: windows 3060显卡GPU模式启动 加载模型慢。 **A**: 30系列的显卡需要使用cuda11。 + +#### Q3.4.47: 请教如何优化检测阶段时长? + +**A**: 预测单张图会慢一点,如果批量预测,第一张图比较慢,后面就快了,因为最开始一些初始化操作比较耗时。服务部署的话,访问一次后,后面再访问就不会初始化了,推理的话每次都需要初始化的。 + +### Q3.4.48: paddle serving 本地启动调用失败,怎么判断是否正常工作? + +**A**:没有打印出预测结果,说明启动失败。可以参考这篇文档重新配置下动态图的paddle serving:https://github.com/PaddlePaddle/PaddleOCR/blob/dygraph/deploy/pdserving/README_CN.md diff --git a/doc/doc_ch/multi_languages.md b/doc/doc_ch/multi_languages.md index 1bebdb58fa025d5b6891fd1579285b5db956a2d4..43e47dc9b097b738af9f259059431338b5ef416f 100644 --- a/doc/doc_ch/multi_languages.md +++ b/doc/doc_ch/multi_languages.md @@ -118,7 +118,7 @@ paddleocr --image_dir doc/imgs_words_en/word_308.png --det false --lang=en * 检测预测 ``` -paddleocr --image_dir PaddleOCR/doc/imgs/11.jpg --rec false +paddleocr --image_dir doc/imgs/11.jpg --rec false ``` 结果是一个list,每个item只包含文本框 @@ -142,7 +142,7 @@ from paddleocr import PaddleOCR, draw_ocr # 同样也是通过修改 lang 参数切换语种 ocr = PaddleOCR(lang="korean") # 首次执行会自动下载模型文件 -img_path = 'doc/imgs/korean_1.jpg ' +img_path = 'doc/imgs/korean_1.jpg' result = ocr.ocr(img_path) # 可通过参数控制单独执行识别、检测 # result = ocr.ocr(img_path, det=False) 只执行识别 @@ -157,7 +157,7 @@ image = Image.open(img_path).convert('RGB') boxes = [line[0] for line in result] txts = [line[1][0] for line in result] scores = [line[1][1] for line in result] -im_show = draw_ocr(image, boxes, txts, scores, font_path='/path/to/PaddleOCR/doc/fonts/korean.ttf') +im_show = draw_ocr(image, boxes, txts, scores, font_path='doc/fonts/korean.ttf') im_show = Image.fromarray(im_show) im_show.save('result.jpg') ``` diff --git a/doc/joinus.PNG b/doc/joinus.PNG index 60b7f5662688c200b4dc4f1732aa9980b4654974..63e2a61770c90eb0601125a6f5fedde45ad49132 100644 Binary files a/doc/joinus.PNG and b/doc/joinus.PNG differ diff --git a/tools/infer/predict_det.py b/tools/infer/predict_det.py index 59bb49f90abb198933b91f222febad7a416018e8..11e78a566582d5bbfadef611dbdd401ff2041bc7 100755 --- a/tools/infer/predict_det.py +++ b/tools/infer/predict_det.py @@ -65,7 +65,9 @@ class TextDetector(object): postprocess_params["max_candidates"] = 1000 postprocess_params["unclip_ratio"] = args.det_db_unclip_ratio postprocess_params["use_dilation"] = args.use_dilation - postprocess_params["score_mode"] = args.det_db_score_mode + if hasattr(args, "det_db_score_mode"): + postprocess_params["score_mode"] = args.det_db_score_mode + elif self.det_algorithm == "EAST": postprocess_params['name'] = 'EASTPostProcess' postprocess_params["score_thresh"] = args.det_east_score_thresh