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!

2017年6月19日月曜日

Library setting of Eclipse CDT

マルチプラットフォームで開発しているので、IDEはEclipseを使っている。

言語は、基本はCとC++。従って、CDTを使っている。

僕の場合は、処理速度最優先なので結果的にそうなってしまう。

CDTの設定だけど、Eclipseの手間と感じるのは利用するlibraryの設定

OpenCVの例でメモっておくけど、、、

実は、僕も不勉強で、設定に関しては理解していない事も多かった。

プロジェクトのフォルダーの.cprojectファイルに直接書けばlibraryの設定をUIで一つ一つしなくても良い。

例えば、こんな感じで、全部設定してしまう。例はwindowsの場合

<option id="gnu.cpp.link.option.libs.127616230" name="Libraries (-l)" superClass="gnu.cpp.link.option.libs" useByScannerDiscovery="false" valueType="libs">
  <listOptionValue builtIn="false" value="opencv_core320.dll"/>
  <listOptionValue builtIn="false" value="opencv_features2d320.dll"/>
  <listOptionValue builtIn="false" value="opencv_flann320.dll"/>
  <listOptionValue builtIn="false" value="opencv_highgui320.dll"/>
  <listOptionValue builtIn="false" value="opencv_imgcodecs320.dll"/>
  <listOptionValue builtIn="false" value="opencv_imgproc320.dll"/>
  <listOptionValue builtIn="false" value="opencv_ml320.dll"/>
  <listOptionValue builtIn="false" value="opencv_objdetect320.dll"/>
  <listOptionValue builtIn="false" value="opencv_photo320.dll"/>
  <listOptionValue builtIn="false" value="opencv_shape320.dll"/>
  <listOptionValue builtIn="false" value="opencv_stitching320.dll"/>
  <listOptionValue builtIn="false" value="opencv_superres320.dll"/>
  <listOptionValue builtIn="false" value="opencv_video320.dll"/>
  <listOptionValue builtIn="false" value="opencv_videoio320.dll"/>
  <listOptionValue builtIn="false" value="opencv_videostab320.dll"/>
  <listOptionValue builtIn="false" value="opencv_viz320.dll"/>
</option>

こうすると、、、こんな感じで反映される。




で、あとから不要な物を消してもよいし、、、
こんな感じで、ラクチン

結局、以下の3つを設定する。
1. project > Properties
1.1 C/C++ Build > settings
1.1.1 G++ compiler
        include path
1.1.2 Linker > Libraries
        Libraries (-l)
        Libraries path (-L)
1.2 C/C++ General > Paths and Symbols
        1.1.2の入力が反映されているか確認する。
2. project > Run As
        " Local C/C++ Application "を実行する。エラーになるが気にしない。
        下記のRun Configurations...に、項目として表示させる為。
        もっと良い方法があるはず、、、
3. project > Run Configurations...
        Arguments 設定
        Environment設定
                LD_LIBRARY_PATH shareライブラリーのあるディレクトリ


Peace!!

2017年6月18日日曜日

An Installation of OpenCV3.2 on MacOS 10.12.5

Mac proのOpenCVのupdate

メモですが、、、
30分くらいの処理

~/libにインストールします。

$ cd
$ cd lib
$ git clone https://github.com/Itseez/opencv.git
$ git clone https://github.com/Itseez/opencv_contrib.git
$ cd opencv
$ mkdir build
$ cd build
$ cmake -D WITH_CUDA=OFF -D CMAKE_INSTALL_PREFIX=~/opencv/build -D CMAKE_BUILD_TYPE=RELEASE -D WITH_QT=ON -D BUILD_NEW_PYTHON_SUPPORT=ON -D WITH_OPENGL=OB ..
$ make -j7
$ sudo make install
$ sudo cp lib/pkgconfig/opencv.pc /usr/local/lib/pkgconfig/opencv3.pc

updateの時は以下は必要なし
~/.bash_profile 編集して、保存

$ vi ~/.bash_profile 
    export DYLD_LIBRARY_PATH=$HOME/lib/opencv/build/lib:$DYLD_LIBRARY_PATH
$ source ~/.bash_profile

で、確認

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

$ facedetect --cascade="haarcascade_frontalface_alt.xml" --nested-cascade="haarcascade_eye_tree_eyeglasses.xml" --scale=0.5 yoda.jpg

ヨーダの顔認識は、、、あれ?

Peace!!