Python开发之视频处理

标签: 无 分类: 未分类 创建时间:2025-04-26 06:31:14 更新时间:2025-04-28 14:37:40

1.OpenCV

在进行图像识别的时候,大部分还是借助于 OpenCV 的接口。

2.实时帧

1
fps =cap.get(cv2.CAP_PROP_FPS)

3.missing picture in access unit with size

我在使用opencv进行处理的时候,使用obs进行推流的时候,不会出现问题,但是使用 无人机 推流的时候,地址都是同样的地址,但是就是无法实现拉流,然后报错:missing picture in access unit with size

【尝试解决】
(1)我尝试读取是否为空的问题

1
2
3
4
5
6
7
# 判断是否为空操作,如果为空则不进行处理
if frame.empty():
self.cnt+=1
if self.cnt == 10:
self.cnt = 0
break
continue
参考文章:
【1】.opencv拉流出现missing picture in access unit with size 4错误解决
【2】.ffmpeg转码时出现missing picture in access unit with size 14019 索性截取掉最后的2秒时间
【3】.pilot2 rtmp 直播推流问题 这里是同样的问题,机场视频没有问题,但是 DJI pilot 2 的问题。

4.关闭日志输出

opencv日志总是输出很多没有用的,我感觉有些烦人,于是就想着要把他关掉。很多文章都用了 loggin,但是就是无法关闭 ffmpeg 的日志输出,真是扯淡啊。

【尝试方案】
(1)尝试使用 python 设置,感觉无效

1
2
# 无效
cv2.setLogLevel(0)

(2)尝试设置环境变量,也无效

1
2
3
import os
os.environ["OPENCV_LOG_LEVEL"] = "0"
import cv2

(3)尝试使用 set 设置环境变量

1
set OPENCV_LOG_LEVEL=0

(4)设置多个变量,也还是无效

1
2
3
4
5
6
7
8
9
import os
os.environ["OPENCV_VIDEOIO_DEBUG"] = "0"
os.environ["OPENCV_FFMPEG_DEBUG"] = "0"
os.environ["OPENCV_VIDEOWRITER_DEBUG"] = "0"
os.environ["OPENCV_VIDEOCAPTURE_DEBUG"] = "0"
os.environ["OPENCV_FFMPEG_LOGLEVEL"] = "-8"
os.environ["OPENCV_FFMPEG_LOGLEVEL"]="-8"
os.environ["OPENCV_LOG_LEVEL"]="OFF"
import cv2

(5)使用 logging 进行屏蔽,也无效

1
2
3
4
5
6
7
import logging
# 创建一个Logger对象
logger = logging.getLogger(__name__)
# 获取第三方库的Logger对象
requests_logger = logging.getLogger('cv2')
# 设置第三方库的Logger级别为WARNING
requests_logger.setLevel(logging.ERROR)

(6)禁用print
我打算直接禁用全部的 print ,结果还是没用,还是输出一堆的 [NULl]

1
2
3
4
5
6
7
8
9
10
import os,sys
# Disable
def blockPrint():
sys.stdout = open(os.devnull, 'w')

# Restore
def enablePrint():
sys.stdout = sys.__stdout__
# 阻止输出
blockPrint()
参考文章:
【1】.OpenCV-Python (官方)中文教程(部分一)
【2】.心得:大疆无人机RTMP推流直播(Windows版本已成功) 这是正常的时候的事情。
【3】.Python logging日志模块配置/使用/禁用
【4】.cv::utils::logging Namespace Reference 这是 opencv 日志枚举文件。
【5】.setLogLevel Currently this API is experimental and it is not exposed into Python.You can try to set OPENCV_LOG_LEVEL=INFO environment variable before loading of OpenCV binaries.
【6】.Introduction 这里有三种设置环境变量的方法
【7】.Enable OpenCV ffmpeg logging
【8】.Unable to disable Opencv FFMPEG error logs 这里用了很多的变量,但是我尝试过都不行。
【9】.How to hide console output of FFmpeg in Python? ffmpeg.input(file).output(filename, loglevel=”quiet”).run()
【10】.屏蔽ffmpeg输出命令(不输出多余信息) -loglevel quiet
【11】.python logging关闭第三方debug日志 1.导入logging模块。2.创建一个Logger对象。3.获取第三方库的Logger对象。4.设置第三方库的Logger级别为WARNING。
【12】.FFmpeg打印日志函数分析 这是用的c语言的部分代码。
【13】.FFMPEG 日志输出控制 av_log_set_level(AV_LOG_QUIET);
【14】.关于python中屏蔽输出
【15】.python小技巧[] 禁用脚本中的print
【16】.如何为OpenCV启用日志记录 这里提供了一个 logging.getLogger(“OpenCV”) ,但是我觉得应该不是这么弄的,我尝试了之后,也不行。
小额赞助
本人提供免费与付费咨询服务,感谢您的支持!赞助请发邮件通知,方便公布您的善意!
**光 3.01 元
Sun 3.00 元
bibichuan 3.00 元
微信公众号
广告位
诚心邀请广大金主爸爸洽谈合作
每日一省
isNaN 和 Number.isNaN 函数的区别?

1.函数 isNaN 接收参数后,会尝试将这个参数转换为数值,任何不能被转换为数值的的值都会返回 true,因此非数字值传入也会返回 true ,会影响 NaN 的判断。

2.函数 Number.isNaN 会首先判断传入参数是否为数字,如果是数字再继续判断是否为 NaN ,不会进行数据类型的转换,这种方法对于 NaN 的判断更为准确。

每日二省
为什么0.1+0.2 ! == 0.3,如何让其相等?

一个直接的解决方法就是设置一个误差范围,通常称为“机器精度”。对JavaScript来说,这个值通常为2-52,在ES6中,提供了Number.EPSILON属性,而它的值就是2-52,只要判断0.1+0.2-0.3是否小于Number.EPSILON,如果小于,就可以判断为0.1+0.2 ===0.3。

每日三省
== 操作符的强制类型转换规则?

1.首先会判断两者类型是否**相同,**相同的话就比较两者的大小。

2.类型不相同的话,就会进行类型转换。

3.会先判断是否在对比 null 和 undefined,是的话就会返回 true。

4.判断两者类型是否为 string 和 number,是的话就会将字符串转换为 number。

5.判断其中一方是否为 boolean,是的话就会把 boolean 转为 number 再进行判断。

6.判断其中一方是否为 object 且另一方为 string、number 或者 symbol,是的话就会把 object 转为原始类型再进行判断。

每日英语
Happiness is time precipitation, smile is the lonely sad.
幸福是年华的沉淀,微笑是寂寞的悲伤。