日々鍛錬

日本で一番?わかり易い??システムの落書き帳???を目指し????,日々鍛錬中な元SEさん主婦によるデベロッパとユーザと自分のための雑記帳

MATLAB で64bitのMexを行う設定

MexはMATLABの環境(コマンドライン)上で独自のC/C++を呼び出すためのバイナリファイル
バイナリファイルということは,バイナリ化が必要です.

64bitのシステムでMATLABのMexを行う設定

セットアップ環境は以下の通り

Mexを64bitで動作させるためのパッチなるもの(VS2010MEXSupport.zip)を用意する
こちらからダウンロードした.

Small ideas for a big world: Configure Matlab to use Visual 2010 C/C++ compiler


そして,こちらのサイトをよく確認する.
というより,このサイト通りでちゃんと動作します



1) 自分の環境を確認する.
まずは自分の環境をよく確認することが大事です.
もちろんですが,確実にバックアップを取ることは重要です.

C:\Program Files\MATLAB\R2007b\bin\win64\mexopts

適宜,バックアップとして,上記フォルダをコピーしておいておく



2) MATLAB環境上で以下のコマンドを行う

>> matlabroot

私は以下のように出力された
C:\Program Files\MATLAB\R2007b


3)ダウンロードしたファイルを展開
先のLink先からダウンロードした,VS2010MEXSupport.zipを適当な位置に展開する.
展開した以下のファイルをすべて,1)の環境内にコピペする.

4)mexのコンパイラを確認する

mex -setupコマンドで,Visual studio2010が存在し,選択できることを確認する.

あとは,さくさくと行きます!

Kinect周りの環境設定

こういう時期なので、いろいろまとめておく。
OpenNIとKinect for Windows SDK共存できないと聞く
そんなことはなかった。
いろいろ、バリエーションが広がる!


Kinect周りの環境設定

インストールしたい環境は以下の通り


1)Kinect のドライバの設定
Kinect for Windows をそのままUSBポートに差し込むと自動でダウンロードされるので、じっと待つ
ただし、ここで絶対抜き差ししないこと

2) Kinect for Windows SDK 1.8のインストール
Kinect for Windowsの公式サイトはこちら
Kinect for Window Dev Center

いろいろResourcesなども揃っている。
非常に勉強になります。

上記のサイトからStartのコンテンツを選択し、ページ移動
「Downloads / Docs」内に「Kinect for Windows SDK」のLatest Ver.があるので選択し、ダウンロードして実行

これで、KinectSDKコンテンツは揃った。

3) DeveloperTool
Kinectの面白いソースが色々と展開されているので、こちらも併せてダウンロード&インストールしておく
試しに、どのような内容があるかを色々と試してみると面白いし、ソースも公開されてるのでコードもいろいろと遊んでみる。



これで、Kinect側の設定は以上


  • NITE2.2の設定

1) NITE2.2のダウンロード
以下のサイトにアクセスする
NiTE 2.2.0.11 | OpenNI

こちらにアクセスすると、いろいろユーザ情報を入力するよう促される。
ユーザ情報を入力すると、ダウンロードが出来る準備が整う

2014年3月20日現在、Latest Ver,はNITE2.2

2)NITE2.2 インストール
ダウンロードされたexeファイルをそのまま展開すればよいです。

  • OpenNI2.0をインストール

以下のサイトから自分の環境に応じたデータをダウンロード
OpenNI SDK (open-source)-Download | OpenNI

あとはexe実行するのみ


動作については。「スタートメニュー」→「OpenNI 64-bit 2」-> 「NView」を起動する。
起動できたらOK!


OpenNI, NITEの説明、また、DLL, LIBの説明は後の機会にする

MSVCP110.dll, MSVCP100.dllにハマる

Visual studio 2010 Ultimateを用いたサンプルの実行でエラーが出た。
そのエラーがMSVCP110.dllがないと言われた。

探して見ると、どーやらMicrosoft Visual C++ 2010 再頒布可能パッケージが
入っていないというエラー
以下のサイトを参照にさせてもらいました。

『MSVCR100.DLL が見つからなかったため、アプリケーションを開始できませんでした。』解決メモ - やすはるラボ+嫁(*・ω・)

1)Microsoft Visual C++ 2010 再頒布可能パッケージ(X86)を入れる
マイクロソフト公式ダウンロード センターから Microsoft Visual C++ 2010 再頒布可能パッケージ (x86) をダウンロード

なんと。。。64bitでもx86も入れるらしい。。。
こちらを先にexe実行する


2)Microsoft Visual C++ 2010 再頒布可能パッケージ(x64)を入れる
マイクロソフト公式ダウンロード センターから Microsoft Visual C++ 2010 再頒布可能パッケージ (x64) をダウンロード

先と同様に、exe実行する

これで、MSVCP110.dllの設定は完了

しかし、次にMSVCP100.dllがないと言われた。
ということで、検索すると日本語で以下がヒット
Microsoft Visual C++2010 再頒布可能パッケージ(MSVCP100.dll)のインストール


1)Microsoft Visual C++ 2012 再頒布可能パッケージ(x64)へ移動
マイクロソフト公式ダウンロード センターから Visual Studio 2012 更新プログラム 4 の Visual C++ 再頒布可能パッケージ をダウンロード

,,,一瞬びっくりしましたが、2012の再頒布可能パッケージを入れる!
あわわ・・・

2)ダウンロードするプログラムで以下を選択

  • VSU4\vcredist_x64.exe
  • VSU4\vcredist_x86.exe

私はチキンですので、x86->x64の順でインストールしました。

以上で、エラーが解決されます。


しかし、、、、、この再頒布可能パッケージのやり方など。。。
あまりVisual studio の仕様がよくわからないなぁ。。。。
調べまくったけど、こういう仕様はどうもブラックにハマってしまいそうになります。


友人曰く、「WindowsはひたすらDefaltUpdateしておけば問題なし」らしい


。。。そんな怖いものですか。。。。

やっぱり、ちゃんとした仕様はほしいかな?

OpenCV のインストール

参考にしたサイトはこちらから
Physics-Station: OpenCV を Visual Studio で使う方法


このサイトの通りにしたら、きれいにいけました。


環境は以下の通り

OpenCV 2.4.8をインストールする

1) 以下のサイトから最新版をダウンロードする
http://sourceforge.net/projects/opencvlibrary/files/

「Looking for the latest version? 」の後にLatest Versionがあるので、こちらをダウンロードする
2014年3月19日の最新版は以下の通り.

opencv-2.4.8.exe (362.0 MB)

2) ダウンロードしたファイルをダブルクリックし、展開するOpenCVのディレクトリを指定
ex) C:\OpenCV\

3) あとは動作にしたがうだけ

4)終了後に、「システムのプロパティ」→「システムの詳細設定」→「詳細設定」→「環境変数
と選択する

5) ユーザ変数とこで、「新規」をクリックし「変数名」に「OpenCV」を、「変数値」に2)のパスを通す

6)ユーザ変数に「PATH」があるなら、「;%OpenCV%」と一番後ろにおく



インストールしたOpenCVのライブラリを種々のコードでも利用するため、
ライブラリ読み込みのためのヘッダファイルを作成する。
ライブラリにある番号はOpenCVのバージョンなので、インストールしたバージョンに合わせるといいらしい。
便利ですね。
このファイルは上で設定した%OpenCV%\build\include\opencv2\内の「opencv_lib.hpp」とする。

#if _DEBUG
#pragma comment(lib, "opencv_calib3d248d.lib")
#pragma comment(lib, "opencv_contrib248d.lib")
#pragma comment(lib, "opencv_core248d.lib")
#pragma comment(lib, "opencv_features2d248d.lib")
#pragma comment(lib, "opencv_flann248d.lib")
#pragma comment(lib, "opencv_gpu248d.lib")
#pragma comment(lib, "opencv_highgui248d.lib")
#pragma comment(lib, "opencv_imgproc248d.lib")
#pragma comment(lib, "opencv_legacy248d.lib")
#pragma comment(lib, "opencv_ml248d.lib")
#pragma comment(lib, "opencv_nonfree248d.lib")
#pragma comment(lib, "opencv_objdetect248d.lib")
#pragma comment(lib, "opencv_ocl248d.lib")
#pragma comment(lib, "opencv_photo248d.lib")
#pragma comment(lib, "opencv_stitching248d.lib")
#pragma comment(lib, "opencv_superres248d.lib")
#pragma comment(lib, "opencv_ts248d.lib")
#pragma comment(lib, "opencv_video248d.lib")
#pragma comment(lib, "opencv_videostab248d.lib")
#else
#pragma comment(lib, "opencv_calib3d248.lib")
#pragma comment(lib, "opencv_contrib248.lib")
#pragma comment(lib, "opencv_core248.lib")
#pragma comment(lib, "opencv_features2d248.lib")
#pragma comment(lib, "opencv_flann248.lib")
#pragma comment(lib, "opencv_gpu248.lib")
#pragma comment(lib, "opencv_highgui248.lib")
#pragma comment(lib, "opencv_imgproc248.lib")
#pragma comment(lib, "opencv_legacy248.lib")
#pragma comment(lib, "opencv_ml248.lib")
#pragma comment(lib, "opencv_nonfree248.lib")
#pragma comment(lib, "opencv_objdetect248.lib")
#pragma comment(lib, "opencv_ocl248.lib")
#pragma comment(lib, "opencv_photo248.lib")
#pragma comment(lib, "opencv_stitching248.lib")
#pragma comment(lib, "opencv_superres248.lib")
#pragma comment(lib, "opencv_ts248.lib")
#pragma comment(lib, "opencv_video248.lib")
#pragma comment(lib, "opencv_videostab248.lib")
#endif


Visual studio 2010での設定
Visual studio 2010を起動し、「ファイル」→「新規作成」→「プロジェクト」を選択
「空のプロジェクトを選択する」

プロジェクト名を今回 OpenCV\Tutorial\Smoothとする。
(理由はサンプルコードがあるから!)

1) 読み込むためのライブラリの設定
OpenCVのディレクトリについて、「構成プロパティ」→「VC++ディレクトリ」から以下を設定する

  • インクルードディレクトリ

C:\OpenCV\build\include

  • ライブラリディレクトリ

C:\OpenCV\build\x64\vc10\lib

サンプルコードに、次の一行を入れる。

#include <opencv2/opencv_lib.hpp>

私は、そのまま参考サイトのコードを使ってみました。
(わかりやすいし勉強になりました!ありがとうございます!)

//インクルードファイル指定
#include <opencv2/opencv.hpp>
//静的リンクライブラリの指定
#include <opencv2/opencv_lib.hpp>
//名前空間の指定
using namespace cv;
int main()
{
 //width120, height100の画像を作成
 Mat src = Mat::zeros(100,120,CV_8UC3);
 //画像にHello World!を描く
 putText(src, "Hello World!", Point(5,50), FONT_HERSHEY_SIMPLEX, 0.6, cv::Scalar(0,0,200), 2, CV_AA);
 //画像を表示
 imshow("",src);
 //ウインドウの表示時間(0はキーが押されるまで閉じない)
 waitKey(0);
 return 0;
}

Mac でisoファイルのDVDを作成する

だいぶ簡単過ぎて,びっくりした.

参考はこちら
MacでISOイメージディスクを作成 | EzXNetwork

私が改めて說明するまでもないです.

  1. 「アプリケーション」から「ユーティリティ」を選択.

f:id:tomokop:20140318221228j:plain

  1. →「ディスクユーティリティ」をダブルクリックして,DVDに焼きたいデータを選択

f:id:tomokop:20140318221306j:plain

最後に、ディスク作成を押下する
これで、isoの作成ができる.・・・・なるほど!

OpenGLのインストールについて

学生さんから質問があったので、おさらいがてらにメモを記述

OpenGLのインストールは以下の環境で行いました。

以下からソースを適当なフォルダ上に落とす
Nate Robins - OpenGL - GLUT for Win32

  • ダウンロードしたZipを解凍すると、以下の通り
  • 32bit版
    • glut.h
    • glut32.dll
    • glut32.lib


次のようにいれてみる。

  • (64bit)


設定は以上。

以下のコード*1をビルドして、動けば、OK

#include <GL/glut.h> // 環境によっては<glut.h>なので,自分の環境に合わせる
#include <math.h>

int mouse_l = 0;
int mouse_m = 0;
int mouse_r = 0;

int mpos[2];  // mpos[0]=xコツノク, mpos[1]=yコツノク

double trans[3] = {0.0, 0.0, 0.0};
double theta[3] = {0.0, 0.0, 0.0};
double angle[3] = {0.0, 0.0, 0.0};

void display()
{
  glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
  glLoadIdentity();

  glRotated(angle[0], 1.0, 0.0, 0.0);  // xシエ 、豼エ、ヒイセ
  glRotated(angle[1], 0.0, 1.0, 0.0);  // yシエ 、豼エ、ヒイセ
  glRotated(angle[2], 0.0, 0.0, 1.0);  // zシエ 、豼エ、ヒイセ

  glutWireCone(1.0, 2.0, 5, 10);
  glutSwapBuffers();
}

void mouse(int button, int state, int x, int y)
{
  switch(button){
  case GLUT_LEFT_BUTTON:
    if(state == GLUT_DOWN){
      mpos[0] = x;
      mpos[1] = y;
      mouse_l = 1;
    }
    if(state == GLUT_UP){
      mouse_l = 0;
    }
    break;
  default:
    break;
  }
}

void motion(int x, int y)
{
  if(mouse_l == 1){
    theta[0] = (double)(y-mpos[1])/5.0;
    theta[1] = (double)(x-mpos[0])/5.0;
  }
  if(mouse_l == 1 || mouse_m == 1 || mouse_r == 1){
    mpos[0] = x;  // ・ワ・ソ・。、キ、ニ、、、・ネ、ュ、ホ ・゙・ヲ・ケ、ホxコツノク
    mpos[1] = y;  // ・ワ・ソ・。、キ、ニ、、、・ネ、ュ、ホ ・゙・ヲ・ケ、ホyコツノク
    angle[0] += theta[0];
    angle[1] += theta[1];
    glutPostRedisplay();
  }
}

void reshape(int w, int h)
{
    glViewport(0, 0, w, h);
    glMatrixMode(GL_PROJECTION);
    glLoadIdentity();
    if (w <= h)
        glOrtho(-2.0, 2.0, -2.0*(GLfloat)h/(GLfloat)w, 2.0*(GLfloat)h/(GLfloat)w, -10.0, 10.0);
    else
        glOrtho(-2.0*(GLfloat)w/(GLfloat)h, 2.0*(GLfloat)w/(GLfloat)h, -2.0, 2.0, -10.0, 10.0);
    glMatrixMode(GL_MODELVIEW);
}

int main(int argc, char **argv)
{
  glutInit(&argc, argv);
  glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB | GLUT_DEPTH);
  glutInitWindowSize(500, 500);
  glutCreateWindow(argv[0]);

  glutReshapeFunc(reshape);
  glutDisplayFunc(display);
  glutMouseFunc(mouse);
  glutMotionFunc(motion);
  
  glutMainLoop();
  return 0;
}

*1:すみません。。。拾いものなのですが、どこから拾ったか忘れました。。。orz

VTKでC++のパスを通す

VTKを利用して,C++のCmakeをかけるとPathが通ってないというエラーが発生した.
よくわからないので,友人のVTKスペシャルなX博士に相談
なんと,VTKのBuildの時,「Build SHARE LIB」にチェックを入れたのがまずかったらしい*1..

つまり,dllができちゃったのがまずいのよ,と言われ泣きそうなった...
そうなのか...
そして,再Buildを行うとすんなりととおりました.

うん,これで,いちいち,Directory直下にライブラリを入れなくても良くなりました.(謎)