2013年2月21日木曜日

JavaCVでFFMpegFrameGrabber for Windows8 64bit

JavaCVでOpenCVGrabber使っててどうもクラッシュするようになって、
なんなんだろうと思っていたら、
http://code.google.com/p/javacv/wiki/Windows7AndOpenCV
Windowsでは問題あるからFFMpegFrameGrabber使えとある。

FFMpegFrameGrabberを使うには、sharedのライブラリ(dlls)を落としてこなきゃいけないが、
http://code.google.com/p/javacv/で紹介されている10/29日版を使わないとまた、

 EXCEPTION_ACCESS_VIOLATION

が起きてクラッシュしてしまう。


最初は新しい方がいいからと2/17日版のdllsを使ってクラッシュしまくりで困った。

しかも結局FFMpegFrameGrabberを使ったら、
grabber.getFrameNumber()から帰ってくる値がぶっ壊れててまともな値が帰ってこない。。。

OpenCVやりたいならJavaはまだだなぁ・・・
やっぱりJythonが良いか・・・

[dllについて]
から落としてbinに入っているdllをプロジェクトフォルダ(eclipseで試した)のルートにおいて
実行すればOK.パス通したディレクトリに置いてもOK。

今日はもっといろいろやりたかったのに時間が取られてしまった。

2013年2月19日火曜日

そのうちJythonでJavaFX

久々に日記です。

最近さくっとGUIアプリ作りたい熱が再び高まったので、調査。
やっぱり言語はPythonが一番エネルギーを使わずかける気がしていて良い。
ただ、どうもPythonのGUI環境は好きじゃないので、方法を探しました。

C# + VisualStudio : かなり楽な感じだけどWindows向けなのが困りもの
Java + JavaFX(FXML) : SceneBuilderの使い勝手も良く、マルチプラットホームなので良い。

Python + Jython + JavaFX(FXML) : JythonでSwingやってる人はいるみたいだし、JavaFXも動かしているみたい。FXMLからのコールバック関数なんかがどうなっているかわからないので、そのうち実験する。

Jython関連リンク:
 http://www.jython.org/archive/21/docs/subclassing.html
 http://blog.elliptium.net/2012/12/use-JavaFX-from-Jython

JavaFX:
 http://itpro.nikkeibp.co.jp/article/COLUMN/20060915/248243/

2011年6月21日火曜日

Motorola Xoom 地獄のRSD Mode 2 LNX 0x0004

Xoomを買った。
Android3.1にしたくて、手動でアップデート試して失敗して、
US版のファームなら行けるということで、fastboot oem unlockしてrootとって
US Retail書きこんでfastboot oem lockしたら、
image failed
RSD Mode2という表記とLNX 0x0004という謎のメッセージと共に、
(LNX 0x0002というのも同じらしい)
Xoomは5万円のまな板になってしまった。
どういう状況かというと、本来であれば、

・VolUp + PowerButtonで再起動
・VolDown押しっぱなしでFastboot modeに移行

で、PCからfastboot oem unlockでまた戻れるはずだったが、
PCにケーブルをつないでも、なにも反応しない。

調べていると、
http://forum.xda-developers.com/showthread.php?t=1108518
にあたった。
結果から言えば、この方法で回復できた。ありがとう掲示板のドイツ人。本当にありがとう。

[解決方法]
MicroUSB-Bコネクタ側(usbの小さいほう)の1番PIN(電源5V)と4番PINをリード線でくっつけてやる(ハンダ付け)。これがMotorolaのファクトリーケーブル(factory cable)となる。(http://ja.wikipedia.org/wiki/Universal_Serial_Bus 中程の図を参考に)
4番PINというのは普通は使われていないそうで、たしかにケーブル分解したら、
ひとつだけ放置されているPINがありました。

ちなみにファクトリーケーブルは、ここで買えるらしいです。50$もするけど。
ただ、ページ中のインストラクションは役に立つので、見ておくといいかも。
http://shop.teamblackhat.info/Factory-style-programming-cable-for-Motorola-FactCable.htm


これをBコネクタ側を先にXoomに接続後、PCにホスト側コネクタをつなぐ。
さらに、電源ケーブルをXoomに挿す。
そして電源をVolDownを押しながら入れる。
するとまたこの間のimage failedとともに、fastboot modeが始まっている。

前回と表記がなにも変わらないので、落胆しながらPCにつないで、
PC側からfastboot deviceを実行すると、動きました!

あとは、fastboot oem unlockするなど、fastboot flashするなど好きにできます。

#USBケーブルの改造で、実は一本無駄にしました。壊してもいいような安いケーブルが必要だということで、秋葉原の秋月電子で150円のを買ってきて、3本ほど買いました。安い。ゴムの皮膜を剥くように外すと、ホットボンドで固められているのでそれも側面に切り込みを入れると綺麗に剥けて、線の接続部が出てきます。

2011年6月17日金曜日

まちがって初期化したSDカードの画像と動画を抜き出すには

友人が間違ってカメラを初期化してしまってデータを取り出したいそうなので、
カメラの操作で間違ってSDカードを初期化した場合に、
画像(.jpg)と動画(mp4)を実際に復活させられるのかを実験してみた。

まず、初期化だけしても0書き込みなどしない限り、データの配列は残っているはずなので、
それをダンプして、ファイルっぽいところを切り取ってやれば、画像や動画になるはず。

順番は
・ダンプ
・該当ファイル領域特定
・切り取り

となる。
実験に当たって、
画像と動画を何枚も撮影してあるSDカードを、
カメラの操作で初期化を一度行った。
書き込みはせずにそのままUSBカードリーダーに接続した。
[ダンプ]
SDカードをPCにつないでddコマンドでディスクイメージをファイルに抽出(以後ここにあくせす)windowsにはddは無いが、gnuから出ているらしい。今回はmacで。
<1>
sudo dd bs=10m if=/dev/disk1 of=/Users/User Name/SD_Dump3.dmp
なかんじで。16GBあったが、15分ほどで完了。
ifは抽出元、ofは抽出先。disk1は今回のusbカードリーダの位置(diskutil listで調べる)。

[該当ファイル領域特定]
macなら0xEDというダンプソフトがあるので、
それでファイルの16進数ダンプを見ながらすすめる。
http://homepage2.nifty.com/~chairo/html/jpeg/jpeg.html
ここ参照に、jpegファイルはFF D8から始まるらしいので、0xEDでFF D8を検索。
そこからjpegファイルなら数メガバイト適当にとった。(上記のページでサイズ数がわかるようにフォーマットを調べるのが正しいが、今回は動画が欲しかったので)

mp4の場合
http://atomicparsley.sourceforge.net/mpeg-4files.html
このサイトがとても役に立った。
mp4の初めには[4byteのサイズ情報][ftyp]というバイナリが入っているので、
ftypというテキストを検索してやれば、先頭が出る。
mp4はatomという単位の入れ子構造になっていて、
ルートなしの4こ並び(この4つは木構造)
で、どのatomも初めに[4byteのサイズ情報]がある。
つまり、
先頭アドレス(サイズ情報格納アドレス) + [4byteのサイズ情報] = 次のatomの先頭アドレス
となるので、順々にatomをたどっていくと、そのうち00000がでてたどれなくなるので、
そこをファイルの終端とする。
<2>
ファイルの先頭=[4byte][ftyp]の先頭アドレス
ファイルの終端=最後の00000

として、再びddを使いこの先端と終端で抜き出す。
[切り取り]
<3>
dd if=SD_Dump3.dmp of=testmp4.mp4 bs=512 skip=2080768 count=790343
ここではbsでセクタ数を512byteに設定。
skipで2080768ブロック(つまり 2080768 * 512 byte)から抜き出すように設定、
counteで790343ブロック分抜き出すように設定。
bsを1にすれば、skip,countともに、アドレスから計算しやすいが、ものすごい遅くなるので、bs=512で行う。
これは、適当に先端アドレスを512で割って、切り捨てした数をskipに。
(終端 ー 先端) を512で割って切り上げした数をcountにすることで数字が出せる。

<4>
bs=1以外では、先端と終端に余計なバイナリがつくと思われるので、
バイナリエディタを見ながら、先端アドレス以前のバイナリを切り取るなどする。

こんな方法でjpgとmp4が抜き出せた。
dumpしたイメージファイル読み込んで自動化することもできるかもしれない。
ただ、本当はCannon7Dのmovファイルが取り出したいんだけど、
もってないんですね。SonyのNEX3で試しました。

ファイルのフォーマットがわからなければ、自分がすでに持ってる類似したファイルを、
ダンプかけてファイルのヘッダーの特徴などを見ればいいかもしれないですね。サイズが分かりませんが。

2010年11月3日水曜日

Macのpython2.6でwxPythonがインポートできない!!!!

ImportError: /usr/local/lib/wxPython-unicode-2.8.11.0/lib/python2.6/site-packages/wx-2.8-mac-unicode/wx/_core_.so: no appropriate 64-bit architecture (see "man python" for running in 32-bit mode)
ってでる。

調べたところ、stable版のmacのwxPythonは32bitモードしか対応していない。
それは、Carbon(は32bitのみ)をwxPythonが使っているのが理由らしい。
Python2.6からは基本的に64bitモードで動かしているので、Carbonがダメで、アウト!になっているとのこと。

ということでPython2.6を32bitモードで動かせば整合性が取れるとのことだけど、結局ImportErrorがでる。。。Python2.6が32bitモードで動いてくれてないのかな。

Development Release 版のwxPythonはCocoa(32bit と64bit OK)版が出ているけど、
Python2.7用しか無い。
めんどくさいなー。
自分の環境だけならPython2.7にするところなんだけどなぁ。困ったもんだ。

2010年10月19日火曜日

wxPythonの勉強はじめました

データ作成を非プログラマにやってもらうので、
pythonでサクサクッと管理ソフトを作りたい!
ので、wxWidgetを使いたい!wxPythonのお勉強はじめます!

http://zetcode.com/wxpython/ - The wxPython tutorial


が良いと書いてあるので、頑張って1から読み始めた。

2010年10月11日月曜日

クラウド時代のデータ置き場 DropboxとAssembla

複数人でデータを共有しているので、Dropboxを使っていたけど、
さすがにソースコードの管理が厳しくなったので、
SVNを無料で使わせてくれるところ無いかなと思ったら、
https://www.assembla.com/
が、あった。
2GBまで使えて無料のフリープランがあります。
サイトの下にちょろっとリンク貼ってあるので、
そこから加入。
macなので、SVNクライアントにはSmartSVNを使用。
TortoiseSVNが使いたいです。。。
でもでも便利になりました。
Dropboxの方が何も考えずに使えて楽だけど、ソースコードの管理は無理だからね。