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

■別の日の記事■
2021.01.21Thu/木 20Wed/水 19Tue/火 18Mon/月 17Sun/日 16Sat/土 15Fri/金 14Thu/木

2020.11.26

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

前回、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

   全コメント表示・書き込み(1〜)


コメント最新5件

2020.11.26ここまで


別の日の記事を読む
前日の記事:2020.11.25
2021.01.21Thu/木 20Wed/水 19Tue/火 18Mon/月 17Sun/日 16Sat/土 15Fri/金 14Thu/木
アクセス数の多い記事(過去1ヶ月)

すべて見る