2006年12月アーカイブ

ご存知の方も多いと思いますが、riyaというサービスではアップロードした写真の中に顔があるとそれを認識して視覚化したり、物があるとそれを認識してその物に似た商品(場合によってはそのもの)をみつけてくれるという機能があります。一見すごい技術に見えるのですが、実はあるライブラリを使えばこれを簡単に実現することができます。

事の発端は単純に自分が顔認識をやってみたいと思ったからで、そのためのライブラリやソフトウェアがないのかなぁとネットをさまよっていたらこのライブラリに行き着いたというわけです。

そのライブラリは「opencv」といいます。

このopencvは、Intelが開発を行っているものでSourceforgeにてプロジェクトが進められています。このopencvというのは、別に顔認識に特化したライブラリではなく、「OpenCV (Open Source Computer Vision) is a library of programming functions mainly aimed at real time computer vision.」、つまりリアルタイムにコンピュータの画像、映像を扱うためのライブラリで、顔認識はその中の1つの機能となっています。

コンパイルは、Windows・Mac OS X・Linuxのそれぞれで可能となっているようで、自分はdebian上でコンパイルしました。WindowsとMac OS XですとWebCamなどとの連動も簡単に行なうことができるようなので、リアルタイムに顔を認識させるサンプルを見ることもできそうです(未確認)。ちなみにdebian上でのコンパイルは、普通に ./configure && make && sudo make install であっさりいけました。

ソースの中にはサンプルプログラムもありますので、それを参考に顔認識を行なってみたのが以下の写真です。

一昨日ライブドアテクノロジーセミナーが行なわれました。主催者の側でしたが、微妙に部が違うのでお客みたいな感じで見させて頂きました。ということで感想をば。


「はてなの開発/運用について」 - はてななおやさん

なおやさんのプレゼンで自分がササったのは、以前もどこかの記事かなんかで見たような気もしますがMySQLの前に置かれたLVSです。LVSをReverse Proxyの前に置くというのは普通ですけど、MySQLの前のLVSを置くというのはメンテという面でとても楽ができそう。うちでも導入しようかしらん。
でもLVSを使うのはなんかくやしいから他のソリューションを探してみようかと思ったりして。今のところ考えてるのは、balanceかな。でもプロダクション環境のMySQLに導入してどれだけ耐えられるかが不明なので、要調査ですが。

あと、Capistranoのshell機能。あれ便利そう。いつもは foreach i (IP1 IP2 IP3) とかコマンドラインでやってごにょごにょやるんですが、あれがあれば便利そう。あれは社内のDeployフレームワークに取り込もうと思った。

「Technologies for UI ライブドア」 - ma.la

やっぱ、なんかUIに関する考え方がニュータイプという印象。いつ聞いても、ほーと関心することを言ってくれる。負荷に対する考え方とか、確かにそうだよねと当たり前だけど思い付かないよねというところをさらっと説明しているところがすごい。
UI(主にJavaScript)がいじれて、サーバ側もいじれたら強いだろうなぁー、と思った。


ということで、このあと懇親会になだれこんだわけですが、何人かの方と名刺交換をさせて頂きましたが終電があるため一次会で帰りました。どうやら二次会はサブテカーばかりになって、そしてはてなのナガヤマンが脱いだとか脱いでないとか。

そんなライブドアテクノロジーセミナーでした。

今日家に帰ったらなにやら大きめの封筒が家の前に。なんだろと思って送り元を見てみると「club. nintendo」と書いてある。

ありゃ、なんか注文したっけなーと説明を見てみると、なんとゴールド会員様にゴールド特典をプレゼント!ということで、プレゼントが届きました。中身は来年のカレンダー!任天堂も粋なことをしてくれますね。

ゴールド会員様とか言って、そんなに買ったっけなぁ?と数えてみたら今年だけで6個ぐらいソフトを買っていることに気付いた…。いつのまにか任天堂の魔力に引き寄せられているみたいですね。ちなみに、今年買ったソフトは以下。

監修 日本常識力検定協会 いまさら人には聞けない 大人の常識力トレーニングDS
ニンテンドーDSブラウザー(ニンテンドーDS Lite用:DS Liteメモリー拡張カートリッジ同梱)
プロジェクトハッカー 覚醒
ニュー・スーパーマリオブラザーズ
テトリスDS
英語が苦手な大人のDSトレーニング えいご漬け

思えばこんなに任天堂に魅かれたのは小学生のファミコン以来なので、なんとなく今の任天堂がノっていると言われるのもうなずけます。

追記
club. nintendo を見たら、どうやらゴールド会員の上にプラチナ会員というのもあるらしい…。
今のポイントの倍ないとプラチナ会員になれないよ!><どんだけ買えばいいのよw
プラチナ会員のプレゼントはなんなんだろう?club. nintendoには書いてないな。

こんな封筒↓
clubnintendo2006_01.jpg

もちろんclub. nintendoのトレードマーク、マリオの帽子も印刷されています↓
clubnintendo2006_02.jpg

ゴールド会員様だって、照れるねこりゃ↓
clubnintendo2006_03.jpg

最初はやっぱりWii。Wiiを買えってことかいこれは?↓
clubnintendo2006_04.jpg

ゼルダ↓
clubnintendo2006_05.jpg

任天堂と言えばやっぱり!↓
clubnintendo2006_06.jpg

ニンテンドーDS Lite ジェットブラック
任天堂 (2006/09/02)
売り上げランキング: 31
おすすめ度の平均: 4.5
4 なんとか購入しました
4 ようやく買えました
5 最高!
今更DBICではなくCDBIの話なのですが、今までdeflateの使い方というか意味を激しく勘違いしてました。

inflateは、引いてきたレコードのカラムの値をオブジェクトでラップするために使います。これは知っていたのですが、deflateは関数をなにも指定しないときに呼ばれる関数だと思っていました。(今思うとかなり恥しい…)しかし、実際のdeflateの意味はまったく違うというのがわかりました。

結論から言うと、deflateはレコードをcreateするときに発動するもので、deflateを設定したカラムに あるオブジェクトを渡すとそのインスタンスに対してdeflateで指定した関数もしくはcoderefが呼ばれるという仕組みのようです。
つまり下記のようなhas_aを定義したFooというデータクラスがあったとして
__PACKAGE__->has_a(
    dt => 'Time::Piece',
    inflate => sub { Time::Piece->strptime(shift, '%Y-%m-%d') },
    deflate => 'ymd',
);
このデータクラスを使用したプログラムの中で
my $dt = Time::Piece->new;
Foo->create({
    dt => $dt,
})
とやると、createでdtに渡した、$dtに対してdeflateで指定したymd関数を使い、$dt->ymdの返り値がdtカラムに格納されるということです。

Class::DBIやClass::DBI::Relationship::HasAを徘徊してみると、このdeflateはdeflate_for_createかdeflate_for_updateのときのトリガとして登録されるようで、しかもcreate時に渡された値(上記の場合の$dt)がオブジェクトなどのrefの評価がtrueになる場合のみ発動するもののようです。

ちなみに、もしdeflateにcoderefが指定されていた場合には、そのcoderefに引数として$dtが渡ってきますので、そこでよしなに処理をしてreturnをしたものがINSERTされます。つまり、下記のようにすると先程のコードと同じ動作になります。
__PACKAGE__->has_a(
    dt => 'Time::Piece',
    inflate => sub { Time::Piece->strptime(shift, '%Y-%m-%d') },
    deflate => sub { shift->ymd },
);

検索

広告

OpenID対応しています OpenIDについて
Powered by Movable Type 4.22-ja