IPカメラストリームにアクセスするにはどうすればよいですか?
標準のWebカメラストリームを表示するためのコードは
import numpy as np
import cv2
cap = cv2.VideoCapture(0)
while(True):
ret, frame = cap.read()
cv2.imshow('frame',frame)
if cv2.waitKey(1) & 0xFF == ord('q'):
break
cap.release()
cv2.destroyAllWindows()
IPカメラを使用してまったく同じことを行うにはどうすればよいですか?
私のシステム:
ヘルプは高く評価されます
したがって、Python OpenCVでIPカメラにアクセスするための最も包括的な全体的な手順と思われるものを報告する自分の質問に答えます。
IPカメラの場合:
IP
アドレスを見つけますport
を見つけますprotocol
(HTTP/RTSPなど)を見つける次に、カメラが保護されている場合、次のことを確認します。
username
password
次に、データを使用して次のスクリプトを実行します。
"""Access IP Camera in Python OpenCV"""
import cv2
stream = cv2.VideoCapture('protocol://IP:port/1')
# Use the next line if your camera has a username and password
# stream = cv2.VideoCapture('protocol://username:password@IP:port/1')
while True:
r, f = stream.read()
cv2.imshow('IP Camera stream',f)
if cv2.waitKey(1) & 0xFF == ord('q'):
break
cv2.destroyAllWindows()
NOTE:私の元の質問では、Teledyne Dalsa Genie Nano XL Cameraで作業することを指定しています。残念ながら、この種のカメラでは、この通常のIPカメラビデオストリームへのアクセス方法は機能せず、Sapera SDKを使用してフレームを取得する必要がありますデバイス。
cv2.VideoCapture
のコンストラクターでカメラのストリーミングURLを提供することにより、opencvでIPカメラにアクセスできます。
通常、カメラはビデオをストリーミングするためにRTSPまたはHTTPプロトコルを使用します。 IPカメラストリーミングURLの例は次のとおりです。
rtsp://192.168.1.64/1
次のようにOpenCVで開くことができます。
capture = cv2.VideoCapture('rtsp://192.168.1.64/1')
ほとんどのIPカメラには、ビデオにアクセスするためのユーザー名とパスワードがあります。このような場合、次のように資格情報をストリーミングURLで提供する必要があります。
capture = cv2.VideoCapture('rtsp://username:[email protected]/1')
まず、RTSP/HTTPなどであるかどうかなど、IPカメラのストリーミングURLを見つけます。
コードの変更は次のとおりです。
cap = cv2.VideoCapture("ipcam_streaming_url")
例えば:
cap = cv2.VideoCapture("http://192.168.18.37:8090/test.mjpeg")
IPカメラ経由でビデオをストリーミングする最も簡単な方法!
あなたの例を編集します。 IPを置き換えて、リンクに/video
を追加する必要があります。そしてプロジェクトを進めてください
import cv2
cap = cv2.VideoCapture('http://192.168.18.37:8090/video')
while(True):
ret, frame = cap.read()
cv2.imshow('frame',frame)
if cv2.waitKey(1) & 0xFF == ord('q'):
cv2.destroyAllWindows()
break
これは私のIPカメラで動作します:
import cv2
#print("Before URL")
cap = cv2.VideoCapture('rtsp://admin:[email protected]/H264?ch=1&subtype=0')
#print("After URL")
while True:
#print('About to start the Read command')
ret, frame = cap.read()
#print('About to show frame of Video.')
cv2.imshow("Capturing",frame)
#print('Running..')
if cv2.waitKey(1) & 0xFF == ord('q'):
break
cap.release()
cv2.destroyAllWindows()
カメラのユーザー名(admin)とパスワード(123456)を追加し、URLのIPアドレス(admin:123456 @)の前に@記号を付けて終了したことに注意してください。
IPカメラのビデオリンクを取得するには:
IP
およびPORT
を指定してIPカメラを開きますIPカメラにアクセスするには、まず、通常のソフトウェアを使用して、コードなしで標準アプリケーションに使用するようにインストールすることをお勧めします。
この後、カメラごとに異なるコードがあることを知っておく必要があります。それらにアクセスするために使用できるコードを確認できるWebサイトがあります。
https://www.ispyconnect.com/sources.aspx
しかし、私のカメラ(Intelbras S3020)では機能しないので注意してください。正しい方法は、あなたのカメラの会社に尋ねることであり、彼らが良い会社であれば彼らはそれを提供します。
コードがわかったら、次のように追加します。
cap = cv2.VideoCapture("http://LOGIN:PASSWORD@IP/cgi-bin/mjpg/video.cgi?&subtype=1")
代わりにログインしてログイン名を入力し、代わりにパスワードを入力してパスワードを入力します。
カメラのIPアドレスを調べるには、ダウンロードしてIPアドレスを提供できるソフトウェアが多数あります。 Intelbrasのソフトウェアを使用していますが、購入したほぼすべてのカメラで動作するEseeCloudもお勧めします。
https://eseecloud.software.informer.com/1.2/
この例では、IPカメラにアクセスするためのプロトコルhttpを示していますが、rstpを使用することもできます。これは、先ほど述べたように、カメラによって異なります。
さらに質問がある場合はお知らせください。
以下のようにほとんどのIPカメラにアクセスできます
import cv2
path = "http://username:password@your_ip:your_port/tmpfs/auto.jpg"
while True:
cap = cv2.VideoCapture(path)
ret, frame = cap.read()
if not ret:
break
cv2.imshow('frame', frame)
key = cv2.waitKey(1) & 0xFF
if key == ord("q"):
break
cap.release()
cv2.destroyAllWindows()
しかし、画像にアクセスしているため、この方法がうまく機能するかどうかはわかりません。
pycharmでは、IPカメラにアクセスするためのコードを次のように書きました。
import cv2
cap=VideoCapture("rtsp://user_name:password@IP_address:port_number")
ret, frame=cap.read()
user_name
、password
、IP
、およびport
を適切な値に置き換える必要があります