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中 Lambda表达式全面解析
Nov 28 Python
Python实现将文本生成二维码的方法示例
Jul 18 Python
Python+matplotlib实现华丽的文本框演示代码
Jan 22 Python
Python实现的HMacMD5加密算法示例
Apr 03 Python
PyQt5 QSerialPort子线程操作的实现
Apr 21 Python
python将控制台输出保存至文件的方法
Jan 07 Python
扩展Django admin的list_filter()可使用范围方法
Aug 21 Python
python torch.utils.data.DataLoader使用方法
Apr 02 Python
python实现在内存中读写str和二进制数据代码
Apr 24 Python
浅析python 动态库m.so.1.0错误问题
May 09 Python
解决Python 写文件报错TypeError的问题
Oct 23 Python
PyTorch的Debug指南
May 07 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
PHP4和PHP5性能测试和对比 测试代码与环境
2007/08/17 PHP
UCenter Home二次开发指南
2009/05/28 PHP
php字符串分割函数explode的实例代码
2013/02/07 PHP
PHP PDOStatement::fetchColumn讲解
2019/01/31 PHP
laravel框架实现为 Blade 模板引擎添加新文件扩展名操作示例
2020/01/25 PHP
MacOS下PHP7.1升级到PHP7.4.15的方法
2021/02/22 PHP
JavaScript.The.Good.Parts阅读笔记(二)作用域&闭包&减缓全局空间污染
2010/11/16 Javascript
js修改原型的属性使用介绍
2014/01/26 Javascript
微信企业号开发之微信考勤百度地图定位
2015/09/11 Javascript
Angularjs中UI Router全攻略
2016/01/29 Javascript
Javascript中的迭代、归并方法详解
2016/06/14 Javascript
JavaScript注入漏洞的原理及防范(详解)
2016/12/04 Javascript
easyui combotree加载静态数据问题(选不上)解决方法
2016/12/26 Javascript
JavaScript实现简单的四则运算计算器完整实例
2017/04/28 Javascript
深究AngularJS中ng-drag、ng-drop的用法
2017/06/12 Javascript
vue数据操作之点击事件实现num加减功能示例
2019/01/19 Javascript
微信小程序表单验证插件WxValidate的二次封装功能(终极版)
2019/09/03 Javascript
layui给下拉框、按钮状态、时间赋初始值的方法
2019/09/10 Javascript
[37:45]完美世界DOTA2联赛PWL S3 LBZS vs Phoenix 第二场 12.09
2020/12/11 DOTA
Python字典及字典基本操作方法详解
2018/01/30 Python
用Python画一个LinkinPark的logo代码实例
2019/09/10 Python
python3图片文件批量重命名处理
2019/10/31 Python
python 爬取疫情数据的源码
2020/02/09 Python
使用python-pptx包批量修改ppt格式的实现
2020/02/14 Python
Python垃圾回收机制三种实现方法
2020/04/27 Python
Python-opencv实现红绿两色识别操作
2020/06/04 Python
Python类class参数self原理解析
2020/11/19 Python
Bravofly德国:预订廉价航班和酒店
2019/09/22 全球购物
建龙钢铁面试总结
2014/04/15 面试题
个性婚礼策划方案
2014/05/17 职场文书
人事经理岗位职责范本
2014/08/04 职场文书
公务员中国梦演讲稿
2014/08/19 职场文书
幼儿园感恩节活动总结
2015/03/24 职场文书
2015年综治维稳工作总结
2015/04/07 职场文书
美丽人生观后感
2015/06/03 职场文书
创业计划书之美容店
2019/09/16 职场文书