在统信UOS Linux下用opencv-python捕获摄像头输入保存到视频文件

在统信UOSLinux下opencv-python摄像头视频处理的适配与调试
文章讲述了作者在统信UOSLinux环境下使用opencv-python处理摄像头视频时遇到的问题,包括路径调整、错误修复和视频播放问题,强调了Linux环境下对参数的严格要求。
☞ ░ 前往老猿Python博客 ░ https://blog.youkuaiyun.com/LaoYuanPython

一、引言

老猿在优快云的《opencv-python图形图像处理入门基础知识》介绍了一个利用电脑摄像头获取输入视频生成到文件的案例,这个案例当时基于windows的。在《统信UOS Linux下安装opencv-python过程详解》介绍的在统信UOS Linux操作系统下安装opencv-python的步骤,在安装opencv-python完成后想复用该案例作为测试,但测试过程并不一帆风顺。

二、首次修改和测试情况

首次修改是在《opencv-python图形图像处理入门基础知识》基础上将windows路径改为了linux路径,直接执行报错摄像头打开失败:

在这里插入图片描述

经仔细走读代码,发现是如下语句传参存在问题:

cap = cv2.VideoCapture(0,cv2.CAP_DSHOW)

这个代码多传了一个参数,原来windows下可能有容错性,但Linux下不行,将后一个参数去除即可。

三、生成的视频无法播放

在修改上面的代码之后,再执行python ./captureVideo.py程序,摄像窗口正常显示,退出后文件正常生成,但无法进行播放。
多次测试之后,发现视频帧大小必须设置为打开窗口大小完全一致才能播放保存的视频文件,用如下代码对视频的帧宽度和高度赋值才行(用与视频窗口大小相同的固定值也可以):

  WIDTH = int(cap.get(cv2.CAP_PROP_FRAME_WIDTH))
  HEIGHT = int(cap.get(cv2.CAP_PROP_FRAME_HEIGHT))

这样保存的文件就能正常播放了,可见opencv-python的windows版本和Linux版本的处理上还是有所不同的,Linux下对参数要求更严格。

最后完整的代码如下:

import cv2 

def captureVideoFromCamera():
    cap = cv2.VideoCapture(0)
  
    WIDTH = int(cap.get(cv2.CAP_PROP_FRAME_WIDTH))
    HEIGHT = int(cap.get(cv2.CAP_PROP_FRAME_HEIGHT))
    print(f"视频分辨率:({WIDTH},{HEIGHT})")
  
    FILENAME = r'/data/home/administrator/temp/test.avi'

    FPS = 24
    cap.set(cv2.CAP_PROP_FPS, FPS)
    # 建议使用XVID编码,图像质量和文件大小比较都兼顾的方案
    fourcc = cv2.VideoWriter_fourcc(*'XVID')

    out = cv2.VideoWriter(FILENAME, fourcc=fourcc, fps=FPS,frameSize=(WIDTH,HEIGHT))

    if not cap.isOpened():
        print("Cannot open camera")
      
        exit()
    while True:
        # 逐帧捕获
        ret, frame = cap.read()
        # 如果正确读取帧,ret为True
        if not ret:
            print("Can't receive frame (stream end?). Exiting ...")
            break
        frame = cv2.flip(frame, 1)  # 水平翻转
        ret = out.write(frame)
        gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
        # 显示结果帧e
        cv2.imshow('frame', frame)
        if cv2.waitKey(1) == ord('q'):  break
    # 完成所有操作后,释放捕获器
    out.release()
    cap.release()
    cv2.destroyAllWindows()

captureVideoFromCamera()

四、小结

本文介绍了在统信UOS Linux下用opencv-python捕获摄像头输入保存到视频文件的实现代码与windows的差别,opencv-python的windows版本和Linux版本的处理上还是有所不同的,windows下的容错性高一些,Linux下对参数要求更严格,因此相同的代码Linux下要更注意细节。

写博不易,敬请支持

如果阅读本文于您有所获,敬请点赞、评论、收藏,谢谢大家的支持!

更多关于统信操作系统及opencv的介绍的内容请参考专栏《国产信创之光》的其他文章。

关于老猿的付费专栏

  1. 付费专栏《https://blog.youkuaiyun.com/laoyuanpython/category_9607725.html 使用PyQt开发图形界面Python应用》专门介绍基于Python的PyQt图形界面开发基础教程,对应文章目录为《 https://blog.youkuaiyun.com/LaoYuanPython/article/details/107580932 使用PyQt开发图形界面Python应用专栏目录》;
  2. 付费专栏《https://blog.youkuaiyun.com/laoyuanpython/category_10232926.html moviepy音视频开发专栏 )详细介绍moviepy音视频剪辑合成处理的类相关方法及使用相关方法进行相关剪辑合成场景的处理,对应文章目录为《https://blog.youkuaiyun.com/LaoYuanPython/article/details/107574583 moviepy音视频开发专栏文章目录》;
  3. 付费专栏《https://blog.youkuaiyun.com/laoyuanpython/category_10581071.html OpenCV-Python初学者疑难问题集》为《https://blog.youkuaiyun.com/laoyuanpython/category_9979286.html OpenCV-Python图形图像处理 》的伴生专栏,是笔者对OpenCV-Python图形图像处理学习中遇到的一些问题个人感悟的整合,相关资料基本上都是老猿反复研究的成果,有助于OpenCV-Python初学者比较深入地理解OpenCV,对应文章目录为《https://blog.youkuaiyun.com/LaoYuanPython/article/details/109713407 OpenCV-Python初学者疑难问题集专栏目录
  4. 付费专栏《https://blog.youkuaiyun.com/laoyuanpython/category_10762553.html Python爬虫入门 》站在一个互联网前端开发小白的角度介绍爬虫开发应知应会内容,包括爬虫入门的基础知识,以及爬取优快云文章信息、博主信息、给文章点赞、评论等实战内容。

前两个专栏都适合有一定Python基础但无相关知识的小白读者学习,第三个专栏请大家结合《https://blog.youkuaiyun.com/laoyuanpython/category_9979286.html OpenCV-Python图形图像处理 》的学习使用。

对于缺乏Python基础的同仁,可以通过老猿的免费专栏《https://blog.youkuaiyun.com/laoyuanpython/category_9831699.html 专栏:Python基础教程目录)从零开始学习Python。

如果有兴趣也愿意支持老猿的读者,欢迎购买付费专栏。

老猿Python,跟老猿学Python!

☞ ░ 前往老猿Python博文目录 https://blog.youkuaiyun.com/LaoYuanPython
<think> 根据用户问题,需要解决UOS浏览器开启摄像头失败,错误代码-5的问题。 结合引用内容,虽然没有直接提到摄像头错误代码-5,但可以推断可能与系安装、权限、驱动或配置相关。 解决思路: 1. 检查摄像头硬件:确认摄像头硬件是否正常,可在其他系或应用下测试。 2. 检查权限设置:浏览器需要摄像头权限,检查UOS的权限管理。 3. 更新系:可能存在bug,更新到最新版本(参考引用[2]提到升级apt可能导致问题,但更新系应谨慎)。 4. 检查浏览器设置:浏览器内部可能有摄像头访问设置。 5. 检查驱动程序摄像头可能需要驱动支持(引用[5]提到驱动加载失败,类似问题可能出现在摄像头驱动)。 但是,由于引用中没有直接答案,需要根据经验给出一般性解决方案: 解决方案: 1. 权限设置: - 进入“控制中心”>“隐私”>“权限管理”,确保浏览器应用有摄像头访问权限。 - 如果控制中心无法打开(引用[2]提到控制中心打不开,但用户问题没有提及,所以假设控制中心正常),则尝试命令行或重装控制中心。 2. 重启设备:有时候重启可以解决临时性问题。 3. 更新系和浏览器: - 在终端执行更新命令(谨慎操作,参考引用[2]中升级apt导致问题,但更新可能修复bug): ``` sudo apt update sudo apt upgrade ``` - 更新浏览器到最新版本。 4. 检查摄像头设备: - 在终端输入以下命令查看摄像头设备: ``` ls /dev/video* ``` - 如果有多个设备,尝试切换浏览器使用的摄像头设备。 5. 浏览器设置: - 在浏览器设置中,清除缓存和Cookie,然后重新启动浏览器。 - 在浏览器地址栏输入:`chrome://settings/content/camera`(如果使用Chromium内核)检查摄像头权限。 6. 检查摄像头驱动: - 参考引用[5]中驱动加载失败的问题,可能是驱动问题。尝试更新摄像头驱动或检查驱动加载情况。 - 使用命令检查驱动模块: ``` lsmod | grep uvcvideo # USB摄像头常用驱动 ``` 如果没有加载,尝试加载: ``` sudo modprobe uvcvideo ``` 7. 如果以上步骤无效,考虑重装浏览器或系(参考引用[1]中安装失败的处理,但重装系是最后手段)。 由于引用中提到过网络问题和时间同步问题(引用[4]),虽然摄像头问题与网络无直接关系,但系时间错误可能导致证书问题,间接影响权限,所以同步时间: ``` sudo ntpdate ntp.ntsc.ac.cn # 使用国家授时中心服务器 ``` 生成相关问题: 1. 如何查看UOS中的摄像头设备? 2. UOS如何更新驱动程序? 3. 浏览器如何重置权限设置? 4. UOS时间不同步会导致哪些问题? 5. UOS如何重装浏览器? 注意:由于引用中没有直接解决方法,回答需谨慎,建议用户逐步尝试,并提醒备份重要数据。 </think> 针对UOS浏览器开启摄像头失败并报错代码-5的问题,结合系特性及相关引用资料,提供以下解决方案: ### 解决方案 1. **检查摄像头权限设置** - 进入 `控制中心 > 隐私 > 权限管理 > 摄像头权限`,确保对应的浏览器应用已被授权访问摄像头(参考引用[3]权限管理模式)[^3]。 - 若权限已开启仍无效,尝试 **重置权限**:删除浏览器配置文件(如Chromium内核的 `~/.config/chromium` 目录)。 2. **验证摄像头硬件状态** - 终端执行命令检测设备识别: ```bash ls /dev/video* # 检查摄像头设备节点 cheese # 测试系自带摄像头工具 ``` - 若 `cheese` 无法调用摄像头,说明系级驱动异常(可能与引用[5]的驱动加载失败类似)[^5]。 3. **更新关键组件** - 更新浏览器和媒体驱动: ```bash sudo apt update sudo apt install --reinstall uos-browser libv4l-0 libva-drm2 # 重装浏览器及视频驱动 ``` 4. **检查安全策略限制** - 错误代码-5通常与 **权限拒绝** 相关: - 检查是否存在第三方安全软件拦截摄像头- 尝试在开发者模式下运行浏览器: ```bash uos-browser --no-sandbox --test-type # 临时禁用沙箱测试 ``` 5. **修复可能的系环境异常** - 同步系时间(引用[4]强调时间错误导致网络功能异常)[^4]: ```bash sudo timedatectl set-ntp true # 启用NTP时间同步 ``` - 检查系完整性: ```bash sudo apt check # 验证软件包依赖 sudo apt install -f # 修复依赖 ``` 6. **终极解决方案** - 若以上无效,建议 **重装系** 并注意: - 硬盘需 **>64GB**(引用[1]要求)[^1] - 确保UEFI模式安装(引用[1]关键点)[^1] - 使用 **2022年7月镜像**(引用[1]推荐稳定版本)[^1] ### 相关问题 1. UOS如何检测摄像头硬件是否被系识别? 2. 浏览器沙箱机制如何影响硬件设备调用? 3. 系时间不同步会导致哪些硬件功能异常? 4. UEFI安装模式与Legacy模式对硬件驱动的影响有何区别? 5. UOS下如何查看应用程序的详细权限日志? > **提示**:若问题仍存,建议通过 `journalctl -u uos-browser.service` 查看浏览器系日志,定位"-5"错误的详细上下文。
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

LaoYuanPython

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值