videocapture庫制作python視頻高速傳輸程序
1,首先是視頻數(shù)據(jù)[攝像頭圖像]的采集,通??梢允褂胿fw在vc或者vb下實現(xiàn),這個庫我用的不好,所以一直不怎么會用.現(xiàn)在我們用到的是python的videocapture庫,這個庫用起來很簡單,如下:
from VideoCapture import Device
cam = Device()
cam.setResolution(320,240) #設置顯示分辨率
cam.saveSnapshot('demo.jpg') #抓取并保存圖片
這樣,你就得到了一張圖片.
當然,要實現(xiàn)比較高速的采集,每次都要保存圖片是不大可能的,這樣弄下來每次采集一張圖片已經(jīng)接近1秒鐘,這個速度我們是無法忍受的.
更好的解決方式是直接這樣: im = cam.getImage(),返回的是一個Image對象,是一個內存塊,對它操作就快速多了.
2,如何傳輸圖片?我不知道pplive這種視頻是怎么傳輸?shù)?我的想法很簡單,每次傳送一幅圖片.
在本程序中,每次傳送的RGB圖像的大小為 160*120.這樣,需要的數(shù)據(jù)量為:d = 160*120*3 = 56.25 kB
我選擇80000B.
下面是發(fā)送端代碼:
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是經(jīng)過優(yōu)化的高速圖形庫,不知道有沒有使用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!(右邊的終端)
相關文章
python中dir()與__dict__屬性的區(qū)別淺析
這篇文章主要給大家介紹了關于python中dir()與__dict__屬性的區(qū)別的相關資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2018-12-12已解決不小心卸載pip后怎么處理(重新安裝pip的兩種方式)
這篇文章主要介紹了已解決不小心卸載pip后怎么處理(重新安裝pip的兩種方式),本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2023-04-04