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 相关文章推荐
Django框架中的对象列表视图使用示例
Jul 21 Python
python UNIX_TIMESTAMP时间处理方法分析
Apr 18 Python
python实现画一颗树和一片森林
Jun 25 Python
Python3实现的旋转矩阵图像算法示例
Apr 03 Python
详解python中递归函数
Apr 16 Python
pytorch中torch.max和Tensor.view函数用法详解
Jan 03 Python
python中使用you-get库批量在线下载bilibili视频的教程
Mar 10 Python
解决matplotlib.pyplot在Jupyter notebook中不显示图像问题
Apr 22 Python
python实现飞船游戏的纵向移动
Apr 24 Python
django 数据库 get_or_create函数返回值是tuple的问题
May 15 Python
python+opencv3.4.0 实现HOG+SVM行人检测的示例代码
Jan 28 Python
Python查找算法的实现 (线性、二分,分块、插值查找算法)
Apr 24 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
音乐朗读剧《MARS RED》2021年TV动画化决定!
2020/03/06 日漫
php中文字母数字验证码实现代码
2008/04/25 PHP
PHP分页类集锦
2014/11/18 PHP
PHP cURL初始化和执行方法入门级代码
2015/05/28 PHP
WordPress中Gravatar头像缓存到本地及相关优化的技巧
2015/12/19 PHP
解析PHP的Yii框架中cookie和session功能的相关操作
2016/03/17 PHP
Yii框架中使用PHPExcel的方法分析
2019/07/25 PHP
php中Swoole的热更新实现代码实例
2021/03/04 PHP
利用JQuery为搜索栏增加tag提示
2009/06/22 Javascript
javascript时间自动刷新实现原理与步骤
2013/01/06 Javascript
jQuery+ajax中getJSON() 用法实例
2014/12/22 Javascript
javascript验证邮件地址和MX记录的方法
2015/06/16 Javascript
深入浅析JavaScript中的作用域和上下文
2016/03/26 Javascript
JavaScript Uploadify文件上传实例
2017/02/28 Javascript
js实现音频控制进度条功能
2017/04/01 Javascript
JS+HTML5 FileReader对象用法示例
2017/04/07 Javascript
Vue中的Vux配置指南
2017/12/08 Javascript
vue一个页面实现音乐播放器的示例
2018/02/06 Javascript
JS中的事件委托实例浅析
2018/03/22 Javascript
js传递数组参数到后台controller的方法
2018/03/29 Javascript
JS 正则表达式验证密码、邮箱格式的实例代码
2018/10/28 Javascript
VUE2.0 ElementUI2.0表格el-table自适应高度的实现方法
2018/11/28 Javascript
JS禁用右键、禁用Ctrl+u、禁用Ctrl+s、禁用F12的实现代码
2020/12/01 Javascript
用Python实现通过哈希算法检测图片重复的教程
2015/04/02 Python
我们为什么要减少Python中循环的使用
2019/07/10 Python
python使用pygame实现笑脸乒乓球弹珠球游戏
2019/11/25 Python
基于Keras的格式化输出Loss实现方式
2020/06/17 Python
python mock测试的示例
2020/10/19 Python
PyCharm Ctrl+Shift+F 失灵的简单有效解决操作
2021/01/15 Python
澳大利亚第一的设计师礼服租赁网站:GlamCorner
2017/08/13 全球购物
团代会主持词
2014/04/02 职场文书
环保公益策划方案
2014/08/15 职场文书
三八红旗手先进事迹材料(2016推荐版)
2016/02/25 职场文书
如果用一句诗总结你的上半年,你会用哪句呢?
2019/07/16 职场文书
十大最强奥特曼武器:怪兽战斗仪在榜,第五奥特之父只使用过一次
2022/03/18 日漫
CSS实现鼠标悬浮动画特效
2023/05/07 HTML / CSS