fc2ブログ

Pi NoIR Camera V2で遊ぶ(3)

 前回までで、赤外線カメラPi NoIR Camera V2をOpenCVでも使える状態にしましたので、今回は実際にコードを書いて動かしてみます。このサイトにあるサンプルプログラム(simpletest_raspicam_cv.cpp )を一部変更して、以下のプログラムraspicam_cv_samp.cppを作成しました。

//raspicam_cv_samp.cpp
#include <ctime>
#include <iostream>
#include <raspicam/raspicam_cv.h>
#include <opencv2/core/core.hpp>
#include <opencv2/imgproc/imgproc.hpp>
using namespace std;

int main (int argc,char **argv) {

time_t timer_begin,timer_end;

raspicam::RaspiCam_Cv Camera;
cv::Mat image;
int nCount=100;

//set camera params
//Camera.set(CV_CAP_PROP_FORMAR, CV_8UC1); //monochrome
Camera.set(CV_CAP_PROP_FORMAT, CV_8UC3); //color

//Open camera
cout<<"Opening Camera..."<<endl;
if (!Camera.open()) {cerr<<"Error opening the camera"<<endl;return -1;}

//Start capture
cout<<"Capturing "<<nCount<<" frames ...."<<endl;
time (&timer_begin);
for (int i=0; i<nCount; i++) {
Camera.grab();
Camera.retrieve (image);
if (i%5==0) cout<<"\r captured "<<i<<" images"<<std::flush;
}
cout<<"Stop camera..."<<endl;
Camera.release();

//show time statistics
time (&timer_end); /* get current time; same as: timer = time(NULL) */
double secondsElapsed = difftime (timer_end,timer_begin);
cout<< secondsElapsed<<" seconds for "<< nCount<<" frames : FPS = "<< (float) ((float)(nCount) /secondsElapsed) <<endl;

//image proc
cv::Mat grayimage;
cv::Mat thresholdimage;
cv::cvtColor(image, grayimage, CV_RGB2GRAY); //Monochrome
cv::threshold(grayimage, thresholdimage, 128, 255, cv::THRESH_BINARY); //Binarize

//save image
cv::imwrite("raspicam_cv_image.jpg",image);
cout<<"Image saved at raspicam_cv_image.jpg"<<endl;
cv::imwrite("raspicam_cv_grayimage.jpg",grayimage);
cout<<"Image saved at raspicam_cv_grayimage.jpg"<<endl;
cv::imwrite("raspicam_cv_thresholdimage.jpg",thresholdimage);
cout<<"Image saved at raspicam_cv_thresholdimage.jpg"<<endl;
}
 元々は100枚のモノクロ画像を撮影して、フレームレートを求め、その画像を保存するプログラムでした。今回は、カラー画像を撮像して、フレームレートと、撮像画像をグレー処理、二値化処理し、それらの画像を保存するプログラムに変更しました。
 このソースプログラムは、~/git/raspicam/utils/フォルダに保存し、以下のCMakeLists.txtも同じフォルダに保存しました。

cmake_minimum_required (VERSION 2.8)
project (sample)
find_package(raspicam REQUIRED)
find_package(OpenCV)
IF ( OpenCV_FOUND AND raspicam_CV_FOUND)
MESSAGE(STATUS "COMPILING OPENCV TESTS")
add_executable (raspicam_cv_samp raspicam_cv_samp.cpp)
target_link_libraries (raspicam_cv_samp ${raspicam_CV_LIBS})
ELSE()
MESSAGE(FATAL_ERROR "OPENCV NOT FOUND IN YOUR SYSTEM")
ENDIF()
作業フォルダ~/git/raspicam/utils/で以下のコマンドを実行し、exeファイルを作成しました。
  cmake .
  make
exeファイル「raspicam_cv_samp」は、~/git/raspicam/utils/utils/内に作成されました。以下のコマンドでプログラムを実行させました。
  sudo ./raspicam_cv_samp

結果は、以下の通りでした。画像は上から、生カラー画像、グレー画像、二値化画像です。
result_161120.pngraspicam_cv_image_161120.jpgraspicam_cv_grayimage_161120.jpgraspicam_cv_thresholdimage_161120.jpg フレームレートは、9.09091[fps]で、画像もきちんと処理されて保存されていました。何かと使えそうです。
スポンサーサイト



Pi NoIR Camera V2で遊ぶ(2)

 Raspberry Piに接続できる赤外線カメラPi NoIR Camera V2を使って、今回はOpenCVの使用環境を作ります。ネット検索すると、raspicam_cvというライブラリを用いることで簡単にできるとの記事が多数あり、早速試してみました。
 私のRaspberry PiではOpenCV 3.0を使っていました。ネット記事を読み、自分の環境に合わせて設定変更をしつつ、試行錯誤を繰り返しましたが、うまく行きませんでした。
 OpenCV 3.0は昔々インストールしたので、環境設定がうまく行っていなかったのかな、再インストールしようかなと思いつつ、結局は、最新のバージョンの3.1に上げて、環境も整えて、再トライすることにしました。OpenCV 3.1のインストールはこのサイトに丁寧に説明してあり、参考にしました。

 仕切り直して、OpenCV 3.1とraspicam_cvの組み合わせで再トライしたのですが、うまく行きません。OpenCV 3.1単体の動作はUSBカメラをつないで確認し、問題なしでした。
 原因・対策をネットで探していたら、同じ悩みを持つ仲間がおられました。記事によると似たような名前ですが、「raspicam」というライブラリを用いるとうまく行く内容が書かれてありましたので、早速試してみました。

セットアップの手順はこのページに説明されていますので、その通りに進みました。

1. 個人環境(/home/pi/)の下にgitフォルダを作成 : pi@raspberrypi ~$ mkdir git

2. gitフォルダに移動 : pi@raspberrypi ~$ cd git

3. 以下、サイトに記載の手順に従う。
    git clone https://github.com/cedricve/raspicam
    cd raspicam
    mkdir build
    cd build
    cmake ..

4. cmake ..を実行した際に表示される以下の文字列の中で「-- CREATE OPENCV MODULE」の値が1であることを確認する。0の場合は、ライブラリのOpenCVのモジュールがコンパイルされないとのこと。
    -- CREATE OPENCV MODULE=1
    -- CMAKE_INSTALL_PREFIX=/usr/local
    -- REQUIRED_LIBRARIES=/opt/vc/lib/libmmal_core.so;/opt/vc/lib/libmmal_util.so;/opt/vc/lib/libmmal.so
    -- Change a value with: cmake -D<Variable>=<Value>
    --
    -- Configuring done
    -- Generating done
    -- Build files have been written to: /home/pi/raspicam/trunk/build

5. コンパイル、インストール、ldconfigのアップデートの順に実行する。
    make
    sudo make install
    sudo ldconfig
これで、環境セットアップ完成です。
 
 次に、環境が問題なくセットアップされているかにつて、サンプルプログラムを実行させて確認します。サンプルプログラムのソースコードは4種類~/git/raspicam/utils/内に入っていました。このフォルダ内で
    cmake .
    make
を実行すると、新規にutilsフォルダが作成され、~/git/raspicam/utils/utils/内に4種類の実行ファイルが作成されました。
    sudo ./raspicam_test
を実行すると、撮像画像がppmファイル形式で保存されました。また、raspicam_cv_testを実行するとjpgファイル形式で画像が保存されました。問題なく、ライブラリはセットアップできたようです。

 次回は、サンプルプログラムを一部変更して、動かしたいと思います

Windows10のアップデートがうまく行かない

 Windows10の自動アップデート(1607)に悩まされた1日でした。結局、3回やり直しをさせられた上、元の状態(1511)のままです。無駄な時間をマイ○ソソフトのせいで、費やしてしまいました。がっかりです。怒る気力もありません・・。以前のAnniversaryアップデート(1511)の時もそうでした。その時のブログはこちら
 今日、パソコンを立ち上げると、「7:07に自動アップデートを開始する」旨のメッセージが出ました。拒否できる設定はなかったと思いますが、鬱陶しいメッセージウィンドウを消して、その後、別の作業をしていたら、急に画面が強制的にアップデートに切り替わりました。何と強引なのでしょうか?ウイルスアタックのような嫌がらせです。

 それから、長~~い時間をかけて「今、頑張って更新しているよ、待っててね‥。」状態が続きました。家内に冗談で「90%程度でフリーズしたら気分悪いよね。99%からの1%がいつも長いよね。」など言っていた矢先、「システムを構成しています:95%」で長い待ち状態に‥・。3時間近く時は流れ…。「あぁ~、またかぁ…」電源スイッチ長押しON。
 再電源ONすると、「以前のバージョンのWindowsを復元しています。…」「はいはい、またかいなぁ…」結局、Windowsくんは何も変われませんでした。「頑張ったのにね。お疲れぇ~」

 今度は、仕方なく、Windows Update画面から手動でトライしました。WindowsUpdate1_161119.png 画面を確認すると、エラー内容(0x8024a 10a)が記載されていましたが、解決法は自分で調べるか、「他人事のように応対するサポート」に問い合わせる旨が書かれてあります。マイ○ソソフトのこのサイトで調べると、0x8024aは自動更新のエラーのようですが、そのことは分かっていますよ。10aの意味がよく分からない・・。画面上の「詳細情報」を押して、Anniversary Updateページに飛び、「今すぐ入手」を実行しました。WindowsUpdate2_161119.png 最終的に次の画面が表示されて、「今すぐ更新」を押すと、更新が再スタートしました。WindowsUpdate3_161119.png 同じようなプロセスを経て、今度は行けるかなと思っていましたが、結果は同じでした。また、95%で長~い待ち。今度は2時間耐えました。やはりダメです。

 次にWindowsのエラーログ関係を削除して、「3度目の正直」と意気込んで行きましたが、結局「2度あることは…」でした。マイ○ソソフトさん、使えまへんなぁ~。

Pi NoIR Camera V2で遊ぶ(1)

 先月、Raspberry Piに接続できる赤外線カメラPi NoIR Camera V2を購入しました。購入後、しばらく触ることができなかったのですが、ようやく触れました。夜間の監視カメラに使えるかなと漠然と考えています。 Amazonの広告を載せつつ、結局は安価なRSオンラインで購入しました。購入時(2016/10/11)の金額の合計は、¥4,177でした。内訳は以下の通りです。
 商品の合計 (税抜) ¥3,868 + 配送 ¥450 + 消費税 (商品 + 配送料) ¥309
直近(2016/11/13)は、その後の円安の影響か、商品単体で¥3,418になっていました。輸入品の購入は為替変動も注意が必要ですね・・。
 このカメラは、2016年4月に初代バージョンから置き換えられたもので、Sony IMX219 8-megapixel sensorを使用しており、赤外線フィルタは使用していないとのこと。これがネーミング、NoIR(No Infrared)の意味ですね。

 それでは、早速ですが、まず初めに、Raspberry Pi側の設定です。先月購入したPi Zeroではなく、今回はまず、Raspberry Pi 2 Model Bで動作確認を行いました。ターミナルからraspi-configを実行し、setting1_161113.png 6. Enable Cameraを選択し、
setting2_161113.png Enable support for Raspberry Pi Camera?でEnableを選択しました。これで設定は完了です。また、新しくリリースされたカメラなので、念のため、Raspbery Piのカーネル、ファームウェアもsudo rpi-updateを実行して、更新しました。

 次に配線を行いました。まず、カメラケーブル接続コネクタ部の白色のストッパを外します。
cameraconnector161113.png次に、ケーブルをコネクタに挿し込みますが、電極配線方向をどちらに向けたらよいか迷いそうですね。写真の通りに接続しました。cameraconnection.png ちなみに、カメラ側の配線は次の通りです。カメラケーブルを接続するコネクタは基板の裏側にあり、黒いロックを外して行います。camera_back161113.png配線面は表側です。camera_front161113.png

 それでは、最後に撮影です。対象物を何にしようか?と考えていた所、現在使用しているガラケー(らくらくホン)に赤外線通信の機能があることを思い出しました。全く使ったことがなかったのですが、こういう時に役に立つ?とは・・・。
 赤外線通信ボタンを押して見ても、赤外線なので人の目には当然見えません。本当に赤外線が出ているのでしょうか??
撮像は、ターミナルからraspistillコマンドを打ち込んで簡易的に行いました。こんな感じです。
raspistill -o Image.jpg
 ボタンを押していない時のPi NoIR Camera V2の画像がこちらです(ピントが合わせ込めていない・・)。IR_OFF161113.png 次に、ボタンを押したときの画像を撮像すると、見た目では分からないのですが、画像には明るく赤外LEDが点灯していました。
IR_ON161113.png ほぉーと、素朴な感動を覚えました。このカメラ、すごいですね。次は、OpenCVで取り込みたくなります。

PICでWiFiを使う(4)

 このテーマですが、大変延び延びになって、そろそろ2か月が経ちます。いろいろ試行錯誤をしていました。元々はPICマイコンに接続されたセンサのデータをネットワーク経由(Wi-Fi)でパソコンに飛ばしたいなというのが動機でした。具体的には、PICのデータをUART通信でWi-Fiモジュール(ESP-WROOM-02)送り、それをノートパソコンのWeb上で確認する試みです。

 今までの流れを振り返ると、まず初めに、PICのプログラムを組む環境を整え()、次に、ESP-WROOM-02(ESP8266)でクライアントモードでATコマンドを触ったりしました(これは寄り道??)()。
 その後、PICとパソコン間のUART通信を確認し()、Arduino IDEでESP-WROOM-02(ESP8266)をアクセスポイント(AP)に設定して、Wi-Fiを介して、ノートパソコンからAPにWebアクセスできる所まで何とか来ることができました()。長い道のりです・・・。

 今回は、「PICとパソコン間のUART通信」を「PICとESP8266間のUART通信」に切り替えてのチャレンジです。配線は以下の通りです。PICのTX、RXをそれぞれESP82266のRXD、TXDに接続しました。ESP8266-PIC161113.png
 ESP8266側のプログラムは、Arduino IDEの中に参考になるコード(AdvancedWebServer)がありましたので、一部修正して使いました。Reference161113.png 最終的には、タクトスイッチを押した際に「PICtoPC」の文字をESP8266に送信し、ノートパソコンから確認できるようにしました。ESP8266側のAPのIPアドレスは前回と同様に、192.168.11.200にしました。

 結果は、以下の通りです。Result161113.pngうまく表示できました。長い道のりでしたが、PICのデータがWi-Fi経由で確認できました。

 今回使用したプログラムコードも一緒に紹介したかったのですが、PIC側、ESP8266側ともにコードの内容が十分理解できていません。もう少し勉強(理解)して、いろいろなカスタマイズができてからにしたいと思います・・。いつになることやら・・・。

ご訪問者数

(Since 24 July, 2016)

タグクラウド


プロフィール

Dr.BobT

Author: Dr.BobT
興味のおもむくままに生涯考え続けるエンジニアでありたい。

月別アーカイブ

メールフォーム

名前:
メール:
件名:
本文: