1
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?

More than 1 year has passed since last update.

ラズパイで子供の寝相監視をした時のログと、参考にした記事のまとめ【前編】

Posted at

はじめに

もうすぐ2歳になる子供が家に滞在していたので、せっかくなので寝相をとって動画にして、みんなで楽しむことにした。
そのときに行ったことのまとめ。

使用機器

項目 内容
ラズパイ Rapsberry Pi4 4GBモデル
カメラ よくある暗視カメラ
SDカード容量 32GB

初期設定

ラズパイを買ったのは相当昔で、初期設定自体は何を参考にしていたかは忘れてしまった。

特筆するようなことはしていないので、このページのような記事を参考にしておけば良さそうである。

方針

今回は次のような方針で動画を作成することにした。

  1. Pythonでカメラを制御し、一定の間隔で画像を撮影するコードを作る
  2. 遠隔制御し、1のコードを起動する
  3. 撮影した動画をメインの環境(Windows)にコピーする
  4. メイン環境にて動画化
  5. みんなで楽しむ

記事が長くなりそうだったので、2までで区切ることにする

カメラ制御方法

Pythonでカメラを制御する時のサンプルは公式が一番わかり易いと思う。

Pythonコードでカメラモジュールをコントロールする方法を参考にして、まずはカメラの動作確認をしたところ、かなりぼやけた内容の画像が取れていた。

今回のカメラモジュールの場合、レンズの部分がネジ式になっていて、手動で焦点距離を変えられるようだった。
ピントが合う部分を把握してから、レンズの部分を回転させてピントの調整を行おう。

ピント調整なども含めたコードは下記のとおりになった。

camera.py

from picamera import PiCamera
from time import sleep
import datetime

DEBUG = False

TIMESPAN = 2

WAIT = TIMESPAN / 5

with PiCamera() as camera:
    if DEBUG:
        camera.start_preview()
        _ = input()
        camera.stop_preview()
    
    check_time = datetime.datetime.now()
    
    count = 0
    
    while check_time.hour >= 20 or check_time.hour <= 6:
        while datetime.datetime.now().second != (check_time.second + TIMESPAN) % 60:
            sleep(WAIT)
        check_time = datetime.datetime.now()
        camera.capture(f"{check_time:%d%H%M%S}.jpg")
        count += 1
        print(count)
        if DEBUG and count > 100:
            break

保存ファイル名を日付を含めている(check_time:%d%H%M%Sとしている)のは、
時間までだとファイル名をソートしたときに24時のファイルが一番最初に来てしまうから。
月をまたぐことはなかったのと、時間を簡単に確認できるようにしておく方が
動画を見ながら話すときにやりやすいとおもってUNIX時間の採用はしなかった。

理論上、一度の撮影に1秒以上かかると1分待たされる可能性が出てくるが、事前検証(GUI上で一晩動かして見てのテスト)では問題なかったためこのまま使用した。
なお、事前検証では撮影間隔を1秒にしていたが、32GBのSDでは容量が足りなかった。

これの対策について色々検証したが最終的に撮影間隔を2秒にする対応に落ち着いた。
検証記録は別途記事にまとめることにする。

遠隔操作によるコード起動

遠隔操作によるコードの起動方法はいくつかあるが、TeratermでSSHでラズパイに接続するのが一番手軽そうだった。
とりあえずTeratermを落としても実行し続ける方法を確認してから、ソースコードのあるフォルダに移動して、sudo nohup python camera.pyをすると…何が起きたかはよくわからないが一瞬で終了した。

(※後で知ったが、最後に&をつけるとバックグラウンドで実行できるようだった。
今回はコードを実行することだけが目的だったことと異常終了の検知ができたことからフォアグラウンド実行でも問題は出なかった。)

cat nohup.logすると、次のような表記。

  File "camera.py", line 25
    camera.capture(f"{check_time:%d%H%M%S}.jpg")
                                              ^
SyntaxError: invalid syntax

IDEで作業していたPythonでは対応していた新しい記法が使えないPythonを使おうとしていたようだ。
試しにpythonしてみると…?

Python 2.7.16 (default, Oct 10 2019, 22:02:15)
[GCC 8.3.0] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>>

今後pythonを使う場合はPython3系しか使わないと思うので、対応方法の記事を参考にして、pythonをpython3に紐づけておいた。

もう一度実行して翌朝、ls | wc -lでファイル数を調べることによって、期待通りのファイルが出力されていることを確認した。

記事が長くなりそうなため、一旦ここで区切ることにする。

1
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
1
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?