基于python实现高速视频传输程序


Posted in Python onMay 05, 2019

今天要说的是一个高速视频流的采集和传输的问题,我不是研究这一块的,没有使用什么算法,仅仅是兴趣导致我很想搞懂这个问题.

    1,首先是视频数据[摄像头图像]的采集,通常可以使用vfw在vc或者vb下实现,这个库我用的不好,所以一直不怎么会用.现在我们用到的是python的videocapture库,这个库用起来很简单,如下:

from VideoCapture import Device
cam = Device()
cam.setResolution(320,240)  #设置显示分辨率
cam.saveSnapshot('demo.jpg') #抓取并保存图片

  这样,你就得到了一张图片.

    当然,要实现比较高速的采集,每次都要保存图片是不大可能的,这样弄下来每次采集一张图片已经接近1秒钟,这个速度我们是无法忍受的.

更好的解决方式是直接这样: im = cam.getImage(),返回的是一个Image对象,是一个内存块,对它操作就快速多了.

    2,如何传输图片?我不知道pplive这种视频是怎么传输的,我的想法很简单,每次传送一幅图片.

在本程序中,每次传送的RGB图像的大小为 160*120.这样,需要的数据量为:

       d = 160*120*3 = 56.25 kB

    我选择80000B.

    下面是发送端代码:

import socket
import Image
from VideoCapture import Device
cam = Device()
cam.setResolution(320,240)
clisocket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
while 1:
  im = cam.getImage()
  im = im.resize((160,120))
  da = im.tostring()
  clisocket.sendto(da, ("127.0.0.1", 1234))
s.close()

    3,如何实时显示图片?

    我使用了pygame作为实时图像显示界面,因为pygame是经过优化的高速图形库,不知道有没有使用directshow,我想应该用了吧..

    关于pygame请参考 www.pygame.org

    下面是接收端代码:   

import socket
import Image
import os,sys,pygame
from pygame.locals import *
pygame.init()
screen = pygame.display.set_mode((160,120))
pygame.display.set_caption("web cam")
pygame.display.flip()
svrsocket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
svrsocket.bind(("127.0.0.1", 1234))
clock = pygame.time.Clock()  #计算帧速
while 1:
  data, address = svrsocket.recvfrom(80000)
  camshot = pygame.image.frombuffer(data, (160,120), "RGB")
  for event in pygame.event.get():
      if event.type == pygame.QUIT: sys.exit()
  screen.blit(camshot, (0,0))
  pygame.display.update() 
  print clock.get_fps()   #在终端打印帧速
  clock.tick()

    程序终于完成了,测试一下效果怎么样把,为了方便,我把客户端和服务端都设成了本机,端口为1234.

    运行程序,哇,简直不可思议,最高竟然达到230fps!(右边的终端)

总结

以上所述是小编给大家介绍的基于python实现高速视频传输程序,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!
如果你觉得本文对你有帮助,欢迎转载,烦请注明出处,谢谢!

Python 相关文章推荐
Python 列表list使用介绍
Nov 30 Python
python中循环语句while用法实例
May 16 Python
python安装numpy&安装matplotlib& scipy的教程
Nov 02 Python
Python获取指定字符前面的所有字符方法
May 02 Python
详解Django CAS 解决方案
Oct 30 Python
Python实现socket非阻塞通讯功能示例
Nov 06 Python
Tensorflow限制CPU个数实例
Feb 06 Python
Django models filter筛选条件详解
Mar 16 Python
Python中常见的数制转换有哪些
May 27 Python
python Gabor滤波器讲解
Oct 26 Python
python 实现汉诺塔游戏
Nov 28 Python
pytorch中的numel函数用法说明
May 13 Python
Python远程视频监控程序的实例代码
May 05 #Python
Python统计一个字符串中每个字符出现了多少次的方法【字符串转换为列表再统计】
May 05 #Python
20行python代码实现人脸识别
May 05 #Python
使用python实现mqtt的发布和订阅
May 05 #Python
Python向excel中写入数据的方法
May 05 #Python
python使用pandas处理大数据节省内存技巧(推荐)
May 05 #Python
python使用MQTT给硬件传输图片的实现方法
May 05 #Python
You might like
PHP令牌 Token改进版
2008/07/18 PHP
php数组函数序列之array_key_exists() - 查找数组键名是否存在
2011/10/29 PHP
PHP文件上传主要代码讲解
2013/09/30 PHP
php防止sql注入示例分析和几种常见攻击正则表达式
2014/01/12 PHP
laravel开发环境homestead搭建过程详解
2020/07/03 PHP
查询绑定数据岛的表格中的文本并修改显示方式的js代码
2009/12/15 Javascript
JS+CSS实现可拖动的弹出提示框
2015/02/16 Javascript
jquery实现公告翻滚效果
2015/02/27 Javascript
JavaScript的RequireJS库入门指南
2015/07/01 Javascript
javascript实现的登陆遮罩效果汇总
2015/11/09 Javascript
基于jQuery实现返回顶部实例代码
2016/01/01 Javascript
用Vue.js实现监听属性的变化
2016/11/17 Javascript
js实现页面刷新滚动条位置不变
2016/11/27 Javascript
javascript常用的设计模式
2017/02/09 Javascript
bootstrap jquery dataTable 异步ajax刷新表格数据的实现方法
2017/02/10 Javascript
js数字计算 误差问题的快速解决方法
2017/02/28 Javascript
基于angular2 的 http服务封装的实例代码
2017/06/29 Javascript
MVVM框架下实现分页功能示例
2018/06/14 Javascript
vue实现局部刷新的实现示例
2019/04/16 Javascript
JS实现多功能计算器
2020/10/28 Javascript
javascript实现京东快递单号的查询效果
2020/11/30 Javascript
Python中字典和JSON互转操作实例
2015/01/19 Python
python批量读取文件名并写入txt文件中
2020/09/05 Python
使用python turtle画高达
2020/01/19 Python
python实现FTP循环上传文件
2020/03/20 Python
Keras 使用 Lambda层详解
2020/06/10 Python
读取nii或nii.gz文件中的信息即输出图像操作
2020/07/01 Python
Baracuta官方网站:Harrington夹克,G9,G4,G10等
2018/03/06 全球购物
俄罗斯购买剧院和演唱会门票网站:Parter.ru
2019/11/09 全球购物
银行求职自荐书
2014/06/25 职场文书
五年级学生期末评语
2014/12/26 职场文书
小学入学感言
2015/08/01 职场文书
《鸟的天堂》教学反思
2016/02/19 职场文书
详解Laravel框架的依赖注入功能
2021/05/27 PHP
vue+elementui 实现新增和修改共用一个弹框的完整代码
2021/06/08 Vue.js
阿里云服务器部署RabbitMQ集群的详细教程
2022/06/01 Servers