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

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(使用前将#替换为@)

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

  • OpenCV Python cv2.mixChannels()

    我试图将其从 C 转换为 Python 但它给出了不同的色调结果 In C Transform it to HSV cvtColor src hsv CV BGR2HSV Use only the Hue value hue create
  • 如何在flask中使用g.user全局

    据我了解 Flask 中的 g 变量 它应该为我提供一个全局位置来存储数据 例如登录后保存当前用户 它是否正确 我希望我的导航在登录后在整个网站上显示我的用户名 我的观点包含 from Flask import g among other
  • 通过最小元素比较对 5 个元素进行排序

    我必须在 python 中使用元素之间的最小比较次数来建模对 5 个元素的列表进行排序的执行计划 除此之外 复杂性是无关紧要的 结果是一个对的列表 表示在另一时间对列表进行排序所需的比较 我知道有一种算法可以通过 7 次比较 总是在元素之间
  • Python - StatsModels、OLS 置信区间

    在 Statsmodels 中 我可以使用以下方法拟合我的模型 import statsmodels api as sm X np array 22000 13400 47600 7400 12000 32000 28000 31000 6
  • 使用 on_bad_lines 将 pandas.read_csv 中的无效行写入文件

    我有一个 CSV 文件 我正在使用 Python 来解析该文件 我发现文件中的某些行具有不同的列数 001 Snow Jon 19801201 002 Crom Jake 19920103 003 Wise Frank 19880303 l
  • 如何替换 pandas 数据框列中的重音符号

    我有一个数据框dataSwiss其中包含瑞士城市的信息 我想用普通字母替换带有重音符号的字母 这就是我正在做的 dataSwiss Municipality dataSwiss Municipality str encode utf 8 d
  • 根据列值突出显示数据框中的行?

    假设我有这样的数据框 col1 col2 col3 col4 0 A A 1 pass 2 1 A A 2 pass 4 2 A A 1 fail 4 3 A A 1 fail 5 4 A A 1 pass 3 5 A A 2 fail 2
  • 是否可以忽略一行的pyright检查?

    我需要忽略一行的pyright 检查 有什么特别的评论吗 def create slog group SLogGroup data Optional dict None SLog insert one SLog group group da
  • 如何在ipywidget按钮中显示全文?

    我正在创建一个ipywidget带有一些文本的按钮 但按钮中未显示全文 我使用的代码如下 import ipywidgets as widgets from IPython display import display button wid
  • Pygame:有没有简单的方法可以找到按下的任何字母数字的字母/数字?

    我目前正在开发的游戏需要让人们以自己的名义在高分板上计时 我对如何处理按键有点熟悉 但我只处理过寻找特定的按键 有没有一种简单的方法可以按下任意键的字母 而不必执行以下操作 for event in pygame event get if
  • 无法在 Python 3 中导入 cProfile

    我试图将 cProfile 模块导入 Python 3 3 0 但出现以下错误 Traceback most recent call last File
  • 使用 \r 并打印一些文本后如何清除控制台中的一行?

    对于我当前的项目 有一些代码很慢并且我无法使其更快 为了获得一些关于已完成 必须完成多少的反馈 我创建了一个进度片段 您可以在下面看到 当你看到最后一行时 sys stdout write r100 80 n I use 80覆盖最终剩余的
  • Jupyter Notebook 内核一直很忙

    我已经安装了 anaconda 并且 python 在 Spyder IPython 等中工作正常 但是我无法运行 python 笔记本 内核被创建 它也连接 但它始终显示黑圈忙碌符号 防火墙或防病毒软件没有问题 我尝试过禁用两者 我也无法
  • 向 Altair 图表添加背景实心填充

    I like Altair a lot for making graphs in Python As a tribute I wanted to regenerate the Economist graph s in Mistakes we
  • 有人用过 Dabo 做过中型项目吗? [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 我们正处于一个新的 ERP 风格的客户端 服务器应用程序的开始阶段 该应用程序是作为 Python 富客户端开发的 我们目前正在评估 Dabo
  • Python:如何将列表列表的元素转换为无向图?

    我有一个程序 可以检索 PubMed 出版物列表 并希望构建一个共同作者图 这意味着对于每篇文章 我想将每个作者 如果尚未存在 添加为顶点 并添加无向边 或增加每个合著者之间的权重 我设法编写了第一个程序 该程序检索每个出版物的作者列表 并
  • 发送用户注册密码,django-allauth

    我在 django 应用程序上使用 django alluth 进行身份验证 注册 我需要创建一个自定义注册表单 其中只有一个字段 电子邮件 密码将在服务器上生成 这是我创建的表格 from django import forms from
  • 使用 Python 的 matplotlib 选择在屏幕上显示哪些图形以及将哪些图形保存到文件中

    我想用Python创建不同的图形matplotlib pyplot 然后 我想将其中一些保存到文件中 而另一些则应使用show 命令 然而 show 显示all创建的数字 我可以通过调用来避免这种情况close 创建我不想在屏幕上显示的绘图
  • Windows 和 Linux 上的线程

    我在互联网上看到过在 Windows 上使用 C 制作多线程应用程序的教程 以及在 Linux 上执行相同操作的其他教程 但不能同时用于两者 是否存在即使在 Linux 或 Windows 上编译也能工作的函数 您需要使用一个包含两者的实现
  • 如何将输入读取为数字?

    这个问题的答案是社区努力 help privileges edit community wiki 编辑现有答案以改进这篇文章 目前不接受新的答案或互动 Why are x and y下面的代码中使用字符串而不是整数 注意 在Python 2

随机推荐

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

    我想编写一个函数 其中它接收一个字符串和一个字母 该函数需要返回该字母的最长子串的长度 我不知道为什么我写的函数不起作用 例如 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 但其余核心未受影响 因此我尝试