SharperCV

いやぁ、最近はC#でコーディングする機会が多く、なんとか.NetからOpenCVが使えないか?といろいろ探していましたがこちらで、ちょっとエキサイティングな記事を見かけました。

http://chihara.naist.jp/people/2004/kenta-t/OpenCV/pukiwiki/index.php?SharperCV

ダウンロードはこちらのようです。

http://www.cs.ru.ac.za/research/groups/SharperCV/

なになに?こちらを読んでみると、

  1. しばらく保守されていないというか、プロジェクト自体が放棄された
  2. もともとの目的は、.NetのManaged CodeとOpenCVのUnmanaged Codeの相互運用(interop)の実験目的だった。
  3. 今となっては、.NETからのAVIファイルのハンドリングはDirectXやDirectShowがあるので、時代遅れのOpenCVを使うメリットはない。
  4. soufceforgeに寄付したが、リーダー役がいなかった。
  5. とりあえず、ソースを公開した。

なんだか、ネガティブな感じ満々で、かなり手厳しい感じですが、C#の動作確認コードも紹介されていたことですし、折角なので、IronPythonから叩いてみます。

SharperCVConsole.py

#
# SharperCVConsole.py
#

# for sys
import sys
 
# for clr
import clr
clr.AddReferenceByPartialName("IronPython")
import IronPython
 
# for sharperCV
sys.path.append("c:\\sharpercv\\bin")
clr.AddReferenceToFileAndPath("c:\\sharpercv\\bin\\openCVWrapper.dll")

とりあえず、こんな感じでコンソールから叩く最低限のコードを書いて、下記のようなバッチファイルでIronPythonインタラクティブシェルを起動します。

SharperCVConsole.bat

..\IronPython\IPCE-r7\ipy\ipy.exe -i -D -X:ColorfulConsole -X:AutoIndent -X:ExceptionDetail -X:TabCompletion SharperCVConsole.py

そこで、インタプリタから、

import SharperCV
window = SharperCV.CvWindow("Sample")

のように入力してやると、名前付きWindowが表示されるので、どうやらimport SharperCVをするだけで、highguiまで動作するようです。

もう、すでにこの段階でOpenCVのライブラリリファレンス通りではないということがわかります。

OpenCVPythonインターフェースだと、上記のコードは下記に相当します。

import opencv.cv
import opencv.highgui

window = opencv.highgui.cvNamedWindow("Sample")

.NETのManaged Codeにラッピングする際に整理したのかもしれませんが、OpenCVユーザとしては、この差異をマスターしないといけないかもしれません。

名前空間とクラスをリストアップしてみるとこんな感じで、かなり再構築されている感があります。

  1. SharperCV
    1. AVIWriter
    2. CvCapture
    3. cvContour
    4. cvContoursBase
    5. CvHistogram
    6. CvImage
    7. CvMat
    8. CvPoint
    9. CvPoint2D32f
    10. CvRect
    11. CvScalar
    12. CvSeq
    13. CvSize
    14. CvTermCriteria
    15. CvWindow
    16. PointSetD
    17. VertexContour
    18. VertexContours
  2. SharperCV.Haar
    1. ClassifierCascade
    2. HiddenClassifierCascade
  3. SharperCV.Trackers
    1. LkTracker

#果たして、OpenCVのすべての機能が移植されているのだろうか・・・。
#ちょっと気になるところではあります。