0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

監視カメラ ステップ

Last updated at Posted at 2024-12-28

cv2の cap.read()がどうしても動かないので、libcameraコマンドを実行するように変更。
そぞらさん(https://sozorablog.com/camera_shooting/#toc2)
から、「V3を使用するには、公式のライブラリであるPicamera2を使用する必要があります。」との回答あり。
色々と考えたが、libcameraコマンドを呼ぶ方法とした。
参考サイト これはRPZ-IR-Sencer のサイト。ここにサンプルコーデイングがあるので、引用&加工。
https://www.indoorcorgielec.com/resources/raspberry-pi/pir-camera/

ますはひまじんがジムで不在の9:30ー11:30の間にだれがが侵入した場合、動画をとるように作成。
画像もパラメータ変更でとれます。
cronで9;30に実行して、2Hで終了させるpython 作成。
参考サイトのpythonを加工して以下で、camara_jinkan.pyで保存して確認。
これは動画でも画像でもとれるようになっています。

#!/usr/bin/env python3
import RPi.GPIO as GPIO
import os
import time
import datetime
import subprocess

GPIO_PIN = 18

GPIO.setmode(GPIO.BCM)
GPIO.setup(GPIO_PIN,GPIO.IN)

# 時間計測開始
t_start = time.perf_counter()

# オプション
#  HQカメラの場合
#   写真の最大サイズは4056x3040
#   動画(H.264)の最大サイズは1920x1080, 最大画角は1440x1080
image_size = (1440, 1080)  # 撮影サイズの横幅, 高さ
mode = 'movie'  # 写真なら'photo', 動画なら'movie'
# pi5 = False  # Raspberry Pi 5の場合True, それ以外はFalse (動画撮影の手順が異なる)
save_dir = '/home/pi'  # 写真や動画を保存するディレクトリ
# interval = 60  # 1度撮影した後、再開するまでのインターバル時間[秒]
movie_duration = 10  # 動画の撮影時間[秒]

while True:
# 現在時刻取得
    t_end = time.perf_counter()
# 経過時間計算
    elaps = t_end - t_start
# 2H超えたらブレーク    
    if elaps > 7200:
        break
    print(elaps)
    if(GPIO.input(GPIO_PIN) == GPIO.HIGH):
       print("man search")
       dt = datetime.datetime.now()
       if mode == 'photo':
            save_file = os.path.join(save_dir, dt.strftime('%y_%m%d_%H%M_%S.jpg'))
            subprocess.run([
                'libcamera-still', '-n', '-o',
                os.path.join(save_file), '-t', '1', '--width',
                str(image_size[0]), '--height',
                str(image_size[1])
                ])
            time.sleep( 10 )
            break
       elif mode == 'movie':
            save_file = os.path.join(save_dir, dt.strftime('%y_%m%d_%H%M_%S.mkv'))
            h264_file = os.path.join(save_dir, 'tmp.h264')
            pts_file = os.path.join(save_dir, 'tmp.txt')
            subprocess.run([
                'libcamera-vid', '-n', '-o', h264_file, '--save-pts', pts_file, '-t',
                str(movie_duration * 1000), '--width',
                str(image_size[0]), '--height',
                str(image_size[1])
                ])
            subprocess.run(['mkvmerge', '-o', save_file, '--timecodes', '0:' + pts_file, h264_file])
            os.remove(h264_file)
            os.remove(pts_file)
            time.sleep( 10 )
            break
    else:
        print("man no search")
        time.sleep( 1 )
GPIO.cleanup()

これで OK。 

クーロンの登録

sudo crontab -e

ひまじんの不在タイミングに合わせて実行。
30 9 * * * /usr/bin/python3 /home/pi/camera_jinkan.py

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?