ホームページ >バックエンド開発 >Python チュートリアル >videocaptureライブラリはPythonで動画高速転送プログラムを作成します

videocaptureライブラリはPythonで動画高速転送プログラムを作成します

WBOY
WBOYオリジナル
2016-06-16 08:45:482181ブラウズ

1. まず、ビデオデータ (カメラ画像) の収集は、通常、vc または vb の vfw を使用して実現できます。私はこのライブラリを使用するのが苦手なので、今は Python videocapture を使用します。このライブラリは次のように非常に簡単に使用できます:

コードをコピー コードは次のとおりです:

from VideoCapture import Device
cam = Device()
cam.setResolution (320,240) #ディスプレイ解像度を設定します
cam.saveSnapshot('demo.jpg') #画像をキャプチャして保存

このようにして、画像を取得します。
もちろん、比較的高速に画像を収集するには、毎回画像を保存することは不可能です。この方法では、画像を収集するのに 1 秒近くかかります。
より良い解決策は次のようになります: im = cam.getImage() はメモリ ブロックである Image オブジェクトを返し、その処理ははるかに高速です。 🎜>2. 写真を転送する方法は? pplive のようなビデオがどのように転送されるのかわかりません。私の考えは非常に単純で、一度に 1 枚の画像を転送します。
このプログラムでは、毎回 RGB 画像のサイズが転送されます。このように、必要なデータ量は次のとおりです: d = 160*120*3 = 56.25 kB
私は 80000B を選択します。
送信者コードは次のとおりです:

コードをコピー コードは次のとおりです:
インポートソケット
インポート画像
from VideoCapture import Device
cam = Device()
cam.setResolution(320,240)
clisocket =ソケット.socket(socket.AF_INET,ソケット.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 は最適化された高速グラフィックス ライブラリなので、directshow を使用したかどうかはわかりません。これを使うべきだったと思います。
pygame については、www.pygame.org を参照してください。
次は受信コードです。

コードをコピー コードは次のとおりです:
インポート ソケット
インポート イメージ
インポート os,sys, pygame
from pygame.locals import *
pygame.init()

screen = pygame.display.set_mode((160,120))
pygame.display.set_caption("ウェブカメラ")

pygame.display.flip()

svrsocket =ソケット.socket(socket.AF_INET,ソケット.SOCK_DGRAM)
svrsocket.bind(("127.0.0.1", 1234))
クロック = pygame .time.Clock() #フレーム レートを計算します
while 1:
data, address = svrsocket.recvfrom(80000)
camshot = pygame.image.frombuffer(data, (160,120), "RGB")
pygame.event.get() のイベントの場合:
ifevent.type == pygame.QUIT: sys.exit()
screen.blit(camshot, (0,0))
pygame.display.update()
print Clock.get_fps() #端末内のフレームレートを出力
Clock.tick()

プログラムがついに完成しました。便宜上、クライアントとサーバーの両方をローカル マシンに設定しました。

プログラムを実行すると、すごいですね。 230fps!(右側の端末)


videocaptureライブラリはPythonで動画高速転送プログラムを作成します

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。