前言
目标检测代码对视频进行拆帧检测耗时较长,在界面加入该功能后,界面经常崩溃卡死,下面记录解决的过程。
设计思路
在参考了一些资料后,尝试了两种解决方法。
①新建线程去进行视频检测,与界面互不干扰。需要解决的问题是如何知道线程中的检测是否结束。
②逐帧检测强制更新GUI将结果显示到相应控件。该方法对电脑的性能有要求。如果检测速度较快,可以选择该方法。我的垃圾a卡深度学习都跑的很呛,电脑性能不错的话可以尝试。
方案一
使用pyqtSignal()-高级自定义信号与槽获取检测是否结束
参考资料
1.定义回传数据方法
#接受线程回传数据
def callbacklog(self, msg):
# self.text = self.text + time.strftime("%Y-%m-%d %H:%M:%S ", time.localtime()) + msg + "\n"
self.text = time.strftime("%Y-%m-%d %H:%M:%S ", time.localtime()) + msg + "\n"
print(self.text)
# 回调数据输出到文本框textEdit
self.textEdit.setText(self.text)
2.启动线程,连接自定义的信号
#新建线程检测视频
def start_detect(self):
th1 = Thread_detect(self)
th1.start()
th1._signal.connect(self.callbacklog) # 连接信号
3.线程中发送信号
#检测线程中发送信号
class Thread_detect(QThread):
#声明带str类型的信号
_signal = pyqtSignal(str)
#检测函数部分
def run(self):
start = time.perf_counter() # 起始时间
#初始化检测模型
.