こんにちは、子育てに見守りカメラは欠かせないと思っているファン(@one_quarter_)です。
皆さんは赤ちゃんが寝ているときに家事や趣味、仕事などできていますか?
私たちは最初は、寝ててもすぐ起きるんじゃないか?万が一のことになっていないか?が不安であまり時間が取れなかったよね
私たちの場合は特に生まれてすぐに呼吸器疾患でNICUに入院していたこともあり、本当に気が気じゃなかったです。
話を戻しまして、赤ちゃんが寝ている間もやること、やりたいことがたくさんあるので、その時間を有効に活用するためにも、見守りカメラは必須だと思います。
見守りカメラとは、赤ちゃんの映像と音声をリアルタイムにスマホなどでみることができる製品です。音声だけのものもありますが、無音の時に寝ているのか、何かあって静かなのかは区別がつきませんので、カメラ付きをおすすめします。
見守りカメラは市販品でも安価なものがたくさん出てきています。
もし、家に余っているパソコンがあったら、実はタダで見守りカメラが自作できるのです!
今回は、見守りカメラが欲しい、そして余っているパソコンがあるという方に知ってもらいたい、見守りカメラを自作する方法をご紹介します。
見守りカメラに必要なもの
見守りカメラを自作するのに必要なものはこちらです。
- 見守りカメラ本体になるパソコン
- カメラ(内臓 or USB接続)
- インターネット環境
- 映像を見る端末
- ubuntuのインストールメディア作成用パソコン
- インストールメディアになる USBメモリ
私の見守りカメラの構成の例はこちらです。
- acerのノートPC(見守りカメラ本体)
- logicool C270 (USB接続)
- Wifiルーター
- iPad mini
- Mac book air(インストールメディア作成用)
- 4GBの USBメモリ(インストールメディア)
内蔵カメラがない場合はロジクールが安くてオススメです。
いろいろありまして私は3台持っています(笑)
そのため、余っている(使っていない)パソコンにlinuxをインストールして使います。
普段使いのパソコン使うのはあまりお勧めしていませんので、あくまで余っているパソコンがあればタダでできるよ、という紹介になります。
見守りカメラの作り方
見守りカメラ作成の手順は以下の通りです。
- ubuntuのインストールメディアを作成する
- 見守りカメラ本体用パソコンにubuntuをインストールする
- カメラ・マイクのデバイス番号を調べる
- サーバーのスクリプトを作成する
- ブラウザで視聴するためのhtmlファイルを作る
- ffmpegをインストールする
- ffmpegの実行シェルスクリプトを作成する
- 推奨:IPアドレスを固定する
1. ubuntuのインストールメディアを作成する/2.見守りカメラ本体用パソコンにubuntuをインストールする
ubuntuのインストール方法はこちらがわかりやすいので、参考にしてみてください。
インストールが終わったら、Wifi等につなぎ、インターネット接続をしておきます。
ネット経由でインストールするので、ネットが繋がったら、以下を実行しておきます。
デスクトップ画面を右クリック→端末を開く(この後何回も出てくるので、「端末を開く」と以後呼びます)
そして以下を順に実行します(入力して改行のところでエンター)。
sudo apt-get update
sudo apt-get upgrade
また、あとで使いますのでIPアドレスを調べておきます。
sudo apt install net-tools
ifconfig
IPアドレスはココの部分です。
~$ ifconfig enp4s0f0: flags=4099<UP,BROADCAST,MULTICAST> mtu 1500 ether bb:88:ee:bb:ff:99 txqueuelen 1000 (イーサネット) RX packets 0 bytes 0 (0.0 B) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 0 bytes 0 (0.0 B) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 device interrupt 18 lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536 inet 127.0.0.1 netmask 255.0.0.0 inet6 ::1 prefixlen 128 scopeid 0x10<host> loop txqueuelen 1000 (ローカルループバック) RX packets 33745 bytes 3154410 (3.1 MB) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 33745 bytes 3154410 (3.1 MB) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 wlp3s0b1: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500 inet 192.168.11.6
⇦ココ netmask 255.255.255.0 broadcast 192.168.11.255inet6 ffff::8888:9999:ffff:bbbb prefixlen 64 scopeid 0x20<link> ether ff:bb:ee:77:bb:cc txqueuelen 1000 (イーサネット) RX packets 28807647 bytes 2997732666 (2.9 GB) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 38209931 bytes 54979427841 (54.9 GB) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
3.カメラ・マイクのデバイス番号を調べる
USBカメラを使用する場合は、接続してから端末を開く→以下のコマンドを実行します。
カメラのデバイス番号を調べる
sudo apt install v4l-utils
v4l2-ctl --list-devices
実行結果のココがデバイス番号になります。この文字列をメモしておきます。
一見HD WebCamにも見えますが、私のC270はUVC Cameraでした。
~$ v4l2-ctl --list-devices HD WebCam: HD WebCam (usb-0000:00:1a.0-1.3): /dev/video0 /dev/video1 UVC Camera (046d:0825) (usb-0000:00:1d.0-1.2): /dev/video2
⇦ココ/dev/video3
マイクのデバイス番号を調べる
arecord -l
実行結果のココがデバイス番号です。こちらもメモしておきます。
デバイス名がUSB Audioになっている方です。
~$ arecord -l **** ハードウェアデバイス CAPTURE のリスト **** カード 0: PCH [HDA Intel PCH], デバイス 0: ALC269VB Analog [ALC269VB Analog] サブデバイス: 1/1 サブデバイス #0: subdevice #0 カード 1
⇦ココ: U0x46d0x825 [USB Device 0x46d:0x825], デバイス 0: USB Audio [USB Audio]サブデバイス: 0/1 サブデバイス #0: subdevice #0
4.サーバーのスクリプトを作成する
ストリーミングサーバーを立てるためのpythonスクリプトを作成します。
といっても、テキストファイルを作り、コピペするだけです。
エディタはubuntuに最初から入っているnanoを使うと簡単です。
端末を開く→以下を順に実行
mkdir ~/HLS
cd ~/HLS
nano streaming.py
以下をコピーして、nanoの画面を右クリック→貼り付け
※8行目のYourNameはユーザ名に変えてください。
#!/usr/bin/env python3
import os
import http.server
import socketserver
PORT = 8000
web_dir = os.path.join(os.path.dirname(__file__), '/home/YourName/HLS')
os.chdir(web_dir)
Handler = http.server.SimpleHTTPRequestHandler
httpd = socketserver.TCPServer(("", PORT), Handler)
print("serving at port", PORT)
try:
httpd.serve_forever()
except KeyboardInterrupt:
pass
httpd.server_close
5.ブラウザで視聴するためのhtmlファイルを作る
ブラウザで視聴できるようにhtmlファイルを作ります。
端末を開く→nanoでファイル作成
cd ~/HLS
nano index.html
以下をコピペして保存します。
<html>
<head>
<meta charset="utf-8">
<title>HTTP Live Streaming</title>
<script src="https://cdn.jsdelivr.net/npm/hls.js@latest"></script>
</head>
<body>
<h1>Live camera</h1>
<div>
<video id="live" width="640" height="480" crossOrigin="anonymous" autoplay="autoplay" controls="controls">
</div>
<script>
if (Hls.isSupported()) {
var video = document.getElementById('live');
var hls = new Hls();
hls.loadSource('./playlist.m3u8');
hls.attachMedia(live);
}
</script>
</body>
</html>
6.ffmpegをインストールする
端末を開く→以下を実行します。
sudo apt-get install ffmpeg
7.ffmpegの実行シェルスクリプトを作成する
端末を開く→以下を順に実行します。
cd ~
nano streaming
以下をコピペして保存します。
※⇦マイクはココと⇦カメラはココは消してください
2行目のYourNameはユーザ名に変えてください。
#! /bin/bash httpDir=/home/YourName/HLS cd $httpDir pkill -f ffmpeg sleep 5 rm $httpDir/stream/stream_*.ts rm $httpDir/playlist.m3u8 rm $httpDir/log.txt ffmpeg -f alsa -ac 1 -thread_queue_size 8192 \ -i hw:1⇦マイクはココ \ -hwaccel vaapi -hwaccel_device /dev/dri/renderD128 \ -f v4l2 -thread_queue_size 8192 -input_format yuyv422 -video_size 800x600 \ -i /dev/video2⇦カメラはココ \ -filter_complex scale=800x600,fps=12 \ -c:v libx264 -b:v 764k -g 24 \ -c:a aac -b:a 64k \ -flags +cgop+global_header \ -f hls \ -hls_time 2 -hls_list_size 3 -hls_allow_cache 0 \ -hls_segment_filename $httpDir/stream/stream_%d.ts \ -hls_base_url stream/ \ -hls_flags delete_segments \ $httpDir/playlist.m3u8 &> $httpDir/log.txt &
8.推奨:IPアドレスを固定する
IPアドレスの固定は必須ではありませんが、やっておいたほうが便利ですのでご紹介します。
IPアドレスを固定しないと、見守りカメラ用のPCを再起動した時や、ルーターが再起動した時などにIPアドレスが変わってしまい、今まで見られたのに見られなくなってしまうことがあります。
ただ、IPアドレスの固定方法はお使いのルーターによって設定が違うので、私の家で使っているBuffaloのWifiルーターを例にご紹介します。
- 192.168.11.1にブラウザでアクセスする
- ユーザ名とパスワードを入れる(ID: admin, 初期パスワード: password)
- 「Internet/LAN」タブの「DHCPリース」をクリック
- 見守りカメラ用のPCの現在のIPアドレスの「手動割当に変更」ボタンをクリック
パソコンに慣れていない方は、なかなか項目が多く大変だったかもしれませんが、これで自作見守りカメラは完成です。
見守りカメラの使い方
では、見守りカメラの使い方です。
見守りカメラを起動する
- サーバーのスクリプトを実行する
- ffmpegのシェルスクリプトを実行する
まず、カメラ側のPCにストリーミング配信用のサーバーを立ち上げます。
端末を開く→以下を順に入力
cd ~
python streaming.py
正しく動作しているかどうかを確認するには同じWi-Fiに接続しているスマホや別のPCから、ブラウザで 見守りカメラ用のパソコンのIPアドレス+ポート番号(192.168.11.xx:8000など)にアクセスして、「Live camera」のタイトルと動画の画面になっていれば正常に起動できています。
次に、ffmpegのシェルスクリプトを起動し、ストリーミング配信する動画をカメラ映像から生成し続けます。
先ほどの端末の画面は閉じずに、新たにまた端末を開き、以下を実行します。
※YourNameはユーザ名に変えてください
/home/YourName/streaming
起動方法は以上です。
長時間起動していて不安定になった時はPCを再起動して、上記の手順を踏むだけでまた見守りカメラを使うことができます。
2番をやるだけでも生成されている動画ファイルがリセットされますので、そちらだけやってみてダメなら再起動してます
カメラ映像を視聴する
- 推奨:VLCプレイヤーを使う
- その他:ブラウザで見る
カメラ映像の視聴方法はVLCプレイヤーを使うのがおすすめです。
VLCプレイヤーとは、ほぼ全ての拡張子の動画を再生することができる動画プレイヤーで、PCのフリーソフト、無料スマホアプリとして利用可能です。
私の場合、iPad miniで視聴していますので、アプリでの視聴方法をご紹介します。
AndroidやPCでも設定する項目は一緒です
- アプリを起動する
- ネットワークをタップ
- ネットワークストリームを開くをタップ
- アドレスバーにhttp://192.168.11.xx:8000/playlist.m3u8と入力
- ネットワークストリームを開くをタップ
1.アプリを起動する
2.ネットワークをタップ
3.ネットワークストリームを開くをタップ
4.アドレスバーにhttp://192.168.11.xx:8000/playlist.m3u8と入力
5.ネットワークストリームを開くをタップ
トラブルシューティング
私のPCがスペックが悪いせいか、たまに動画が不安定になることがあります。
その場合は基本的にffmpegの再起動で解決します。
- 手動でffmpegを再起動する
- 自動でffmpegを再起動する
手動でffmpegを再起動する
やり方は、streamingを起動するだけです。
端末を開く→以下を実行
/home/YourName/streaming
自動でffmpegを再起動する
linuxにはcronという時間を指定してコマンドを実行する方法があります。
ここにffmpegのシェルスクリプトを起動するように設定をします。
設定方法は、「crontab -e」と端末を開くで入力するとnanoで時間指定のコマンドを書くことができます。
そして、以下のコマンドを書いておくと朝6時から夜24時まで2時間おきにffmpegのシェルスクリプトを再起動します。
# m h dom mon dow command 0 6 * * * /home/YourName/streaming 0 8 * * * /home/YourName/streaming 0 10 * * * /home/YourName/streaming 0 12 * * * /home/YourName/streaming 0 14 * * * /home/YourName/streaming 0 16 * * * /home/YourName/streaming 0 18 * * * /home/YourName/streaming 0 20 * * * /home/YourName/streaming 0 22 * * * /home/YourName/streaming 0 0 * * * pkill -f ffmpeg
2時間ごとに再起動していますが、かなり不安定になる頻度は低下しています。
自作見守りカメラのレビュー
実際に自作見守りカメラを導入して2か月使用していますので、使い勝手をレビューしたいと思います。
画質・音質
画質・音質共に、そこそこの設定をしていますので、特に不満はありません。
画質についてですが、カメラから1mぐらい離れた位置の2センチ四方のサイズの文字が読み取れる程度の画質になっています。
また、赤ちゃんの呼吸によるお腹の上下もなんとか読み取れるぐらいですので、音がなくても寝ていることが確認できて安心です。
音質は良くも悪くもなく必要十分といったところでしょうか。
泣き声はもちろん、手足を動かした時の衣擦れ音や場合によっては、ため息程度は聞き取れるぐらいの音質、音量にはなっています。
どちらも後ほど紹介するスマホアプリのAlfred Cameraよりは良くなっていますので、満足です。
遅延
大体10秒程度遅れて映像、音声が届きます。
できればもう少し遅延が少ない方が安心ですが、10秒程度であれば許容範囲だと思います。
少し試行錯誤しましたが、これよりは速くなりませんでした。
PCのスペックにも依存すると思いますので、いいPCであればもっと早いかもしれません。
ちなみに私のPCは以下のようなスペックです。
- Intel(R) Celeron(R) CPU 847 @ 1.10GHz
- Memory: 4GB
安定性
トラブルシューティングの中でも触れましたが、私のPCではスペックが悪いせいか、たまにストリーミングが止まることがあります。
そのため、cronで2時間おきに自動的にffmpegを再起動するように設定しています。
ただ、これのおかげで、手動で再起動するのは激減しました、1週間に1回あるかないかぐらいの頻度ですので、許せる範囲です。
これに関しては、熱の問題もありそうだったので、同時に以下のようなPCクーラーが余っていたので、途中からこちらも使用しています。
番外編:余ったスマホで見守りカメラ
番外編になりますが、実はスマホアプリで余ったスマホを見守りカメラにするというものがあります。
最初は私もこのアプリを使っていましたが、自作できるかを調べて出来そうだったので、自作に切り替えました。
ただ、このアプリにもメリットは多いので、デメリットが気にならないよ、という方にはおすすめです。
- 無料で利用できる
- インストールと簡単な設定のみで使用できる
- スマホ、PCどちらからの利用もできる
- カメラからの音声を聞くだけでなく、カメラ側に音声を送ることができる
- 画質が悪い
- 映像・音声がサーバーに送信されるので、プライバシー、セキュリティが不安
見守りカメラとしてはいいアプリだと思いますので、デメリットが許容できる方は使ってみてはいかがでしょうか?
まとめ
今回は赤ちゃんがいる家庭で必須の見守りカメラを余っているパソコンを使って自作する方法をご紹介しました。
慣れていない方にとっては大変かもしれませんが、余っているものでタダで見守りカメラを作ることができます。
また、ローカルのネットワークにしか映像も音声も流しませんので、セキュリティ的にも安心です。
興味がありましたらぜひ作ってみてくださいね。
最後までお読みいただきありがとうございました。