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 相关文章推荐
tensorflow获取变量维度信息
Mar 10 Python
python 寻找list中最大元素对应的索引方法
Jun 28 Python
Sanic框架Cookies操作示例
Jul 17 Python
python实现在函数中修改变量值的方法
Jul 16 Python
python中的global关键字的使用方法
Aug 20 Python
Python高阶函数、常用内置函数用法实例分析
Dec 26 Python
python3正则模块re的使用方法详解
Feb 11 Python
Python3通过chmod修改目录或文件权限的方法示例
Jun 08 Python
python和php哪个容易学
Jun 19 Python
Python3爬虫中Ajax的用法
Jul 10 Python
区分python中的进程与线程
Aug 13 Python
Python3 使用pip安装git并获取Yahoo金融数据的操作
Apr 08 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/10/10 PHP
laravel框架中视图的基本使用方法分析
2019/11/23 PHP
javascript 二进制运算技巧解析
2012/11/27 Javascript
JQueryEasyUI datagrid框架的进阶使用
2013/04/08 Javascript
JS localStorage实现本地缓存的方法
2013/06/22 Javascript
各种页面定时跳转(倒计时跳转)代码总结
2013/10/24 Javascript
jQuery 回车事件enter使用示例
2014/02/18 Javascript
jquery实现表单输入时提示文字滑动向上效果
2015/08/10 Javascript
jquery实现动画菜单的左右滚动、渐变及图形背景滚动等效果
2015/08/25 Javascript
JS鼠标拖拽实例分析
2015/11/23 Javascript
AngularJS内建服务$location及其功能详解
2016/07/01 Javascript
基于JS实现的随机数字抽签实例
2016/12/08 Javascript
vue2.0嵌套路由实现豆瓣电影分页功能(附demo)
2017/03/13 Javascript
利用HBuilder打包前端开发webapp为apk的方法
2017/11/13 Javascript
原生JavaScript实现remove()和recover()功能示例
2018/07/24 Javascript
element-ui 时间选择器限制范围的实现(随动)
2019/01/09 Javascript
基于vue-cli、elementUI的Vue超简单入门小例子(推荐)
2019/04/17 Javascript
vue 动态设置img的src地址无效,npm run build 后找不到文件的解决
2020/07/26 Javascript
[45:25]OG vs EG 2019国际邀请赛淘汰赛 胜者组 BO3 第一场 8.22
2019/09/05 DOTA
Python实现监控程序执行时间并将其写入日志的方法
2015/06/30 Python
python 通过字符串调用对象属性或方法的实例讲解
2018/04/21 Python
python中bs4.BeautifulSoup的基本用法
2019/07/27 Python
Python从入门到精通之环境搭建教程图解
2019/09/26 Python
使用IDLE的Python shell窗口实例详解
2019/11/19 Python
python语音识别指南终极版(有这一篇足矣)
2020/09/09 Python
Python常用数字处理基本操作汇总
2020/09/10 Python
html5弹跳球示例代码
2013/07/23 HTML / CSS
全球最大的服务市场:Fiverr
2017/01/03 全球购物
美国在线医疗分销商:MedEx Supply
2020/02/04 全球购物
BIFFI美国站:意大利BIFFI BOUTIQUES豪华多品牌时装零售公司
2020/02/11 全球购物
用友笔试题目
2016/10/25 面试题
网络工程师的自我评价
2013/10/02 职场文书
市场调查策划方案
2014/06/10 职场文书
证券区域经理岗位职责
2015/04/10 职场文书
八年级作文之感恩
2019/11/22 职场文书
golang http使用踩过的坑与填坑指南
2021/04/27 Golang