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!!




2017年6月16日金曜日

What the hell (-_-;) .... libwebp-6.dll


Windows でのcomputer vision開発は、mingw64+eclipse+OpenCV3.2

気持良く開発しようと思ったら、、、

あれ?

eclipse上で、実行できなくなっている。。。



なぬ???

う、、、

え、、、

、、、

原因わからず、コマンドプロンプトでも、、、

あれ???

え、、、

開発できないのは困るから、、、

あれや、これや、で数時間。

お!


libwebp-6.dll  ???

なんじゃこれ?

ネットで検索しても、いまいち不明

で、さらに調べると、Googleのイメージ表示のモジュール

それが無くなっている

ダウンロードのしようもなく、

再インストールだとか、、、

おっ!

libwebp-7.dll はある!

もう、、、(-_-;)

コピーして

libwebp-6.dll

と、名前変えて c:/msys2/mingw64/bin にどひゃーん

めでたし、めでたし、、、

失った時間、4時間 

原因は、mingw64のアップデートか、、、

再インストールしなくてすんで、、、

Peace!!

しかし、、、(´;ω;`)

2017年6月13日火曜日

Upgrading from wheezy to jessie on Raspberry Pi


遅ればせながら、、、jessieへ

実証ロボットのコントローラのアップデート

手順は

(1) Wheezy のアップデート

$ sudo apt-get update
$ sudo apt-get upgrade
$ sudo apt-get dist-upgrade

(2)apt-getの環境設定ファイルの更新(文字列wheezyをjessieに変更) 

$ sudo vi /etc/apt/sources.list
$ sudo vi /etc/apt/sources.list.d/collabora.list
$ sudo vi /etc/apt/sources.list.d/raspi.list

(3)jessie へ

$sudo apt-get update

   Ign http://raspberrypi.collabora.com jessie InRelease
   Get:1 http://mirrordirector.raspbian.org jessie InRelease [14.9 kB]
   Get:2 http://archive.raspberrypi.org jessie InRelease [22.9 kB]
   Ign http://raspberrypi.collabora.com jessie Release.gpg
   Ign http://raspberrypi.collabora.com jessie Release
   Get:3 http://mirrordirector.raspbian.org jessie/main armhf Packages [9,533 kB]
   Get:4 http://archive.raspberrypi.org jessie/main armhf Packages [163 kB]
   Get:5 http://archive.raspberrypi.org jessie/ui armhf Packages [57.9 kB]
   Err http://raspberrypi.collabora.com jessie/rpi armhf Packages
     404  Not Found
   Ign http://raspberrypi.collabora.com jessie/rpi Translation-en_GB   
   Ign http://raspberrypi.collabora.com jessie/rpi Translation-en
   Get:6 http://mirrordirector.raspbian.org jessie/contrib armhf Packages [43.3 kB]
   Get:7 http://mirrordirector.raspbian.org jessie/non-free armhf Packages [84.2 kB]
   Get:8 http://mirrordirector.raspbian.org jessie/rpi armhf Packages [1,356 B]
   Ign http://archive.raspberrypi.org jessie/main Translation-en_GB
   Ign http://archive.raspberrypi.org jessie/main Translation-en
   Ign http://archive.raspberrypi.org jessie/ui Translation-en_GB
   Ign http://mirrordirector.raspbian.org jessie/contrib Translation-en_GB
   Ign http://archive.raspberrypi.org jessie/ui Translation-en
   Ign http://mirrordirector.raspbian.org jessie/contrib Translation-en
   Ign http://mirrordirector.raspbian.org jessie/main Translation-en_GB
   Ign http://mirrordirector.raspbian.org jessie/main Translation-en
   Ign http://mirrordirector.raspbian.org jessie/non-free Translation-en_GB
   Ign http://mirrordirector.raspbian.org jessie/non-free Translation-en
   Ign http://mirrordirector.raspbian.org jessie/rpi Translation-en_GB
   Ign http://mirrordirector.raspbian.org jessie/rpi Translation-en
   Fetched 9,920 kB in 23s (420 kB/s)
   W: Failed to fetch http://raspberrypi.collabora.com/dists/jessie/rpi/binary-armhf/Packages  404  Not Found

   E: Some index files failed to download. They have been ignored, or old ones used instead.

でエラー
collabora.comを使っていないそうなので、コメントアウト

$ sudo vi /etc/apt/sources.list.d/collabora.list
$ cat /etc/apt/sources.list.d/collabora.list
#deb http://raspberrypi.collabora.com jessie rpi
#deb http://raspberrypi.collabora.com wheezy rpi

修正して、再度
$ sudo apt-get update
$ sudo apt-get upgrade
$ sudo apt-get dist-upgrade

途中で、いろいろ聞いてくるので入力をしながら、、、

(4) reboot

$ sudo reboot

(5) 確認

$ lsb_release -a
   No LSB modules are available.
   Distributor ID: Raspbian
   Description:    Raspbian GNU/Linux 8.0 (jessie)
   Release:        8.0
   Codename:       jessie

(6) 後始末

$ sudo apt-get autoremove
$ sudo apt-get autoclean

Peace!