RealSense R200,Mac OSXで動作確認
忘れていた.
入手自体は 1stロットで手に入れていたのだが,すっかり忘れていた.
が,F200に関して質問が来ていたのを機に取り組んでみた.
やったこと
一言で言えば,前回の改変.
F200に対応した,と言っているが上手く動いていない libuvcを持ってきて,改変して F200を動かしたのだが,コレに R200の制御を盛り込んだ.
手順
1.Product IDのチェック
オプションキーを押しながらメニューバー左端のリンゴマークをクリックして一番上のシステム情報を選択.USB3.0に R200が繋がっていることを確認し,製品 IDの項目を調べる.R200は 0x0a80.ちなみに F200は 0x0a66.
2.フォーマットのチェック
VendorID (Intelは 0x8086)と ProductID (R200は 0x0a80) で uvc_find_deviceして見つけたデバイスを uvc_open2して手に入れたハンドラで uvc_print_diagを呼んでフォーマットを調べる.uvc_open2の最後の引数 camera_numberは 0:IR 1:Depth 2:RGBの模様.GUID (フォーマットID),size (解像度),interval (fps)くらい把握すれば OK.ちなみに uvc_open2はググっても出てこないので,コレがカスタム libuvcのキモの一つと考えられる.
3.うまいとこ組み込む.
上記で調べたフォーマットの情報を,既にあるフォーマット情報の羅列に並列して記述する.
4.呼び出す.
Depthは camera_number 1で,GUIDは Z16 (というアスキーデータで始まるバイナリ列).名前の通り 16bit値のようだが,ダイナミックレンジは調べていない,というかどうも小さいので生値を 32倍させたのがサムネイルに使ったスクショ.ただし 32倍は少々やり過ぎのようで,遠距離がサチっている.
IR画像は camera_number 0,二つあるうちセンター寄り側の IRカメラの画像.この IR画像モードではレーザープロジェクタは焚かれない.また camera_number 1の Depthとの同時動作はできない (=Depthと IRは排他).GUIDは Y12I,Y16,Y8I,Y8で,おそらく「輝度のみの1ch,ビット数,インターレースか否か」ということだろう,90fpsがある,というのが特記事項か.
RGB画像は camera_number 2で,GUIDは普通の YUY2と,おそらくセンサ生データの RW10 (ただし 8bit表示される.詳細未検討.設定は唯一 2400x1081@30fpsのみ)の二つ.YUY2で 60fpsが使える解像度は 640x480と 320x240のみ,とか画質が低い,とか率直に言って良いところがない.
既知の問題
F200は RGBと Depthの同時呼び出しが問題なく動いたのだが,R200は今のところどちらか片方しか呼ぶことができない.具体的には RGBをスタートさせたあとに Depthをスタートさせてもコールバックが呼ばれない.どうも Depth側がガッツリ刺さっているようで,終了処理自体は普通に抜けているが上手く処理できていない.この状態になると抜き差ししないと再度使用することはできない.
とりあえず動いたので,以上. F200に引き続き,OSXのネイティブで R200を動かした (ことを公表した)のは世界初じゃね?
GoPro Hero4 Black Edition (v03.00) のハイビットレートなフォーマットを出先でシェアする方法@iOS (9.2)
動機
自宅の動画編集マシンにかけて処理する前提の場合,撮影時にフォーマットを気にする必要は無い.しかし出先ではハイビットレートなフォーマットはハンドリング性が悪く,GoProアプリ内でなら確認はできるのだが,シェアは一筋縄ではいかない.だからといって低ビットレート撮影では事後の編集に支障をきたす.ということでハイビットレートフォーマットを出先でシェアする方法をまとめておく.
なお,本記事におけるフォーマットは 4K@30p 1080@120p 720@240pに限定する.それ以外のフォーマットには「そもそも一般的では無いケース」と「iOS側でネイティブで対応しているので問題ないケース」があるが,ともに情報の価値は低いと考え省略した.
使用した iOS機器は iPhone6s.
いきなりまとめ
確認のみなら GoProアプリで OK,シェアしたかったら lightning USBカメラアダプタ経由 (など)で取り込んで iMovieで変換すれば 1280x720@30pになる.4K@30pのシェアはアキラメロン.
データの取り込み
・GoProアプリ経由
ファイルを選択するとサポートしていないフォーマットである旨が出た後,再生できるようにフォーマット変換をしてくれる.勿論元データはそのまま.しかし,この変換後のデータはドコに存在するのか不明 (おそらくアプリ内でテンポラリに持たれる),かつ iOS機本体でハンドリング (Clip/Share/Download)をすることはできず,GoProアプリ内での再生のみで行き止まりになる.従って GoProアプリではファイル内容の簡単な確認のみ行うことになる.
・lightning USBカメラアダプタ経由
「読み込む」でデータのダウンロード (本体へのコピー)は可能 (写真アプリにビデオとして取り込まれる).サムネイルは出る.しかし写真アプリで再生しようとしても,ぐるぐるが出続けるだけで進展しない.
iMovieによるダウンコンバート
ここからは lightning USBカメラアダプタ経由で取り込んだ後の話となる.iMovieを利用すると,1080@120pと 720@240pは 1280x720@30pに落とすことができ,ファイルサイズも 1/10程度に減らすことができる.iMovieのビデオメニューで目的のファイルを選択し,シェアアイコンをタップして iMovie Theaterというアイコンを探す.コレを選択するとビデオの名前の入力を求められた後,変換がかかる.変換後のデータは Theaterメニュー内に現れる.コレを選択し,さらにシェアアイコンをタップして「ビデオを保存」を選択することにより,写真アプリに戻すことができる.
4K@30pも同様の操作を行うことはできるが,できあがる動画ファイルは無音の黒画である.
参考値
入力ファイル 1080@120p (7分48秒 3.52GB,7.7MB/sec,61.6Mbps) コピー時間 3分39秒 (16.4MB/sec) (from SanDisk Ultra 64GB to iPhone6s) 変換時間 8分30秒 (7.0MB/sec) 出力ファイル 720@30p (7分48秒 311.1MB,0.66MB/sec,5.45Mbps)
ざっくりとしたオーダーで,撮影時間の半分くらいの転送時間が必要で,撮影時間くらいの変換時間が必要,といった感覚になるようだ. 単純に圧縮率のせいだが,実際のところ画質はかなり厳しい.
おわりに
データサイズは劇的に小さくなるが,変換にはそれなりに時間がかかる.勿論解像度もフレームレートも落ちている.ただ友人とその場でシェアしたい,という場合に備えて iMovieが使えることを覚えておくと良いかも.
Font-Awesome on Hatena
これはイイ.
マークダウン記法について調べていたら,ステキなページを見つけた.
Font-Awesomeというステキなアイコンを利用する方法.
本家 (提供元) はこちら.
Hatenaで使うにはどうするかなー,と思ったら簡単だった.
初期設定
デザイン -> カスタマイズ -> ヘッダ -> タイトル下 に HTMLが記述できるので,Font-Awesomeの CSSをココで引っ張ってこさせる.
別にココでなくても良いかもしれないが,記事毎に設定しないで済むように共通フォーマットの箇所に埋め込んでおくことが重要.
<link href="//maxcdn.bootstrapcdn.com/font-awesome/4.1.0/css/font-awesome.min.css" rel="stylesheet" />
使い方は簡単
なら <i class="fa fa-thumbs-o-up" style="font-size:1em;"></i>
と記述するだけ.
font-sizeでサイズ調整も可能.
フォントの種類に関しては本家ページ参照のこと.
OSXでの ddによる書き出し
あらかじめやっておくこと
diskutil list
で書き出し先ディスクを確認する.
MBP:/ user$ diskutil list
(略)
/dev/disk3 (external, physical):
#: TYPE NAME SIZE IDENTIFIER
0: FDisk_partition_scheme *15.7 GB disk3
1: Windows_FAT_32 boot 62.9 MB disk3s1
2: Linux 3.9 GB disk3s2
外付け SDカードリーダーを使用しているが,disk3になっていた.パーティション構成から想像が付く方もいるかもしれないが,Raspberry Piである.
接続した際に自動的にマウントされるが,このまま ddを走らせてもエラーになるのでアンマウントする必要がある.
単一のパーティションを umountする diskutil unmount
でも
ディスクそのものを認識させなくする diskutil eject
でもなく,
diskutil unmountDisk
を用いること.
MBP:/ user$ diskutil unmountDisk /dev/disk3
Unmount of all volumes on disk3 was successful
ddについて
ディスク名の先頭に rを付けることにより Unbuffered Modeになる.
また bs=1m
などでブロックサイズを 1m程度で設定すること.
この二つを設定しないと,とてつもなく遅くなる.
MBP:/ user$ sudo dd if=some_image_file.img of=/dev/rdisk3 bs=1m
dd中の進行状況の確認方法.
別コンソールを用意するなどして killallでシグナル INFOを送ると dd側のプロセスでログを吐く.
OSX以外では USR1らしい.
MBP:/ user$ sudo killall -INFO dd
73+0 records in
72+0 records out
75497472 bytes transferred in 11.541480 secs (6541403 bytes/sec)
もしくは Ctrl-T.別コンソールが要らないのでこっちの方がお手軽か.
書き込み完了後
マウント可能な場合は自動的にマウントされ,OSX独自の隠しファイルが作成されてしまう.
念のため消した上で,今度は diskutil eject
する.
MBP:/ user$ rm -rf /Volumes/DISK_NAME/.*
rm: "." and ".." may not be removed
MBP:/ user$ diskutil eject /dev/disk3
Disk /dev/disk3 ejected
以上.
RealSense F200,Mac OSXで動作確認
Intelの RealSense F200を入手.
Windows8.1で サンプルを動かして動確したのち,MBPで動作させた.
最低動作環境に "4th Generation Intel Core processor or higher"とあり Sandy Bridge & Ivy Bridgeでは動かないかとヒヤヒヤしたが,そんなことは無かった.
参考にしたのはこのページ.
この人は Linuxでカーネルパッチを自作した模様.Mac OS Xと書いてあるが,「今後の見通しが立った」程度で,この時点で OSXで動かしていたワケではない.ただ記事中にある "libuvc driver working with the real sense camera" というのが役に立ちそう.
なんやらうまく動かないらしいが,よしよしおじさんが見てあげよう.githubから cloneしてサンプルをビルドしてテスト.数フレーム読み込めるけど刺さる,という排他処理できてないんじゃないの?的な挙動を示したので,ソースを読んでいったところ予想通りバッファの持ち方と pthread_cond_waitの使い方の問題で刺さりうる箇所を発見.真面目に直す気は無いので単純にバッファを持たなくした (LIBUVC_NUM_TRANSFER_BUFS を 1に設定した) ら動くようになった.
「F200@OSXで問題なく Depthを出せるようになった」というのでは世界初じゃね?
ただ RGBとのレジストレーションとかは自作する必要がありそう.
KiCad on OSX
まさに備忘録.
Cernが全力で後援しているフリーの電気/基板 CAD KiCad.
その Cernが実装した押しのけ配線というステキ機能を OSXで利用するためには,ソースコードからビルドする必要がある.だがフツーにビルドすると 二本指タッチがスケーリングにバインディングされてしまい使い物にならないという罠がある.
ソレを解決したブランチがコレ.
osx-trackpad-gestures : Code : KiCad
Mac OS X でオープンソース電子 CAD の KiCad をインストールする - ochalog
上記はフツーにビルドする場合だが,コレに対する差分としてのビルド手順をまとめておく.
ポイントはたったの 3つ.
・ソースコードは上記ブランチから取得する.
>bzr branch lp:~gcorral/kicad/osx-trackpad-gestures
・wxwidgetsのビルドスクリプトを実行する前にパッチを当てる
> cd wx-src
> patch -p0 < ../kicad/patches/wxwidgets-3.0.0_macosx_scrolledwindow.patch
> patch -p0 < ../kicad/patches/wxwidgets-3.0.0_macosx_magnify_event.patch
・本体の CMake時に Defineを追加する
-DUSE_OSX_MAGNIFY_EVENT=ON