是否可以并行读取网络摄像头帧?

2023-11-29

我有一个简单的Python使用捕获网络摄像头的脚本OpenCV. 我的网络摄像头有潜力传输 30 FPS,但自从我树莓派不够强大,我只能读取〜20 FPS。运行脚本时,我的 CPU 的一个核心最大使用到 100%,但其余核心未受影响,因此我尝试将读取拆分为尽可能多的线程,以便最大限度地使用我的 CPU潜力并轻松达到 30 FPS。

那么是否可以并行读取网络摄像头帧?

这是我的尝试:

import numpy as np
import cv2
import time
from threading import Thread


CV_CAP_PROP_FPS = 5

cap = cv2.VideoCapture(0)
fourcc = cv2.VideoWriter_fourcc(*'MJPG')
out = cv2.VideoWriter('output.avi', fourcc, cap.get(CV_CAP_PROP_FPS), (640, 480))
threads = []

class MyThread(Thread):
    def run(self):
        ret, frame = cap.read()

if __name__ == '__main__':
    try: 
        while(cap.isOpened()):
            thread = MyThread()
            thread.start()
            threads.append(thread)
            time.sleep(0.035)
    except KeyboardInterrupt:
        for thread in threads:
            thread.join()
        cap.release()
        out.release()

运行这个脚本时,我得到了一些VIDIOC_QBUF: Invalid argument在我的终端中(通常是 4 次)。睡眠值越大,收到的错误消息就越少。举例来说,如果我time.sleep(0.1),我可能会收到 2-3 条错误消息,而不是 4 条。

这是有问题的,因为在我的脚本的第二部分(未在此处发布)生成的视频文件已损坏。仅当并行读取网络摄像头源时才会出现此错误。当按顺序执行所有操作时,视频文件很好,我可以毫无问题地读取它。

任何见解都将受到高度赞赏。干杯!

Edit:我认为还需要注意的是VIDIOC_QBUF: Invalid argument读取前几帧后会出现错误消息。例如,我可以启动我的脚本,这几乎会立即触发这些错误,但随后我的脚本可以在“无限”时间内正常运行,而不会出现任何错误消息。


当在启动大量线程之前等待第一帧完全读取时,VIDIOC_QBUF: Invalid argument消失了!

...
try: 
    ret, frame = cap.read()
    while(cap.isOpened()):
        thread = MyThread()
        thread.start()
        threads.append(thread)
        time.sleep(0.035)
...

请注意,即使所有 CPU 核心都使用此算法,我能够达到的最大 FPS 也是 24。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

是否可以并行读取网络摄像头帧? 的相关文章

  • 如何从Python中的阿拉伯字符串中删除英文文本?

    我有一个带有英文文本和标点符号的阿拉伯字符串 我需要过滤阿拉伯文本 我尝试使用 sting 删除标点符号和英语单词 但是 我失去了阿拉伯语单词之间的空格 我哪里错了 import string exclude set string punc
  • 有没有办法在 Altair 箱线图中格式化工具提示值

    是否可以格式化箱线图工具提示中的值 由此织女星文档 https vega github io vega lite docs boxplot html tooltip encoding channels 看起来是这样 但我不太清楚如何使用 A
  • 在python中合并3个dict()

    如果多个字典之间有公共字符串 是否有逻辑合并多个字典的方法 即使这些公共字符串在一个 dict 的值与另一个 dict 的键之间匹配 我在 SO 上看到了很多类似的问题 但似乎没有一个问题能解决我将 较低级别文件 中的多个键与较高键 值中的
  • 检查时间戳列是否在另一个数据帧的日期范围内

    我有一个数据框 df A 有两列 amin 和 amax 这是一组时间范围 我的目标是查找 df B 中的列是否位于 df A amin 和 amax 列中范围的任何行之间 df A amin amax amin amax 0 2016 0
  • 如何将多项式拟合到带有误差线的数据

    我目前正在使用 numpy polyfit x y deg 将多项式拟合到实验数据 然而 我想拟合一个基于点误差使用加权的多项式 我已经发现scipy curve fit http docs scipy org doc scipy refe
  • 在 Windows 上的 python2.5 上安装 Openpyxl

    我努力了easy install install openpyxl and python setup install 两者都失败了 我也尝试过easy install openpyxl并再次失败 我包括了我得到的输出 当我尝试时easy i
  • Python矩阵问题[重复]

    这个问题在这里已经有答案了 这是从这个线程继续的 Python矩阵 有什么解决方案吗 https stackoverflow com questions 5835583 python matrix any solution Input fr
  • 无法解析 ReferenceProperty -- App Engine

    我遇到了一个错误 无法找出其根本原因 错误如下 ReferenceProperty 无法解析 u StatusLog STATUSLOGSID 此错误仅有时发生 大约一天一次或两次 生成此错误的脚本成功的次数多于失败的次数 该错误最奇怪的事
  • Keras 中的条件批量归一化

    我正在尝试在 Keras 中实现条件批量标准化 我假设我必须创建一个自定义层 因此 我从正常化 https github com keras team keras blob master keras layers normalization
  • Pandas 使用 NaN 进行数据透视或重塑数据框

    我有这个数据框 我需要根据以下数据进行旋转或重塑frame col df frame 0 0 1 1 2 2 3 0 4 1 5 2 pvol 0 nan 1 nan 2 nan 3 23 1 4 24 3 5 25 6 vvol 0 10
  • sqlalchemy,使用反向包含(不在)子列值列表中进行选择

    我在flask sqlalchemy 中有一个典型的帖子 标签 与一篇帖子相关的许多标签 关系 并且我想选择我提供的列表中未标记任何标签的帖子 首先 我建立的模型 class Post db Model id db Column db In
  • 从 Java 调用 Python 代码时出现问题(不使用 jython)

    我发现这是从 java 运行 使用 exec 方法 python 脚本的方法之一 我在 python 文件中有一个简单的打印语句 但是 我的程序在运行时什么也没做 它既不打印Python文件中编写的语句 也不抛出异常 程序什么都不做就终止了
  • SQLAlchemy 是否会从同一连接重置 SQLAlchemy 会话之间的数据库会话?

    SQLAlchemy 利用连接池 这意味着相同的连接可以在不同的 SQLAlchemy 会话之间重复使用 但是 单个 SQLAlchemy 会话包含在其自身内并在关闭后被丢弃 然而 连接保持 活动 状态 我想使用 set config 将一
  • Django populate() 不可重入

    当我尝试在生产环境中加载 Django 应用程序时 我不断收到此消息 我尝试了所有的 stackoverflow 答案 但没有任何解决办法 任何其他想法 我使用的是 Django 1 5 2 和 Apache Traceback most
  • 从 Perl 线程生成 Expect

    我正在编写一个脚本 该脚本需要定期 每 5 分钟 生成一个 Expect 进程来完成一些工作 下面是我的代码 它生成一个 Expect 进程并执行一些工作 脚本的主要进程始终在做一些其他工作 例如它可能等待用户输入 因为我在一个线程中调用这
  • 获取 TypeError:ord() 期望长度为 1 的字符串,但 int 发现错误 [重复]

    这个问题在这里已经有答案了 Code is from PyPDF2 import PdfFileReader with open HTTP Book pdf rb as file pdf PdfFileReader file pagedd
  • 计算列表中的子列表

    L 2 4 5 6 2 1 6 6 3 2 4 5 3 4 5 我想知道任意子序列出现了多少次 s 2 4 5 例如会返回2次 I tried L count s 但它不起作用 因为我认为它期望寻找类似的东西 random numbers
  • 使用 Python PuLP 混合整数规划的时间限制

    我一直在使用PuLP http pythonhosted org PuLP 解决我感兴趣的特定混合整数线性规划 MIP 但是 随着问题规模的增长 PuLP 花费的时间太长 我希望能够运行求解器一段时间 并在需要很长时间的情况下提前终止它 并
  • 使用自定义层运行 Keras 模型时出现问题

    我目前正在攻读学士学位论文FIIT STU https www fiit stuba sk en html page id 749 其主要目标是尝试复制和验证以下结果study http arxiv org abs 2006 00885 这
  • Pepper Robot:如何将 Python 地标检测移植到 Choregraphe?

    我正在尝试编写一个小程序 让 Pepper 通过 Choregraphe 检查房间内的地标 用于地标检测的常规 Python 代码工作得很好 但我无法将其移植到 Choregraphe http doc aldebaran com 2 5

随机推荐

  • 计算同一字符的最大子串数

    我想编写一个函数 其中它接收一个字符串和一个字母 该函数需要返回该字母的最长子串的长度 我不知道为什么我写的函数不起作用 例如 print count longest repetition eabbaaaacccaaddd a 应该返回 4
  • 将 Keycloak Spring 适配器与 Spring Boot 3 结合使用

    我在一个使用 Keycloak Spring Adapter 的项目中更新到了 Spring Boot 3 不幸的是 它没有启动 因为KeycloakWebSecurityConfigurerAdapter extends WebSecur
  • 结构测试:可识别与类测试:可识别

    struct Test Identifiable 导致错误 类型 测试 不符合协议 可识别 它需要 id 属性 class Test Identifiable 编译没有任何问题 Why From SE 0261 可识别协议 强调我的 为了尽
  • 如何配置 Xcode 项目以使用 TestFlightApp 进行 Beta 测试?

    我注册了 TestFlight 然后我按照中的所有步骤进行操作本教程 但是 Xcode 会抛出这个警告 应用程序未通过协同设计验证 签名无效 包含不允许的权利 或者不是用 iPhone 签名的 经销证书 19011 听起来好像还有比他们在教
  • Android 中检测 VoLTE 通话

    我对 Android 中由 LTE 运营商提供的 VoLTE 服务知之甚少 Android 中是否有可用于检测 VoLTE 通话的 API API例如 呼叫已接通 呼叫已断开 Latency 通话状态 非常感谢任何链接 API 参考 Tel
  • 当您在用户注册时自动创建子域时,它会创建一个新网站还是提供一个网站的外观? [关闭]

    Closed 这个问题是基于意见的 目前不接受答案 我想知道注册时创建的子域是否会成为网站 或者它们是否只是给人一种错觉 认为它们是类似于 example com username 的网站 我正在尝试创建类似 user domain com
  • jQuery 交叉淡入淡出插件

    我正在尝试构建或实现标题 图像旋转器 用户将单击一个数字 1 2 3 图像将淡出 淡入 并根据所选数字进行标题更改 跨度元素中的某些文本 是否有现有插件可以执行此操作 如果没有 使用 jQuery 实现此目的的最佳方法是什么 Thanks
  • Sed/Awk 在文件中搜索和替换/插入文本

    我正在尝试更新或插入一些注释 例如版权标头到目录 Linux 中的所有源文件中 我的文件不一致 因此其中一些文件已经有标题 而其他文件则根本没有 我尝试过sed查看前几行并替换 替换我的意思是用最新的文件更改已经具有版权标头的文件 sed
  • 响应式 SVG 视图框

    我在 SVG 中制作了一个 汉堡按钮 如下所示 body margin 0 text align center svg ham btn margin 2rem border 1px solid black fill 383838
  • 带信号量的线程安全单例问题

    我编写了一个简单的单例应用程序 以下是我的示例主类 ThreadsafeSingletonUsingSemaphore cpp Defines the entry point for the console application incl
  • initMap 不是一个函数

    我不明白有什么问题 我使用了 Google Map API 中的这个示例 简单地图 section section main js
  • Java程序执行一个命令需要很长时间

    我阅读了很多示例 最终使用以下代码从 Java 程序内部执行命令行命令 public static void executeCommand final String command throws IOException Interrupte
  • Javadoc 中文本文件(资源)的链接

    我进行了搜索 但找不到正确的答案 如何在 Javadoc 中使用指向资源文本文件的链接 link easywords txt 不起作用 a href Easy words a 也不行 Try a href Easy words a 反而 链
  • 使用 C# 为通过 Gmail 发送的邮件设置不同的“发件人”地址

    我正在使用一个简单的邮件发送器类 该类使用System Net Mail 我需要更新我的应用程序 以便各个用户可以通过它发送电子邮件 使用相同的 smtp 帐户 但 发件人 地址应该是导致发送电子邮件的用户的地址 我尝试设置From的财产M
  • Hashmap、Treemap 和 LinkedHashmap 在 Java 中如何工作?

    我对地图有各种疑问 迭代 Hashmap 时 无法保证迭代顺序 这是为什么呢 为什么 Hashmap 比 Treemap 更快 LinkedHashMap 是如何工作的 它们如何维护顺序 是因为它们有一个双向链表 其中包含有关哪个条目存储在
  • 为什么Java不初始化数组对象?

    如果在java中运行以下代码 public class Testing public static void main String args TestObject array new TestObject 4 array 0 new Te
  • 绑定到 Window.Resources 中 DataTemplate 中拥有窗口视图模型中的属性

    我的窗口资源部分中有一个 DataTemplate 它创建一个带有 ContextMenu 的 TextBlock 我希望能够设置 ContextMenu 中的 MenuItem 在我的窗口视图模型中是否可见 我尝试通过设置访问窗口的 Da
  • 有没有办法在本地更新 maven 的 default-bindings.xml

    这听起来可能很愚蠢 但是有没有办法编辑或更新maven的默认绑定文件呢 META INF plexus default bindings xml 我为什么要这么做 背景 我正在使用最新的maven version 3 3 9在我的机器上作为
  • 如何在pygame中的精灵上放置健康栏

    根据标题 我希望我的玩家头上有一个生命条 如果他们移动 生命条也会移动 说精灵是我的玩家 嘿精灵 他的头顶上有一个健康栏 是的 就是这样 老实说 我真的不知道从哪里开始 所以我们将不胜感激 谢谢 附 非常感谢Rabbid76的帮助 还有安禅
  • 是否可以并行读取网络摄像头帧?

    我有一个简单的Python使用捕获网络摄像头的脚本OpenCV 我的网络摄像头有潜力传输 30 FPS 但自从我树莓派不够强大 我只能读取 20 FPS 运行脚本时 我的 CPU 的一个核心最大使用到 100 但其余核心未受影响 因此我尝试