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/OpenCLでmake

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

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

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

EHHL!

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変換関数を作成してみるといいかも。

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を通しておくこと。

ホスト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
を実行。

livedoorクリップとSQLite3

livedoorクリップをSQLite3に読み込む

cat clip.org.csv | sed -e 's/^\"//g' | sed -e 's/\"$//g' > clip.csv

create_cliptable.sql

    • -

create table clip (
user_id int not null,
url varchar(255) not null,
timestamp timesatmp,
tags text
);

    • -

sqlite3 clip.db < create_cliptable.sql
sqlite3 -separator \",\" clip.db ".import clip.csv clip"

MacとS21HTの同期

SysncMate http://mac.eltima.com/sync-mac.html

Mac BookAir(OS 10.5.6)+S21HT(Windows Mobile 6.0 professional)
USBではS21HTと接続できずWiFiにて同期が成功

1.SyscMateをMacにインストール(再起動します)
2.Macの[アプリケーション]->[SyncMate.app]で"パッケージの内容を表示"を選択し,[Contents]->[Resources]->SyncMate.arm.CABをS21HTにコピーしてインストール.これでSyncMateDriverのインストール完了
3.S21HTのプログラムでSyncMateDriverを立ち上げ,アクセス許可WiFiの設定
4.MacでSyncMateを起動し,メニューで同期設定
5.Sync Nowで同期完了