[RaspberryPI] onvif環境構築

設定ー> Raspberrypi設定->インターフェイス->カメラ->有効

$ vcgencmd get_camera
supported=1 detected=1
$ sudo raspistill -o image.jpg
$ raspivid -f -t 0

$ sudo apt-get install libjson-c3
$ sudo apt-get install insserv

https://qiita.com/lis-hanzomon/items/896342ec1af95d42db26
https://github.com/lis-hanzomon/ONVIF-ClientApp/tree/master/bin

$ sudo apt-get install cmake
$ sudo apt-get install libxml2-dev
$ sudo apt-get install uuid-dev
$ sudo apt-get install libavformat-dev libavcodec-dev libavutil-dev libswresample-dev libswscale-dev
$ sudo apt-get install libjson-c-dev

https://download.videolan.org/pub/contrib/live555/
downloadして解凍、makeします
$ tar zxvf live.2018.02.12.tar.gz
$ cd live
$ ./genMakefiles linux
$ make
$ sudo make install

$ sudo apt-get install flex bison
$ sudo apt-get install libssl-dev

https://ja.osdn.net/projects/sfnet_gsoap2/downloads/gsoap_2.8.117.zip/
$ unzip gsoap_2.8.117.zip
$ cd gsoap-2.8
$ ./configure
$ make
$ sudo make install

$ sudo apt-get install build-essential cmake pkg-config libjpeg-dev libtiff5-dev libjasper-dev libpng-dev libavcodec-dev libavformat-dev libswscale-dev libv4l-dev libxvidcore-dev libx264-dev libfontconfig1-dev libcairo2-dev libgdk-pixbuf2.0-dev libpango1.0-dev libgtk2.0-dev libgtk-3-dev libatlas-base-dev gfortran libhdf5-dev libhdf5-serial-dev libhdf5-103 libqtgui4 libqtwebkit4 libqt4-test python3-pyqt5 python3-dev -y
$ pip3 install opencv-contrib-python==4.1.0.25

$ git clone https://github.com/lis-hanzomon/RedBrick.git
$ cd RedBrick
$ cd RedBrick
$ mkdir build
$ cd build
$ cmake ..
$ make
$ sudo make install

ラズパイ詳しくなるには、ラズパイメインでやらないと駄目だな

[AWS] RaspberryPI4でKVSを利用

公式のドキュメントを見ながらやると
https://github.com/awslabs/amazon-kinesis-video-streams-producer-sdk-cpp/blob/master/docs/raspberry-pi.md

これだとうまくいかない
$ gst-device-monitor-1.0
$ gst-launch-1.0 v4l2src device=/dev/video0 ! h264parse ! video/x-h264,stream-format=avc,alignment=au ! kvssink stream-name=MyKinesisVideoStream storage-size=128 access-key=”***” secret-key=”***” aws-region=”ap-northeast-1″
> The audio recording device is represented by hw:card_number,device_numer. So to use the second device in the example, use hw:3,0 as the device in gst-launch-1.0 command.

これだとOK
$ gst-launch-1.0 -v v4l2src device=/dev/video0 ! videoconvert ! video/x-raw,format=I420,width=640,height=480,framerate=30/1 ! x264enc bframes=0 key-int-max=45 bitrate=500 tune=zerolatency ! video/x-h264,stream-format=avc,alignment=au ! kvssink stream-name=MyKinesisVideoStream storage-size=128 access-key=”***” secret-key=”***” aws-region=”ap-northeast-1″
> if your camera supports outputting h264 encoded stream directly, then you can use this command:

h264エンコードがすごく大事なのね

RaspberryPI4でAmazon Kinesis Video Streamに配信したい

まずラズパイでsudo apt-get updateとしたいが、エラーになる。以下のコマンドでupdate

$ sudo apt-get update –allow-releaseinfo-change

続いて、mac同様、c++のSDKをラズパイに入れていく
$ sudo apt-get install cmake m4 git build-essential
$ sudo apt-get install gstreamer1.0-plugins-good gstreamer1.0-plugins-bad gstreamer1.0-plugins-ugly gstreamer1.0-tools
$ sudo apt-get install gstreamer1.0-omx

$ git clone https://github.com/awslabs/amazon-kinesis-video-streams-producer-sdk-cpp.git
$ cd amazon-kinesis-video-streams-producer-sdk-cpp
$ mkdir build
$ cd build

$ cmake .. -DBUILD_DEPENDENCIES=OFF -DBUILD_GSTREAMER_PLUGIN=ON
$ make
$ cd ..
$ export GST_PLUGIN_PATH=`pwd`/build
$ export LD_LIBRARY_PATH=`pwd`/open-source/local/lib
$ gst-inspect-1.0 kvssink

インストラクションの通りにやってもエラーになることがあるので、適時インストールする

$ gst-device-monitor-1.0
$ gst-launch-1.0 rtspsrc location=rtsp://@224.0.0.1:1900 short-header=TRUE ! rtph264depay ! h264parse ! kvssink stream-name=MyKinesisVideoStream storage-size=128 access-key=”YourAccessKeyId” secret-key=”YourSecretAccessKey” aws-region=”ap-northeast-1″

これで接続できればOK

rtspではなく、ラズパイのカメラモジュールの映像を送ることもできるが、今、カメラモジュールは到着待ちなので、今日はテストのみ。

ほう、中々勉強になった。
OK、これからネットワークカメラの接続についてまとめる

[RaspberryPI4] DeepSpeechをmicで動かす

### ラズパイのUBSマイクの設定
$ sudo vim /etc/modprobe.d/alsa-base.conf

options snd slots=snd_usb_audio,snd_bcm2835
options snd_usb_audio index=0
options snd_bcm2835 index=1
$ sudo vim ~/.profile
一番最後の行に追加
export ALSADEV=”plughw:0,0″

$ sudo apt-get install alsa-utils sox libsox-fmt-all
$ sudo sh -c “echo snd-pcm >> /etc/modules”

ラズパイ再起動

### マイクから音声認識
$ source dev/deepspeech-train-venv/bin/activate
$ cd deepspeech
$ git clone https://github.com/mozilla/DeepSpeech-examples
$ cd DeepSpeech-examples/DeepSpeech-examples
$ pip install -r requirements.txt
$ sudo apt install portaudio19-dev
$ pip3 install halo webrtcvad –upgrade
$ python3 DeepSpeech-examples/mic_vad_streaming/mic_vad_streaming.py -m deepspeech-0.7.1-models.tflite -s deepspeech-0.7.1-models.scorer

こんな感じになる
Listening (ctrl-C to exit)…
Recognized:
Recognized:
Recognized:
Recognized: you
Recognized:
Recognized: night

きたあああああああああああああああああああああ
さあ サーバーサイドやろう
とりあえず満足

https://github.com/mozilla/DeepSpeech-examples/blob/r0.9/mic_vad_streaming/mic_vad_streaming.py
line188行目でtextをrecognized:としているので、ここでテキストとして保存すれば良い

        else:
            if spinner: spinner.stop()
            logging.debug("end utterence")
            if ARGS.savewav:
                vad_audio.write_wav(os.path.join(ARGS.savewav, datetime.now().strftime("savewav_%Y-%m-%d_%H-%M-%S_%f.wav")), wav_data)
                wav_data = bytearray()
            text = stream_context.finishStream()
            print("Recognized: %s" % text)
            stream_context = model.createStream()

[RaspberryPI4]DeepSpeechを動かしたい

まずラズパイ4とモニターを秋葉原で購入して起動
キーボードから日本語入力ができるように設定

$ mkdir dev
$ cd dev
$ python3 -m venv deepspeech-train-venv
$ source dev/deepspeech-train-venv/bin/activate
$ mkdir deepspeech
$ cd deepspeech
$ pip install deepspeech

$ curl -LO https://github.com/mozilla/STT/releases/download/v0.7.1/deepspeech-0.7.1-models.tflite
$ curl -LO https://github.com/mozilla/STT/releases/download/v0.7.1/deepspeech-0.7.1-models.pbmm
$ curl -LO https://github.com/mozilla/STT/releases/download/v0.7.1/deepspeech-0.7.1-models.scorer

$ curl -LO https://github.com/mozilla/STT/releases/download/v0.7.1/audio-0.7.1.tar.gz
$ tar xvf audio-0.7.1.tar.gz

$ deepspeech –model deepspeech-0.7.*-models.tflite –scorer deepspeech-0.7.*-models.scorer –audio audio/2830-3980-0043.wav
Loading model from file deepspeech-0.7.1-models.tflite
TensorFlow: v2.3.0-6-g23ad988
DeepSpeech: v0.9.3-0-gf2e9c85
Loaded model in 0.00285s.
Loading scorer from files deepspeech-0.7.1-models.scorer
Loaded scorer in 0.00296s.
Running inference.
experience proves this
Inference took 1.546s for 1.975s audio file.

venvを使わないと以下のようなエラーになるので注意が必要
The script deepspeech is installed in ‘/home/pi/.local/bin’ which is not on PATH.
Consider adding this directory to PATH or, if you prefer to suppress this warning, use –no-warn-script-location.

OK 続いてdeeepspeechをmicでやりたい

[音声認識] RaspberryPI 4(model B)でJuliusを動かす

音声認識をwavファイルではなく、ラズパイでやります。

### 前準備
– ラズパイ4 model B (秋葉原で電源、microSDなどセットで1万くらい)
– モニター、キーボード, マウス(メルカリでセットで3500円くらい)
– USBマイク(amazonで300円くらい)
※初期設定でwifiの設定とキーボードをJapaneseにする必要がある

$ mkdir julius
$ cd julius
$ wget https://github.com/julius-speech/julius/archive/v4.4.2.1.tar.gz
$ tar xvzf v4.4.2.1.tar.gz
$ cd julius-4.4.2.1
$ sudo apt-get install libasound2-dev libesd0-dev libsndfile1
※libsndfile1-devはRaspberryPI 4ではinstallできなかった
$ ./configure –with-mictype=alsa
$ make
$ sudo make install

$ cd ../
$ mkdir julius-kit
$ cd julius-kit
$ wget https://osdn.net/dl/julius/dictation-kit-v4.4.zip
$ unzip dictation-kit-v4.4.zip

$ sudo vim /etc/modprobe.d/alsa-base.conf

options snd slots=snd_usb_audio,snd_bcm2835
options snd_usb_audio index=0
options snd_bcm2835 index=1

$ sudo vim ~/.profile
一番最後の行に追加

export ALSADEV="plughw:0,0"

$ sudo apt-get install alsa-utils sox libsox-fmt-all
$ sudo sh -c “echo snd-pcm >> /etc/modules”

ラズパイ再起動

$ cd ~/julius/julius-kit/dicration-kit-v4.4/
$ julius -C main.jconf -C am-gmm.jconf -demo

AWSにjsonを送信したい
-> S3に保存すれば良いのかな
そこさえできれば、ほぼ基本的な挙動は完成

[RaspberryPi 4] cronでカメラモジュールの画像をS3にアップロード

1. shellでカメラモジュールを実行する。
app.sh

#!/bin/bash
raspistill -w 800 -h 600 -o /home/pi/image.jpg

$ chmod +x app.sh
// テスト
$ sudo sh ./app.sh

2. raspi4のcronを有効にする
$ sudo vim /etc/rsyslog.conf
-> コメントアウト

cron.*                          /var/log/cron.log

$ sudo /etc/init.d/rsyslog restart
$ sudo /etc/init.d/cron status

3. カメラモジュールを起動するシェルを実行するcronを書く
テストの為、1分おきの実行にする。
$ crontab -e

*/1 * * * * sudo sh /home/pi/app.sh

$ /etc/init.d/cron restart
$ sudo journalctl -f -u cron
// 写真がとれてることを確認

4. raspi4にboto3をインストール
$ python3 -V
$ pip3 -V
$ pip3 install boto3

5. S3にアップロードするpythonスクリプトを書く
// 省略

6. S3にアップロードするcronを追加してテスト
$ which python3

*/1 * * * *  /usr/bin/python3 /home/pi/upload.py

$ /etc/init.d/cron restart
$ sudo journalctl -f -u cron

7. S3のバケットでraspi4で撮った写真がアップロードされているか確認

OK。数日かかると思ってたけど意外と早くできた。
ドキュメント修正して、次はDjangoにtesseract4->cv2の実装やな

[RaspberryPi 4] カメラモジュールの起動手順

RaspberryPi 3 model B+ を持っていましたが、カメラモジュールを差し込んだ途端、電源はつくがHDMIでモニターにシグナルが送れなくなってしまったので、RaspberryPi 4を買い直すことにした。

1) 秋葉原の秋月電子通商で「RaspberryPi 4」と「ラズパイ4用の電源アダプター」を購入
2) ラズパイnoobsからsdカード(32GB)にdownload
https://www.raspberrypi.org/downloads/noobs/
3) sdカードをRaspberryPi 4に差し込んで、Rasbianをインストール
4) 「設定」->「Raspberry Piの設定」->「インターフェイス」->「カメラ」->「有効」
5) コマンドライン
$ vcgencmd get_camera
supported=1 detected=1

$ sudo raspistill -o image.jpg
/home/pi/image.jpg

来た!
RaspberryPi3のNo Signalの原因が不明で、もしからたモニターに原因があるのでは?と思って、実はモニター(6000円位)も買い直してしまったorz… モニターは必要なかった。。。。
何れにしても、カメラモジュールはクリア!
さー次はcron x python作るぞー

[Raspberry Pi]webブラウザからLEDを点灯

SourceForge.netというサイトに行きます。
https://sourceforge.net/projects/webiopi/files/

WebIOPi-0.7.1.tar.gzをダウンロードします。

# tar xvzf WebIOPi-0.7.1.tar.gz
# cd WebIOPi-0.7.1
# sudo ./setup.sh
# sudo /etc/init.d/webiopi start
[ ok ] Starting webiopi (via systemctl): webiopi.service.
# ip a
http://192.168.100.108:8000/

ユーザ名 webiopi パスワード raspberry

192.168.100.108 により途中で接続が切断されました。
ERR_CONTENT_LENGTH_MISMATCH

ん? 何故だ?