hirax.net::Keywords::「デジカメ」のブログ



2012-12-29[n年前へ]

Rubyで(が)動くデジカメを作る!? キックオフ編 

 Rubyで(が)動くデジカメ作りに挑戦してみました。コンパクトデジカメ用の特殊ファームウェア(CHDK)に組み込み向けRuby(mruby)を組み込んでみようという試みです。CHDKというコンパクトデジカメ用ファームウェアは、機能拡張用の簡易スクリプト作成言語として、すでにBasicとLuaをサポートしているので、そこに(さらに)Rubyを追加する作業に果たして意味があるだろうか…?という疑問もあるだろうと思いますが、ひとまず挑戦してることにしました。

 そこで、まずはCHDKのMain.c中にあるcore_spytask()に、液晶画面に対して"Hello! Ruby!"を出力するmrubyコードを埋め込もう、という作戦を考えてみました。たとえばこんな具合のコードをcore_spytask()に書き入れて、arm-elf-gccでmrubyをビルドした上で(libmruby.aとlibmruby-core.aを作成し)、CHDK のビルド時にlibmruby.aとlibmruby-core.aをリンクしよう、という流れです。(main.cにmrubyをリンクするなら、Makefile中にlibmruby.aとlibmruby-core.aを追加するだけで良いといった理由もあります)

char osd_buf[30];
 mrb_value v;
mrb_state *mrb = mrb_open();
 char code[] = "def hello\n"
                "  \"Hello, Ruby!\"\n"
                "end";
mrb_load_string(mrb, code);
v=mrb_funcall(mrb, mrb_top_self(mrb), "hello", 0);
mrb_close(mrb);
sprintf(osd_buf, "%s", v );
draw_txt_string(2, 2, osd_buf, conf.osd_color);

 トライした結果は、mruby コードをCHDKに埋め込んんだソースはコンパイルできたけれど、arm-elf-gccでのlibmruby.a自体のビルドに挫折した…というものでした(作業に成功したかと一瞬思ったのですが…寝て起きたら動かない…というわけで、ありがちな幻を見ていたようです)。

 しかし、失敗はしましたが、コンパイル済みライブラリを誰かが作成したならばコンパクトデジカメのファームにmrubyを組み込むことは容易にできそうだ、という感触を持ちました。

 今日は、mruby組み込み挑戦コードをこんな風に書き換えて、そのコードをビルドしたファームでコンパクトデジカメを起動してみました。その起動スクリーンショートが右上の写真です。

printf(osd_buf, "Alas! I have no Ruby now!", v );
 これはもちろん、オスカー・ワイルドが書いた深紅のルビーを持っていた王子と空飛ぶツバメの物語(「幸福の王子」)の言葉です。

Rubyで(が)動くデジカメを作る!? キックオフ編Rubyで(が)動くデジカメを作る!? キックオフ編






2012-12-31[n年前へ]

デジカメ内部でレイトレーシング計算をさせてみる!? 

 「デジカメにレイトレーシングをさせてみませんか?」という声が聞こえたので、コンパクトデジカメ用ロシア製ファームウェアCHDKにレイトレーシング(光路追跡計算)のコード(aobench)を挿入した上で、デジカメの上でコンピュータグラフィックス(CG)コードを動かしてみました。

 計算(レンダリング)を行った画像サイズは64x64ピクセルで、レンダリングした結果をデジカメの液晶画面(左上部分)に表示してみたところが右の写真です。

 レンダリング計算実行部中の浮動小数点処理を雑に端折ってみたり・液晶画面への表示処理(減色処理)で大幅に手抜きをしてみたり…というわけで品質は良くありませんが、下の画像のようにコンパクトデジカメ内部でのレンダリングルーチンはそこそこまともに動いているようです(左:コンパクトデジカメ内部でレイトレーシングさせた結果、右:PCでJavascript+HTML5でレンダリングした結果)。

   

 現実にある光をレンズで集めたり・整えたりして像を浮かび上がらせているカメラも、将来、実際にある光だけでなく計算上の光を作り出し、何かを浮かび上がらせたりしているのかもしれませんね。

デジカメでレイトレーシングデジカメでレイトレーシングデジカメでレイトレーシング






2013-01-11[n年前へ]

デジカメ本体・SDカード…全パーツがプログラマブルに動く世界!? 

 2週間くらい、デジカメに挿入したSDカード内部に置いたソフトウェアをデジカメで動かすという、デジタルカメラ本体のファームウェア・プログラミングにハマっています(参考:デジカメ内部でレイトレーシング計算をさせてみる!?Rubyで(が)動くデジカメを作る!? キックオフ編 )。

 それとは別に、(デジカメ本体ではなく)デジカメに挿入したSDカード内部で色んなソフトウェアを動かそう!という「 デジカメ内部でRubyを動かす狂気!無線LAN内蔵SDカードアダプタPQI Air Cardの間違った使い方」という面白い話があります。これは、デジカメに内蔵するPQI Air Cardという無線LAN内蔵SDカードアダプタ上で各種プログラミングをしてみよう!という話です。

 デジカメに挿入したSDカード自体がプログラマブルに動き、(デジカメに挿入したSDカードに挿入したソフトウェアを元に)デジカメ本体もプログラマブルに動く…となると、もちろん、それらを組み合わせてみたくなります。そこで、今日は、(プログラミング可能な)無線LAN内蔵SDカードアダプタPQI Air Cardを購入し、このSDカード内に置いた改造ファームでデジカメ本体を動かしてみることにしました。

 PQI Air Carは4GB以上のmicroSDでないと動きません。その一方、今回使う改造ファームは、SDカードがFAT16でフォーマットされていないと起動できません。ということは、PQI Air Cardの動作加減かつFAT16でフォーマットできる上限=4GBのmicroSDカードを買って、改造ファームを焼き込んだ上でPQI Air Cardに差し込み、さらに、PQI Air Cardの壁面を削り「書き込み禁止状態」としてやれば、「内蔵SDカードがプログラマブルで、本体自体もプログラマブルなデジカメ」ができあがる、というわけです。

 そういうわけで、作ってみたのが右写真の「壁面をカッターで削ることで書き込み禁止状態に見せかけた、改造デジカメ本体ファームウェアを内蔵する無線LAN内蔵SDカードアダプタPQI Air Cardです。デジカメ本体・SDカード…全パーツがプログラマブルに・記憶領域を共有しつつ動くようになったわけですが、…さてさて、どんな使い方をしたくなるものでしょうね?

デジカメ本体・SDカード…全パーツがプログラマブルに動く世界!?






2013-01-13[n年前へ]

続 デジカメ内部でレイトレーシング計算をさせてみる!? 

 デジカメを改造して「シャッターボタン押下に連動し、レイトレーシング計算&表示&ファイル書き込み」をするようにしてみました。カメラのレンズが向けられた目の前の風景を写しているようでいて、実は全く別の風景を描き出す(役立たずな)デジカメのできあがりです。(参考:デジカメ内部でレイトレーシング計算をさせてみる!?

 このレンダリング・マシンと化したデジカメには無線LAN内蔵SDカードアダプタPQI Air Cardが挿入されていて、無線接続可能な各種サーバが起動中です(参考:デジカメ本体・SDカード…全パーツがプログラマブルに動く世界!?)。現在のところ各パーツ(内で動かすソフトウェア)がアクセスできる部分は次のようになっています。

  • デジカメ本体からアクセス可能な箇所:カメラ(各種機能・USB通信等)/ SDカード
  • 無線LAN内蔵SDカードアダプタからアクセス可能な箇所:無線LAN / SDカード
SDカード内のファイルを介して、デジカメ本体とSDカード内Linuxシステムが協調動作することもできるでしょうし、さらにそれらを介してデジカメ同士を連携しながら動かすことも、比較的簡単にできそうです。

 だから、たとえば、デジカメ同士が計算データを投げ合う(デジカメ・グリッド)の分散レンダリングとか、シャッターを押すと(GPSデータを元に”撮影”地点近くの)標高データでレイトレ・レンダリングとかいったことをしてみたり、デジカメのリモコンを無線LAN経由のスマホで作ってみたり…といった各種HACKをすることもできそうです。…そんなことをするなら、最初からすべてスマホでやった方が楽なような気もしますが…。

 

続 デジカメ内部でレイトレーシング計算をさせてみる!? 






2013-02-25[n年前へ]

「僕が一番欲しかったもの」 

 昨年(2012年)の年末、大晦日イブに「デジカメでレイトレしません?」とtwitterで囁(ささや)かれました。…もちろん、そう言われたら、間髪おかずに「はい、喜んで!」と答えるに決まっています。…そういうわけで、年末の大忙しの(はずの)大晦日、デジカメ・レイトレコードを書きました(参考:デジカメ内部でレイトレーシング計算をさせてみる!?続 デジカメ内部でレイトレーシング計算をさせてみる!?)。

 そんなコードを(「デジカメでレイトレなコードを書きましょう!」とtwitterで囁いた方が)紹介する「Extreme aobench - Syoyo Fujita (TokyoDemoFest 2013 seminar)」を観ました。

 「デジカメでレイトレーシング」が紹介された瞬間、会場に広がったカラッとした空気(くだらね~頭のネジがちょっと変~と何だか鼻で笑われた感じ)の笑いが最高に嬉しい!と感じました。それこそ、これこそが一番欲しかった「報酬」だったんだ!と気づかされました。

 くだらなくて・役立たずで・頭のネジがちょっと変…って、最高の反応じゃない?と思う2013年の2月の終わり、です。



■Powered by yagm.net