如何屏蔽DeepFace extract_faces方法生成的进度条?
解决DeepFace extract_faces方法打印进度条干扰日志的问题
以下是几个可行的解决办法,按推荐优先级排序:
方案1:临时重定向输出流(推荐,无侵入)
通过临时拦截标准输出和错误输出,避免DeepFace的进度条打印到控制台。用Python上下文管理器实现,不会影响其他代码的日志输出:
import os import sys from contextlib import contextmanager @contextmanager def suppress_output(): # 保存原始输出流 original_stdout = sys.stdout original_stderr = sys.stderr try: # 重定向到空设备 with open(os.devnull, 'w') as devnull: sys.stdout = devnull sys.stderr = devnull yield finally: # 恢复原始输出流 sys.stdout = original_stdout sys.stderr = original_stderr # 修正后的业务代码 detections = {} image = # 你的numpy数组(shape为(X,X,3)) for bknd in bknds: with suppress_output(): faces = DeepFace.extract_faces(img_path=image, detector_backend=bknd, align=True) detections[bknd] = faces # 注:原代码此处赋值错误,已修正为faces
方案2:全局禁用tqdm进度条
如果DeepFace的进度条基于tqdm实现,可以全局禁用它的输出,适合不需要在其他场景使用tqdm的项目:
import tqdm tqdm.tqdm.disable = True # 放在代码开头执行 # 正常调用extract_faces detections = {} image = # 你的numpy数组 for bknd in bknds: faces = DeepFace.extract_faces(img_path=image, detector_backend=bknd, align=True) detections[bknd] = faces
方案3:修改DeepFace源码添加silent参数(侵入式,适合自定义部署)
如果允许修改依赖库源码,可以给extract_faces添加控制参数,精准关闭进度条:
- 找到
DeepFace.py中的extract_faces函数,新增silent=False参数 - 在函数内部调用检测后端(如
detect_faces)时,传递silent=silent参数 - 找到对应检测后端的实现文件(如
deepface/modules/detection.py),在tqdm调用处添加判断:tqdm(..., disable=silent)
修改示例(以MTCNN后端为例):
在mtcnn_detector函数中,将tqdm调用修改为:
for i, img in enumerate(tqdm(imgs, disable=silent)): # 原检测逻辑代码
内容的提问来源于stack exchange,提问作者Kamugg
相关产品推荐
相关产品推荐

