Pythonを使用してOpenCVの学習を開始したばかりで、最初のチュートリアルは、内蔵のラップトップWebカメラまたは外部Webカメラのいずれかを使用してビデオをキャプチャすることから始まります。 my Android Smartphoneのカメラを使用し、IPを使用してそのビデオをキャプチャしてさらに処理することができます。
私のスマートフォン:Moto E
OS:Windows 7
言語:Python
Androidアプリケーション:IP Webcam
私はネットを広範囲に検索しましたが、有効な解決策を見つけることができません。そのため、IP Webcamを使用してスマートフォンからビデオをキャプチャする方法について誰でも私に案内してください。
コードを投稿しないで申し訳ありません。私はこのフィールドに興味があるだけなので、まったく無知です。
ありがとう。
Python OpenCV using urllib and numpy;)へのAndroid 'IP Webcam'アプリビデオストリームのインポート
import urllib
import cv2
import numpy as np
import time
# Replace the URL with your own IPwebcam shot.jpg IP:port
url='http://192.168.2.35:8080/shot.jpg'
while True:
# Use urllib to get the image and convert into a cv2 usable format
imgResp=urllib.urlopen(url)
imgNp=np.array(bytearray(imgResp.read()),dtype=np.uint8)
img=cv2.imdecode(imgNp,-1)
# put the image on screen
cv2.imshow('IPWebcam',img)
#To give the processor some less stress
#time.sleep(0.1)
if cv2.waitKey(1) & 0xFF == ord('q'):
break
これは、さまざまな理由から、おそらく予想よりもはるかに困難です。
1つ目は帯域幅です。 rawビデオ(640x480ピクセル、チャネルあたり8ビット、秒あたり30フレーム)の適度なストリームには、200 mbps程度の帯域幅が必要です。 USB(2)はこれらの速度に簡単に到達できますが、信頼性の高いワイヤレス接続を見つけるのは難しいでしょう。
今あなたは考えているかもしれません
どうして私は電話で1080pのインターネットビデオをまったく問題なく見ることができるのですか?
ネットワークを介して送信される実質的にすべてのビデオは、MPEG4、H.264、VP8などの特殊なアルゴリズムを使用して圧縮されます。これらのアルゴリズムは、ビデオの送信に必要な帯域幅を大幅に削減します。
すごい!次に、電話からのビデオをライブで圧縮して、コンピューターにストリーミングします
そんなに早くない!これには主に2つの問題があります。
1つ目は、ビデオデータの量をこのように大幅に削減するために、ビデオコンプレッサー(エンコーダー)が大量の処理能力を費やしてビデオを処理する必要があることです。タスクに使用できる解像度とフレームレートでビデオをエンコードするのに十分なCPU能力(または専用のハードウェア)が携帯電話にないことがわかるでしょう。
それを解決するおよび仕事をするアプリを見つけた場合、2番目の問題は、(エンコードされた)ビデオデータをOpenCVで取得するために、それを解読する!ビデオファイルをデコードするための簡単に利用できるソフトウェアを見つけることができますが、ビデオのライブストリームをデコードするには、デコードを実行するようにソフトウェアをプログラムする必要があります(ライブラリまたは OpenCV自体 を使用することが望ましい)。
この時点で、15ドルをWebカメラに費やしていなかったのを呪い、後悔することになります(しかし、その過程で多くの興味深いことを学びました:)
Android Video: のライブブロードキャストを行うレポです。
このスレッドは古いように見えますが、私の答えを追加したいだけです。したがって、これはpython 3.5、OpenCV 3.2およびAndroid app "IP WEB CAM"でタスクを達成する方法でした。URL( http://192.168.0.103:808 )get関数内のアドレスは、ip web cam appによって提供されるストリーミングアドレスです。
import requests
import numpy as np
import cv2
while True:
img_res = requests.get("http://192.168.0.103:8080/shot.jpg")
img_arr = np.array(bytearray(img_res.content), dtype = np.uint8)
img = cv2.imdecode(img_arr,-1)
cv2.imshow('frame', img)
if cv2.waitKey(1) & 0xFF == ord('q'):
break
cv2
のVideoCapture
メソッドには、IP Webcamアプリに表示されるストリーミングURLを渡します。これがサンプルコードです:
注:
/video
IP Webcamアプリの場合、URLのサフィックスが必要です。ブラウザで元のURLページを調べて、これを理解していました。
import cv2
url = "http://192.168.43.1:8080" # Your url might be different, check the app
vs = cv2.VideoCapture(url+"/video")
while True:
ret, frame = vs.read()
if not ret:
continue
# Processing of image and other stuff here
cv2.imshow('Frame', frame)
if cv2.waitKey(1) & 0xFF == ord('q'):
break