ある施設の人数カウントを行うためにネットワークカメラ(TP-Link Tapo C210)を購入しました。
本投稿ではPythonを利用してネットワークカメラのストリーミング動画を取得する方法を紹介します。
購入したカメラ
今回購入したカメラはTP-Link Tapo C210という機種になります。
ただし本投稿で紹介する方法は、後述するRTSP対応カメラであれば同様に進められるはずです。
ネットワークカメラの選定にも興味がある方は以下の記事もご覧いただけると嬉しいです。
システムと組み合わせて人数カウントができるネットワークカメラの選定事前知識の簡単な紹介
今回はPythonからネットワークカメラのストリーミング動画を取得するために、RTSPというものを利用します。
RTSPとは、映像・音声のリアルタイムなストリーミング配信を制御する為のプロトコル(ルール)になります。
RTSP対応のカメラを選ぶことで、外部のアプリやプログラムからカメラのストリーミング動画を取得できるようになります。
ちなみにRTSPはReal Time Streaming Protocolの略になります。
ストリーミング動画の取得手順
まずはRTSPに必要なユーザーネームとパスワードを設定します。
Tapo C210については公式サイトにて設定方法が紹介されていますので、そちらを参考に進めます。
Tapo以外のカメラをご利用の方は、各メーカーのページを探してみてください。
インストールするモジュールは以下になります。
> python -m venv env
(env) > pip install rtsp
(env) > pip install --upgrade onvif_zeep
ソースコードはこちらです。
import rtsp
import time
def get_tapo_cam_frame():
# RTSP params
USER = 'username'
PASS = 'password'
IPADDR = '192.168.0.0'
RTSP_PORT = '554'
STREAM = 'stream1' # stream1:1080p, 2:stream2:360p
# RTSP setup
rtsp_url = f'rtsp://{USER}:{PASS}@{IPADDR}:{RTSP_PORT}/{STREAM}'
client = rtsp.Client(rtsp_server_uri=rtsp_url, verbose=True)
time.sleep(1)
# get frame
frame = client.read()
return frame
get_tapo_cam_frame()
上記プログラムの出力はこちらになります。
ソースコードのテスト実行はjupyter notebook上で行っております。
上記の画像におけるカメラと被写体の位置関係はこのような形で撮っています。
まとめ
今回はPythonとRTSPを用いて、ネットワークカメラのストリーミング動画を取得しました。
ご意見やご質問がありましたらお気軽によろしくお願いします。コメントお待ちしております!