python - 如何识别第 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 情况下显示帧。我尝试了多个模运算符,但没有找到合适的解决方案。
我怎样才能做到这一点?参考多个帧而不是使用时间延迟会很酷,这样我就可以尝试找到最佳解决方案。
解决方案
推荐阅读
- api - Web服务与http和api有什么区别?
- java - Android 10+ 未从 MediaStore 检索 DATE_TAKEN 信息
- spring-boot - 从实现 jar 中排除 spring-cloud-deployer-spi-scheduler-test-app
- python - 在 Alembic 迁移文件头中包含用户名
- web-scraping - 有没有办法获取抽搐视频数据?
- java - ArrayList 索引超出范围但 HashSet 没有问题
- reactjs - 如何使用道具更新我的表单 Reactjs
- c++ - 创建一个接收混杂数据包的套接字
- scala - 如何构建需要多个 Scala 版本的项目?
- android - 如何在 Android 上调查墓碑崩溃数据