首页 > 解决方案 > 如何识别第 30 帧并忽略其余帧?

问题描述

我正在使用 PyQt5 开发一个 GUI,但我被卡住了。

因为我的程序在 RaspberryPi4 上运行,所以我的处理能力有限。我正在从我的网络摄像头获取视频输入,并希望对此输入执行 face_recognition 操作。由于处理能力有限,我需要忽略很多输入帧,只使用每第 n 帧来执行人脸识别,以加快处理速度。

我尝试编写类似于此线程的延迟:每 x 秒调用一次函数(Python) ,但它不起作用。有没有可能直接引用一个框架?

这是我从网络摄像头读取的功能:


def run(self):
            checker=0
            process_this_frame = 0
            # capture from web cam
            cap = cv2.VideoCapture(0)
            cap.set(cv2.CAP_PROP_FRAME_WIDTH,640);
            cap.set(cv2.CAP_PROP_FRAME_HEIGHT,300);
            while True:
                ret, cv_img = cap.read()
                if ret:
                    img = cv2.resize(cv_img, (0, 0), fx=0.25, fy=0.25)
                    process_this_frame = process_this_frame+2
                    print('process_this_frame: ' , process_this_frame)
                    if process_this_frame % 20 == 0:
                       
                        predictions = predict(img, model_path="trained_knn_model.clf")
                        print('showing predicted face')
                        cv_img = show_prediction_labels_on_image(cv_img, predictions)
                        checker=1
                        self.change_pixmap_signal.emit(cv_img)
                        
                    else:
                        checker=0
                        self.change_pixmap_signal.emit(cv_img)

具体来说,我正在寻找一个合适的 if 条件来仅在每个第 n 帧上执行预测函数,并且当我不在 cv_img 上进行预测时,我只想在 else 情况下显示帧。我尝试了多个模运算符,但没有找到合适的解决方案。

我怎样才能做到这一点?参考多个帧而不是使用时间延迟会很酷,这样我就可以尝试找到最佳解决方案。

标签: pythonface-recognition

解决方案


推荐阅读