はじめに
こちらはRaspberry Pi と LINE messaging API で作る監視カメラシリーズ第2弾です。
RaspberryPi監視カメラに使用するライブラリなどのインストールについて書いていきます。
ディレクトリ構成
ディレクトリ構成はこちらなります。
説明はこちらの構成で行いますので、よく分からない方はとりあえず同じ構成にすることをお勧めします。
githubにも載せていますので、よければ
cloneしてみて下さい。
https://github.com/MasanaoY/Pi4-SecurityCamera
#は説明書きです。
#piはユーザー名です。自分のユーザー名に置き換えてください。
↓↓
/home/pi/
└- projects/
└- Pi4-SecurityCamera/
├- delete_old_files.sh #古い写真と動画を削除するシェルスクリプト
├- line_video/ #動画を保存する場所
├- line_photo/ #写真を保存する場所
├- main.cpp #ビルドするメインプログラム
├- config.txt #チャネルトークン等を記入するファイル
├- CMakeLists.txt #ビルド用設定ファイル
├- httplib.h #cpp-httplibのヘッダーファイル
├- picam/ #各機能のcppプログラム置いています
├- nlohmann/ #nlohmann/jsonを使用するためのファイル
└- build/
ひとまず、インストールに進む前に下記のディレクトリをmkdirコマンドで準備してください。
#piはユーザー名です。自分のユーザー名に置き換えてください。
↓↓
/home/pi/
└- projects/
└- Pi4-SecurityCamera/
└- build/
ターミナルに次のコマンドを入れるとまとめて作成されます。
mkdir -p /home/pi/projects/Pi4-SecurityCamera/build
インストールに進みます。
まず、ターミナルにこちらのコマンドでシステムとパッケージリストの更新を行って下さい。
sudo apt update
sudo apt upgrade -y
C++ 開発環境の構築
C/C++開発ツールのインストールを行います。ついでに基本ライブラリのインストールも行います。
sudo apt install -y build-essential cmake pkg-config git
build-essential とは、C/C++の開発に必須のツールセットで、C++コンパイラ(g++)やビルド自動化ツール(make)などが使用できます。
cmake とは、ビルドシステム生成ツールで、CMakeLists.txt から Makefile(makeで使用) などを自動生成できます。
pkg-config とは、ライブラリの情報を取得するツールで、外部ライブラリを使用するときに必要になります。
git とは、バージョン管理システムで、GitHubからソースコードを取得(clone)するときに使います。
これでC++コンパイラ(g++)やmakeなどの基本的なビルドツールが使用できます。
次にテキストエディタをインストールします。
私は今回vimを使ってみたかったので、次のコマンドでvimをインストールしました。
sudo apt install vim
vimについてはこちら。
ここで一度コンパイルまで正常にできるか確認します。
ターミナルに次のコマンドを入力し、helloworldというファイルを作成します。
vim helloworld.cpp
次の内容を貼り付けます。
#include <iostream>
int main() {
std::cout << "hello world!\n";
return 0;
}
ESCキーを押して、次のコマンドで保存してvimを閉じます。
:wq
ターミナルに次のコマンドを入力し、helloworld.cppをコンパイルして実行ファイル(helloworld)を作成します。
g++ helloworld.cpp -o helloworld
g++ はg++コンパイラを使用します。
-o はアウトプットするファイルを指定します。(今回はhelloworld)
コンパイルが成功するとhelloworldというファイルが生成されるので、ファイル名の前に./をつけて実行します。
./helloworld
ターミナルに次のように表示されたらOKです。
hello world!
cpp-httplib のインストール
※githubからcloneした場合は不要です。
軽量なHTTP/HTTPSクライアント・サーバー機能で、LINE Messaging APIへのリクエストや写真や動画を公開するためのWebサーバー機能に使用します。
cpp-httplibはヘッダーファイルをインクルードするだけで使用できるため、ヘッダーファイルをダウンロードします。
cdコマンドでline_botディレクトリに移動し、wgetでGitHubリポジトリからヘッダーファイルのhttplib.hを直接ダウンロードします。
cd projects/Pi4-SecurityCamera/
wget https://raw.githubusercontent.com/yhirose/cpp-httplib/master/httplib.h
ダウンロードが完了したらlsコマンドでhttplib.hファイルが存在するか確認しましょう。
OpenSSL のインストール
こちらはcpp-httplibでHTTPS通信(LINE APIの必須要件)を行うための暗号化エンジンです。
簡単に言えば、暗号化して安全な通信を行う機能を追加してくれる部品です。
こちらも次のコマンドでインストールします。
sudo apt install libssl-dev
これで完了です。
OpenCV のインストール
カメラ入力、画像処理、物体検出(顔認識など)に使用します。
OpenCVライブラリ本体をインストールします。
今回はパッケージマネージャーのaptを使用することを推奨します。
こちらのコマンドでインストールします。
※C++のみであれば、phython3-opencvは不要だと思いますが、とりあえず一緒にインストールして大丈夫です。
sudo apt install libopencv-dev python3-opencv
これでプログラム内でopenCVの機能を使用し、コンパイルできる環境が整います。
OpenCVの顔検出機能に使用するデータファイルのダウンロード
私が顔検出に使用したのは正面の顔の学習済みデータファイルhaarcascade_frontalface_default.xmlです。
通常、前述した「OpenCVのインストール」で行ったaptでインストールしている場合は、システム特有の共有ディレクトリに配置されています。
後ほどプログラム内でファイルを読み込む際に絶対パスを指定する必要があるので、次のコマンドで確認してください。
ls /usr/share/opencv*/haarcascades/haarcascade_frontalface_default.xml
/usr/share/opencv4/haarcascades/haarcascade_frontalface_default.xml このように出力されたパスがプログラム内で指定する絶対パスになります。
見つからない場合は、次のコマンドでダウンロードしてください。
wgetコマンドでファイルをダウンロードします。
wget https://raw.githubusercontent.com/opencv/opencv/master/data/haarcascades/haarcascade_frontalface_default.xml
これで顔検出に使うデータファイルのダウンロードは完了です。
nlohmann/json のインストール
※githubからcloneした場合は不要です。
C++で JSON (JavaScript Object Notation) データを扱うためのライブラリです。
今回は LINE Messaging APIのレスポンスやリクエストボディを扱うために使用します。
1. cdコマンドで line_bot ディレクトリに移動し、
cd /home/pi/projects/Pi4-SecurityCamera
2. wgetコマンドで GitHub から json.hpp ファイルをダウンロードします。
wget https://raw.githubusercontent.com/nlohmann/json/master/single_include/nlohmann/json.hpp
これでディレクトリ内に nlohmann ディレクトリが生成され、その中に json.hpp が配置されるはずです。
pigpio のインストール
ラズパイのGPIOピンをC/C++で制御するためのライブラリです。
次のコマンドでインストールします。
sudo apt install pigpio
インストールができない場合は、次のコマンドを順に行なって下さい。
wget https://github.com/joan2937/pigpio/archive/master.zip unzip master.zip cd pigpio-master make && sudo make installそして新しいライブラリを認識させるために、次のコマンドで共有ライブラリのキャッシュを更新します。(
make install等で新しいライブラリを入れた時に行います)sudo ldconfig
インストール後はpigpiod(デーモン)が動いているかもしれないので、停止しておきます。
※動いていると競合してエラーが発生します。
sudo systemctl stop pigpiod
ビルド(Make)の準備
※githubからcloneした場合はCMakeLists.txtの作成は不要です。
ここでは make コマンドで実行ファイルを生成するために必要な Makefile を準備します。
まずは Pi4-SecurityCamera ディレクトリに CMakeLists.txt を作成します。
cd /home/pi/projects/Pi4-SecurityCamera #ディレクトリの移動
vim CMakeLists.txt #CMakeLists.txtというテキストファイルの作成
CMakeLists.txt ファイルにこちらの内容を貼り付けてください。
cmake_minimum_required(VERSION 3.10)
project(Picam)
# C++17を指定
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED True)
# OpenCVのインストールを見つける
# REQUIRED: 必須であることを示す
find_package(OpenCV REQUIRED)
# OpenSSLを見つける
find_package(OpenSSL REQUIRED)
# pigpioを見つける
find_library(PIGPIO_LIBRARY NAMES pigpio REQUIRED)
# 自ディレクトリをインクルードファイルに追加 (httplibのため)
include_directories(${CMAKE_CURRENT_SOURCE_DIR})
# main.cppから実行ファイルを作成(名前は'main_app')
add_executable(main_app main.cpp)
# 実行ファイルにOpenCVとOpenSSLとpigpioライブラリをリンク
target_link_libraries(main_app
${OpenCV_LIBS}
${OPENSSL_LIBRARIES}
${PIGPIO_LIBRARY}
)
ESC キーを押して、:wq を入力し Enter キーを押し、保存して閉じます。
build ディレクトリに移動し、cmake .. を実行します。
cd build #buildディレクトリに移動
cmake .. #cmakeコマンドでMakefileの生成
これで build ディレクトリ内に後でビルド (make) するときに必要な Makefile が生成されます。
ディレクトリ構成
ここまで準備が完了すると下記のディレクトリ構成になっているはずです。
/home/pi/
└- projects/
└- Pi4-SecurityCamera/
├- CMakeLists.txt #ビルド用設定ファイル
├- httplib.h #cpp-httplibのヘッダーファイル
├- nlohmann/ #nlohmann/jsonを使用するためのファイル
└- build/
├- CMakeCache.txt #cmake ..で生成される
├- cmake_install.cmake #cmake ..で生成される
├- Makefile #cmake ..で生成される
└- CMakeFiles #cmake ..で生成される
さいごに
振り返りながらになりますので、抜けている箇所が無いか心配ですが、
OSインストールから最後まで確認したので、多分問題ない内容になっていると思います。
また、githubの構成に合わせるため修正しました。