本节介绍了Python完成直播推流作用,主要是经过opencv读取视频对视频分割为帧,本文经过实例代码讲解的非常具体

做任何事情都有一定的思路,写代码更是如此,直播推流的整体思路如下:

opencv读取视频

将视频分割为帧

对每一帧进行处理(opencv模板匹配)

在将此帧写入pipe管道

利用ffmpeg进行推流直播

在处理本地视频时,并没有延时卡顿的情况。但对实时视频流的时候,呈现了卡顿延时的作用。在一顿度娘操作之后,采取了多线程的办法。

opencv读取视频

#一个莫名其妙的python群:740322234

def run_opencv_camera():

video_stream_path = 0

# 当video_stream_path = 0 会开启计算机 默认摄像头 也可以为本地视频文件的路径

cap = cv2.VideoCapture(video_stream_path)

while cap.isOpened():

is_opened, frame = cap.read()

cv2.imshow('frame', frame)

cv2.waitKey(1)

cap.release()

OpenCV模板匹配

模板匹配就是在一幅图像中寻找一个特定目标的方法之一,这种方法的原理非常简单,遍历图像中每一个可能的位置,比较各处与模板是否相似,当相似度足够高时,就认为找到了目标。

#一个莫名其妙的python群:740322234

def template_match(img_rgb):

# 灰度转换

img_gray = cv2.cvtColor(img_rgb, cv2.COLOR_BGR2GRAY)

# 模板匹配

res = cv2.matchTemplate(img_gray, template, cv2.TM_CCOEFF_NORMED)

# 设置阈值

threshold = 0.8

loc = np.where(res >= threshold)

if len(loc[0]):

# 这里直接固定区域

cv2.rectangle(img_rgb, (155, 515), (1810, 820), (0, 0, 255), 3)

cv2.putText(img_rgb, category, (240, 600), cv2.FONT_HERSHEY_SIMPLEX, 1, (0, 255, 0), 2)

cv2.putText(img_rgb, Confidence, (240, 640), cv2.FONT_HERSHEY_SIMPLEX, 1, (0, 255, 0), 2)

cv2.putText(img_rgb, Precision, (240, 680), cv2.FONT_HERSHEY_SIMPLEX, 1, (0, 255, 0), 2)

cv2.putText(img_rgb, product_yield, (240, 720), cv2.FONT_HERSHEY_SIMPLEX, 1, (0, 255, 0), 2)

cv2.putText(img_rgb, result, (240, 780), cv2.FONT_HERSHEY_SIMPLEX, 2, (0, 255, 0), 5)

return img_rgb

FFmpeg推流

在Ubuntu 14 上安装 Nginx-RTMP 流媒体服务器(可以百度)

import subprocess as sp

rtmpUrl = ""

camera_path = ""

cap = cv.VideoCapture(camera_path)

# Get video information

fps = int(cap.get(cv.CAP_PROP_FPS))

width = int(cap.get(cv.CAP_PROP_FRAME_WIDTH))

height = int(cap.get(cv.CAP_PROP_FRAME_HEIGHT))

# ffmpeg command

command = ['ffmpeg',

'-y',

'-f', 'rawvideo',

'-vcodec','rawvideo',

'-pix_fmt', 'bgr24',

'-s', "{}x{}".format(width, height),

'-r', str(fps),

'-i', '-',

'-c:v', 'libx264',

'-pix_fmt', 'yuv420p',

'-preset', 'ultrafast',

'-f', 'flv',

rtmpUrl]

# 管道配置

p = sp.Popen(command, stdin=sp.PIPE)

# read webcamera

while(cap.isOpened()):

ret, frame = cap.read()

if not ret:

print("Opening camera is failed")

break

# process frame

# your code

# process frame

# write to pipe

p.stdin.write(frame.tostring())

说明:rtmp是要接受视频的服务器,服务器按照上面所给连接地址即可。

多线程处理

#一个莫名其妙的python群:740322234

def image_put(q):

# 采取本地视频验证

cap = cv2.VideoCapture("./new.mp4")

# 采取视频流的方式

# cap = cv2.VideoCapture(0)

# cap.set(cv2.CAP_PROP_FRAME_WIDTH,1920)

# cap.set(cv2.CAP_PROP_FRAME_HEIGHT,1080)

if cap.isOpened():

print('success')

else:

print('faild')

while True:

q.put(cap.read()[1])

q.get() if q.qsize() > 1 else time.sleep(0.01)

def image_get(q):

while True:

# start = time.time()

#flag += 1

frame = q.get()

frame = template_match(frame)

# end = time.time()

# print("the time is", end-start)

cv2.imshow("frame", frame)

cv2.waitKey(0)

# pipe.stdin.write(frame.tostring())

#cv2.imwrite(save_path + "%d.jpg"%flag,frame)

# 多线程执行一个摄像头

def run_single_camera():

# 初始化

mp.set_start_method(method='spawn') # init

# 队列

queue = mp.Queue(maxsize=2)

processes = [mp.Process(target=image_put, args=(queue, )),

mp.Process(target=image_get, args=(queue, ))]

[process.start() for process in processes]

[process.join() for process in processes]

def run():

run_single_camera() # quick, with 2 threads

pass

运用Python3自带的多线程模块mutilprocessing模块,创建一个行列,线程A从经过rstp协议从视频流中读取出每一帧,并放入行列中,线程B从行列中将图片取出,处理后进行显示。线程A假如发现行列里有两张图片,即线程B的读取速度跟不上线程A,那么线程A主动将行列里边的旧图片删掉,换新图片

python刷直播人气_表姐直播人气很差?Python一招引爆直播推流效果相关推荐

  1. python刷网易云_牛逼了!用Python开发的命令行版网易云音乐,Github获8300颗星!...

    大家好,我是程序员G哥 最近在逛Github发现了一个非常有趣的库musicbox,是用纯Python打造的,收获了8300颗星.Python语言简单易学,好玩有趣,身边越来越多的小伙伴都开始学习Py ...

  2. 最适合新手的python刷题网站_有没有适合新手练习Python的网站(做题类)?

    直接在知乎看我整理的练习题就可以了, 给你分享一下我自己亲身经历过的python考试题(下面还有练习题大全哦~~~) 记得给小达点个关注~ 你可以参考下面的题进行练习,考试题换汤不换药,希望对你有帮助 ...

  3. 学python重点是什么_如果只有1小时学Python,看这篇就够了

    大家好,我是大鹏,城市数据团联合发起人,致力于Python数据分析.数据可视化的应用与教学. 和很多同学接触过程中,我发现自学Python数据分析的一个难点是资料繁多,过于复杂.大部分网上的资料总是从 ...

  4. python计算密集型提速_利用Cython加速计算密集型python任务

    何为计算密集型任务 下面贴上网上找到的描述计算密集型任务的特点是要进行大量的计算,消耗CPU资源,比如计算圆周率.对视频进行高清解码等等,全靠CPU的运算能力.这种计算密集型任务虽然也可以用多任务完成 ...

  5. 经典python项目源码_建议收藏,22个Python迷你项目(附源码)

    在使用Python的过程中,我最喜欢的就是Python的各种第三方库,能够完成很多操作. 下面就给大家介绍22个通过Python构建的项目,以此来学习Python编程. 大家也可根据项目的目的及提示, ...

  6. python迷你停车管理系统_建议收藏,22个Python迷你项目(附源码)

    在使用Python的过程中,我最喜欢的就是Python的各种第三方库,能够完成很多操作. 下面就给大家介绍22个通过Python构建的项目,以此来学习Python编程. 大家也可根据项目的目的及提示, ...

  7. python的电脑推荐_推荐8款常用的Python GUI图形界面开发框架

    作为Python开发者,你迟早都会用到图形用户界面来开发应用.本文将推荐一些 Python GUI 框架,希望对你有所帮助,如果你有其他更好的选择,欢迎在评论区留言. Python 的 UI 开发工具 ...

  8. python作者龟叔_龟叔和他的Python

    经过了漫长的旅程,终于要看到主角Python了.Python是现在非常非常流行的编程语言,在我们能看到的大部分编程语言排行榜中,Python都能在前三甲中拥有一席之地 ,并且发展势头非常之猛,可以这么 ...

  9. python主要用于系统编程_一文带你了解python是什么?能做什么?为什么(附赠40G项目实战+绝版电子书)...

    什么是 Python? Python 是一门流行的编程语言.它由 Guido van Rossum 创建,于 1991 年发布. 它用于:当然小编这里也准备一份适合你的学习资料爬虫 ,python学习 ...

  10. python需要编译器吗_是否需要“使用严格”的Python编译器?

    好吧,我不是一个很好的python程序员,但我会说答案是肯定的. 任何允许您随时创建具有任何名称的变量的动态语言都可以使用"strict"pragma. Perl中的Strict ...

最新文章

  1. go kegg_3分钟了解GO/KEGG功能富集分析
  2. Map存值问题的研究
  3. 手把手教你C语言静态库的开发
  4. OOP_由C到C++
  5. CSS3幻灯片制作心得
  6. 基于BPMN2.0的工单系统架构设计(上)
  7. 局域网聊天软件的设计思路
  8. ANSI C typedef
  9. jni java c 变量对应_GitHub - jkangzhang/JNIDemo: JNI中Java和C的数据传递
  10. java打印杨辉三角_java算法之打印杨辉三角
  11. 解决手机浏览器顶部下拉出现网页源或刷新的问题
  12. [日推荐]『驾考宝典App』学车驾考必过宝典
  13. Tracepro 中LED光源模型建立(英文
  14. Hibernate一对多关联关系
  15. 04 可视化开发工具
  16. 黑苹果驱动_黑苹果怎么更新驱动程序?
  17. 基于Python将图片转换成素描图片
  18. 1分钟快速实现高效的扫描二维码,急速识别手机相册二维码
  19. LocalDateTime计算时间差
  20. 7-148 试试多线程 (10 分)

热门文章

  1. 2022 高通 SA8155P、SDM845平台 开源代码下载
  2. 多张图片轮播和展示的几种常见效果写法
  3. java提供ftp服务,搭建ftp服务
  4. 隐藏邮件头发件服务器,如何隐藏服务器真实IP,防止被攻击? | 老牛博客
  5. 蒂法html5游戏,腐团儿的蒂法,只适合晚上玩
  6. 如何学好日语五十音图?
  7. android自动打开软件下载,自动跳过app下载-自动跳过 安卓版v3.4.5-PC6安卓网
  8. latex tips 绝对值的竖线 \left|\right|
  9. java云控_云控 数据上传
  10. 第一章 零差云控关节模组介绍