自宅に設置したDIY培養装置内の映像を常時ネット配信させる準備2〜サーバーに集めた画像からタイムラプス画像を自動合成
カテゴリー:汎用培養装置InCUBE(記事数:6)

↑B


2020.11.26

自宅に設置したDIY培養装置内の映像を常時ネット配信させる準備2〜サーバーに集めた画像からタイムラプス画像を自動合成

前回、Raspberry piとWebカメラで一定間隔で撮影してサーバーに送る方法を説明しました。

今回はその画像をタイムラプス動画にしてリアルタイムでWeb公開する方法です。

↓出来上がり。テスト用に1週間ほど撮影しタイムラプス画像にしたものです。動画は自動で1日4回最新の状況に更新されています。水が蒸発するので毎晩水を足しています。深夜も100円ショップで売っていたUSBライトで照らしています。

途中1日ほどRaspberry Piが死んでおり映像が飛んでいます。watch dog設定しなきゃ。そしてもう寒いので発芽まで1週間程度かかっています。頑張れラディッシュ!。2000円のWebカメラは画質がイマイチでかつ、近くにピントが合いませんね。

当初、サーバーにアップロードした画像をサーバー上で動画に合成しようと思ったのですが
(1)ffmpegとかmencoderとか必要なソフトをサーバーにうまくインストール出来なかった。
(2)出来たとしても定期的に動画合成していると負荷が大きすぎて怒られそう(共用サーバーなので)

というわけで、サーバーから一度、吸い出して、そこで動画合成して、動画だけサーバーに送るという方式をとることにしました。使用したので俺の部屋に無限に転がっているRaspberry Pi笑

現在、アップロードされた画像と動画はhttps://kamotown.net/upload/に置かれています。

from ftplib import FTP
import subprocess
import os

#サーバーのFTP設定(アドレス、ID、パスワード)
ftp= FTP(
"xxxxx.xxxx.xxx",
"yyyyyy",
passwd="zzzzzzz"
)
items=ftp.nlst("www/kamotown/upload/")

#サーバーの指定ディレクトリにある画像の中でこちら側にダウンロードしていない画像をダウンロード
for file in items:
if os.path.splitext(os.path.basename(file))[1] == '.jpg':
if os.path.isfile(os.path.basename(file))==False:
with open(os.path.basename(file),"wb") as f:
ftp.retrbinary("RETR "+str(file),f.write)
print str(file)
f.close()

#画像ファイル一覧をlist.txtに保存
subprocess.call('ls *.jpg>list.txt',shell=True)

#画像ファイルをffmpegで読み込めるように整形してlist2.txtに保存
f2=open('list.txt')
f3=open('list2.txt','w')

data=f2.readline()
while data:
f3.write('file '+data)
data=f2.readline()

f2.close()
f3.close()

#サブプロセスでffmpegで画像変換
subprocess.call('ffmpeg -f image2 -r 15 -f concat -i list2.txt -r 15 -an -vcodec libx264 -pix_fmt yuv420p timelapse.mp4', shell=True)

#サーバーに戻す
with open("timelapse.mp4", "rb") as f:
ftp.storbinary("STOR www/kamotown/upload/timelapse.mp4", f)
f.close()


Raspberry Piへのffmpegのインストールは

sudo apt-get install ffmpeg

でOKです。簡単♪

このPythonスクリプトをcrontabなどを使って定期的に実行することでサーバー側に最新の動画が掲載され続けます。

今回一番非力なRaspberry Pi zeroを動画変換に使用したのですが、400枚の画像からタイムラプス動画(10Mbyte)を作るのに1時間近くかかりました。う〜ん。けっこう重いな。

そのうち皆で使えるタイムラプス専用の投稿・閲覧サーバーでも立ち上げようと思っているのですが、動画変換部分をどうするのか考えなければいけません。

あ、ffmpegのエンコード時のオプションを「-vcodec h264_omx」とするとハードウェアエンコードされるのか?

Category:汎用培養装置InCUBE



※当サイトで実施している実験において使用している試薬・機器は全て一般の人が購入・入手可能なものです。入手方法は過去に紹介されているはずですが、見つけられない場合はコメント欄等でお問合せください。

コメント

いいっすね!=13
001 [11/28 09:02]ロード乗り@Nuro:以前同じようなことやってました。Piでタイムプラス撮影→NASに保存。ffmegでのエンコードはpiもNAS機も遅いのでwindows PCにWSLでdebian入れてNASをマウントしてエンコードしました。これも画像データの転送に時間かかりますが全体的には早かったです (7)

名前
コメント(※改行は省略されます)

※3回以上の連続書き込み不可
この記事のアクセス数: ↑B
[RSS]

→カテゴリー:汎用培養装置InCUBE(記事数:6)