videocapture库制作python视频高速传输程序


Posted in Python onDecember 23, 2013

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!(右边的终端)

videocapture库制作python视频高速传输程序

Python 相关文章推荐
在GitHub Pages上使用Pelican搭建博客的教程
Apr 25 Python
python实现将元祖转换成数组的方法
May 04 Python
利用python代码写的12306订票代码
Dec 20 Python
深入理解NumPy简明教程---数组2
Dec 17 Python
Python 模拟员工信息数据库操作的实例
Oct 23 Python
python编写分类决策树的代码
Dec 21 Python
连接pandas以及数组转pandas的方法
Jun 28 Python
对python中url参数编码与解码的实例详解
Jul 25 Python
python3 深浅copy对比详解
Aug 12 Python
一文轻松掌握python语言命名规范规则
Jun 18 Python
python使用nibabel和sitk读取保存nii.gz文件实例
Jul 01 Python
Django如何实现防止XSS攻击
Oct 13 Python
天翼开放平台免费短信验证码接口使用实例
Dec 18 #Python
python模拟登录百度贴吧(百度贴吧登录)实例
Dec 18 #Python
python抓取京东商城手机列表url实例代码
Dec 18 #Python
python获取糗百图片代码实例
Dec 18 #Python
python算法学习之计数排序实例
Dec 18 #Python
python算法学习之基数排序实例
Dec 18 #Python
python算法学习之桶排序算法实例(分块排序)
Dec 18 #Python
You might like
zend framework框架中url大小写问题解决方法
2014/08/19 PHP
WordPress主题中添加文章列表页页码导航的PHP代码实例
2015/12/22 PHP
PHP使用http_build_query()构造URL字符串的方法
2016/04/02 PHP
php命令行写shell实例详解
2018/07/19 PHP
Yii支持多域名cors原理的实现
2018/12/05 PHP
PHP 图片处理
2020/09/16 PHP
Javascript实例教程(19) 使用HoTMetal(3)
2006/12/23 Javascript
把html页面的部分内容保存成新的html文件的jquery代码
2009/11/12 Javascript
js客户端快捷键管理类的较完整实现和应用
2010/06/08 Javascript
手把手教你自己写一个js表单验证框架的方法
2010/09/14 Javascript
基于jQuery的左右滚动实现代码
2010/12/03 Javascript
Bootstrap每天必学之缩略图与警示窗
2015/11/29 Javascript
AngularJS中实现显示或隐藏动画效果的方式总结
2015/12/31 Javascript
JS实现支持Ajax验证的表单插件
2016/03/24 Javascript
浅谈js多维数组和hash数组定义和使用
2016/07/27 Javascript
详解网站中图片日常使用以及优化手法
2017/01/09 Javascript
canvas知识总结
2017/01/25 Javascript
浅谈angularJS的$watch失效问题的解决方案
2017/08/11 Javascript
js实现蒙版效果
2020/01/11 Javascript
openlayers 3实现车辆轨迹回放
2020/09/24 Javascript
[45:10]NB vs Liquid Supermajor小组赛 A组胜者组决赛 BO3 第二场 6.2
2018/06/04 DOTA
python实现杨辉三角思路
2017/07/14 Python
对Python中实现两个数的值交换的集中方法详解
2019/01/11 Python
Python将视频或者动态图gif逐帧保存为图片的方法
2019/09/10 Python
python中如何使用虚拟环境
2020/10/14 Python
html5桌面通知(Web Notifications)实例解析
2014/07/07 HTML / CSS
解决HTML5手机端页面缩放的问题
2017/10/27 HTML / CSS
高中体育教学反思
2014/01/24 职场文书
初一体育教学反思
2014/01/29 职场文书
网络工程师自荐书范文
2014/04/01 职场文书
大学新闻系自荐书
2014/05/31 职场文书
食品仓管员岗位职责
2015/04/01 职场文书
宿舍卫生管理制度
2015/08/05 职场文书
CSS 圆形进度栏
2021/04/06 HTML / CSS
springboot项目以jar包运行的操作方法
2021/06/30 Java/Android
mongodb数据库迁移变更的解决方案
2021/09/04 MongoDB