HaskellでOpenKinect/libfreenectを使う為のwrapperが既にあったのでcabる訳だがちょっとアレをこうするメモ
cabればhaskellでOpenKinect/libfreenectを使えるかしら・w・と思ったのだけど、
cab install freenect
しかし、
Resolving dependencies... Configuring freenect-1.0.2... cabal: Missing dependency on a foreign library: * Missing (or bad) header file: libfreenect.h
archlinux使いはAURでOpenKinect/libfreenectを導入していると、`/usr/include`にもう1つ`libfreenect`を掘り、その中に件のMissingられた`libfreenect.h`を用意している。そこで、
cabal install freenect --extra-include-dirs=/usr/include/libfreenect
すると今度は、
src/Freenect.hs:235:7: Illegal bang-pattern (use -XBangPatterns): ! size
だそうで。これはソースにGHC拡張のプラグマをパッチする必要があるかな、というわけで、HackageDBからぽんっと入れるのは諦めてgithubからソースを回収してパッチる:
% diff src/Freenect.hs.orig src/Freenect.hs -u --- src/Freenect.hs.orig 2012-06-03 13:15:43.623042147 +0900 +++ src/Freenect.hs 2012-06-03 13:16:06.122432939 +0900 @@ -1,6 +1,7 @@ {-# LANGUAGE ViewPatterns #-} {-# OPTIONS -fno-warn-name-shadowing #-} {-# LANGUAGE DeriveDataTypeable #-} +{-# LANGUAGE BangPatterns #-} -- | Interface to the Kinect device. --
こんな具合に1行追加して、それからcabる:
cabal install freenect.cabal --extra-include-dirs=/usr/include/libfreenect
HackageDBに登録されているHaskellのfreenectは1.0.2、執筆時点でgithubから拾って来ると1.1.1という点も考えると、まあこれでいいかなと。
ちなみに、サンプル動かしてみたけど(´・ω・`)
と、いうわけで実用は微妙そう。この分野(リアルタイム映像処理)をhaskellで効率よくかつ美しく捌くのはやはり相当に無茶があるのだろう(´・ω・`)
と、言う訳で今日は夜までにOpenKinect/libfreenectのマトモなC++ wrapperを作ってしまいましょう。公式に転がってるなんちゃってC++ wrapperとかストレスにしかなりませんし。
— 莉煎・優曇華院・因幡(実際うさぎ)さん (@USAGI_WRP) 6月 3, 2012