Hatena::ブログ(Diary)

/tmp RSSフィード

2010-03-08 RT Middleware on Mac

portでRTMインストールしたあと、rtc-templateで

File "/opt/local/bin/rtc-template", line 23, in <module>
 import yaml

エラーがでたら

1. sudo port install python_select

2. python_select -l で確認

3. sudo python_select python26

4. sudo port install py26-yaml

2010-03-07 cuda3.0 beta for Mac OS X (bookpro and snow leopard)

1.cudatoolkit_3.0-beta1_macos_32.pkgからtoolkitをインストール

2.cudadriver_3.0.1-beta1_macos.pkgでドライバインストール

/usr/local/cuda/lib/libcuda.dylibが生成されるが、パーミッションがおかしいので、ほかのライブラリと同じにそろえる

注1:cudadriver_3.0.0-beta1_macos.pkgだとサンプルはコンパイルできますが実行時に、cudaSafeCall errorがでます。Non-GT200だと3.0.0を選べと書いてあるが。。。

中2:libcuda.dylibのパーミッションをそろえないと、サンプルのコンパイル時に-lcudaで「libcudaが見つからない」と怒られる

3.gpucomputingsdk_3.0-beta1_macos_32.pkgでサンプルをインストール

4./Developer/GPU Computing/Cでmake

5./Developer/GPU Computing/OpenCLmake

CUDA2.3と異なりgcc4.2でコンパイルok

6.[システム環境設定]->[省エネルギー]->[グラフィックス]->[パフォーマンス優先]にすると"GeForce 9600M GT"も認識する

7./Developer/GPU Computing/C/bin/darwin/release/deviceQueryを実行すると、"GeForce 9600M GT"と"GeForce 9400M"を認識

EHHL!

2009-08-01 ARToolkit for 64bit Linux and YUV422 patch

64bit Linux + YUV422 CameraでARToolkitを動かす。

最新版ARToolKit対応のV4L2用のパッチ作った

拡張したパッチを作成。

http://staff.aist.go.jp/k.kojima/artoolkit/artk-yuv422-v4l2-2.72.1.20090801.patch

動作環境

Debian:linux-image-2.6.26-2-amd64

camera:Princeton PWC-130UAFS

手順:

v4l-info | grep YUVで、

description             : "YUV 4:2:2 (YUYV)"

となることを確認。

これでない場合は、動作しないと思います。

patchをARToolkitと同じディレクトリコピー

パッチの47行のinclude pathは環境に合わせて変更して下さい。

$ patch -p0 -d . < artk-yuv422-v4l2-2.72.1.20090801.patch
  1. ./Configureの実行。
  2. Select a video capture driver. 3.
  3. Color conversion should use x86 assembly (not working for 64bit)? n。
  4. 以下、環境に合わせて選択。
  5. makeの実行。
  6. cd bin
  7. ./simpleTest

以上。

patch作成前の症状。

  • V4L2のパッチを当てた場合。Color conversion should use x86 assembly (not working for 64bit)?でyを選択したとき
ccvt_i386.S: Assembler messages:
ccvt_i386.S:249: Error: suffix or operands invalid for `push'

アセンブルエラー

  • Color conversion should use x86 assembly (not working for 64bit)?でnを選択したとき
../../lib/libARvideo.a(video.o): In function `ar2VideoGetImage':
/home/kojima/sdk/ARToolKit/lib/SRC/VideoLinuxV4L2/video.c:723: undefined reference to `ccvt_yuyv_rgb24'
collect2: ld returned 1 exit status

lib/SRC/VideoLinuxV4L2/video.cで呼び出されているccvt_yuyv_rgb24が無いと言われる。

このような症状の方は、パッチを試して下さい。

新たに作成したパッチでは、このccvt_yuyv_rgb24を作成しました。

原因について

usbカメラ画像データフォーマットは、YUV444, YUV422, YUV420など様々あります。

詳しくは、http://vision.kuee.kyoto-u.ac.jp/~hiroaki/firewire/yuv.htmlを参照。

V4L2用パッチでは、このうちYUV420のみに対応している。ただし、ccvt_i386.Sではアセンブルコードで各種対応していますが、64bit Linuxではコンパイルできないようです。

 所有のカメラが、YUV422対応であったため(v4l-info | grep YUVで確認)、ccvt_yuyv_rgb24が呼び出されるが、V4L2パッチでは実体が無いのがエラーの原因。そこで、YUV422のデータフォーマットを、http://son-son.sakura.ne.jp/programming/macosx_seesaw.htmlを参考に、ccvt_yuyv_rgb24を作成。

ただし、データフォーマットは参考ページの

U01,Y0,V01,Y1

ではなく

Y0,U01,Y1,V01

であった。

v4l-info  | grep palette

データ配列内の順序が分かるみたい。

その他のデータフォーマットの場合

コンパイルエラーや、写ったけど画像が変、Segmentation Faultを起こす場合は、データフォーマットを調べ、RGB変換関数を作成してみるといいかも。

2009-06-15 boost matrix serialization

boost::numeric::ublas::matrixをserializeする方法。

serializationには、boostを事前にコンパイルしておく必要あり。

1 cd boost_install_dir

2 ./bootstrap.sh

3 ./bjam

boost_install_dir/stage/libライブラリが作成される。

ld.so.conf.dにboost.confを作成。

#boost.conf

boost_install_dir/stage/lib

ldconfigの実行。

main.cpp

#include <boost/numeric/ublas/matrix.hpp>
#include <boost/numeric/ublas/io.hpp>
#include <boost/serialization/serialization.hpp>
#include <boost/archive/text_oarchive.hpp>
#include <boost/archive/text_iarchive.hpp>
using namespace boost;
using namespace boost::numeric::ublas;
using namespace boost::archive;

#include <iostream>
#include <fstream>
using namespace std;

int main( void)
{
  {
    int N =5;
    int M =2;
    matrix<int> mat_write( N, M);
    for( size_t i =0; i <mat_write.size1(); ++i){
      for( size_t j =0; j <mat_write.size2(); ++j){
	mat_write( i, j) =i+(j+1);
      }
    }
    
    cout <<mat_write <<endl;

    ofstream file( "save.dat");
    text_oarchive oa( file);
    oa <<(const matrix<int>)mat_write;
    file.close();
  }

  {
    matrix<int> mat_read;
    ifstream file( "save.dat");
    text_iarchive ia( file);
    ia >>mat_read;
    file.close();
    
    cout <<mat_read <<endl;
  }

  return 0;
}

g++ main.cpp -I{boost_install_dir} -L{boost_install_dir/stage/lib} -lboost_serialization-xx-mt

xxにはgcc43などコンパイル環境依存する。boost_install_dir/stage/libを見れば分かる。

Mac OS Xの場合は、export DYLD_LIBRARY_PATHを通しておくこと。

2009-04-26 ホストOS:Debain lenny ゲストOS:windows xpでサウンド設定

ホストOS:Debain lennyゲストOS:windows xpで音をならす

/usr/share/alsa-base/snddevices

を実行。

snddevicesがない場合は、alsa-baseインストール

/dev/dspが作成される。

.vmxファイルのsound設定を

# ----- Sound -----

sound.present = "TRUE"

sound.autoDetect ="TRUE"

sound.virtualDev = "es1371"

sound.device ="/dev/dsp"

sound.fileName = "-1"

と変更。

vmware playerでwindows xpを起動。

ホストOS再起動に伴い、/dev/dspは毎回無くなってしまうので

/etc/init.d/alsaを作成

/usr/share/alsa-base/snddevices

記述

update-rc.d alsa defaults 99 1

を実行。