videocapture庫製作python視頻高速傳輸程式_python

來源:互聯網
上載者:User

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!(右邊的終端)


聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.