本文主要是介绍PaddleOCR删除部分log的打印,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
Question
一段非常简单的调用代码,如图。
from paddleocr import PaddleOCR
import cv2ocr = PaddleOCR(use_angle_cls=False, use_gpu=False)
img = cv2.imread('test.jpg')
result = ocr.ocr('test.jpg', cls=False)
但是控制台里面却是打印了一堆log和warning,就离谱,使用体验非常拉跨。
关键字包括:
Running analysis
Running IR pass
Fused 0 subgraphs into layer_norm op.
memory_optimize_pass.cc:199
analysis_predictor.cc:636 ======= optimize end =======
skip [feed], feed -> x
skip [save_infer_model/scale_0.tmp_1], fetch -> fetch
Answer
第一步
找到路径...\Anaconda3\envs\jbpp\Lib\site-packages\paddleocr\tools\infer\utility.py这个文件,在第239行找到如下代码块,
step i. 打开config.disable_glog_info()
step ii. 把config.switch_ir_optim(True) 改为 False
# enable memory optimconfig.enable_memory_optim()# config.disable_glog_info() ----> 把这行注释关掉,禁止打印logconfig.delete_pass("conv_transpose_eltwiseadd_bn_fuse_pass")if mode == 'table':config.delete_pass("fc_fuse_pass") # not supported for tableconfig.switch_use_feed_fetch_ops(False)config.switch_ir_optim(True) ----> 改为False
step i 使程序不再打印log到控制台 [参考];step ii 关闭了IR优化,经过测试,准确率没有变,所以我关了,不然会有 “Fused 0 subgraphs into layer_norm op.” 的日志输出。
第二步
调用 PaddleOCR() 时,这个函数内部竟然写了一个print。。会打印出所有参数,我也是麻了。
option i: 进去直接注释掉
option ii: 构造一个新函数,把print屏蔽,调用完再打开,如图
class HiddenPrints:def __init__(self, activated=True):# activated参数表示当前修饰类是否被**self.activated = activatedself.original_stdout = Nonedef open(self):sys.stdout.close()sys.stdout = self.original_stdoutdef close(self):self.original_stdout = sys.stdoutsys.stdout = open(os.devnull, 'w')def __enter__(self):if self.activated:self.close()def __exit__(self, exc_type, exc_val, exc_tb):if self.activated:self.open()
先构造一个HiddenPrints类,再调用,如图
Myprint= HiddenPrints()Myprint.close()
# 此处函数不会print
ocr = PaddleOCR(use_angle_cls=False, use_gpu=False)
img = cv2.imread('test.jpg')
result = ocr.ocr(img, cls=False)
Myprint.open()
#此处函数可以print
Appendix
1. 屏蔽warning
import warnings
warnings.filterwarnings("ignore")
2. 使用windows powershell在当前文件及其子文件中查找string [参考1][参考2]
get-childitem *.* -Recurse | sls -Pattern "你要搜索的str"
*.* 是文件名的正则表达式,sls是select-string的简写
这篇关于PaddleOCR删除部分log的打印的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!