2017年8月7日月曜日

An installation of OpenCV 3.3.0 on Raspberry Pi ZERO

先の投稿は、Raspberry Pi2上での、OpenCV3.3.0でした。

今回は、ZEROです。

エラーで止まった事もあり、ちゃんと設定してbuild & install しました。

時間は、約7時間かかります。

手順は、先の投稿を見てください。

今回の投稿では、cmake-guiの設定値と、make からの install の画面の説明

1.cmake-gui

シングルコアのZEROなので、必要最小限のインストールにしました。
比較的単純な画像処理を行いたいので、次の設定をしています。
もちろん、NEONなどはdisableです。








2.cmake-gui

make からの install の画面、14%という数字に戸惑いました。
途中で、終わっている?
でも、libraryはできているので、install してみると!



sudo make install
sudo ldconfig
cd ~/opencv-3.3.0/samples/cpp
g++ `pkg-config opencv --cflags --libs` facedetect.cpp -o facedetect
./facedetect  --cascade="../../data/haarcascades/haarcascade_frontalface_alt.xml" --scale=1.5 ../data/lena.jpg

で、Lenaさん(^^)/
Peace!!


2017年8月5日土曜日

An installation of OpenCV 3.3.0 on raspberry Pi 2

当初の投稿は、Raspberry Pi 3としていましたが、
Raspberry Pi 2の間違いです。<(_ _)>

8月3日に、OpenCV3.3.0がリリースされたので、、、
Raspberry Pi 3で、opencv 3.3 を build & install した忘備録

大まかな手順は、

1.依存するソフトのインストール

2.ソースをopencv.orgからダウンロードし、解凍、および作業dir作成

3.cmake

4.make

5.opencv インストール

6.確認

7.ZEROの場合



では、記録の始まり

1.依存するソフトのインストール

http://plantuml.com/download から、plantumljarをダウンロードする
sudo cp plantuml.jar /usr/share/java

sudo /sbin/ldconfig

sudo apt-get install -y build-essential git cmake pkg-config cmake-qt-gui mesa-utils  libgl1-mesa-dri libjpeg-dev libtiff5-dev libpng12-dev libjasper-dev libavcodec-dev libavformat-dev libswscale-dev libxvidcore-dev libx264-dev libgtk2.0-dev libprotobuf-dev protobuf-compiler libvtk5-dev libvtk5-qt4-dev python-vtk tcl-vtk  libatlas-base-dev gfortran libeigen3-dev libv4l-dev libqt4-core libqtgui4 libqt4-test libqt4-opengl-dev sphinx-common doxygen

python3の開発環境があれば、下はいらない。30分位かかるかも
sudo apt-get install python3-dev python3-pip

2.ソースをopencv.orgからダウンロードし、解凍、および作業dir作成

ダウンロード後に、~/で解凍すると次のディレクトリーができるので、その中に入って、作業ディレクトリーを作成

wget https://github.com/opencv/opencv/archive/3.3.0.zip
wget https://github.com/opencv/opencv_contrib/archive/3.3.0.tar.gz

wget -O opencv_contrib.zip https://github.com/Itseez/opencv_contrib/archive/3.3.0.zip

unzip 3.3.0.zip
tar xvf  3.3.0.tar.gz

cd opencv-3.3.0

mkdir build

cd build


3.cmake

cmake -D CMAKE_BUILD_TYPE=RELEASE \
     -D CMAKE_INSTALL_PREFIX=/usr/local \
     -D INSTALL_PYTHON_EXAMPLES=ON  \
     -D PLANTUML_JAR=/usr/share/java/plantuml.jar  \
     -D ENABLE_NEON=ON \
     -D WITH_TBB=OFF -D BUILD_TBB=OFF  \
     -D WITH_QT=ON -D WITH_OPENGL=OFF \
     -D OPENCV_EXTRA_MODULES_PATH=../../opencv_contrib-3.3.0/modules \
     -D BUILD_opencv_freetype=OFF \
     -D BUILD_EXAMPLES=OFF ..

上記のcmakeは、サンプルプログラムのbuildがOFF
もし、buildするならONにする。


4.make

make -j4

5.opencv インストール

sudo make install
sudo ldconfig

6.確認

samples/cppに移動してお決まりのlenaさん

g++ `pkg-config opencv --cflags --libs` facedetect.cpp -o facedetect

./facedetect  --cascade="../../data/haarcascades/haarcascade_frontalface_alt.xml" --scale=1.5 ../data/lena.jpg

約5時間作業
Peace!!



7.ZERO

CPUが、シングルコアのARM1176JZF-SなのでNEONはOFF。
ただ、上記のcmakeのパラメータで実行しても、エラーがでる。
従って、cmake-guiを立ち上げてエラーを取りながらgenerationする。
その後、makeする。
そして、じーっと待つ。。。。。




2017年7月8日土曜日

windows10でgcc環境構築、そしてeclipseでOpenCV

windows10の環境を作り直したので、再度gcc環境の構築
Cygwinもあるけど、msys2で構築。
以前は、MinGWのインストールをすすめていたけど、
今はmsys2のインストール。
あと、msys2 をインストールするけど、Cドライブはmsys64

ちなみに、OpenCV3.2.0はbuild済みです。
E:\opencv320\buildに入っています。

1. msys2インストール

msys2のインストーラーをダウンロードして、インストール
僕は、64bit版

http://www.msys2.org/

インストール後に、msys2のターミナルを開いて、
以下の操作をする。
vtkを入れているのは、OepnCVの画面表示系が依存しているため

pacman -Syu
pacman -S base-devel
pacman -S msys2-devel mingw-w64-x86_64-toolchain
pacman -S mingw-w64-x86_64-vtk

2. おまじない

C:\msys64\mingw64\bin\libwebp-7.lib  をコピー&名称変更して
C:\msys64\mingw64\bin\libwebp-6.lib  を新たに作る

これは、OpenCVのモジュールが、libwebp-6.libを探すための処置

3.Window環境設定

PATHを設定する

C:\msys64\mingw64\bin
E:\opencv320\build\x86\mingw\bin

下のOpenCVの設定は、各環境毎に異なる

4.OpenCVのincludeとlibをコピーする

これは、
・E:\opencv\build\include/*
→C:\msys64\mingw64\include

・E:\opencv\build\x86\mingw\lib/*
→C:\msys64\mingw64\lib

5.実行

(1) eclipseでサンプルプログラムを作ってbuild&実行



(2) 上記のプログラムをコマンドプロンプトで実行



ほーら同じ \(^o^)/

Peace!!


2017年7月4日火曜日

windows.oldを削除する

昨日、Windows updateをしたら、windows.oldというフォルダーができて、
なんと、17GB占有している。

windows10のディスククリーンアップで削除できなったかったので、
コマンドプロンプトを管理者モードで開き、

takeown /f C:Windows.old /r
icacls C:Windows.old /grant Users:F /t

で、エクスプローラーから、削除。

この方法を見つけて、処理を完了するまで、なんと3時間かかった。
並列して仕事してたけど、、、

無駄な労力。。。

Peace!!

2017年6月22日木曜日

How to update Google spreadsheet from Raspberry Pi using Google API.

僕は、ロボットに関するデータは www.workrobot.co.jpのロボットクラウドを使って処理をしている。

ただ、デバック時のちょっとしたデータ処理は、Raspberry PiからGoogle spreadsheetに登録して、グラフ化などしたくなる。

で、そのメモ(^^)


1.処理内容

Raspberry Piのpythonスクリプトから、共有設定されたspreadsheetにデータを登録・更新・削除などする。今回は、追加(append)処理サンプル。


2. 作業の順番

2.1 Google 側の設定と準備

(1) Google API 有効化

・Google API Consoleでプロジェクト(test)を作成し、Sheets APIを有効化
   ここ!!→ click

   以下、Google API Consoleは、「コンソール」表記
test プロジェクトで有効化します。

(2) 認証情報設定

・有効化した後、認証情報追加画面だけどcancelしてコンソールに戻る
・コンソールで認証情報選択する
・「サービスアカウントキー」を選択する
   Raspberry Piから、処理をしたいのでこの項目を設定

・サービスアカウント名を入力し、役割をprojectの編集者で設定する
   サービスアカウントIDは、次の(3)で入力するので記録する
・作成ボタンを押下すると、Raspberry Pi側に置く認証ファイルのダウンロード処理になる。保存してRaspberry Piに転送する

(3) 処理対象となるspreadsheetを準備・設定
・spreadsheetを作成する。
   本説明では
   spreadsheet名「test01」
   sheet名「data01」

   sheetID「49ga0igsia79w5u4igtaoeay75489hfadha」
   sheetIDは、シートのURLの...../d/から/edit/....の間の文字列
・共有設定をする
   (2)処理のサービスアカウントをユーザー欄に美優力する
   役割は、「project > 編集者」で設定する

以上で、Google APIの設定、情報交換をする際の認証情報設定取得、スプレッドシートの設定が終了。

2.2 Raspberry Piの準備

Raspberry Pi側の準備。
(1) pythonのクライアントモジュールインストール
   python2.7環境

   $ sudo pip install --upgrade google-api-python-client

おしまい(^^)


2.3 スクリプトを動かす

その前に、、、
Google Sheets APIの説明は→click
サンプルプログラムの使い方の詳しい説明→click

スプレッドシートのA1:C1に、データを登録するスクリプトはドーン!

import httplib2
import numpy as np

from apiclient import discovery
from oauth2client.service_account import ServiceAccountCredentials

SCOPES = 'https://www.googleapis.com/auth/spreadsheets'
APPEND_RANGE = 'data01!A1:C1'   ←シート名とセル位置

class GoogleSS(object):
  def __init__(self, sheet_id):
    self.sheetId = sheet_id

    credentials = ServiceAccountCredentials.from_json_keyfile_name('./test-xxjjdfksgj.json', scopes=SCOPES) ←認証用のjsonファイル指定
    http_auth = credentials.authorize(httplib2.Http())
    discoveryUrl = ('https://sheets.googleapis.com/$discovery/rest?''version=v4')
    self.service = discovery.build('sheets', 'v4', http=http_auth, discoveryServiceUrl=discoveryUrl)

  def append(self, values):  ←今回は追加モード
    assert np.array(values).shape==(3,) , "The shape of value %s must be 3" % (np.array(values).shape)

    value_range_body = {'values':[values]}
    result = self.service.spreadsheets().values().append(spreadsheetId=self.sheetId, range=APPEND_RANGE, valueInputOption='USER_ENTERED', body=value_range_body).execute()

if __name__ == '__main__':
  sheet = GoogleSS('49ga0igsia79w5u4igtaoeay75489hfadha') ←sheetID
  sheet.append(["Kayak", "Love", 3]) ←追加するデータ

結果は、、、

ちなみに、3つ書くと、、、(他にもやり方ありますが、、、)
  sheet.append(["Kayak", "Love", 1])
  sheet.append(["PiroettoSS", "perception", 1])
  sheet.append(["Antix", "Jackson", 1])


Peace!!


2017年6月21日水曜日

Recognizing road edge

こんな感じ、、、、


Peace!!


Coexisting python2 and python3 on Anaconda

Macでの開発は、ほとんど、python3 (Anaconda)で開発。

たまに、python2の環境でインストールやupdateの作業を使用する時がある。

で、python2の環境を作って、起動しているshell上だけをpython2にする。

$ which python

$ /Users/xxxxxx/anaconda/bin/python

$ conda create -n py2 python=2.7

$ conda activate py2

$ source activate py2


python2の環境が終われば、terminalをclose

次回からは、source activate py2 だけ(^^)

Peace!