![見出し画像](https://assets.st-note.com/production/uploads/images/171351007/rectangle_large_type_2_6e382593fd21893f7d675f34da511900.png?width=1200)
Tapoカメラから静止画を取得する
概要
IPカメラ等のRTSPストリームから先頭の画像を静止画(jpeg/png)として取得します。
静止画取得のAPIが用意されていないカメラでも、RTSPは対応している場合が多いので、有効な方法だと思います。
仮想環境の作成とライブラリのインストール
最初に仮想環境を作り、アクティブにします。
$ python -m venv .venv
$ source .venv/bin/activate
OpenCV をインストールします。
$ pip install opencv-python
プログラム
以下のプログラムを rtspimage.py として保存します。
import cv2
import sys
def get_image_from_rtsp(url):
cap = cv2.VideoCapture(url)
if not cap.isOpened():
return None
ret, frame = cap.read()
cap.release()
cv2.destroyAllWindows()
if not ret:
return None
return frame
def main():
url = sys.argv[1] # rtsp://username:password@192.168.1.45:554/stream2
out_filename = sys.argv[2]
frame = get_image_from_rtsp(url)
if len(frame) > 0:
cv2.imwrite(out_filename, frame)
else:
print('error')
main()
静止画の取得
URLの準備
TP-LINKのIPカメラ、Tapoの場合は以下のようになります。
rtsp://(ユーザー名):(パスワード)@(カメラのIPアドレス)/stream1
ユーザー名とパスワードは「カメラのアカウント」のユーザー名とパスワードです。
カメラのアカウントはスマホアプリの「デバイス設定」「高度な設定」「カメラのアカウント」から設定します。
末尾の stream1 は高解像度(1920x1080)、stream2 に変えることで低解像度(640x360)となります。
実行
$ python rtspimage.py URL 出力ファイル名
出力ファイル名は filename.jpg か filename.png の形で指定可能です。
TP-LINK以外のカメラのURL
他のメーカーのIPカメラでもたいていはRTSPをサポートしているので、URLさえ分れば可能です。
Ctronics
rtsp://ユーザー名:パスワード@IPアドレス:554/11
AXIS
rtsp://ユーザー名:パスワード@IPアドレス:554/axis-media/media.amp
いいなと思ったら応援しよう!
![R-Y-O](https://assets.st-note.com/production/uploads/images/55212934/profile_7a6381aeff3ebe51b3fd0d85ee2c2849.png?width=600&crop=1:1,smart)