「エキサイト公式プラチナブロガー」スタート!
ブログトップ
コンピュータと共にある創造的日常
uneoyaji.exblog.jp

メディアアート・プロジェクトにハマったオヤジの日常生活
by une0exct
極めて久しぶりに投稿してみる。
もう、完全に忘れていた。最近のマシン+OSで Core Image Filter などを使うと動作がスムースでないので、あれこれ、OpenGL に書き換えているのだが、結構、面倒。とりあえず、今日は以上。
[PR]
# by une0exct | 2016-06-02 10:37
MBP Late 2013 15inch に Kinect を2つ繋いでみる。
この夏休みに集中して制作した Visual Liquidizer では、背景差分法を使っていたのだが、外光が入る場所では、時間経過と共にどうしても室内の照明条件が変わってしまい、背景を初期化しなおさないといけない。これを解消する強力かつ廉価な手段の1つが MS XBOX Kinect を使うって技なのだが、これがいろいろ面倒くさい。
素晴らしい技術なので、ロボットとかインタラクティブアートとかよく使われているし、当方も Nonstop Evolutionary Art you are embedded in と名付けた昨年の作品に取り入れてみた。OpenKinect プロジェクトの libfreenect を使うと、ご本家の MS Windows じゃない Mac OS X や Linux でもプログラム開発ができる。すばらしい。
本音いうと、OS X Lion から導入された AVFoundation の API で使えるような driver が望まれるところだが、贅沢は言うまい。
libusb と libfreenect をインストールして、Xcode の search path と link option を追加すると、普通に使える。しかし、2個つないだところで問題が発生した。2台ともRGB 画像と Depth 情報を同時に取り込むと、USB stack でパケロスが発生! 一方はスムースに動作しているのだが、他方の Depth 情報がカクカクとろいのである。何度か試しているうちに、全てのキーとマウスが効かなくなった。効いたのはパワーボタンのみ。トホホな気分で、長押し強制終了。
例によってネットから情報を漁って見ると、CPU 負荷が大きいときに起きるらしい。また、同じ現象に出くわした人は、他の USB 機器との競合があったらしい。ということで、Video format を YUV_Raw, Depth format を 11bit にして、MBP 本体の左右に1つずつ付いている USB の口からハブを外し、2台の Kinect のみ直接続してみると、なんとか動作してくれました。
やっぱ民生用というかゲーム用というか、製品間の性能の均質性については、あまり当てにしちゃいけないですね。2台同時に使ってみると、個体差が結構気になる。1つは、ホワイトバランス。もう1つは、RGB と Depth 用のカメラの軸のずれ方。軸のずれについては調整用のGUIを作って、現場調整可能にしたが、ホワイトバランスは、まだこれから。なんとかなるのかな?
[PR]
# by une0exct | 2014-09-08 22:13
MacOS X 10.7 Lion に h264 と ogg theora のエンコード可能な ffmpeg を入れる。
QuickTime 7 が有料化なったこともあるので、この際、動画ファイルのバッチ変換は、AppleScript で QuickTime 7 を操るより、ffmpeg 使って Unix 的にやることにした。それで、ffmpeg のインストールだが。。。
当方の環境で取りあえず追加が必要となったのは、x264, yasm, libtheora.
まず、yasm を入れる。これはすんなり入った。
次に libtheora。これも問題なし。
そして x264 で、、、つまずきました。x264 は gcc でコンパイルされるのだが、ld がシンボルが見つからんエラーを吐いて停止。そうだよね、Lion + Xcode 4 からは gcc じゃなくて clang なんだもんね。x264 の configure の中を覗いてみると、gcc を cc に変えただけではだめそうなので、エラーで停止した ld コマンドに -framework オプションを追加してみた。必要なオプションは、
-framework CoreFoundation -framework CoreVideo -framework -VideoDecodeAcceleration と -ltheora 。
sudo make install-lib-shared でインストール完了。これでようやく ffmpeg の構築にかかれる。
ffmpeg で、./configure --enable-libtheora --enable-libx264 --enable-gpl すると、Makefile ができあがる。ここで、make して、sudo make install すれば、実装終了。
ffmpeg -i 入力ファイル.mov -strict -2 -vcodec libx264 -b:v 2M 出力ファイル.m4v
などとやれば変換できる。
Web で動画を公開するときに、Firefox 向けに ogg、iPad/iPhone 向けに .m4v。この2種類を用意しておけば、大概のユーザ環境で再生可能なはず。かな?
[PR]
# by une0exct | 2012-10-15 14:00
MacOS X 10.7 Lion に netpbm を入れる。
結構昔から画像ファイルのバッチ処理には netpbm を利用していたのだが、最近ようやく OS を Lion にアップした Mac で久々に netpbm を使おうとしたら、なんと PPC コードのため実行できませんときたもんだ。つまり、おそらく昔々使っていた PowerBook G4 にインストールしたバイナリを、そのまま引き継いで使っていたらしい。ご存知のとおり、Lion からは Rosetta のサポートがなくなり、PPC用のバイナリは実行できなくなってしまった。多分、他のライブラリにも同様の問題があると思い、このさい、画像処理まわりをバージョンアップすることにした。netpbm のバージョンは、安定版で 10.47.37。
netpbm で使われるライブラリは、libjpeg, libpng, libtiff, libz など。まずは、これらも最新版のソースをダウンロードして、./configure; make; sudo make install などなどと実行して、インストールは順調に終了。古いバージョンの一部が /opt/local/ 下にあったので、これらは uninstall した。新しいバージョンはすべて /usr/local/ 下に統一した。
それで、netpbm を ./configure; make すると、コンパイルエラー発生!いろいろ探ってみると libpng のバージョンが新しすぎたらしい。1.5 で変更になった部分が netpbm で使われていた。1.5 を uninstall し、気を取り直して 1.2 の最新版をインストールし直し、再度、netpbm の構築を試みると、今度は、バイナリの作成まで問題なく終了した。make install と打ってみると、パッケージを作成してから ./installnetpbm を実行せよとのメッセージ。make package; sudo installnetpbm で /usr/local/netpbm/{bin,lib,include,...} 下にインストール完了。
当方は unix を使い始めた時に sh じゃなくて csh を使ってしまってから、ログインシェルはずっと csh その後 tcsh を使っている。んで、$path に /usr/local/netpbm/bin を追加すべく、~/.cshrc を少々変更。準備OKのはず。ということでコマンドを実行してみると、まず、libnetpbm が見つからないというエラー。ライブラリへのパスが通っていない。ここはライブラリファイルの数も少ないので、/usr/local/lib 下に /usr/local/netpbm/lib/libnetpbmなんたらのシンボリックリンクを置くことで解決。いくつかのコマンドは順調に実行できる。しかし、オプションに色の名前を指定したところで、rgb.txt が見つからないというエラーが発生した。ライブラリ関数がデフォールトで /usr/share/netpbm を探すらしい。これもシンボリックリンクで解決した。
今回、必要になった処理は、SBArt4 のヘルプファイルに埋め込む画面サンプルの自動作成。コマンド+シフト+4、スペース、クリックで保存した画面の PNG ファイルを、周囲をトリミングして、サイズを 40% に縮小して JPEG ファイルに書き出すというもの。コマンドは以下のような感じ。
pngtopnm -mix -background=white $f | pnmcrop -white | pamscale 0.4 | \
pnmtojpeg -quality=90 > ../$l.lproj/help/$fn.jpg
これまでは、いちいち、Phoshop で1つずつやっていたので、かなり簡単になりました。
[PR]
# by une0exct | 2012-04-08 13:41
パソコン用の廉価NASをLinuxサーバ用に設定する
1つの URL を Linux 2台で負荷分散させて運用しているのだが、予算の都合により、これまで共有デスクはなく、それぞれ同じ内容をコピーしておったのですよ。
マシンがやや古くてディスク容量不足が目に見えてきたため、NAS を物色していたのだが、表立って UNIX 対応をうたっている製品は、法人向けのためか、結構、値が張る。パソコン用の I/Oデータとかバッファロのが安いのだが、どうも UNIX は想定外らしく、メーカが用意している情報だけでは、うまく運用できるのか不明。で、いろいろ情報をあさっていると、どうもバッファロの主要製品は OS が Linux らしい。しかも、ACPコマンドが使えるようになっていて、これで root 権限を奪取する抜け技がボランティアサイトで公開されていた。んで、やってみたわけです。
購入した製品は TeraStation TS-X8.0TL/R5。RAID 0,1,5,10 対応、2TBドライブ×4装備。
まず、本体の IP アドレス設定。設置説明書きは、DHCP を想定していて、固定 IPv4 の設定の方法が書いてない!本体には設定をいじるための操作パネルのようなものはなく、ネット HTTP 経由 WEB ベースで設定するようになっている。これじゃ設定できんではないかと思いきや、幸い、本体には2つの Ethernet ポートがあるので、2nd ポートをパソコンに直結すれば設定可能。
LAN ケーブルを接続して2分ほど待つと、プライベートアドレス 169.254.xx.xx が自動的にふられる。パソコンには製品付属の CD (DVDだったかも) を突っ込んで設定開始。
イーサポート1の固定アドレス設定、ユーザ登録、NFS の有効化、NFS クライアントのアドレス設定、NFS は user じゃなくて kernel モード、などなど。
これで、Linux から NFS マウントかけると、ちゃんとマウントできます。
しかし、Linux からマウントしたディレクトリィ内にサブディレクトリィを作ってみると、オーナ・グループが nobody になって、しかも chown が効かない。これは、Linux 側のユーザがなんでも同じ。ということは、NAS 側の exports オプションが all_squash になっていると。今回は home を NAS に引っ越そうという計画なのに、これでは使い物になりません。それで、NAS内部の設定を編集すべく、root 奪取を試みたわけです。
まず、パソコンに nas_central.org から acp_commander.jar をダウンロード。
旧製品だと
% java -jar acp_commander.jar -t 169.254.xx.xx -ip 169.254.xx.xx -pw password -o
で、telnetd が起動して、root パスワードがリセットされるはずなのだが、telnetd が動くが、パスワードリセットは利きません。(注:169.254.xx.xx は、NAS の IP アドレスです。) そこで、
% java -jar acp_commander.jar -t 169.254.xx.xx -ip 169.254.xx.xx -pw password -s
...
/root>chmod 666 /etc/shadow
>exit
で、パスワードファイルを書き込み可能にしてから、telnet でユーザ名 admin にてログインして root パスワードを消去。今度は root でログインして、/etc/shadow のアクセス許可を 644 とかに戻し、ついでに新しい root パスワードを % passwd コマンドで設定。ついでに ssh で root ログインできるように、/etc/sshd_cong 内の PermitRootLogin を no から yes に変更。UsePAM yes をコメントアウト。セキュリティ上は、あまり良い方法ではないが。。
/etc/inittab を見ると、起動スクリプトは /etc/init.d/rcS となっているので、その中身をいろいろ見ていると、/etc/init.d/nfs.sh の中に nas_confggen -c nfs というコマンドがあり、これが /etc/exports を作るらしい。つまり /etc/exports を直接編集しても、再起動するともとに戻ってしまう。ということで、nfs.sh 内の nas_confggen -c nfs の直後に以下の2行を追加。
sed /all_squash/s//no_all_squash/ < /etc/exports > /etc/exports.new
mv /etc/exports.new /etc/exports
再起動が面倒いので、上記2行を直接実行し、Linux 側の mount を解除してから、/etc/init.d/nfs.sh restart で、nfsd を再起動。Linux 側から再度 mount してみると、今度はちゃんと Linux 側のログインユーザのままアクセスできる。Linux 側で root ログインして、home 以下を NAS に % tar cf - . | (cd /mnt/nas; tar xf -) とかでコピー、、しようとしたが、root_squach を外してなかったので、できない。実は2人しかユーザがいないのをいいことに、NAS側に空のユーザディレクトリィを作っておいてから、Linux 側で各ユーザになって、tar でコピーした。
NAS側マウントポイントのディレクトリィ /mnt/array1/share のアクセス権がなんと777つまり誰でも書き込み可能になっているので、これは 755 に変更。あと、Windows は使わないので、samba を停止。NAS再起動時にも samba が立ち上がらないよう、smb.sh を細工。
いまのところ順調に稼働しています。ディスク容量が 80GB から 5.8TB に増えた。
[PR]
# by une0exct | 2012-01-21 16:23