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