2014年10月19日

Emgu vs. OpenCVSharp でどちらを使うかの議論の結果

OpenCV をインストールして C# で使うことになり、OpenCV のラッパーを探してみました。

見つけたのは、Emgu, OpenCVSharp, OpenCV.Net の3つで、海外では Emgu が一番人気があるようです。
そこで、Emgu をインストールしてみたのですが、2度ほど10時間かけてコンパイルしてみたのですが、Linux 上ではソースコード上のエラーが出てうまくコンパイルできませんでした。Emgu では、OpenCV のソースに手を入れているのか、それとも、beta 版とリンクしようとしているのかわかりませんが、コンパイル途中で構造体が宣言されていないエラーとか、ファイルがないとか、理解を越えたエラーが出て、ソースを修正しながら続けたのですが最終的にはインストールする気力をそがれてしまいました。Emgu は Windows 上ではうまく動いていたのですが、仕方がありません。

Emgu はあきらめて次に、OpenCVSharp にチャレンジ。OpenCVSharp は、OpenCV のソースには手をいれていないため、Emgu のような問題には遭遇せずにインストール完了。無事に動かすことができました。OpenCVSharp 開発者のブログを読んでわかったことですが、Emgu と OpenCVSharp では開発方針が違うようです。次の理由で OpenCVSharp が気に入りました。

1)OpenCV のソースは修正していない点。Emgu は OpenCV ソースも修正しているように見えます。
2)OpenCV が C言語の関数であり、そのままの形で呼び出せるようにしている点。Emgu は、独自のイベントがあり、独自のプログラミングスタイルを作っているようです。
3)Mono 環境でも動作保障してくれている点。
4)BSD ライセンスである点。Emgu は GPL ライセンス。
5)OpenCVSharp は 日本人が開発している点、ブログもありました。開発者 Shima さんの開発方針が見えてちょっと安心。

OpenCV のラッパーという意味では、1)、2)は重要で、OpenCV のサンプル等を原型に近い形で移行させるには、OpenCVSharp の考え方の方がいいのではないでしょうか。他の人のブログ等では、OpenCV にあって、OpenCVSharp ではサポートしていない関数があるとか書いてあったり多少の心配はありますが、まだそこまで OpenCV を使い込んでいないからか、今のところはなんの問題もないです。





posted by 開発G at 10:21| Comment(0) | TrackBack(0) | Linux

2014年09月10日

Raspberry PI 上で、電源ONでプログラムを起動させる

Raspberry PI という ARM プロセッサを使った $35 の汎用 Linux マシン上で、センサーを読み込むアプリを開発してみました。電源ONで起動するスクリプトファイルを作成します。

一般的に Linux には、自動的に起動させるには、/etc/rc.local ファイルに書く方法と、/etc/init.d/ の下に、サービスのスクリプトを用意する方法がありますが、rc.local はログインしないと起動しないようなので、init.d の下にスクリプトファイルを置く方法で対応しました。簡単に書いておくと、スクリプトファイルに実行権限を与えて、サービスとして登録するようなものです。こうしておくと、電源ONで最初に動き出します。詳細は省略。

Raspberry PI は、A, B, B+ と3種類のタイプがあり、B+ は USB ポートが4つも付いています。これを使えば一通りのことはできそうです。今度、カメラ画像を読み込むアプリを作ってみようと思います。

rpi.png
posted by 開発G at 23:24| Comment(0) | TrackBack(0) | Linux