C++ ときどき ごはん、わりとてぃーぶれいく☆

USAGI.NETWORKのなかのひとのブログ。主にC++。

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で効率よくかつ美しく捌くのはやはり相当に無茶があるのだろう(´・ω・`)