QReader首次调用detect_and_decode弹出.exe窗口致程序卡顿求助
解决QReader首次调用弹出.exe窗口的问题
针对你遇到的QReader首次调用detect_and_decode时弹出.exe窗口、导致程序阻塞的问题,提供以下几个可行的解决思路:
1. 初始化QReader时关闭日志并使用轻量模型
QReader底层基于YOLOv8,首次加载模型时的日志输出或模型初始化过程可能触发临时控制台窗口。初始化时添加参数禁用日志、选择更小的模型,能减少这类问题:
from qreader import QReader # 全局初始化QReader(放在脚本开头,不要在函数内重复创建) qreader = QReader(verbose=False, model_type='n') # 'n'是最小的YOLOv8n模型,加载更快
2. 隐藏Python子进程的控制台窗口
在Windows环境下,部分依赖库(如ONNX Runtime)首次运行会弹出控制台窗口,可通过ctypes强制隐藏:
在你的GUI脚本最开头添加:
import ctypes # 隐藏当前进程的控制台窗口 ctypes.windll.user32.ShowWindow(ctypes.windll.kernel32.GetConsoleWindow(), 0)
注意:如果用pythonw.exe运行GUI程序(无控制台模式),这个步骤可以省略,但用python.exe运行时必须添加。
3. 简化图片预处理逻辑
你的代码中同时使用了cv2.QRCodeDetector和QReader,且存在重复读图、多余的色彩空间转换,可能增加初始化负担。简化后的解码函数可以改成:
def readqrcode(self, counter, filename, folder, folder2): global parsed_data, matched_rows_filtered, fatura, flagFatura # 直接传入彩色图给QReader,无需额外转换 data = qreader.detect_and_decode(image=cv2.imread(filename)) # 后续处理逻辑...
4. 更新QReader到最新版本
旧版本的QReader可能存在Windows平台的进程窗口bug,执行升级命令修复:
pip install --upgrade qreader
如果以上方法都无效,建议检查Python环境是否为64位(32位环境下部分库的进程管理容易出问题),或尝试在虚拟环境中重新安装所有依赖。
内容的提问来源于stack exchange,提问作者Hugo Almeida
相关产品推荐
相关产品推荐

