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实现dnspod自动更新dns解析的方法
Feb 14 Python
Python3指定路径寻找符合匹配模式文件
May 22 Python
Python工程师面试题 与Python基础语法相关
Jan 14 Python
Python实现将数据库一键导出为Excel表格的实例
Dec 30 Python
python+matplotlib绘制饼图散点图实例代码
Jan 20 Python
Python操作Excel插入删除行的方法
Dec 10 Python
使用python实现语音文件的特征提取方法
Jan 09 Python
Pytorch加载部分预训练模型的参数实例
Aug 18 Python
Pytorch: 自定义网络层实例
Jan 07 Python
解决pycharm每次打开项目都需要配置解释器和安装库问题
Feb 26 Python
如何用python开发Zeroc Ice应用
Jan 29 Python
用Python生成会跳舞的美女
Jan 18 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递归删除目录与文件的方法
2015/01/30 PHP
初识ThinkPHP控制器
2016/04/07 PHP
php安装php_rar扩展实现rar文件读取和解压的方法
2016/11/17 PHP
建议大家看下JavaScript重要知识更新
2007/07/08 Javascript
一段效率很高的for循环语句使用方法
2007/08/13 Javascript
AJAX异步从优酷专辑中采集所有视频及信息(JavaScript代码)
2010/11/20 Javascript
Jquery实现点击切换图片并隐藏显示内容(2种方法实现)
2013/04/11 Javascript
输入自动提示搜索提示功能的javascript:sugggestion.js
2013/09/02 Javascript
JS获取当前网址、主机地址项目根路径
2013/11/19 Javascript
js+canvas绘制矩形的方法
2016/01/28 Javascript
基于Bootstrap实现下拉菜单项和表单导航条(两个菜单项,一个下拉菜单和登录表单导航条)
2016/07/22 Javascript
Vue 进阶教程之v-model详解
2017/05/06 Javascript
gulp教程_从入门到项目中快速上手使用方法
2017/09/14 Javascript
深入浅出理解JavaScript高级定时器原理与用法
2018/08/02 Javascript
VUE在for循环里面根据内容值动态的加入class值的方法
2018/08/12 Javascript
vue多级复杂列表展开/折叠及全选/分组全选实现
2018/11/05 Javascript
Vue设置长时间未操作登录自动到期返回登录页
2020/01/22 Javascript
vue.js实现简单的计算器功能
2020/02/22 Javascript
JS 获取文件后缀,判断文件类型(比如是否为图片格式)
2020/05/09 Javascript
用vite搭建vue3应用的实现方法
2021/02/22 Vue.js
[01:41]DOTA2超级联赛专访YYF 称一辈子难忘TI2
2013/05/28 DOTA
[45:18]2018DOTA2亚洲邀请赛 4.3 突围赛 Optic vs iG 第一场
2018/04/04 DOTA
Python数据结构之栈、队列的实现代码分享
2017/12/04 Python
Django中的CBV和FBV示例介绍
2018/02/25 Python
Python 记录日志的灵活性和可配置性介绍
2018/02/27 Python
Python操作word常见方法示例【win32com与docx模块】
2018/07/17 Python
flask利用flask-wtf验证上传的文件的方法
2020/01/17 Python
python随机生成大小写字母数字混合密码(仅20行代码)
2020/02/01 Python
PyPDF2读取PDF文件内容保存到本地TXT实例
2020/05/12 Python
会计职业生涯规划书
2014/01/13 职场文书
2014年大学生工作总结
2014/11/20 职场文书
2015年事业单位办公室文员工作总结
2015/04/24 职场文书
信用卡工作证明范本
2015/06/19 职场文书
《我的伯父鲁迅先生》教学反思
2016/02/16 职场文书
SQL Server数据定义——模式与基本表操作
2021/04/05 SQL Server
python绘制箱型图
2021/04/27 Python