2012/05/30

OpenCV 2.3.1の開発環境をVisual Studio 2010で構築する(Windows 7 Ultimate 64bit)

2012/06/01 0:17 opencvのくだりを少し編集

およそ1年半ぶりにお好み焼きを作ってみたら、お好み焼きのような何かができてしまいました。そんなことにもめげず、OpenCVとfreeglutを使ったプロジェクトをWin32でもx64でもビルドできるようにします。

環境

OS Windows 7 Ultimate SP1 64bit
IDE Visual Studio 2010 Professional

OpenCVの導入

OpenCV 2.3.1をダウンロード(※今なら2.4.0でも良いかも)
http://sourceforge.net/projects/opencvlibrary/files/opencv-win/2.3.1/OpenCV-2.3.1-win-superpack.exe/download

展開したフォルダはopencvにリネーム。

便宜的にドライブ直下にopencv2.3.1というディレクトリを作成。その中に

opencv\3rdparty
opencv\build\include
opencv\build\x86\vc10\bin
opencv\build\x86\vc10\lib

の4つのディレクトリをディレクトリごとopencv2.3.1の下にコピー。つまり

C:\
     - opencv2.3.1
          -3rdparty
          -bin
          -include
          -lib

という構成になる。
さらに、opencv2.3.1の下にx64というディレクトリを作成し、opencv\build\x64\vc10以下のディレクトリを全てコピー。つまり

C:\
    - opencv2.3.1
        -3rdparty
        -bin
        -include
        -lib
        -x64
            -bin
            -lib

という構成になる。

ここで通常なら環境変数にパスを通しますが、あえて通さないでおきます。(詳細は後述)

freegultの導入

GLUT(ジー・エル・ユー・ティー)はOpenGL向けユーティリティライブラリでしたが、なぜか開発が止まり、今は代わりにfreeglutというライブラリがあるので、こちらを使います。僕はウィンドウ全体をキャプチャするために必要だったので導入しました。

freegult-2.8.0をダウンロード
http://freeglut.sourceforge.net/

C直下に展開。つまり

C:\
     - freeglut-2.8.0

という構成になる。

win32でもx64でも.exeが動くようにする

C:\freeglut-2.8.0\VisualStudio\2010\freeglut.slnを開いてバッチビルド。Releaseのwin32とx64にチェックを入れてビルド。

C:\freeglut-2.8.0\lib\x86\freeglut.dll

C:\Windows\SysWOW64
にコピー。
C:\freeglut-2.8.0\lib\x64\freeglut.dll

C:\Windows\System32
にコピー。

先ほどパスを通さなかったですが、環境変数にOpenCVのbinへのパスを追加する代わりに、opencvの.dllファイルをfreeglut.dllと同じようにぶちこみます。

C:\opencv2.3.1\bin以下の.dllファイルすべて

C:\Windows\SysWOW64
にコピー。
C:\opencv\x64\bin以下の.dllファイルすべてを

C:\Windows\System32
にコピー。

TBBの導入

OpenCVの並列処理のためにTBBが必要なのでこれをダウンロード。http://threadingbuildingblocks.org
5月30日現在、最新の安定版は tbb40_20120408oss

展開したら

F:\tbb40_20120408oss\bin\ia32\vc10 の中にある.dllを全部
C:\Windows\SysWOW64 にコピー。
F:\tbb40_20120408oss\bin\intel64\vc10 の中にある.dllを全部
C:\Windows\System32 にコピー。

Visual Studioの設定

Visual Studioを起動。プロジェクトを開く。

プロジェクト->プロパティ
構成プロパティ->C/C++->全般

追加のインクルードディレクトリに

C:\freeglut-2.8.0\include
C:\opencv2.3.1\include\opencv
C:\opencv2.3.1\include

を追記。

構成プロパティ->リンカー->全般

プラットフォームをWin32にして、追加のライブラリディレクトリに
C:\freeglut-2.8.0\lib\x86
を追記。プラットフォームをx64にして、追加のライブラリディレクトリに
C:\freeeglut-2.8.0\lib\x64
を追記。

さらにx64のままにして

構成プロパティ->C/C++->プリプロセッサ
プリプロセッサの定義の欄に
_WIN64
を追加。

ソースコード中では、プログラムで使用するライブラリ(.libファイル)をpragma文で指示。
(ifdefでwin32とx64でリンクさせるライブラリを変えるのがよい)

これでwin32でもx64でもビルドが通る環境が整いました。

トラブルシューティング

ビルドは通るけど「アプリケーションを正しく起動できませんでした(0xc000007b)」のウィンドウが出る

includeしている.libファイルと.dllのターゲットプラットフォームが一致していない。win32アプリとしてビルドするときはlibもdllもx86、x64アプリとしてビルドするときはlibもdllもx64でビルドする。SysWOW64ディレクトリとSystem32ディレクトリに適切なdllが格納されているか要確認。

2012/05/21

研究室のマシンをリプレース

普段は理系の大学院生なので研究室にいることが多い私です。最近、先輩からのおさがりで使ってたDell XPS 630iがブルースクリーンを連発するようになりました。お、これは絶好の自作チャンス!ということで教授に無理を言って「面倒くさい書類作成あるけどいい?」って言われたのを二つ返事で了承して、メインマシンをリプレースしました。

購入店 部位 メーカー 品名 容量など 価格
TSUKUMO CPU Intel Ivy Bridge Core i5 3570K 3.4GHz 19800
TSUKUMO M/B ASUS P8H77-V ATX 10980
TSUKUMO メモリ Corsair CMX8GX3M2B1600C9 DDR3-1600 4GB 2枚組 *2 7960
TSUKUMO 電源 玄人志向 KRPWL3/400W   2480
TSUKUMO ケース Cooler Master Silencio 550 ATX 8980
        配送料 1050
TSUKUMO ストレージ Seagate ST2000DM001 2TB 9650
  CPUクーラー Intel リテール   0
  VGA   CPU内蔵   0
TSUKUMO Drive SonyOptiarc AD-7280S   2280
        合計金額 63180

電源が異様に安いのが怖いところ…まぁあと1年しか使わないしいいやー。OSインストールして2時間後にもうブルースクリーン出たり不穏なところあったけど、SATA3のポートを使わないようにすれば解消されました。今は安定。アイドル時40WっていうのはC2Qから乗り換えた自分としては隔世の感。

IMG_0705

研究に使うソフトも一通りインストールできたので、就活で中断してた研究をまじで再開しなければ。研究を2年間やってきて思ったのは、自分は全く研究に向いていない、ということ。途中ほんとにしんどくて病んじゃったし。だから就活でもR&Dはまったく志望しなかった。無事に何か成果(のようなもの)を出して、修論さくっと書いて卒業したいです。

2012/05/18

ブランディングは掛け算?

IMG_0679

そうか、ブランディングって掛け算なのか。
そりゃそうだ、ブランディングって演出の一種だもんな。

中身×演出=他人から見た自分

だとすると中身が0ではどんなに演出に力を入れても自分が凄く見えることはあり得ない。
今は学生で時間があるし、貯め時なんだな。引き続き、ぬかりなくやる。

----------------
参考: まずは中身 - まつひろのガレージライフ

2012/05/16

Mac OS X 10.7 でEclipse日本語化(Java+PHP)

IMG_0701

12時に寝落ち、4時に起きてだらだらしてたら眠れなくなったので今日は異常に朝が捗ってます。

研究では音響や画像を扱うのでもっぱらVisual StudioでC++をがりがりという感じですが、趣味のwebアプリ開発などではEclipseでJavaやPHPを書いているので、今日はそのセットアップをまとめます。

環境

Mac OS X 10.7.3

流れ

  1. Eclipse IDE for Java Developers をインストール
  2. Pleiades日本語化プラグインをインストール
  3. Eclipseを-cleanオプション付きで初回起動
  4. PHP Development Toolをインストール

Eclipse IDE for Java Developers をインストール

http://www.eclipse.org/downloads/ Eclipse IDE for Java DevelopersをDL
/Applications/直下に展開。/Applications/eclipse/という構成になる。

ちなみにこの時点で最新版のバージョンは3.7 Indigoでした。

Pleiades日本語化プラグインをインストール

http://mergedoc.sourceforge.jp/ からpleiades日本語化プラグインをダウンロード。展開すると「pleiades_***」(***はバージョン)というディレクトリができる。その中にある「plugins」フォルダの中身を/Applications/eclipse/plugins/の中にコピーする。

Finderでeclipseを右クリックし「パッケージの中身を表示」でeclipse.iniを探す。
eclipse.iniをテキストエディタで開き、最後の行に

-javaagent:/Applications/eclipse/plugins/jp.sourceforge.mergedoc.pleiades/pleiades.jar

と入力して保存。

Eclipseを-cleanオプション付きで初回起動

プラグインも入れたし初回起動なので、クリーンオプション付きで起動する。ターミナルを開いて

/Applications/eclipse/eclipse –clean

を実行。Eclipseが起動します。

PHP Development Toolをインストール

ヘルプ->新規ソフトウェアのインストールをクリック。作業対象に「Indigo」を選んでフィルターにPHPを入力すると、Eclipseが”PHP”を含む追加ソフトウェアをEclipseのリポジトリまで探しに行きます。

やがて真ん中のスペースにプログラミング言語と出るので、プログラミング言語->PHP 開発ツール (PDT) SDK フィーチャーにチェック。「次へ」をクリック。あとは指示通りに。

インストールを終えてEclipseを再起動すればおしまい。にしてもMacのEclipseはさくさくやねー

2012/05/09

洗練されたコピーがオリジナルに変貌する

IMG_0690

Twitter上の無数のツイートから自分が好きなものをピックアップして、RTするだけで、「私」ができあがる。ホテルのビュッフェみたいに。自分の意見を書かずとも、合点がいくツイートをRTしていくだけで、自分の立ち位置や人格を表明できるこの手軽さ。

自分が如何に「無数の世間の意見を寄せ集めた集合体」であるか気付かされる。僕らは決してオリジナルなんかじゃ、ない。世界に散らばる無数のオリジナルを集め洗練されたコピーが、やがてその世界における"オリジナル"に変貌していく。

----------------
写真:ランチバイキング / サムラート 新宿

2012/05/08

partition table復旧の戦い

ある朝、いつも通りに家のマシンの電源を入れると、この画面にぶち当たった…

Windowsの起動画面にすら入れない。データは別ドライブなので実は被害はほとんど無いんだけど、再セットアップにかかる時間的な意味でクリーンインストールは避けたかったので、どうにか復旧させました。この記事はその復旧までの記録です。

Reboot and select proper…エラーの対処法

以下を順番にやっていくのが良いです。カッコ内は、それで解決した場合の異常原因です。

  1. BIOSのCMOSリセット(BIOSの異常)
  2. BIOSの起動順位の1位が誤って光学ドライブになっていないか確認(BIOSの設定誤り)
  3. Windowsのディスクからスタートアップ修復を行う(MBRの異常)
  4. 同じくWindowsのディスクからコマンドプロンプトに入りfixboot fixmbr(MBRの異常)
  5. Gparted Live CDからTESTDISKしてpartition tableを修復(partition tableの異常)

今振り返ると何がいけなかったって、上記4. と 5.の間で、なぜかBIOSのアップデートをやってしまったこと。そのせいで、partition tableまでやられてしまったのだと考えてる。

BIOSのCMOSリセット

マザーボードについてるCMOSリセットのボタンを長押しすることで、BIOSをデフォルト状態にリセットします。爪楊枝のようなもので3秒くらい押します。これで直れば儲けもの。

BIOSの起動順位の1位が誤って光学ドライブになっていないか確認

BIOSには起動デバイスの優先順位の項目があります。まずはHDDを読みに行って、OSが無ければ光学ドライブを読みに行って、それも無ければ外付けデバイスを読みに行く…みたいな設定です。1st boot deviceとか書いてあると思います。その1stが誤って光学ドライブになってることがあるので、そこをOSの入っているHDD(あるいはSSD)に変更します。

Windowsのディスクからスタートアップ修復を行う

これでも同じエラーなら、Windowsをインストールするディスクが必要です。Windowsのディスクから起動するとwindows 7のインストール画面になるので

->《コンピューターを修復する》
->《Windows の起動に伴う問題の~》を選択し《次へ》
->《スタートアップ修復》

でスタートアップ修復。これはWindowsが勝手にやってくれるので終わるまでコーヒーでも飲んで待ちます。やがて完了すると再起動。

同じくWindowsのディスクからコマンドプロンプトに入りfixboot fixmbr

僕の場合、この時点で起動直後のエラーの文面が

BOOTMGR is missing
Press Ctrl+Alt+Del to restart

に変わってました。bootmgrとは、windowsを最初にロードするために必要なファイルで、それが無いよ~と言ってます。さっきと同じようにWindows 7のインストール画面から

->《コンピューターを修復する》
->《Windows の起動に伴う問題の~》を選択し《次へ》
->《コマンドプロンプト》

に入ります。そこで

bootrec /fixboot
bootrec /fixmbr

を実行。ちなみにBOOTMGRについての解説はこちらのサイトがわかりやすいです。

「BOOTMGR」とは何か
http://pctrouble.lessismore.cc/boot/bootmgr_is_missing.html

Gparted Live CDからTESTDISKしてpartition tableを修復

fixmbrでもダメだったのでdiskpartで修復対象のパーティションを指定した上でもう一度fixmbrしようとしたら、パーティションを選択しようとしているのに「パーティションが選択されていません」と出る。え?ってなって再起動してみると、さらにエラーの文面が変わってた。

invalid partition table

…partition tableが逝っちゃったみたいです。こんな文面は見たことが無くてぐぐってみると「HDDが物理的に壊れている可能性があります」「重症な論理障害のひとつです」と、ビビる文句がたくさん。ここまで深刻なのははじめてだったけど、海外にいいサイトがありました。

How to Recover Partition Table using Test Disk – Using GParted live disc

このサイトに画像つきで超丁寧に手順が載っているので端折ります。

このTestDiskというツールでpartition tableを復旧し、さらにもう一度fixboot fixmbr、ダメ押しでスタートアップ修復をかけると、ようやくWindowsが起動してくれるようになりました。

ここまで6時間。Gparted live diskは優秀です。

2012/05/02

blogプラグインとかシンボリックリンクとか

自分用メモ。これで家でも研究室でも開発できるぜ!

blogプラグイン

Windows Live Writerインストールしたら

  • Amazon Associate JP
  • Syntax Hilighter

のプラグインもインストールする。

mysqlのデータベースフォルダをシンボリックリンクで同期する

MacのMAMP環境とWindowsのXAMP環境を同期させるために設定した。
シンボリックリンクを作成するためには

ln -s /Users/《ユーザ名》/Dropbox/mysql/data/test /Applications/MAMP/db/mysql/

でターミナルを実行。

追記

これだけだとMac上でMySQLの修正ができなかったので以下をhttpd.conf中に追記。

<Directory “/Users/YOURNAME/Dropbox/sites”>
  Options Indexes FollowSymLinks Includes ExecCGI
  AllowOverride All
  Order allow,deny
  Allow from all
</Directory>

参考


Dropbox で同期する XAMPP ローカル環境。どこでも開発!どこでも最新!
http://8bitodyssey.com/archives/2130