Archive for the Programming Category

著者の方のblogエントリで知ったのですが,日本初のProcessing解説書「Built with Processing」の改訂版が出たみたいです.僕自身,初版を持ってるので多分買わないと思いますが,Processingの最新バージョンに対応してたり,追加の記事もあるらしいので,これからProcessing始めてみる人には良いと思います.

Built with Processing [改訂版]
著者/訳者:前川 峻志 田中 孝太郎
出版社:ビー・エヌ・エヌ新社( 2008-03-31 )
定価:¥ 3,570
単行本
ISBN-10 : 4861005582
ISBN-13 : 9784861005589



あと,Processingつながりということで,Augmented Reality Library in Processingという記事の紹介.
simpleARToolKitというProcessingライブラリらしい.blogの動画を観た感じだと思ったより軽快に動いてますね.

カメラ周りのコードが簡単に書けるProcessingでARToolKitがこれだけ軽快に動くとなると,
Processingで用意されている便利な機能やGainerとの連携なんかができたりといろいろ楽しそうです.

************
あと,今日知ったのですが,C/C++のポインタの機能–変数の場所(アドレス)という記事がえらいことになってます.簡潔に言うと,上記の記事のポインタ周りの解説・サンプルコードが間違っているという話なわけですが,C++界で著名なεπιστημηさん等が色々と突っ込みを入れている模様.

僕自身も「エイプリールフールネタか!!」と思ってましたが,素で間違っていたみたい.まぁ,そこそこC,C++がわかっている(と自負している)人は間違い探し的な意味合いで読んでみると勉強になるかも(※ポインタ苦手な人は注意!!).といいつつ,C言語習いたてのとき(高専在学時)はポインタ苦手だったので,あんまり責められないですが(苦笑)

久々にARToolKit触ってみました.
まぁ,手元にまともなwebカメラはありませんが。。。
※ IRカメラ for Diffused Illumination 作成のためにバラしたので

さて,現在手元にある環境はVisual Studio 2005 pro + Windows SDK.
この環境でARToolKit-2.72.1をビルドすると,
libARvrmlの生成でこける –> simpleVRMLビルド失敗
というわけのわからない事態に陥ります(※VRMLを見捨てれば無問題).

なんか,これは学生の時に屈した気が。。。
と苦い思い出がフラッシュバックしつつ,「この1年間の成果を見せてやる!!」という
休日深夜の変なノリで,ごにょごにょやってなんとかクリアしました.リベンジ成功!!
※簡単に上手くいったような書き方ですが,2回程挫折しかけました(苦笑)
#公式の解決法ではないため,ここにはたぶん載せません.
#興味のある人はメールででも聞いてください.


さて,残るはARToolKit\binにできる実行プログラム(Debug版)を実行しようとすると,
「MSVCP71D.dll,MSVCR71D.dllがありません!」と怒られる件について.

Web上では,
・Debug版切り捨て(世知辛い。。。)
MSVCP71D.dll,MSVCR71D.dll※再配布禁止ファイルをweb上でダウンロード

等の策を講じられているみたいですが, これだと根本的に何も解決してないので,
DSVLを再ビルドしてDSVLd.dllを生成,ARToolKit\binにコピーでクリアしました.

まぁ,このビルドにもいろいろ罠があって苦労しましたが.しばらくVC++触りたくない(苦笑)
頭の体操的には結構良いレベルではないかと思うので,興味のある人は試してみると良いかも.

#ARToolKit-2.72.1, VC++ 2005 という組み合わせでビルドに成功しないという事例が
#(国内の)Web上にはほとんどないんですけど,自分だけ?
#
この問題で困っている人って潜在的に結構いそうな気がするんですが。。。

(ホントに基本機能のみだけど)GainerをC++で扱えるようになったので,某動画サイトの流行に乗っかってみました.後悔はしていない.やってることは,加速度センサの値に応じて,画像を切り替えてるだけです(←俗に手抜きともいう).

今回,初めて某動画サイトへの動画投稿に挑戦しました.
叩かれそうで怖い。。。 まぁ,生暖かい目で(以下略)

OpenCV/RAW画像生成 - Point at infinityという記事をアップしました.
といっても個人用ですが。。。(←需要があるとは思っていない)
まぁ,参考までに.

/****** [ここから余談]******
OpenCVの普及により画像処理という分野が身近になったのはいいのですが,最初からOpenCVに依存しすぎると,理屈がわかっていなくても高度なアルゴリズムが簡単に組めてしまうため,いざ応用となるとアタフタということになりがちなので,C言語習いたての人なんかはRAWファイルを使って一からアルゴリズムをコーディングしてみるのも後々のためにいい勉強になりそう.C言語に慣れてきたら,ppmなどファイル情報がヘッダ部に書き込まれているようなフォーマットにチャレンジするとかね.
******[ここまで余談] ******/

ということで,OpenCVの話はここらへんにして.
最近,30日でできる! OS自作入門という本を買いました.
以前から気にはなっていたのですが,なかなか購入までには踏み切れなくて。。。

なのでやる気が再燃した今こそと,思い切って購入.
値段は3,990円とちょっと高めですが,それだけの価値がある読みやすい本だと思います.

ということで,現在1日目終了(バイナリエディタ久し振り使ったな…).
いつまで自分が続くのか…というのも気がかりですが,最近いろんなものに手を付け過ぎな感が。。。

30日でできる! OS自作入門
著者/訳者:川合 秀実
出版社:毎日コミュニケーションズ( 2006-03 )
定価:¥ 3,990
単行本
ISBN-10 : 4839919844
ISBN-13 : 9784839919849



またまた,話が飛びますが,奥華子のシングル「手紙」をようやく買いました.
GYAOで「手紙」のPVが120秒間視聴できるんですけど,音楽とPVの出来がすごく良くて癒されます.
当分,BGMとして活躍しそうです.

手紙 / 奥華子 / Array CD ( Music )
ポニーキャニオン
定価:¥ 1,200 ( 2008-01-23 )
ASIN : B000ZEJT5I ( JAN コード : 4988013435049 )

前回予告していたようにC++でGainerを扱うために行った処理を簡単に書いてみます.
もしかしたら,間違っていたり,こうした方が良い点などがあるかもしれないので,ご指摘お願いします.

ということで,今のところ最低限用意しているメソッドはこんな感じ.

(1)Gainer初期化
通信速度,パリティ等の設定(こちらを参考)

(2)リセットメッセージ送信
Gainerモジュールに文字列「Q*」 を送信.
(送信に成功したらGainer側からメッセージが送られるので受け取る)

(3)コンフィギュレーションの設定
Gainerモジュールに文字列「KONFIGURATION_1*」を送信.
(送信に成功したらGainer側からメッセージが送られるので受け取る)

(4)データの取得
Gainerモジュールに文字列「I*」を送信.
送信に成功したら,アナログ入力ain0~ain3のデータが文字列として
送られてくるので,その文字列を受信.

(5)文字列→数値変換
受信したアナログ入力のデータは,「Ixx…xx*」(※xx…xxがデータ部)
という構成の文字列なので,まずは入力分だけ文字列を分割.
また,値は16進なので10進に変換して利用.

(6)後処理
ポートのクローズ処理.

************************
あと,「プログラム風」に書くとこんな感じです.
※前回の記事ではこれらの処理に移動平均法の処理も加えています.

C++:
  1. #include "MyGainer.h"   //ヘッダのインクルード
  2. MyGainer *gainer;
  3.  
  4. int main(int argc, char** argv)
  5. {
  6.     //Gainerオブジェクト生成
  7.     //ここではCOM3を指定
  8.     gainer = new MyGainer(3);
  9.  
  10.     //初期化
  11.     //(COMポートオープン、通信速度等設定)
  12.     gainer->initialize();
  13.  
  14.     //コンフィギュレーションの設定(MODE1)
  15.     gainer->setConfiguration(1);
  16.  
  17.     //キー値
  18.     int key = 0;
  19.  
  20.     //ループ
  21.     while(1)
  22.     {
  23.         //データ取得
  24.         //(メッセージ送信 + データ受信 + 文字列→数値)
  25.         gainer->getAllAnalogInput();
  26.  
  27.         //キー入力待ち(1msec)
  28.         key = getKeyInput();
  29.  
  30.         //ESCキーが押されたら終了
  31.         if(key == 0x1b)
  32.         {
  33.             break;
  34.         }
  35.     }
  36.  
  37.     //後処理(COMポート解放)
  38.     gainer->release();
  39.     delete gainer;
  40.  
  41.     return 0;
  42. }

C++でGainerを扱う(といってもアナログ入力のみ)ライブラリを自作したので,早速OpenGLと組み合わせて実験.とりあえず,動いたー!!

でも,ソースが汚いです。。。_| ̄|○
ということで,公開はまだまだ先になりそう(コードがグダグダなのでしないかも。。。).

とりあえず,どんな感じでシリアル通信しているかを簡単に記述した擬似コードを後日記事にする予定.

Gainer with C++(加速度センサ)

前回の記事で,

>C++でGainerを扱えるライブラリもあったら便利そうですが
とか言ってたけど,ちょっと探した感じだと無さそうなので自力でなんとか作ってみる.

まぁ,Gainerモジュールとはシリアル通信ができるので,Tutorial/Basic/Common/03/ja - GAINER.ccやSourceForgeに置いてある資料(シリアル通信の際のコマンド表),javaのソースなんかを参考にしながらゴリゴリと(自分用なのでエラー処理とか適当).

とりあえず,アナログ入力1~4までのデータ取得はできた感じなので,時間を見つけて簡単なアプリができたらなぁと.
以下はアナログ入力1~3の値(加速度センサのデータ)表示のスクリーンショット.

videoInput Libraryを利用したキャプチャサンプルに関する記事、OpenCV/videoInput Libraryによるビデオキャプチャを更新しました.間違い・御指摘等ありましたら連絡お願いします.

これまでDirectShowでキャプチャするときにはOpenCVCVCAMをメインで使っていたのですが,最近見つけたvideoInput Libraryに移行しようかなぁとか思ってみたりしてます.
#CVCAMもキャプチャ速度は速いんだけど,コールバック関数を使ってるからOpenGLなんかと組み合わせにくいんだよね…

実際にvideoInput Libraryを使ってみた感想としては,

[長所]
・基本的に初期設定後,キャプチャ関数を実行するだけなので簡単で扱いやすい
・(内部で無駄な処理をしてないみたいなので)かなり高速&CPU使用率が低い
※640x480でもサクサクキャプチャできます

[短所]
・FPSの設定が見当たらない(見逃してるだけかも)
#ライブラリのソースは公開されているため,いざとなったら,自分でFPS設定部を書けば解決する話.
#そのため,そんなにマイナスポイントではない.

ということで個人的にはかなり好印象です.
後でもう少しライブラリのソース追っかけてみようかな.

明後日ソフ開を受けるので,それが終わったらサンプルプログラムを公開予定です.
とりあえず,試験勉強しないとな.>自分

dandelion's laboratoryに「Windows SDKインストール」という記事と「VS 2005でCVCAMを使う」という記事を更新しました.

それにしても,VC++でDirectShowを扱う環境としてPlatform SDKが最新だと思っていたのですが,現在は,Windows SDKが最新なんですね(Windows SDK自体は結構前にリリースされているみたいだけど。。。).

ということで新し物好きな性格上,相変わらずながら後先考えずPlatform SDKを削除して入れてみました.
(※インストールするとVC++ディレクトリのパス設定が初期状態に戻ってしまうので,事前にパスの設定を控えておかないと危険)

インストールしてからも,BaseClassesのビルド時にエラーと格闘する羽目になりましたが,英語サイトのBBSでなんとか解決(インクルードディレクトリの記述順で解決するとは思わなかった。。。←不毛な1時間を過ごした人).

ということで,カメラ周りの環境は一通り整った感じ.

**************

あと,余談ですが,FlyCapture SDKチュートリアルというサイトの存在に最近気付きました(遅)
簡単に言うと,Point Grey Research社カメラのFlycapture SDKとOpenCVを組み合わせた便利なサンプルが載っているサイトです.

いやいや,学生の時にこのサイトの存在知ってたらなぁ。。。という感じです(←PGRカメラをDirectShowカメラとして扱えるドライバ + CVCAMでプログラミングしてた人).研究でPGRカメラを用いている人でOpenCV使いたい!という人には便利かもしれません.