Todos os Tons

天気のよい時は海や山に出かけて美しい景色を捜し求め、天気の悪い日は家に篭って作曲活動をしています。両方の成果をひとつの作品にできればと音楽付映像をこつこつと作っています。

サイト内の写真の使用ならびに無断転用を禁じます。


テーマ:
都会嫌いな自分が心底居心地がよいと思える数少ない都会で、これまで3回ほど旅行している。

エキゾティックでフォトジェニックで庶民は優しく穏やかでメシが抜群に旨い。

そんなお気に入りの街がいつしかドンパチの本拠地になってしまった…やりきれない。

2011年に撮影したものより。










AD
いいね!した人  |  コメント(0)  |  リブログ(0)
最近の画像つき記事  もっと見る >>

テーマ:
前回TG3コントロールの基本の箇所を簡単なbashスクリプトを用いて実験しましたが、やはりOlympusのプロトコルはきちんとプログラムからコントロールしないとその実力は出せないようです。

とりわけライブビューで画像をモニターしながらコントロールするにはhttpプロトコルとは別にUDPをベースにしたRTPプロトコルに対応する部分を別途用意してライブビュー画像のストリームを行う必要があります。(OPC仕様書参照)

ということで、ちょっと頑張ってライブビューを含めた簡易プログラムを組んでみました。

https://github.com/delphinus1024/tg3_ctrl

RTPプロトコルの実装部分は結構苦労しました。まだ試していませんが、もしかしたらGStreamerとかを使うともっと簡単にこの部分をインプリメントできるのかも。

Win7&10で動作確認しています。MinGW+Winsock2を使っているので、MacやLinux移植するにはそのあたりを修正する必要があるかと思います。

動作は今のところかなり不安定で、環境によってはいろいろ調整しないと動作しないかもしれませんので弄れるのは自己対処ができる方限定になるかと思います。

また、firewallはOFFにしないとRTP部分の通信が阻害されてしまうようで、このあたりもWindows用のOI Shareが出ない理由なのかもしれません。

構築にはOpenCVとBoostC++(thread,filesystem)のライブラリが必要です。

構築方法や実行方法はreadmeをご覧頂くとして、

./tg3_ctrl.exe
を立ち上げると、成功すればAモードに切り替え後、ライブビュー画像のウインドウが表示されるはず。
フォーカスを合わせたい箇所をクリックすればそこにフォーカスが当たり、リターンキーで撮影、ESCで終了します。

とりあえずは最小限の動作をするテンプレートの位置づけで、まだ実験段階のためリファクタリングもしていないのでコードが汚いのはご了承ください。

コード中には現状使用していない部分もいろいろ入っていますが、それは将来の拡張用です。

この内容の利用によって生じた損害については一切の責任を負いません。
AD
いいね!した人  |  コメント(0)  |  リブログ(0)

テーマ:
前回前振りを書いた続きで、ほぼ個人的な備忘録です。

TG-3をベースに書いてありますが、おそらく他のOLYMPUS Image Share対応のOlympusカメラでも最低限の修正で使えるのではと思います。

そもそものきっかけは、所有しているOlympus TG-3の機能を外部から自由にコントロールできれば便利じゃまいか…ということ。

公式にはOLYMPUS Image ShareというWi-fi経由でOlympusカメラを操れるスマホアプリがあってそれなりに使えるのだが、あまり使い勝手がよくない。 

コントローラを自作しようにもこれらのWi-fi経由のコントロール用プロトコルがどんなものかググってみたが、残念ながらWeb上には断片的な情報しか見つからない。

そこでエンジニアの特権と裏技を使って、動作中のOI ShareのWi-fiパケットを抜き出してみた。



見たところどうやらhttpプロトコルを用いて通信をしているらしい。
更にパケットの中身から得られたキーワードでググってみると(TG用ではないが)ヒントになるサイトが見つかった。

https://gist.github.com/mangelajo/6fa005ff3544fecdecfa


更にここの情報から、OPC(Open Platform Cameras)というものに辿りつく。

http://opc.olympus-imaging.com/en_sdkdocs/index.html

これは何かというと、去年発売されたOLYMPUS AIR A01というオープンプラットフォームカメラの制御プロトコルが公開されているもので、結局はImage Shareの使用しているプロトコルもこのOPCの亜種であることを突き止めた。

OPCの仕様は上のリンクからダウンロードできるので、これを参考にしながらある程度TG3のWi-fiコントロールができるようになりました。

その概要は以下のような感じ。より詳細はOPCの仕様書参照。

・カメラ側がWi-fiアクセスポイント、コントローラ側がステーションとなる。コントローラはカメラ側が示すSSIDとパスワードに従ってDHCPでログイン。

・Wi-fi接続が完了すれば、あとは決められたフォーマットに従ってhttpプロトコルで通信をしながらコントロールを行う。

・カメラのIPアドレスは192.168.0.10固定。

・各カメラには固有のコマンド群が存在する。それぞれのコマンドは

http://192.168.0.10/コマンド名.cgi

の形式で呼び出す。

・コマンドに引数(OPCではオプションと呼ばれる)がある場合は

http://192.168.0.10/コマンド名.cgi?オプション名1=オプション値1&オプション名2=オプション値2...

という風にURI上につなげていく。

・情報のやりとりが発生するコマンドではメッセージボディにxml形式の情報(エレメントと呼ばれるみたい)を埋め込むことで情報交換を行う。

・メッセージボディはその他にも画像や動画ファイルそのものを格納することもある。

・httpヘッダー部分に'Host: 192.168.0.10' 'Connection: Keep-Alive' 'User-Agent: OI.Share v2'などを指定しないと動作しないみたい。詳細は後述のサンプルにて。

・コマンドによってPOSTするかGETするかが決められている。

おそらく、ゴタクを並べるよりサンプルを示した方がわかりやすいと思うので、以下実習編です。

[準備]

・Wi-fi接続できるPC。Win10にて動作確認しましたが、おそらくMac&Linuxでもほぼ同様だと思います。

・コマンドウインドウ上にてcurlコマンドが動作すること。おそらくMSYS(2)やCygwinなどをインストールすれば使えるようになるはず。

・ちなみにcurlコマンドとは、httpプロトコルの細かいやりとりをコマンドライン上でできるプログラム。

・念のためFirewallはOFFにしておく。

[接続手順]

・TG側のWi-fi接続設定を"プライベート接続"に

・TGのWi-fiをOn。TG画面上に以下のようなSSIDとパスワードが表示されるので記録。



・PCからWi-fiアクセスポイント一覧を見ると上のSSIDが見えるはずなので接続。パスワード入力でTGにログインできる。

・コマンドウインドウからping 192.168.0.10を実行してみて通っているかどうかを確認。

[簡単な動作確認]

まず、コマンドウインドウ上でget_commandlistコマンドを実行してみる。get_commandlistは接続しているカメラで使用できるコマンドとオプション名・値一覧をxmlで返してくれる。
get_commandlistコマンドはどのカメラでもサポートされている(と思う)。以降実行はbash shell使用を前提。




curl -v --header 'Host: 192.168.0.10' --header 'Connection: Keep-Alive' --header 'User-Agent: OI.Share v2' "http://192.168.0.10/get_commandlist.cgi" >commandlist.xml




ちなみに-vオプションは無くてもよく、入れると情報表示が多くなるがエラーが発生したときに原因追求がしやすくなるのでお好みで。
ヘッダーはこれを指定しないと受け付けてくれないようなのでオマジナイ。

成功するとcommandlist.xmlが作られるのでこれをxmlビューアで開いてみると。



使用できる(get_commandlist以外の)すべてのコマンドとそのオプションが羅列されているので、後述のdesclistと合わせて深く見ていくといろいろ発見がある。残念ながらまだ全部理解できていないし、実際は使えないオプションもあるようなので結構手ごわい。

更に、desclistはcommandlistを補完するというもののようで以下のようにして取得する。これはrecモード(仕様書参照)でなければ取得できないみたいなので、2ステップになっています。




curl --header 'Host: 192.168.0.10' --header 'Connection: Keep-Alive' --header 'User-Agent: OI.Share v2' "http://192.168.0.10/switch_cammode.cgi?mode=rec&lvqty=0320x0240"

curl --header 'Host: 192.168.0.10' --header 'Connection: Keep-Alive' --header 'User-Agent: OI.Share v2' "http://192.168.0.10/get_camprop.cgi?com=desc&propname=desclist" >desclist.xml




これで作成されるdesclist.xmlはこんな感じで、上述のエレメントに相当する情報がここに格納されている模様。もうすこしすっきりした構造にして欲しいところだが仕方がない。



さてでは実際に1枚撮影してその画像をPCに転送するまでをやってみます。




curl -v --header 'Host: 192.168.0.10' --header 'Connection: Keep-Alive' --header 'User-Agent: OI.Share v2' "http://192.168.0.10/switch_cammode.cgi?mode=rec&lvqty=0320x0240"

curl -v -X POST --header 'Content-Length: 49' --header 'Content-Type: text/plain; charset=ISO-8859-1' --header 'Host: 192.168.0.10' --header 'Connection: Keep-Alive' --header 'User-Agent: OI.Share v2' -d 'A' "http://192.168.0.10/set_camprop.cgi?com=set&propname=takemode"

curl -v --header 'Host: 192.168.0.10' --header 'Connection: Keep-Alive' --header 'User-Agent: OI.Share v2' "http://192.168.0.10/exec_takemisc.cgi?com=startliveview&port=37789"

curl -v -X POST --header 'Content-Length: 52' --header 'Content-Type: text/plain; charset=ISO-8859-1' --header 'Host: 192.168.0.10' --header 'Connection: Keep-Alive' --header 'User-Agent: OI.Share v2' -d '6400' "http://192.168.0.10/set_camprop.cgi?com=set&propname=isospeedvalue"

curl -v --header 'Host: 192.168.0.10' --header 'Connection: Keep-Alive' --header 'User-Agent: OI.Share v2' "http://192.168.0.10/exec_takemotion.cgi?com=assignafframe&point=0160x0240"

sleep 1

curl -v --header 'Host: 192.168.0.10' --header 'Connection: Keep-Alive' --header 'User-Agent: OI.Share v2' "http://192.168.0.10/exec_takemotion.cgi?com=starttake"

sleep 1

curl -v --header 'Host: 192.168.0.10' --header 'Connection: Keep-Alive' --header 'User-Agent: OI.Share v2' "http://192.168.0.10/exec_takemisc.cgi?com=getlastjpg" >last.jpg





実行すると撮影された画像がlast.jpgとして保存される。
詳細は先ほどのcommandlist.xmlとOPC仕様書を突き合せれば追っていけるかと思うので省略して、主要なところのみ。

・おおまかには 動作モード指定->撮影モード指定->ライブビュー開始->ISO指定(POSTの例として)->フォーカス位置指定->撮影->画像取得 の流れ。

・GETとPOSTの使い分けに注意。POSTのときにはヘッダー指定が増える点も注意。

・xmlをPOSTする場合、xml長をContent-Lengthで指定する必要があって面倒。これを間違えるとハングアップする。

・フォーカス位置を調整するにはpoint=で指定される座標を変更する。座標系は冒頭で指定したlvqty=0320x0240に準拠する模様。

・最終行を省略すると画像は転送されずカメラ本体にのみ格納される。

おまけですが、応用編でTimelapseを。

TG3は本体でもTimelapseモードを持っているのですがなぜか99枚までしか撮れず(30fpsだと3秒ちょっと)、レリーズもつけられないので事実上きちんとしたTimelapse撮影は不可能なのですが、このスクリプトを使うと連続インターバル撮影が可能になりあとはバッテリーの持ちとの勝負になります。

撮影間隔は5秒にしてあるが、数字を変えると調整できます。




curl -v --header 'Host: 192.168.0.10' --header 'Connection: Keep-Alive' --header 'User-Agent: OI.Share v2' "http://192.168.0.10/switch_cammode.cgi?mode=rec&lvqty=0320x0240"

curl -v -X POST --header 'Content-Length: 49' --header 'Content-Type: text/plain; charset=ISO-8859-1' --header 'Host: 192.168.0.10' --header 'Connection: Keep-Alive' --header 'User-Agent: OI.Share v2' -d 'A' "http://192.168.0.10/set_camprop.cgi?com=set&propname=takemode"

curl -v --header 'Host: 192.168.0.10' --header 'Connection: Keep-Alive' --header 'User-Agent: OI.Share v2' "http://192.168.0.10/exec_takemisc.cgi?com=startliveview&port=37789"

curl -v --header 'Host: 192.168.0.10' --header 'Connection: Keep-Alive' --header 'User-Agent: OI.Share v2' "http://192.168.0.10/exec_takemotion.cgi?com=assignafframe&point=0160x0120"

sleep 1

while :
do
curl -v --header 'Host: 192.168.0.10' --header 'Connection: Keep-Alive' --header 'User-Agent: OI.Share v2' "http://192.168.0.10/exec_takemotion.cgi?com=starttake"
sleep 5
done





Web上を見た限りこのあたりの情報は皆無なので(ニーズもあるかどうか不明だが)どなたかの役に立てば幸いです。

この内容の利用によって生じた損害については一切の責任を負いません。


AD
いいね!した人  |  コメント(0)  |  リブログ(0)

テーマ:
しばらく更新が途絶えていましたが、書くネタがなかったわけではなく。

実は最近、低山・無名山の面白さに目覚めてしまって梅雨入りまでの虫の少ない時期を狙ってまとめて登っておりました。
場所は省略しますが、何枚か。









季節が暖かくなると有名どころの山々は登山者でごった返して静かな山行が難しくなるのでそれからの逃避やら、まだ見知らぬ風景が眠っているかもという宝探し的な楽しみやら、途中トレースがあったりなかったり崩落していたりする緊張感など楽しみ方いろいろ

グーグルマップの地形図を見ながら、次に行きたい面白そうな場所や曰くありげな場所を発掘していくのも楽しい。

撮影より山行そのものを楽しむことがメインの山旅に一眼を持っていってしまうと撮影しなければならない義務感が発生してしまって楽しむことをそっちのけにして撮影してしまう。

ということで最近では撮影本意の山行でなければ一眼はあえて持参せずにコンデジ撮影だけで済ますようにしています。

軽量化してコースタイムを短縮できて軟骨も温存できるし、歩きながらいつでも出し入れできるし、水中も撮れるし、画質さえ妥協すればコンデジの優位点はとても多い。

で、本題ですが、

Olympus STYLUS TG-3 Tough



今使っているメインのコンデジ。
これの最新バージョンがTG4

OLYMPUS デジタルカメラ STYLUS TG-4 Tough ブラック 1600万画素CMOS F2.0 15m 防水 100kgf耐荷重 GPS+電子コンパス&内蔵Wi-Fi TG-4 BLK

今持っているTG3は新型発売前の値崩れ時に安く買ったもの。

とにかく小さい筐体で十分すぎるほどの機能をもっている。
単体でも15m防水なのでちょっとした水中撮影でも使えるし。

パノラマ写真やら顕微鏡写真、更にHDRやマクロの深度合成なども簡単に撮れる。Olympusが医療方面で培った技術を有効に水平展開している一品。







そんな経緯もあって、このコンデジをより深く使いこなすべくハッキングしてみると、Olympusカメラについていろいろ面白いことが分かってきました。

そのあたりWebでもほとんど情報もないようなので、後日にでもまとめようかと思っています。
いいね!した人  |  コメント(0)  |  リブログ(0)

テーマ:
無雪期の赤城山に抱いていた個人的なイメージは実はあまり良くなくて…メジャー観光地、首都近郊のお手軽登山、五月蝿いD族、何度も行く場所ではない etc...

そんなこともあり、今まで積極的に赤城山周辺はあまり開拓をすることはないまま。

ところが先日赤城山に登ったときに、大沼周辺のピークハントや池沼巡りをするメジャーコースとは異なるマイナーなルートが数多くあることを知り、面白そうだったのでその中でも最も気になったコースを歩いてみました。

通常の登山口の大沼より遥か下界の大猿公園というこれまたマイナーな登山口から登山開始。
天候は雨降り寸前くらいの曇りで、稜線上は霞んでそう。

あまり人が来ないであろう登山道は笹に覆われているが、トレースはしっかりしている。

丁度シーズンのヤマツツジやミツバツツジ(詳しくないので自信なし…)がアーチを作っていて、好きな人には堪らないだろう風景。



途中崖崩れ箇所などある。危険なほどではないが、滑りやすい急登が続く。



急登を詰めるとようやく遠くに目的地が見えた。この凹んでいる場所。



稜線に出るが、まだまだ冬の様相。こんな時は曇りの方が味がある。



所々に鮮やかなアカヤシオ(同じく自信なし)。霞に映える。



稜線から先ほどの凹みに向かって急なトレースを100m近く下降。周りは崖に囲まれ、今までとは全く雰囲気が異なる周囲と隔絶されたような世界。 パノラマで。



かつてここはカルデラ湖の底だったらしい。

周囲の地形も独特。撮影に気をとられてヘタに足を踏み外すとかなり危険。



ここにあるのが本日の主目的。「銚子の伽藍」と呼ばれているゴルジュ帯で、異様な形状をした地形に水が吸い込まれて落ちていく。

落差は10m以上はあり縁に立つとかなり怖いが、写真に撮るとまったく怖く写らなくなってしまう不思議な場所。パノラマで。



ゴルジュの内部は複雑な流線型で、アリゾナのアンテロープキャニオンを彷彿とされると言うと言い過ぎか…





まだ大沼登山口より随分麓です。

調べてみると沢上級者には沢経由で登って伽藍内の核心部に至るバリエーションコースもあるらしく。
赤城山の麓はいろいろ奥が深いようです。
いいね!した人  |  コメント(0)  |  リブログ(0)

AD

Ameba人気のブログ

Amebaトピックス

      ランキング

      • 総合
      • 新登場
      • 急上昇
      • トレンド

      ブログをはじめる

      たくさんの芸能人・有名人が
      書いているAmebaブログを
      無料で簡単にはじめることができます。

      公式トップブロガーへ応募

      多くの方にご紹介したいブログを
      執筆する方を「公式トップブロガー」
      として認定しております。

      芸能人・有名人ブログを開設

      Amebaブログでは、芸能人・有名人ブログを
      ご希望される著名人の方/事務所様を
      随時募集しております。