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




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!




2017年6月5日月曜日

Installation of lighttpd(1.4.45) on Raspberry Pi

例のごとくメモ、、、

でも、メモというよりは、苦闘の記録
(下の方に、1.4.45のインストールフローを書いたよ)

Raspberry Piのapt-getでインストールすると、1.4.35という2年位のバージョンになる。
いろいろ機能改善や、bug fixが行われている1.4.4Xを入れるのが良い。
一時期、lighttpdの開発は止まっていたけど、最近は、lighttpd2の開発も始まったようで、活性化してきた。

以前の投稿で、1.4.43のインストールがあるが、どうもその手順ではいまくいかないので、再度投稿

というか!

どうも、1.4.44 と1.4.45は、既に稼働する環境に対して上書きをするだけのインストーラのようだ、、、、丸々1日つぶした(-_-;)

従って、新規のマシンにインストールする時は、1.4.43をインストールしてから、1.4.45を上書きする。


う、、、記憶があいまい。。。
sudo apt-get install lighttpd
で、1.4.35をインストールした後に、1.4.45を上書きだっかかも、、、
どっちでもできるから、、、


また、1.4.43は、/usr/share/lighttpdにファイルを展開する
1.4.45は、/usr/local/lighttpd

実行モジュールも下記に配置されている。
/usr/local/sbin/lighttpd
従って、/etc/systemd/system/lighttpd.serviceを書き換える必要がある。

あと、インストール直後に出てくるindex画面(図1)に書いてあることは、systemdを採用する前の事だから、信用してはだめ。。。

lighttpdは、情報が少ないので何とかして欲しいなぁ

次のエラーがでたら、それぞれの処理を行い再度行う。

エラー1:
configure: error: pcre-config not found, install the pcre-devel package or build with --without-pcre

sudo apt-get install libpcre3-dev

エラー2:
configure: error: bzip2-headers and/or libs were not found, install them or build with --without-bzip2

sudo apt-get install libbz2-dev

図1
微妙だけど、、、
Peace!

追加、、、


CGIの起動について

僕の場合は、cgiを動かしたいわけで、、、
昔のlighttpdと違って、/etc/lighttpd/conf-enableにあるシンボリックリンクがmodされる。
そのmodされるタイミングは、もちろんlighttpd.confが読み込まれたとき。
で、それが処理されるのが、最後に書かれている

include_shell "/usr/share/lighttpd/include-conf-enabled.pl"

従って、conf-enableにシンボリックリンクを張っただけではダメ。
このスクリプトが実行されて、conf-enableが展開されて初期化の時に読み込まれる。

で、問題は、素の1.4.45は、include-conf-enabled.pl のスクリプトを置かない。つまり、これがおかれないので、start時点でエラーがでる。無いからしょうがないけど、、、
だから、ということで、これは、Peace!

結局どうする1.4.45

(1)ベースになるモジュールをインストールする(どちらか)
   1.4.43 おすすめ
   sudo apt-get install lighttpd

(2)ベースをupdateする
   1.4.45のbuildとインストール。INSATLLを確認する。
    ./configure
   make
   sudo make install

   1.4.45は、/usr/local/sbin/lighttpdにインストールされる。
    mod 関連のモジュールは、/usr/local/lib
   下記のコマンドで確認してください。
    sudo find / -name mod* -print
   which lighttpd

   以前のものは /usr/share/lib、/usr/share/lighttpdにinstallされている。
   これも、上記のコマンドで確認できます。

(3)環境設定
   /etc/lighttpd.confの内容確認と必要モジュール確認とインストール
   特に、最後のinclude部分の確認

   /etc/lighttpdに3つのperlのスクリプトをコピーしてlighttpd.conf書換
   perlスクリプトは、実行権を忘れずに
   sudo cp *.pl /etc/lighttpd; sudo chmod +x /etc/lighttpd/*.pl

   # default listening port for IPv6 falls back to the IPv4 port
   #include_shell "/etc/lighttpd/use-ipv6.pl " + server.port
   #include_shell "/etc/lighttpd/create-mime.assign.pl"
   include_shell "/etc/lighttpd/include-conf-enabled.pl"

   /etc/lighttpd/conf-*のシンボリックリンク設定
   (例)
   sudo ln -s /etc/lighttpd/conf-available/10-cgi.conf /etc/lighttpd/conf-enabled/10-cgi.conf

   lighttpd.serviceの内容確認と修正、配置位置
   /etc/systemd/system
   /lib/systemd/systemに置く

[Unit]
Description=Lighttpd Daemon
After=network.target

[Service]
Type=simple
ExecStartPre=/usr/local/sbin/lighttpd -tt -f /etc/lighttpd/lighttpd.conf
ExecStart=/usr/local/sbin/lighttpd -D -f /etc/lighttpd/lighttpd.conf
Restart=on-failure

[Install]
WantedBy=multi-user.target

(4)確認
   lighttpd -v
   バージョンを確認する

   lighttpd -f /etc/lighttpd/lighttpd.conf -t
   エラーがあればlighttpd.conf修正

(5)実行確認
   sudo systemctl start lighttpd

   最初は、必ず結果を確認する
   sudo systemctl status -l lighttpd
 
   cgiは、10-cgi.confの/cgi-bin/で階層的にサフィックスも含めて確認
   /var/www/cgi-bin以下の実行権は、ちゃんと確認する。

(6)最後に、、、
   sudo systemctl enable lighttpd
   sudo reboot

なんか、やっと(^^)/

Peace!!

sudo cp -r cgi-bin /var/www; sudo chmod -R +x /var/www/cgi-bin

ちなみに、/etc/lighttpd/lightpd.confには、mimeが設定してある。

mimetype.assign = (
  ".pdf"          =>      "application/pdf",
  ".sig"          =>      "application/pgp-signature",
  ".spl"          =>      "application/futuresplash",
  ".class"        =>      "application/octet-stream",
  ".ps"           =>      "application/postscript",
  ".torrent"      =>      "application/x-bittorrent",
  ".dvi"          =>      "application/x-dvi",
  ".gz"           =>      "application/x-gzip",
  ".pac"          =>      "application/x-ns-proxy-autoconfig",
  ".swf"          =>      "application/x-shockwave-flash",
  ".tar.gz"       =>      "application/x-tgz",
  ".tgz"          =>      "application/x-tgz",
  ".tar"          =>      "application/x-tar",
  ".zip"          =>      "application/zip",
  ".mp3"          =>      "audio/mpeg",
  ".m3u"          =>      "audio/x-mpegurl",
  ".wma"          =>      "audio/x-ms-wma",
  ".wax"          =>      "audio/x-ms-wax",
  ".ogg"          =>      "application/ogg",
  ".wav"          =>      "audio/x-wav",
  ".gif"          =>      "image/gif",
  ".jpg"          =>      "image/jpeg",
  ".jpeg"         =>      "image/jpeg",
  ".png"          =>      "image/png",
  ".xbm"          =>      "image/x-xbitmap",
  ".xpm"          =>      "image/x-xpixmap",
  ".xwd"          =>      "image/x-xwindowdump",
  ".css"          =>      "text/css",
  ".html"         =>      "text/html",
  ".htm"          =>      "text/html",
  ".js"           =>      "text/javascript",
  ".asc"          =>      "text/plain",
  ".c"            =>      "text/plain",
  ".cpp"          =>      "text/plain",
  ".log"          =>      "text/plain",
  ".conf"         =>      "text/plain",
  ".text"         =>      "text/plain",
  ".txt"          =>      "text/plain",
  ".dtd"          =>      "text/xml",
  ".xml"          =>      "text/xml",
  ".mpeg"         =>      "video/mpeg",
  ".mpg"          =>      "video/mpeg",
  ".mov"          =>      "video/quicktime",
  ".qt"           =>      "video/quicktime",
  ".avi"          =>      "video/x-msvideo",
  ".asf"          =>      "video/x-ms-asf",
  ".asx"          =>      "video/x-ms-asf",
  ".wmv"          =>      "video/x-ms-wmv",
  ".bz2"          =>      "application/x-bzip",
  ".tbz"          =>      "application/x-bzip-compressed-tar",
  ".tar.bz2"      =>      "application/x-bzip-compressed-tar"
)

2017年6月3日土曜日

Raspberry Pi ロボット開発用OSの選択は?

Raspberry Piには、OSが複数あるわけで、、、

一方、ロボット開発のOSとしては、やはり

シンプル
処理速度
メンテナンス

などの要素から、、、

選択しなければならない訳で、、、

で、最終的には、Raspbianとarchlinuxで、比較をしたけど、、、

結局、処理速度を比べると、

ちょっと信じ難い差が出てしまう。

たとえば、

同じ、プログラム(下記プログラム)で処理時間がこんな感じ。

右が Raspbian、左が archlinux

この傾向は、OpenCVや、他の処理速度テストでも同じ、、、

やっぱり、Raspbianの方が最適化されているという事でしょうか?


#include <stdio.h>
#include <time.h>
#include <math.h>

#define PI 3.141592

int main(void)
{
int i, j;
double len, rad;
clock_t start, end;

start = clock();
for(i = 0; i < 180; i++)
{
rad = (double)i * PI / 180.0;
for(j = 0; j < 10000; j++)
{
double x = len * cos( rad );
double y = len * sin( rad );
}
}
end = clock();
printf("processing time:%d[ms]\n", end-start);

return 0;
}


という事で、Raspbianを選択する事に(^^)

Peace!!

2017年5月31日水曜日

Raspberry Pi と Archlinux

僕は、ロボットのコントローラとして、Raspberry Piを使っている。

僕は、PC98でマルチウィンドのGISシステムを開発した。当時はハードの性能を極限まで引き出す、そんな事をしなければならなかった。

CPUは、i80286

GISシステムは、ある意味CADなので、1000万ベクトルの検索を2秒以内で検索できる事を目標に開発した。

CADの図形DBの設計、図形の検索のアルゴリズムを考えて、最高に面白かった。

だから、PC98の200倍の性能のRaspberry Piを知った時、迷わずロボット創れると思った。根拠ないけど、、、

で、OSも、調べて迷わずArchlinux

今は、Raspberry Piのホームページからダウンロードできないけど、、、

Raspberry Piは、ハードとしての完成度が高いので、シンプルなOSが良いと思った。

ただ、ロボットの開発工数を考えるとツールがそろっているRaspbianを選択して、日本最大のロボット実証事業でRaspberry Piをロボットコントローラとして使った。

ただ、archlinuxもツールがそろって来て、そしてjessieもリリースされて、、、

やっぱりArchLinuxで良いのではないかと、、、

久しぶりにインストールしてロボットの開発環境を作ったけど、
wiringpi, lighttpd, そしてopencvも最新バージョンがpacmanでインストールできる。
これは、archlinuxのコミュニティーのおかげだけど、、、

raspbianで、opencv3の環境構築には数時間かかるけど、archlinuxはpacmanで一発。

いいか、悪いかは別にして、gccも
raspbian 4.9
archlinux 7.1

僕は、基本的に最小限のリソースで、マルチプラットフォームプログラミングを優先してこれまでシステム開発をしてきた、、、

それを考えると、ロボットコントローラは、archlinuxが良いのかもしれないと、、、

僕らは、陳腐なハードで、アルゴリズムを考えてシステムを作った。

今の、フレームワークのオンパレード、システム開発は楽しいのだろうか?

コンピュータのハードをダイレクトに生かせるOSや、開発手法が大事なのではないだろうか、、、

日本は、個別開発がITというIT土方世界、、、

でも、本当は、自分が考えたアルゴリズムで、世の中変える!

その手段が、IT

アルゴリズムを考えるときには、シンプルなハードとOSで考えた方が良い、、、

それが理解されていないのが、後進国になってしまった日本かも、、、

Peace!!

2017年5月8日月曜日

野外で放置されて1年の Raspberry PiとLogicool C930e

野外に放置していたRaspberry Pi B、Logcool C930e 2台

USBコネクターも錆ています。

コネクターなどを掃除して、SDカード挿入して稼働確認。。。

なんと、動いたーーー

恐るべし、

というか、大事にします。

放置しっぱなしで、ごめんなさい。

最初の写真は、C930eで撮影したものです。

Peace!!

放置していたRaspberry Piに接続して、
fswebcamコマンドで撮影

起動しました(^^)

放置していたRaspberry PiとC930e

腐食しているので掃除しました

裏もホコリだらけ


Raspberry Piはこの中にいれていました
このケースごと外に置きっぱなし



2017年4月28日金曜日

Raspberry Pi 3が起動しなくなった(泣)

失敗です。
ただ、取り敢えず、起動はできるようになりましたが、、、


1.何をして、何が起こったのか?

そもそも、しばらくupdate関連をしていなかったので、、、

sudo apt-get update
sudo apt-get upgrade

ところが、エラー、、、
あっ、、、

python -V
Python 3.4.2

sudo  rm /usr/bin/python
sudo ln -s /usr/bin/python2.7 /usr/bin/python

Tensflowなど、AI関連の開発をしていたので、version 3を使っていた。

再度、

sudo apt-get update
sudo apt-upgrade

sudo rpi-update

OkOk (^^)

何を考えたのか?

sudo apt-get dist-upgrade

reboot後、、、

起動しない。
画面も、まっくろ、
基盤は、赤い電源ランプのみ、、、


2.対応
(1)ハードが壊れたのか?

jessieをインストールしただけのSDカードがあったので、
それを、Raspberry Pi3にセットしてboot
これは、OK!
ハードは大丈夫


(2)SDカードがおかしくなった?

SDカードをマックに差し込むと、bootディレクトリーがいつも通りにマウントされる。
ついでに、下記の手順でLinux部分をマウントして確認。
下記のGithubに行って、手順に従ってインストールして、マウント

https://github.com/gerard/ext4fuse

sudo dscl . append /Groups/operator GroupMembership phipo009
 brew tap homebrew/fuse
 brew install Caskroom/cask/osxfuse
 brew install ext4fuse
 sudo ext4fuse -o allow_other /dev/disk2s2 mnt

問題なく確認

(3)正常に動いているRaspberry Pi3の/bootをコピーして上書き
かなり手荒な事ですが、、、
上書き後、Raspberry Pi3に差し込んで起動。。。

あ〜ら、起動したじゃん!!!
でも、しかし、おかしい、、、
apt-get などをすると、、、

Selecting previously unselected package libgstreamer-plugins-base1.0-0:armhf.
Preparing to unpack .../libgstreamer-plugins-base1.0-0_1.4.4-2+deb8u1_armhf.deb ...
Unpacking libgstreamer-plugins-base1.0-0:armhf (1.4.4-2+deb8u1) ...
Selecting previously unselected package gstreamer1.0-plugins-base:armhf.
Preparing to unpack .../gstreamer1.0-plugins-base_1.4.4-2+deb8u1_armhf.deb ...
Unpacking gstreamer1.0-plugins-base:armhf (1.4.4-2+deb8u1) ...
Setting up libgstreamer1.0-0:armhf (1.4.4-2+deb8u1) ...
Setting up libgstreamer-plugins-base1.0-0:armhf (1.4.4-2+deb8u1) ...
dpkg: error processing package libgstreamer-plugins-bad1.0-0:armhf (--configure):
 package is in a very bad inconsistent state; you should
 reinstall it before attempting configuration
Setting up gstreamer1.0-plugins-base:armhf (1.4.4-2+deb8u1) ...
Processing triggers for libc-bin (2.19-18+deb8u7) ...
Errors were encountered while processing:
 libgstreamer-plugins-bad1.0-0:armhf

E: Sub-process /usr/bin/dpkg returned an error code (1)

こんな感じのエラー、、、

gstreamerもインストールしましたが変わらず。

で、とにかく、データや、buildの大変な、openCV3.2.0 などをバックアップ中。。。
これだけでも、めっけモノ、、、

諦めなくてよかった。(^^)

Peaceじゃないけど、、、、
PEACEだぁ

追加
sudo apt-get -f install
audo apt-get autoremove

も、実行しましたが、、、

sudo apt-get upgrade
Reading package lists... Done
Building dependency tree    
Reading state information... Done
Calculating upgrade... Done
0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.
1 not fully installed or removed.
Need to get 0 B/1,299 kB of archives.
After this operation, 0 B of additional disk space will be used.
Do you want to continue? [Y/n] y
dpkg: error processing package libgstreamer-plugins-bad1.0-0:armhf (--configure):
 package is in a very bad inconsistent state; you should
 reinstall it before attempting configuration
Errors were encountered while processing:
 libgstreamer-plugins-bad1.0-0:armhf
E: Sub-process /usr/bin/dpkg returned an error code (1)

ついでに、、、
場当たりてきですが、、、

sudo apt-get install gstreamer0.10-alsa:armhf gstreamer0.10-plugins-base:armhf gstreamer1.0-alsa:armhf gstreamer1.0-libav:armhf gstreamer1.0-omx gstreamer1.0-plugins-bad:armhf gstreamer1.0-plugins-base:armhf gstreamer1.0-plugins-good:armhf gstreamer1.0-x:armhf
変わらず、、、

2017年4月1日土曜日

働き方改革 基本は 「信頼」

企業の「働き方改革」のサポートをしているけど、

調査して、はっきり出てきていたのは「信頼」の

高い組織は生産性が高いという事。相関係数は0.76

これは、4つの組織の信頼を調査した結果。

細目は省くけど、4分類16項目で調査した結果。

生産性は、黄色の組織が高く、青の組織が低い。

スコアー平均値の順に組織が並ぶ。

そして、知識創造ネットワークも「信頼」が高い組織が密であり

生産性が高い。

知識創造ネットワークと生産性との相関は、なんと0.83

黄色の組織(信頼が高い)

青色の組織

組織の「信頼」はマネジメントの問題であり、

知識創造ネットワークの問題でもあり、

それらはマネジメント変革で組織の生産性も高められる。

しかし、今、生産性を高めいようと、

役員が旗を振っている組織には無理かも

何故なら、その人たちが、

古いマネジメントモデルで生きてきた人だから、、、

知識創造マネジメントと、信頼マネジメント

あなたはできますか?

Peace!!

2017年2月26日日曜日

New Kayak ANTIX

2016年の10月に発表されたJackson Kayak の ANTIX 入手

River Run 用のkayak

僕的には、大歩危、小歩危用です。

形的には、昔のピロエットSSを短くした感じ。

乗った印象は、、、

重心は、前勝負のカヤック

重心位置からの前後フラットボトムがサーフィン安定性を担保

独特のリーンがと、コックピット後ろのエッジと相まって重心移動でより機動性を高める。

強い流れのなかでキュッ、キュッって感じで操作やターンできる。前に重心移動すれば、高波も刺すように走破。

今日は、寒かったので、自重したけど、夏の増水期に、爆発的に楽しめそう

ある意味、自分にとっての理想のkayakです。
カラーも最高!出会えてよかった。

いつまでも、川とともに、、、(^^♪

Peace!!





2017年2月12日日曜日

Installation of TesorFlow on windows10

基本メモなので、、、

Raspberry Pi、Mac ProにTensorFlowインストールので次は、Windows10
ただし、先にOpenCV3をビルドしてインストールした関係で、ひと手間必要

課題と解決

仮想環境を使わない開発も行いたいので、下記のような課題が出てきます。
OpenCV3をビルドする時に、MinGW64をインするトールしている。
その為に、MinGWのpythonと、Anacondaのpythonが競合する

従って、Anacondaインストール後に、環境設定でpathを変更する。

大まかな手順

1. Anacondaのインストール

2. 環境設定の変更

3. TensorFlowのインストール(仮想環境版)

4. 確認

1. Anacondaのインストール

インストールは、Anacondaのサイトからダウンロードして、ダウンロードしたファイルを実行します。
この時、インストール先は、Cドライブの自身のホームディレクトリーです
インストールは、インストールしたユーザ利用を選択してインストールします。
これにより、ユーザー環境変数として設定されますので、システム環境変数が優先します。

<注意点>
今回は、python(バージョン3.5)のAnacondaをインストールしました。
現時点(2017/2/10)では、Anaconda3-4.3.0.1が最新です。Pythonも3.6です。しかし、TensorFlowは3.6では動きません。その為にPython3.5のバージョンあるAnaconda2-4.2.0を使いました。また、下図のように、Python3.5.2へのupdateも画面にありますが、これをすると3.6にupdateされてエラーが発生して、再インストールが必要になります。


2. 環境設定の変更

ちなみに、Anadacondaの仮想環境だけで使う場合には、環境設定の変更は必要ないです。

OpenCV3をビルドする為にMinGWをインストールしました。その時にpython2.7もインストールしています。パスを変えないと、このpython2.7が優先されます。両方ともに使えるようにするために変更します。

Windowsの環境変数の設定パネルを使って、ユーザー環境変数に設定してあるAnacondaの値を、システム環境変数に設定しなおします。ユーザー環境変数の値は、削除します。

私は、anacondという変数をつくり、それにAnacondaの設定値を記述し、その変数をPATHの先頭に挿入しました。

システム環境変数にanacondaの変数を作成

システム環境変数にanacondaの変数の内容
ユーザ変数に設定していた値


設定後
 コマンドプロンプトを開いて、下記を入力して画面のイメージになれば設定変更は、成功です。

python -V



3.1 TensorFlowのインストール

最初に、Anaconda Navigatorを使って、仮想環境の構築をします。
tensorflowとして環境構築します。


その後、作った仮想環境からTensorFlowをインストールします。
仮想環境のtensorflowのらんの右に三角形の矢印があり、それをクリックすると、選択画面があり"Open Terminal"を選択します。


選択後、terminal が開きますので、下記のコマンドを入力してインストールします。

pip install tensorflow


上記のようになれば、インストールは成功です。

次に、下記のコマンドを入力して、0.12.1などのようにバージョン表示されたら成功です。

python -c "import tensorflow as tf; print(tf.__version__)"


4. 確認

確認はTensorFlowのサイトにある下記のプログラム(test.py)を実行させます。

import tensorflow as tf
import numpy as np

# Create 100 phony x, y data points in NumPy, y = x * 0.1 + 0.3
x_data = np.random.rand(100).astype(np.float32)
y_data = x_data * 0.1 + 0.3

# Try to find values for W and b that compute y_data = W * x_data + b
# (We know that W should be 0.1 and b 0.3, but TensorFlow will
# figure that out for us.)
W = tf.Variable(tf.random_uniform([1], -1.0, 1.0))
b = tf.Variable(tf.zeros([1]))
y = W * x_data + b

# Minimize the mean squared errors.
loss = tf.reduce_mean(tf.square(y - y_data))
optimizer = tf.train.GradientDescentOptimizer(0.5)
train = optimizer.minimize(loss)

# Before starting, initialize the variables.  We will 'run' this first.
init = tf.global_variables_initializer()

# Launch the graph.
sess = tf.Session()
sess.run(init)

# Fit the line.
for step in range(201):
    sess.run(train)
    if step % 20 == 0:
        print(step, sess.run(W), sess.run(b))


コマンドプロンプトでの実行して、下記の結果が表示されます。
python test.py


Peace !!

2017年2月9日木曜日

Installation of TensorFlow on Mac Pro

Anavondaは既にインストールしてあるので、超簡単(^^)

$ conda -V
$ conda create -n tf python=3.5
$ conda install -c conda-forge tensorflow

Fetching package metadata ...........
Solving package specifications: .

Package plan for installation in environment /Users/phipo009/anaconda:

The following NEW packages will be INSTALLED:

    mock:       2.0.0-py35_0      conda-forge
    pbr:        1.10.0-py35_0     conda-forge
    protobuf:   3.1.0-py35_0      conda-forge
    tensorflow: 0.12.1-py35_1     conda-forge

The following packages will be UPDATED:

    anaconda:   4.2.0-np111py35_0             --> custom-py35_0            

The following packages will be SUPERCEDED by a higher-priority channel:

    conda:      4.3.9-py35_0                  --> 4.2.13-py35_0 conda-forge
    conda-env:  2.6.0-0                       --> 2.6.0-0       conda-forge

Proceed ([y]/n)? y

conda-env-2.6. 100% |################################| Time: 0:00:00 945.91 kB/s
anaconda-custo 100% |################################| Time: 0:00:00   2.69 MB/s
conda-4.2.13-p 100% |################################| Time: 0:00:01 209.70 kB/s
protobuf-3.1.0 100% |################################| Time: 0:00:02   2.89 MB/s
pbr-1.10.0-py3 100% |################################| Time: 0:00:00   7.52 MB/s
mock-2.0.0-py3 100% |################################| Time: 0:00:00  14.13 MB/s
tensorflow-0.1 100% |################################| Time: 0:00:10   3.36 MB/s

$ pip install keras


Peace!!

TensorFlowを試してみた

まず、最初はKurin

オカリナ、または、sweet potato らしい(笑)

さすがに厳しい、オシロスコープとは



みかんだけど、、、オレンジ






Bingo!  recreational vehicle



















レッドボーンクーンハウンド まぁ、そうかなぁ。。。






















レッドボーンクーンハウンド?
毛が無いからかなぁ、、、(笑)















パドルと来たかぁ。
う、、、toilet seatとは、、、

これは、どうだ!!





















meatloafだって、、、
アメリカには、カレーパン無いしね

さぁ、使い込むぞ

Peace!!

追記

cd /home/pi/prj/tf
unzip models-86ecc9730d751c1f
mv models-86ecc9730d751c1f72e3bfecac958166390f4125 models
cd models/tutorials/image/imagenet
python3 classify_image.py

これで、モデルデータのダウンロードが始まる
一度、実行すると
/tmp/imagenet にモデルデータがダウンロードされる。
これを、コピーしておいて、起動直後には、/tmpにコピーすればよい

#!/bin/bash
cp -r tmp-imagenet /tmp/imagenet

実行するディレクトリーにimgディレクトリーを作って、そこに評価する画像データを入れています。

python3 classify_image.py --image_file img/kurin.jpg

この結果が、上の内容。(^^)/