mac (snow leopard) にOpenCV を導入

前回からの続きで、CMakeCache.txt を開いてpython に関係しそうなオプションを検索し、自分の環境に合ってなさそうな部分を設定する形で再度cmake を実行してみました。

>cmake -DCMAKE_BUILD_TYPE=RELEASE -DBUILD_PYTHON_SUPPORT=ON -DPYTHON_EXECUTABLE=/usr/bin/python -DPYTHON_LIBRARY=/usr/lib/libpython2.6.dylib -DPYTHON_PACKAGES_PATH=/Library/Python/2.6/site-packages .
>make
>sudo make install

PYTHON_PACKAGES_PATH はsys.path から。PYTHON_LIBRARY は元々の設定から類推して頑張って探しました。

これで一応、python でimport cv が通りました。実際に使えるかどうか確認していこう。

OpenCV を使ってみたい

家のMacBook ProOpenCV を入れて使ってみたいと思い立って作業中。


まずはMacPort のインストール。こちらのhttp://wiki.tmd45.in/wiki.cgi?page=Xcode%A4%C8MacPorts%A4%F2%A5%A4%A5%F3%A5%B9%A5%C8%A1%BC%A5%EB%A4%B7%A4%C6UNIX%B4%C4%B6%AD%A4%F2%C0%B0%A4%A8%A4%EBというのを参考にして、MacPorts-2.1.1-10.6-SnowLeopard.pkg をダウンロードして引っかかる事無くインストール。


続いてこちら0093 Weblog: Mac OS X 10.6 Snow Leopard でMacPortsを使ったOpenCVのセットアップ方法(MacPortsで入れたPythonも使えるようにする)を上から順に実行。port を使って色々インストールするところは特に問題なく完了。しかし肝心のOpenCVsvn リポジトリからチェックアウトしようとするとアカウントの入力を求められてつまずいた。アカウントをとってみたのだけれども今のところリポジトリにはアクセスできない様子。はてさて。

つづき

svn でのチェックアウトはあきらめてアーカイブをダウンロード。http://sourceforge.net/projects/opencvlibrary/files/opencv-unix/2.4.1/このへんから。

ダウンロードしたら

>tar xjvf OpenCV-2.4.1.tar.bz2
>cd OpenCV-2.4.1
>cmake -DMAKE_BUILD_TYPE=RELEASE -DBUILD_PYTHON_SUPPORT=ON -DWITH_CUDA=OFF .
>make
>sudo make install

こちらOpenCVの最新版ソースコードをSubVersionから入手してLinux(Ubuntu)にインストール - glass5er's blogなどを参照しつつ。とりあえずはエラーが出る事も無く完了。

完了したは良いがこの時点でまだpython からopencv が使える状態にはなっていない…。

C# でDictionary をXmlSerializer でシリアライズする

C# のDictionary は普通にやったのではXmlSerializer でシリアライズできないのですが、これを解決する方法はネット上でも色々と紹介されています。


そこをあえて今回自前で解決した方法が以下です。

using System;
using System.Collections.Generic;
using System.Text;
using System.Xml.Serialization;

namespace Program
{
    public class Data
    {
        private Dictionary<string, int> table = new Dictionary<string, int>();
        // シリアライズされないよう指定
        [XmlIgnore]
        public Dictionary<string, int> Table
        {
            get { return table; }
        }
        // シリアライズ用にkey:value のペアをカンマ区切りで連結した文字列と相互に変換
        public string TableAsString
        {
            get
            {
                // 
                List<string> data = new List<string>();
                foreach (string key in Table.Keys)
                {
                    data.Add(String.Format("{0}:{1}", key, Table[key]);
                }
                return String.Join(",", data.ToArray());
            }
            set
            {
                char[] separator = new char[]{':'};
                Dictionary<string, int> dict = new Dictionary<string, int>();
                foreach (string pair in value.Split(new char[]{','}))
                {
                    string[] data = pair.Split(separator);
                    dict[data[0]] = int.Parse(data[1]);
                }
                table = dict;
            }
        }
    }
}

なんかもうちょっとDictionary を文字列化するのに一般的なやり方とかありそうな気もしますが、いったん文字列を介するというのがポイントです。

OpenTK でステンシルテスト

C#OpenGL を使うためのOpenTK にてステンシルテストのテストをしていてはまった点が解決したのでメモ。

    OpenTK.Graphics.GraphicsMode gm = OpenTK.Graphics.GraphicsMode.Default;
    OpenTK.Graphics.GraphicsMode mode = new OpenTK.Graphics.GraphicsMode(
        gm.ColorFormat,
        gm.Depth,
        8, // <- これを設定する必要がある gm.Stencil,
        gm.Samples,
        gm.AccumulatorFormat,
        gm.Buffers,
        gm.Stereo
        );
    this.glControl = new OpenTK.GLControl(mode);

GLControl を作成するときにステンシルバッファのビット数を指定する必要がある。デフォルトだと0だった。普段プログラマブルシェーダを使ってないのでこういう初期化時の設定があることをよく忘れてしまう…プログラマブルシェーダは関係なかった…

http://www.opentk.com/node/1702
ここ見て解決しました。

OS X とXcode の再インストール

さんざ手こずったXcode の再インストールがようやくでけたので。

  • 環境
  • 状況
    • OS のソフトウェア・アップデートでマシンが再起動してくれなくなったのでOS を再インストールしたら、その後にXcodeインストーラdmg をマウントするときに「無効なチェックサム」というエラーでマウントできなくなっていた。

以下、作業手順。

  1. OS をクリーンインストール
  2. SafariXcode のディスクイメージxcode_3.2.6_and_ios_sdk_4.3.dmg をダウンロード
    • この時点ではOS のバージョンが10.6.3 で、10.6.6 が必要と言われてインストールできない
  3. ソフトウェア・アップデートの1回目を実行。
    • この時点でOS のバージョンは10.6.8 になるけど、インストールは途中で失敗。
  4. ソフトウェア・アップデートの2回目を実行。
  5. Xcode をインストール
    • Xcode を起動しようとしたけど起動せず。
  6. OS を再起動
  7. Xcode の起動が成功。何かしらプロジェクトを作成してビルド、実行まで確認

なにやら、Xcode の4.1 はSnow Leopard では使えない模様。1度Xcode のインストールを失敗したときはこのXcode 4.1 のインストール失敗が影響を与えていたのではなかろか、という根拠レスな仮定のもと最初からXcode 3 の方をインストールしてみたらうまいこと行ったようなのでとりあえずOK。

あと、ソフトウェア・アップデートを2回終えてからXcode をダウンロードしたら無効なチェックサムだったのでクリーンインストールからやり直してます。関係あるか分かりませんが。

AirStationに接続したUSB-HDDでTimeMachine

USB ストレージを接続するとNAS として使える無線LAN ルータAirStation を利用してMac OS X のバックアップ機能TimeMachine を使用するための覚え書きです。

HDDは買ってきてすぐAirStation のUSB に接続しました。パーティションも切り直さず、フォーマットもし直さず。


NAS の設定はAirStation の管理画面から。AirStation の管理画面への接続はブラウザにAirStation のIP アドレス入力で。NAS にはアクセス制限をかけた上で新たにユーザを作成してそいつに読み書きを許可。


Mac からNAS へのアクセスはFinder でキーボードからコマンド+K と入力してウィンドウを開きアドレス欄に「smb://IPアドレス」でマウント。


続いてTimeMachine で使うための手順は検索するといろいろ出てきますが、覚え書きQ様の記事*1でうまくいきました。後半の「Mac OS X 10.6 Snow Leopard の場合」参照。ただ一つ、plist ファイルを作成する部分だけ困った事に、Property List Editor がインストールされてなかったので(というかXcode がインストール出来ないのでOS 入れ直す準備でTimeMachine を使おうと思い立ったわけで…)そこだけアレンジ。


ターミナルからdefaults コマンドを利用してplist ファイルを作成しました。

$ defaults write ~/com.apple.TimeMachine.MachineID com.apple.backupd.HostUUID XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX

XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX の部分はハードウェアUUID です。
これで、自分のホームディレクトリにcom.apple.TimeMachine.MachineID.plist が作成されます。


バックアップを進めながらこれを書いてますが、バックアップ作成開始してから1時間ほど経過して22.7GB 中6.7GB まで進行中。やはり初回バックアップは有線でやった方がよいのかも?


あとはちゃんとバックアップ完了してそこからの復帰ができるかどうかだなあ。

*1:ちなみに検索した時のキーワードは「snow leopard wzr-hp-g302h timemachine」でした。