2019年10月31日木曜日

ラズパイ(カメラ・22)

前回は、WebRTCを利用した pistreaming を
確認しました。
動画の再生はスムーズに表示されてます。
ただ、難点を上げるとすると、音声データを
送信することを想定されてないので、
音はありません。

まとめると
HLSと比べると、HLSは音声も含めて
H264形式の動画で保存しながら
ぶつ切りのファイルを再生する感じなので、
映像+音声ですが、ファイルを作成するために、
10秒程度の遅延がありました。

pistreamingは、jpegを圧縮して一枚づつ
配信後、順次表示するパラパラ
アニメのような形式ですので、
遅延は1秒未満ですが、音声に
対応していない感じとなります。

次回は、別のカメラも試します。
https://www.filetalk.info/index.html

2019年10月29日火曜日

ラズパイ(カメラ・21)

ライブストリーミングの第二弾として、
pistreaming のインストールを行います。

 $ sudo pip3 install ws4py
 $ git clone https://github.com/waveform80/pistreaming.git

簡単にインストールができますね
あとは、以下のコマンドから実行可能です。

 $ cd pistreaming
 $ python3 server.py

そして、ブラウザから以下のようにラズパイのIPに
ポート指定すると表示することができます。
http://192.168.1.28:8082

お~。今度は、前回のHLSと違って
かなりリアルタイムな感じで表示できますね。
遅延の時間としましては、おおみね1秒に
満たない程度な感じです。
これならば、遠隔操作のような利用でも
使えそうな感じです。
https://www.filetalk.info/index.html

2019年10月28日月曜日

ラズパイ(カメラ・20)

前回は、ライブストリーミングとしてHLSを
利用したものを試してみました。
今回からは、ウルトラ低遅延な仕組みを求めて
WebRTCを用いた、ライブ配信を試してみます。

WebRTCとは、Webブラウザを用いて
データをリアルタイムにやり取りするための技術
として、仕様化された仕組みです。

まず、ラズパイでWebRTCを用いたところで有名な
pistreaming を実行できるようにしてみます。
 https://github.com/waveform80/pistreaming

https://www.filetalk.info/index.html

2019年10月25日金曜日

ラズパイ(カメラ・19)

でライブストリーミング(HLS編)の実行結果です。
ライブストリーミングって本当にLIVE?
今回、HLSを使ったライブ配信環境を作成してみたのですが、
撮影と、ブラウザで表示されている動画とを
比べてみると、7~10秒程度の遅延が発生しています。
これはシステムの処理能力不足からくるものではなく、
この配信システム特融のものなのです。

で、よくよく調べてみると
低遅延=リアルタイムストリーミング
となっていますが、概ね30~45秒程度の
時間差を許容範囲とするシステムということです。
一般のコンサートのライブ配信もこのくらいの遅延が一般的なようです。

そして、HLSよりももっと素早く配信できるもの(遅延が2~3秒)
をウルトラ低遅延と言うそうです。

遠隔地から映像を見ながら、動作を指示するような
処理には別のシステム構成が必要ですね~

今回のHLSのようなものですと、防犯カメラ用などの用途には
十分使えそうな感じですので、そちらで活用したいと思います。

https://www.filetalk.info/index.html

2019年10月22日火曜日

ラズパイ(カメラ・18)

ライブストリーミング用のプログラムが
出来上がったので、動作を確認してみたいと
思います。

まず、ラズパイのIPアドレスを確認します。
ip a

次に、配信用のシェルスクリプトを起動します。
./live.sh

そして、Webサーバーを起動します。
python3 live.py

すると、ブラウザで以下のアドレスから表示できます。

http://192.168.1.28:8000/hls.html


https://www.filetalk.info/index.html

2019年10月19日土曜日

ラズパイ(カメラ・17)

次に、ライブストリーミングを配信するWebサーバー用の
プログラムを作成します。

ファイル名 live.py を作成して編集します。
import os
import http.server
import socketserver

PORT = 8000



#--------------------------------------------------------------------------
# 開始
#--------------------------------------------------------------------------
def run():
    web_dir = os.path.join(os.path.dirname(__file__), '/home/pi/Public')
    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()

if (__name__ == "__main__"):
    run()

https://www.filetalk.info/index.html

2019年10月18日金曜日

ラズパイ(カメラ・16)

さて、久々ですがラズパイにUSBで接続したWebカメラからの
ライブストリーミングシステム作成の続きです。
前回までで、ffmpegをつかった動画のレコーディング環境が
できたので、ライブ配信用にシステムを編集してみます。

まずは、配信データ作成のシェルスクリプトを作成します。

ファイル名 live.sh を作成して編集します。
httpDir=~/Public
cd $httpDir

ffmpeg -f alsa -thread_queue_size 1024 \
  -i plughw:1,0 \
  -f v4l2 -thread_queue_size 512 -input_format yuyv422 -video_size 800x600 \
  -i /dev/video0 \
  -filter_complex scale=800x600,fps=20 \
  -c:v h264_omx -b:v 764k -g 24 \
  -c:a aac -b:a 64k \
  -flags +cgop+global_header \
  -f hls \
  -hls_time 4 -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

rm $httpDir/stream/stream_*.ts
rm $httpDir/playlist.m3u8


https://www.filetalk.info/index.html



2019年10月17日木曜日

ラズパイ(IOT・8)

それでは、システム温度を下げる最終手段のFANを試します。(笑)
小さな扇風機でどれくらいの温度が下がるんでしょうね?
ラズパイの本体にあるGPIOのピンから
電源を供給する形で、ファンを取り付けます。
同じように、しばらく動作を続けてみて
温度の変化を計測してみます。
ヒートシンクも付けてなかったときの温度が
概ね56℃でしたので、なんと、15℃程下がってます。
効果は絶大ですね。
重い処理をさせ続ける場合、ファンは必須と思います。(笑)

https://www.filetalk.info/index.html

2019年10月16日水曜日

ラズパイ(IOT・7)

前回までで、CPU側とLANチップ側へヒートシンクを取り付けて、
システム温度を測りました。
っとこれまでは、公式のラズパイのケース(プラスチック製)を
つけての動作確認でした。
が、いっその事ケースを外すとどうなるのかも
検証してみました。
また、しばらく動かしてみると、
さらに2℃ほど低いですね。
狭いケース内で稼働させ続けると、熱がこもることが
分かりました。
長期の安定動作させるには、ケースも重要そうですね。

https://www.filetalk.info/index.html

2019年10月15日火曜日

ラズパイ(IOT・6)

前回は、CPU側へヒートシンクを取り付けて、
システム温度を測りました。
今回は、LANチップ側へ小さい方を取り付けてみます。
また、しばらく動かしてみました。
さらに1℃ほど低いようです。
誤差程度ですが効果は、ありそうです。

https://www.filetalk.info/index.html

2019年10月12日土曜日

ラズパイ(IOT・5)

前回、ラズパイ用にそろえたヒートシンクをつかって、
システム温度の状態を確認してみます。
室温26.2℃の環境でテストです。
通常時は、こんな感じです。
おおむね、56℃くらいです。
ヒートシンクは、こんなです。
大きい方をCPUへ取り付けてみます。
取り付けると、
しばらく動かしてみました。
やはり2℃ほど低いご様子。
多少なりにも効果は、あるんですね~。

https://www.filetalk.info/index.html

2019年10月10日木曜日

ラズパイ(IOT・3)

増税前のラズパイ用機器の爆買い、第3弾。
ついに増税ですね。駆け足で買い込んだ
センサー類のリストです。
どうやら、オリンピック前までは、カードで買うと
増税前よりも2%もお徳なご様子(汗)

今回は、ユーザーとのコミュニケーションを
図るうえで必要なものをチョイスしてみました。

WayinTop ブレッドボード用ワイヤキット ジャンパーワイヤ 14サイズあり
フレキシブル ジャンパー線 オス-オス デュポンワイヤ 4サイズあり ピンセット付き
収納ケース付き Arduino用 Raspberry Pi用
5MP 1080P Camera for raspberry pi 4 Model b カメラモジュール
raspberryカメラモ赤外線ケース付き夜間LED
Adafruit I2C通信の8x8ミニLEDマトリックス基板(青色)
ピンソケット (メス) 2×20 (40P)
ピンソケット 2×20(40P) ラズパイ用スタッキングコネクタ
Raspberry Pi用ユニバーサル基板
コネクタ用ハウジング 1P
ケーブル用コネクタ (10個入)
RaspberryPiカメラモジュールV2
スピーカー 8Ω8W
3.5mmステレオミニプラグ⇔スクリュー端子台
PAM8012使用2ワットD級アンプモジュール
GNSS(GPS・GLONASS・QZSS)受信機キット 1PPS出力 みちびき3機対応 アンテナセット付キット
ラズベリーパイB+/A+用ブレッドボード接続キット
BME280使用 温湿度・気圧センサモジュールキット
ピンヘッダ 2×20 (40P)
2×20(40P)両端コネクタ付IDCリボンケーブル(フラットケーブル)
https://www.filetalk.info/index.html


ラズパイ(IOT・4)

ライブストリーミング等の常時起動するようなソフトウェアを 稼働させ続けると常にCPUを利用するため、負荷が高くなります。
これにより、消費電力が増え、システムの温度が上昇します。
もともとラズパイは省電力設計ですので、そのままでも
動作に影響はないのですが、できるだけ安定して
稼働させ続けるには、温度はある程度下げた方が
良いといえます。
そこで、CPUにヒートシンクをつけて違いを見てみます。

購入したのは、Amazonから
GeeekPiラズベリーパイ冷却ファン30x30x7mm DC 5VブラシレスCUP冷却ファンとラズベリーパイヒートシンク
です。

ヒートシンクはこんな形で、大きいのと小さいのとファンが
ラズパイの3用と4用で各2セットづつと、ファンが2つ入ってました。
まずは、CPU側へ大きいのからを装着
両面テープでの貼付けですし、パソコンのと比べて、
安っぽいですが効果あるんでしょうかね~。
次回、検証の結果をお届けします。

https://www.filetalk.info/index.html

2019年10月9日水曜日

ラズパイ(カメラ・15)

今度は本当に、この前ライブストリーミングするために
ハードウェアエンコーダー付きのffmpegを
導入してみました。ハードの支援なし・ありを
前回つくった計測ツールを利用して確認してみます。

内容は、2MBのmpegファイルをmp4へ変換してみます。

まずは、ハードウェアエンコードなしの場合
time ffmpeg -i output.mpg -c:v h264 -b:v 5000k -y output1.mp4


つぎに、ハードウェアエンコードありの場合
time ffmpeg -i output.mpg -c:v h264_omx -b:v 5000k -y output2.mp4


あれっ、どちらも変換時間も5.5秒程度とハードウエアエンコードの
ありとなしとで、あまり差がでてないですね。
CPUの利用率も誤差範囲程度のような気がします(汗)
もっと大きなファイルで試さないといけないのかもしれませんね。

https://www.filetalk.info/index.html

2019年10月8日火曜日

ラズパイ(カメラ・14)

前回は、コマンドからラズパイの状態(CPU使用率とか)を
表示して確認してみました。
今回は、毎回コマンドを叩かなくても一度に
状態を連続して見れるようにするため、Pythonから表示できるように
プログラムを行ってみます。

取得するのは、基本項目のCPU利用率とメモリー使用率と温度にします。
psutilとsubprocessを利用して、値を取得します。
#!/usr/bin/env python3
# -*- coding: utf-8 -*-

"""
リソース確認
Usage:
    python3 resource.py
    
    インストール
    sudo pip3 install psutil 
    
    chmod +x resource.py
"""

import subprocess
import psutil
import time
import re



#--------------------------------------------------------------------------
# 確認開始
#--------------------------------------------------------------------------
def run():
    while True:
        memory = psutil.virtual_memory()
        cpu_percent = psutil.cpu_percent(interval=1)
        
        cmd = 'vcgencmd measure_temp'
        res = subprocess.Popen(cmd, shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE, universal_newlines=True)
        stdout, stderr = res.communicate()
        tempObj = re.search(r'\d*\.\d*', stdout)
        print('CPU使用率:', cpu_percent, '%  メモリ使用率:', memory.percent, '%  温度:', tempObj.group(), '\'C')
        time.sleep(1.0)

if (__name__ == "__main__"):
    run()



実行すると
https://www.filetalk.info/index.html

2019年10月7日月曜日

ラズパイ(カメラ・13)

前回、ライブストリーミングするために
ハードウェアエンコーダー付きのffmpegを
導入してみました。ハードの支援なし・ありを
確認してみます。っとその前に、
お互いの実行による負荷を計測するために、
CPUの利用率とかを計測できるような
ツールを作成してみます。

まずはコマンドで出来る事を確認してみます。

CPUの使用率
$ cat /proc/stat | grep cpu

CPUの周波数を取得
$ vcgencmd measure_clock arm

CPUの電圧
$ vcgencmd measure_volts

CPUのメモリ使用量
$ vcgencmd get_mem arm

GPUのメモリ使用量
$ vcgencmd get_mem gpu

残りメモリ確認
$ free                    -h で分かりやすい単位で表示

温度取得のコマンド
$ vcgencmd measure_temp






https://www.filetalk.info/index.html

2019年10月4日金曜日

ラズパイ(カメラ・12)

ライブストリーミング回りは、フォーマットも沢山ありますね。
これまでは、RTMP(Real Time Messaging Protocol )とかですと、
Adobe Flashプレーヤーで再生できるのでよく利用されていましたが、
サポートが2020年で終了ですので、今後推奨されるHLSという
送信技術を使います。
また、フォーマットはH.264をつかって画像を圧縮します。
ラズパイの場合、H.264用にハードウェアエンコーディングの機能が
あるので、CPUの負荷を下げられるはずです。
で、低遅延・低リソース・汎用性でどこまで綺麗に配信できるかを
検証するために、ffmpegのインストールに入ります。
 sudo apt-get install libomxil-bellagio-dev
 git clone git://source.ffmpeg.org/ffmpeg.git
 cd /home/pi/ffmpeg


ハードウェアエンコードの機能を利用できるように、
ffmpegのソースをダウンロード・解凍します。
 wget ftp://ftp.alsa-project.org/pub/lib/alsa-lib-1.1.9.tar.bz2
 tar xjvf alsa-lib-1.1.9.tar.bz2
 cd alsa-lib-1.1.9
 ./configure --prefix=/home/pi/ffmpeg
 make
 make install


音声のために、ALSA libraryを取得し、インストールします。

FFmpeg コンパイル & インストール
 ./configure  --enable-gpl  --enable-nonfree --enable-mmal --enable-omx-rpi --enable-omx --extra-cflags="-I/home/pi/ffmpeg/include" --extra-ldflags="-L/home/pi/ffmpeg/lib" --extra-libs=-ldl
 make -j4
 sudo make install

次回は、動作確認してみます。

https://www.filetalk.info/index.html

2019年10月3日木曜日

ラズパイ(カメラ・11)

ラズパイは、カメラ回りがしっかりしているので、
外出先からリモートコントロールして、
映像で家の中とか見れたら便利と思いませんか?
防犯対策にもなりますし。
ということで、これらのカメラを利用して
リアルタイムのライブストリーミングできる仕組みを考えてみます。

本体のカメラでも、フリーのメディアプレイヤーのVLCを
使えばライブストリーミングできますが、
どこでも映像の確認をできるようにしたいので
Webブラウザさえあれば表示できるように、
HTTP ライブ ストリーミング (HLS) 形式を利用できる
USBのWebカメラから配信できる仕組みにします。
それと、Webカメラですとおおむねマイクもいっしょに
ついているので音声も同時にストリーミングもできるはずです~。

本体のカメラの方は、同時に赤外線カメラをつけて
夜間確認用や、OpenCVを利用した顔認識などに使いたいと
思います。

まずは、動画回りの環境づくりを行います。
映像は、ffmpegを利用します。
ffmpegは、対応しているフォーマットやプロトコルがめちゃくちゃ
多いので、なんでもできそうですね。
また、音声は、alsa-lib(Advanced Linux Sound Architecture)
を利用します。
次回は、このソフトのインストールを行っていきます。

https://www.filetalk.info/index.html

2019年10月2日水曜日

ラズパイ(カメラ・10)

Raspberry Pi 3 Model Bには、4つのUSBポートがありますので、
このポートに複数のUSBカメラを取り付けて
写真の撮影も可能です。
今回は、複数カメラを行うときの機器の確認を行ってみます。

まず、USBに何が刺さっているか確認します。
$ lsusb

Bus 001 Device 005: ID 046d:081b Logitech, Inc. Webcam C310
Bus 001 Device 004: ID 046d:c52b Logitech, Inc. Unifying Receiver
Bus 001 Device 003: ID 0424:ec00 Standard Microsystems Corp. SMSC9512/9514 Fast Ethernet Adapter
Bus 001 Device 002: ID 0424:9514 Standard Microsystems Corp. SMC9514 Hub
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub

デバイス5として、WebカメラのC310が接続されていることが分かります。
次に、映像として利用できるデバイスを確認してみます。
$ v4l2-ctl --list-device

とすると、機器の一覧が表示されます。
bcm2835-codec-decode (platform:bcm2835-codec):
        /dev/video10
        /dev/video11
        /dev/video12

mmal service 16.1 (platform:bcm2835-v4l2):
        /dev/video2

UVC Camera (046d:081b) (usb-3f980000.usb-1.3):
        /dev/video0                // ←これがデバイス名(USBカメラ)
        /dev/video1

そこで、カメラで使える形式を取得を行います。
$ v4l2-ctl -d /dev/video0 --list-formats-ext // デバイス名を指定して確認

とすると、撮影形式が表示されます。
        ioctl: VIDIOC_ENUM_FMT
                Type: Video Capture

                [0]: 'YUYV' (YUYV 4:2:2)
                        Size: Discrete 640x480
                                Interval: Discrete 0.033s (30.000 fps)
                                Interval: Discrete 0.040s (25.000 fps)
                                Interval: Discrete 0.050s (20.000 fps)
                                Interval: Discrete 0.067s (15.000 fps)
                                Interval: Discrete 0.100s (10.000 fps)
                                Interval: Discrete 0.200s (5.000 fps)
                                  .
                                  .
                                  .
Size: Discrete から撮影できる解像度が確認できました。
あとは、撮影時にこのデバイス名と解像度を指定することになります。

https://www.filetalk.info/index.html





2019年10月1日火曜日

ラズパイ(カメラ・9)

今回は、USBにWebカメラをつけてみます。
付けるのは、ロジクール ウェブカメラ C310 ブラック HD 720P
ウェブカム ストリーミングカメラです。
こんな感じに接続です。

これまで、カメラ専用コネクターにつけて
使っていたコマンドの raspistill でも複数カメラ選択用の
パラメータがありますが、USBカメラの方は
このコマンドを使うことができません。
そこで、USBカメラ用にソフトをインストールします。
   sudo apt-get install fswebcam

撮影の方は、
   fswebcam -r 1280x960 --no-banner img.jpg

とすることで、撮影可能です。

-r:解像度の指定
--no-banner:写真の下部に表示される日時を表示しない
   fswebcam -?

を実行することで、他のパラメータの
詳細情報が表示されます。

https://www.filetalk.info/index.html