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 相关文章推荐
Python 不同对象比较大小示例探讨
Aug 21 Python
通过Python使用saltstack生成服务器资产清单
Mar 01 Python
浅谈Python中用datetime包进行对时间的一些操作
Jun 23 Python
Python中的字符串查找操作方法总结
Jun 27 Python
Python利用Beautiful Soup模块修改内容方法示例
Mar 27 Python
深入了解和应用Python 装饰器 @decorator
Apr 02 Python
如何基于python操作excel并获取内容
Dec 24 Python
Python 实现一行输入多个数字(用空格隔开)
Apr 29 Python
Python bisect模块原理及常见实例
Jun 17 Python
Python的控制结构之For、While、If循环问题
Jun 30 Python
Python Selenium库的基本使用教程
Jan 04 Python
python 爬取京东指定商品评论并进行情感分析
May 27 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
PHP实现邮件群发的源码
2013/06/18 PHP
完美实现wordpress禁止文章修订和自动保存的方法
2014/11/03 PHP
smarty中post用法实例
2014/11/28 PHP
支持中文、字母、数字的PHP验证码
2015/05/04 PHP
两种简单实现菜单高亮显示的JS类代码
2010/06/27 Javascript
基于JQuery的asp.net树实现代码
2010/11/30 Javascript
dtree 网页树状菜单及传递对象集合到js内,动态生成节点
2012/04/14 Javascript
JavaScript中的apply()方法和call()方法使用介绍
2012/07/25 Javascript
页面载入结束自动调用js函数示例
2013/09/23 Javascript
引用外部脚本时script标签关闭的写法
2014/01/20 Javascript
JavaScript数据类型详解
2015/04/01 Javascript
NodeJS的Promise的用法解析
2016/05/05 NodeJs
JS实现数组按升序及降序排列的方法
2017/04/26 Javascript
Vue 菜单栏点击切换单个class(高亮)的方法
2018/08/22 Javascript
详解处理Vue单页面应用SEO的另一种思路
2018/11/09 Javascript
详解koa2学习中使用 async 、await、promise解决异步的问题
2018/11/13 Javascript
使用js在layui中实现上传图片压缩
2019/06/18 Javascript
浅析webpack-bundle-analyzer在vue-cli3中的使用
2019/10/23 Javascript
Kettle中使用JavaScrip调用jar包对文件内容进行MD5加密的操作方法
2020/09/04 Javascript
Python之列表的插入&替换修改方法
2018/06/28 Python
对python字典元素的添加与修改方法详解
2018/07/06 Python
python 批量修改/替换数据的实例
2018/07/25 Python
python使用turtle绘制国际象棋棋盘
2019/05/23 Python
详解用pyecharts Geo实现动态数据热力图城市找不到问题解决
2019/06/26 Python
python安装dlib库报错问题及解决方法
2020/03/16 Python
Django Path转换器自定义及正则代码实例
2020/05/29 Python
如何理解python对象
2020/06/21 Python
python实现canny边缘检测
2020/09/14 Python
python实现简单的tcp 文件下载
2020/09/16 Python
一款纯css3实现的tab选项卡的实列教程
2014/12/11 HTML / CSS
html table呈现个人简历以及单元格宽度失效的问题解决
2021/01/22 HTML / CSS
九月份红领巾广播稿
2014/01/22 职场文书
路政管理毕业自荐书范文
2014/02/10 职场文书
合伙协议书范本
2014/04/21 职场文书
作文评语大全
2014/04/23 职场文书
企业计划生育责任书
2015/05/09 职场文书