2010年10月7日木曜日

空手とビデオ判定

習ってる空手はかなり変わっている空手だ。カウンター攻撃をもっとも重要だと考える。大会でも通常の攻撃よりもカウンターの攻撃のほうを高く評価する。

でもその判定はむずかしい。体が向かってくるところで入れたカウンターは判定もむずかしくない。 しかし腰が動き始めた段階で食らうようなカウンターはなかなかわからない。

(30fpsの動画でも2、3コマのレベルだ)

タイミングはいいけど突きの威力が低いような場合とか。

 

そんなこんなで

外国人の選手の参加も増えて、今は自分が試合にでたときとは違いカウンターが別のポイントではなくなった。

 

 

けどカウンターは重要なのでそれを評価しなくちゃいけないって

ことでビデオ判定を入れるってことになった。

 

実験的に先月簡単な試合で導入しているのを見たが、とにかく試合が止まって流れを切って話にならない。テニスだとチャレンジとかで限定している。

  1. カウンター臭いのを発見
  2. 試合を止める
  3. ビデオで該当箇所を探す
  4. 判定

こんな流れだ。実験をみると試合時間よりあきらかに判定時間のほうが長い。てことでopencv + webcam で試合を止めた瞬間に該当箇所をすぐ確認できるものを

つくろうと制作中。最終的にはカウンター攻撃なのかとかも自動判定とかがまったく試合とめなくていいんだろうけど、それは12月じゃ無理だ。w

 

まぁ、サッカーとかでもそうだけど自分の身にふりかかってくると難しいなぁ。サッカーでは判定ミスもサッカーの一部だという考えもあるけど、

そんなものはうちの空手にはないしw

 

ffi-opencv を作って遊んでみた。

opencv を使わないといけない事象がでてきたのでいじり始めた。

ruby/OpenCV を使おうとしたら、どうやら放置プレイぽいしmatz ruby-1.8.x でしか動かないぽい。

とりあえず ruby/dl でちこちこ書いてたらなんかdouble がちゃんと扱えない風。どうやら設計的な問題らしい。

ffiを使うといんじゃね? と ay先生 に言われてちょっと調べてみると ruby-ffi なるものがあるようだ。

dl とちょっと違うのでとまどいつつ使ってみると。なかなかいい。

require "ffi"

module OpenCV

  module Highgui

      extend FFI::Library

      ffi_lib "/opt/local/lib/libhighgui.dylib"

      attach_function :cvNamedWindow,[:string, :int], :int

      attach_function :cvShowImage, [:string,:pointer], :void

      attach_function :cvQueryFrame, [:pointer],:pointer

      attach_function :cvCreateCameraCapture,[:int],:pointer

      attach_function :cvReleaseCapture,  [:pointer], :void

end

こんな感じ ffi_lib でshared object 指定して, attach_function , 関数, [引数],返り値

とかすればいい。

include OpenCV

include OpenCV::Highgui

window = cvNamedWindow("hoge")

cap = cvCareteCameraCapture(0)

frame = cvQueryFrame(cap)

cvShowImage("hoge",frame)

key = cvWaitKey(0)

でcap を最後に開放しないといかんのだけど

CVAPI(void) cvReleaseCapture( CvCapture** capture );

ううむポインタのポインタってどうすんの?dl だと .ref で終わりだがないんだなぁとおもったら

cap_p = FFI::MemoryPointer.new :pointer

cap_p.put_pointer(0,cap)

cvReleaseCapture(cap_p)

とかするといいらしい。

関数の引数が構造体だったりするときは

    class CvSize < FFI::Struct

      layout :width, :int,

             :height, :int

    end

   attach_function :cvCreateImage, [CvSize.by_value,:int,:int],:pointer
CvSize.by_value なのはそのままだとポインタ渡しだから明示しないといけない。なんかドキュメントにぜんぜん書いてなくてだいぶなやんだ> by_value
手で色々追加したあとに
ffi-swig-generator なるものを発見 swig のinterface ファイルを書いておくと ruby-ffi なscript を生成してくれるらしい...先に気がつけ...
そしてmacruby では attach_function しかsupport していないし
macports のopencv は複数のstream を別々のwindow で表示させようとすると同じものが映るとかいうバグ(head だと治ってた)..
ううむ。
とりあえず ffi-opencv は http://github.com/kazu/ffi-opencv においておきました。ちょびっとしか関数ないけど..

blog エディタ使用実験

blog エデイタとやらをつかってみる。

Qumana

しかしいきなり google

日本語入力でpreedit がみえんとかfuck。即削除

 

ScribeFire

WYSIWYGがいろいろ足りないような...

 

あとはecto とかいうのがあるのだっけか...

実験


blog エデイタとやらをつかってみる。



zenback