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 连连看连接算法
Nov 22 Python
Python 文件和输入输出小结
Oct 09 Python
Python判断字符串是否为字母或者数字(浮点数)的多种方法
Aug 03 Python
Python 新建文件夹与复制文件夹内所有内容的方法
Oct 27 Python
浅谈python实现Google翻译PDF,解决换行的问题
Nov 28 Python
python 阶乘累加和的实例
Feb 01 Python
基于Python的Post请求数据爬取的方法详解
Jun 14 Python
tensorflow之并行读入数据详解
Feb 05 Python
python连接打印机实现打印文档、图片、pdf文件等功能
Feb 07 Python
关于Tensorflow 模型持久化详解
Feb 12 Python
python3 配置logging日志类的操作
Apr 08 Python
详解Python牛顿插值法
May 11 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
重置版战役片段
2020/04/09 魔兽争霸
Search Engine Friendly的URL设计
2006/10/09 PHP
MayFish PHP的MVC架构的开发框架
2009/08/13 PHP
PHP 在5.1.* 和5.2.*之间 PDO数据库操作中的不同之处小结
2012/03/07 PHP
分享一个Laravel好用的Cache宏
2015/03/02 PHP
php根据指定位置和长度获得子字符串的方法
2015/03/17 PHP
Symfony2针对输入时间进行查询的方法分析
2017/06/28 PHP
swoole和websocket简单聊天室开发
2017/11/18 PHP
传智播客学习之JavaScript基础篇
2009/11/13 Javascript
JavaScript高级程序设计 阅读笔记(十七) js事件
2012/08/14 Javascript
JS获取Table中td值的方法
2015/03/19 Javascript
jQuery实现的Div窗口震动效果实例
2015/08/07 Javascript
javascript获取以及设置光标位置
2017/02/16 Javascript
Angular利用trackBy提升性能的方法
2018/01/26 Javascript
JS构造一个html文本内容成文件流形式发送到后台
2018/07/31 Javascript
如何将HTML字符转换为DOM节点并动态添加到文档中详解
2018/08/19 Javascript
JavaScript实现串行请求的示例代码
2020/09/14 Javascript
[02:49:21]2019完美盛典全程录像
2019/12/08 DOTA
Ruby使用eventmachine为HTTP服务器添加文件下载功能
2016/04/20 Python
Tensorflow实现卷积神经网络用于人脸关键点识别
2018/03/05 Python
Python基于递归和非递归算法求两个数最大公约数、最小公倍数示例
2018/05/21 Python
浅谈利用numpy对矩阵进行归一化处理的方法
2018/07/11 Python
python如何基于redis实现ip代理池
2020/01/17 Python
html5版canvas自由拼图实例
2014/10/15 HTML / CSS
世界上最大的网络主机公司:1&1
2016/10/12 全球购物
JoJo Maman Bébé爱尔兰官网:英国最受欢迎的精品母婴品牌
2020/12/20 全球购物
求职简历自荐信范文
2013/10/21 职场文书
服务行业个人求职的自我评价
2013/12/12 职场文书
车间操作工岗位职责
2013/12/19 职场文书
教师党员思想汇报
2014/01/06 职场文书
个人公开承诺书
2014/03/28 职场文书
硕士学位申请报告
2015/05/15 职场文书
法律讲堂观后感
2015/06/11 职场文书
母亲节主题班会
2015/08/14 职场文书
2019个人工作态度自我评价
2019/04/24 职场文书
Nginx如何限制IP访问只允许特定域名访问
2022/07/23 Servers