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?

More than 3 years have passed since last update.

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

Last updated at Posted at 2021-12-04

はじめに

前回の続き。
ラズパイ上のファイルをWindows上に持ってきて、それを動画にするまで+α

ラズパイ上にあるファイルのダウンロード方法

ラズパイ上にあるファイルの転送方法はすぐに思いつくのは2つ。

  1. WindowsOSを対象とした、ファイルサーバ機能などを提供するSamba
  2. とりあえず誰とでも接続できるFTPサーバ

今回はWindows以外と接続する予定がないので、とりあえずSambaを利用することにした。
Sambaのセットアップ方法はこのリンクの記事を参考にした。

これの設定通りコマンドを叩いて、いざ\\raspberrypiをエクスプローラのアドレス欄に記入…しても動かない。
WindowsからpingしてみたらIPv6のアドレスが返ってきているため、物理的にはつながっていたようだった。

下記のリンクを見る限り、おそらく正しくIPアドレスが設定されておらず、raspberrypiまで到達できないのが原因のようだ。

ただ、teratermでraspberrypiに接続すればその接続状況がWindowsに保存されるらしく、
接続後はWindowsからファイルサーバへアクセスできた。
Sambaは必ず手動で立ち上げるようにsudo systemctl smbd disableで自動で起動しないようにしたため、
今の時点ではteratermへの接続が必須な状態は問題なさそうだ。

今後問題が出てから改めてDHCPクライアントや固定IPについては考えることにする。

ここからはCPUをより使う作業になっているため、WindowsPC上で作業を行う。

画像ファイルを動画ファイルに変更する

画像ファイルの動画ファイルへの変換はサンプルがたくさんあるが、
個人的に良いサンプルだと思ったのは下記のアドレスのコード。

自分はアンパックを生かしたfourccの作成が思いついていなかった。

今回の画像や動画には、下記のような特徴やユースケースがある

  • 暗視状態だと画像が紫色になる
    • グレースケールに変換する
  • 画像のサイズが良くわかっていない
    • 特定の写真を見てサイズを推定することにする
    • 負荷状況で画像のサイズが変わるかもしれないので念の為、3枚目あたりを利用する
  • 速度とか読み出し位置とかを変更して、寝相のわるいところだけ切り出すといったユースケースもありそう
    • 考えられる部分は変数として指定できるようにしておく

これらのことを考えて、次のコードを作って変換することにした。

image_comverter.py
import cv2
from typing import Iterable
import glob
import re


def files2image(images: Iterable[str], write_path: str, sample_image: str, skip: int = 1, flame_rate: float = 30.0):
    if skip <= 0:
        raise ValueError("スキップ間隔間違えていますよ。")

    sample = cv2.imread(sample_image)
    height, width, _ = sample.shape
    writer = cv2.VideoWriter(write_path, cv2.VideoWriter_fourcc(*"mp4v"), flame_rate, (width, height), isColor=False)

    for count, filename in enumerate(images[::skip]):
        color = cv2.imread(filename)
        gray = cv2.cvtColor(color, cv2.COLOR_BGR2GRAY)
        writer.write(gray)
        print(f"\r{count} 枚処理完了", end="")

    writer.release()


if __name__ == '__main__':
    base_path = r"D:\photos"
    dir_name = "1125"
    append = "gray"
    glob_path = f"{base_path}\\{dir_name}\\*.jpg"
    result_path = f"{base_path}\\{dir_name}_{append}.mp4"
    items = glob.glob(glob_path)

    files2image(items, result_path, items[2])

結果を表示したいところだけど、流石に個人情報的にまずいと思ったので別の動画を作成してきた。

こんなことできませんした

おまけ

スクリーンショット 2021-12-04 213746.png

Aviutilでエンコードし直したらファイルサイズが半分程度になりました(1.5MB→610KB)。OpenCVの動画エンコードはあまり効率が良くはなさそう。

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?