あさがおの観察日記

覚書とか考えを整理するだけです。

OpenCVとOpenGLでAR

MMDモデルをOpenGLで読み込むライブラリが公開されていたので,それを使って即席のARプログラムを作って見た.使ったライブラリはいつも通りのOpenCV3,MMDモデル用にsaba,そしてビューア用にPangolin.

同じようなものを参考書庫様(AR (Augmented Reality))が既に作っていて,私もOpenGL初心者ゆえモデルの描画周りだけは参考にさせてもらった.

さて,作ったARプログラムについて.どう動くかは動画の通り.お借りしたモデルとモーションは動画の詳細に書いてある.

あらかじめターゲットとなるパターンを撮影しておき,そのパターンを撮影しているカメラの姿勢を特徴点マッチングから推定するという特筆すべきところがない作りになっている.

モーションブラーが生じても特徴点ベースなだけあって多少はロバストに動いてくれる.特徴点検出,特徴量計算,マッチング,PnPを解くという手順を踏んでいるが,平均3fps程度で動作する(Core i7 5500U).動画はちょっと古いので低速度.

リポジトリはここ.改善が必要な箇所はあるものの,一通り無難に動くので公開しておく.

12/27 - ARマーカーを使えるように更新した.ただし,ArUcoモジュールを使ったのでopencv_contribのインストールが必要.

 

OpenCVとPythonでパノラマみたいな画像を作る.

OpenCV3とPython3でパノラマのような画像を作るスクリプト(

opencv_examples/python_examples/Panorama at master · cashiwamochi/opencv_examples · GitHub

)を1年以上前に書いたから,githubにあげるついでにここにも書いておく.具体的な例は以下の通り.

f:id:asaga0:20170819221736j:plainf:id:asaga0:20170819221755j:plainf:id:asaga0:20170819221812j:plain

f:id:asaga0:20170819221829j:plainf:id:asaga0:20170819221850j:plainf:id:asaga0:20170819221908j:plain

f:id:asaga0:20170819221928j:plainf:id:asaga0:20170819221948j:plainf:id:asaga0:20170819222008j:plain

この9枚の画像を1枚の画像にまとめるとこうなる.

f:id:asaga0:20170819221707p:plain

特徴量にはAKAZEを使った.ratio testを使ってなるべく好い特徴点マッチングを得られるようにしてある.あと,重複部分の合成はOpenCVcv2.seamlessClone()を使ってそれっぽくみえるように調整してある.ここの調整がなかなかシビアで,他の画像セットでは綺麗に重複部分を合成してくれない場合がある.2枚の画像を合成するには,合成したい部分のマスクを作る必要があり,このサイズが適切でないと合成領域の外側に色が滲み出たような状態が現れる,ので注意されたし.それ以外にも合成するそれぞれの画像の色味が違うと,以下の通りになる.

f:id:asaga0:20170819223109p:plain

OpenCV3とPython3が動く環境なら適当な画像セットで動くスクリプト,のはず.なるべく綺麗に見えるように,合成も実装したし画像を何枚投げても動く.ただし,共通領域の少ない画像セットだと良好な結果は得られないかもしれない.

Vaio Pro13 mk.2 と Ubuntu16.04LTS

タイトルの通り.Vaio Pro13 mk.2にUbuntu16.04LTSをインストールした.Vaioが手元にやってきたのが昨年の11月くらいだっただろうか... 14.04LTSをインストールするも,画面が点滅する現象に苛まれ,とてもじゃないが使えないと思い,Ubuntu16.04LTSがリリースされるまで放置していた.そして14.04LTSを消し去り,16.04LTSをインストールするが,やはり画面のちらつきは改善されない.同じ症状に悩む人たちはネットでも散見された.また,14.04LTSでは見られなかった,PCを閉じてサスペンドすると一切の入力を受け付けなくなるという症状が出る.やはりその後しばらくVaioを放置していたのだが,Grub

" advanced options -> recovery mode -> resume "

と起動すれば何故か画面のちらつきは生じなくなることがわかった.相変わらずPCを閉じると一切の入力を受け付けなくなるが,それでもよくわからないがなんとかなりそうな気はした.とりあえず,linuxカーネルバージョンをアップデートすることにする.

$ mkdir temp && cd temp とでもして適当にディレクトリを作った後, 

http://kernel.ubuntu.com/~kernel-ppa/mainline/v4.6-yakkety/ を見ながら,

$ wget http://kernel.ubuntu.com/~kernel-ppa/mainline/v4.6-yakkety/linux-headers-4.6.0-040600_4.6.0-040600.201605151930_all.deb

$ wget  http://kernel.ubuntu.com/~kernel-ppa/mainline/v4.6-yakkety/linux-headers-4.6.0-040600-generic_4.6.0-040600.201605151930_amd64.deb

$ wget http://kernel.ubuntu.com/~kernel-ppa/mainline/v4.6-yakkety/linux-image-4.6.0-040600-generic_4.6.0-040600.201605151930_amd64.deb

した後,

$ sudo dkpg -i *deb 

する.結果,画面のちらつきはほとんどなくなった.時たま画面がふっと消えることがあるが,実用にあたってほとんど気にならない.

2つ目の問題,「PCを閉じると一切の入力を受け付けなくなる」症状.これは問題を解決するのではなく回避するという形で一応の決着を見た.まず,長時間放置しても,あるいはPCを閉じてもサスペンドしないよう設定を変更.しかし,流石にサスペンドできないのではラップトップとしていかがなものか…

あれこれ試しているうちに判明したが,何故かターミナルで

$ sudo pm-suspend 

$ sudo pm-hibernate

とコマンドを打てばキーボードもタッチパッドも効かなくなるという現象を回避できる.ただ,このコマンドを使ったサスペンド,ハイバーネートは復帰時にロックされない.そこで,.bashrcに

alias suspend='gnome-screensaver-command --lock && sudo pm-suspend'

alias hibernate='gnome-screensaver-command --lock && sudo pm-hibernate'

を加えた.(再起動あるいは $ source .bashrc するのを忘れないように.) 更に,

$ sudo visudo

して,/tec/sudoers.tmp の末尾に

yourname ALL=(ALL) NOPASSWD:/usr/sbin/pm-suspend, NOPASSWD:/usr/sbin/pm-hibernate

を記述してやれば,次からターミナルでsuspendあるいはhibernateと打てばPCを省電力待機状態にすることができる.

実用にあたってもう少しいろいろ設定したが,とりあえずは公開しておこうと思う.

* 6/23 追記 Ubuntuのハイバーネートは避けたほうがいいらしい.トラブルが起きてからそれを聞いた.

 

Ubuntu14.04LTSをカスタマイズ

 Ubuntu14.04LTSをある程度カスタマイズして使いやすくするための覚書.自分が使っているアプリや設定をまとめていく.ググれば他の人の情報がたくさん手に入るから,その都度自分に適したカスタマイズをしていくのが良さそう.

 Ubuntuにはデフォルトでfirefoxが入ってるけれど,他の端末ではChromeを使っているためUbuntuでもChromeを使う.いろいろ好きな機能はあるけれど,firefoxにもありそうな気はする.導入方法は以下のサイトで指示されているとおりにやれば容易にできる.

 

 端末間で共有するメモにはOneNoteを使っているので,ChromeでもOneNoteのアプリをインストールする.インストールされると,下図のようにアプリ一覧画面で表示されるはず.

f:id:asaga0:20160315212510p:plain

 ここで更に,

f:id:asaga0:20160315212747p:plain

のようにしてショートカットを作成する.こうすることで,ubuntuのアプリ検索からOneNoteを起動できる.一々Chromeを開いてからアプリを動かすという二手間をかけないで良い.

 

 無料のアプリケーションランチャー.   GNOME Do - Wikipedia, the free encyclopedia

 

      f:id:asaga0:20160315215924p:plain

 非常に便利.上記の設定を済ませたあとに図のように「one」と打てば,OneNoteがサジェストされてPressEnterでChromeOneNoteアプリが動く.僕の端末では「Ch」と打てばChromeがサジェストされ,「g」と打てば「GVim」がサジェストされる.「fi」と打てば「Files」がサジェストされ,PressEnterでファイルマネージャが立ち上がる.一々GUIでファイルアイコンをクリックする必要がなくなるため重宝する.

 Ubuntuソフトウェアセンターでgnome-doを検索してインストールすれば良い.設定をしたければ,右上の▽印をクリックして設定画面を開く.おすすめの設定は,

"設定->全般->GnomeDoをログイン時に起動する" をON,

"設定->全般->起動時にウィンドウを隠す" をON,

"設定->キーボードタブ->Summon Do" を<Control+space> .

 

  • guake-terminal

 Ubuntu Softwere Center からインストール.

f:id:asaga0:20160528174100p:plain

 OS起動時に自動的にguakeも起動するように設定するのがおすすめだが,先に上げたGnome-doで起動させても良いだろう.F12を押せば

f:id:asaga0:20160528174845p:plain

このようにターミナルが画面上部分に出現する.外観も,ターミナル部分の広さも設定できるから各人の好みに沿った設定ができる.また,guake上でタブを複数作成でき,名前も変更できる.設定に関しては,guake上で右クリックして設定画面へ移動することができる.

f:id:asaga0:20160528175157p:plain

 キーボード・ショートカットの設定はこんな感じ.あまりどこかを変えた記憶はないけど,どこかしら変更しているはずなのでひとまずスクリーンショットを貼って済ませておく.コードをひと通り書いたら,F12を押してターミナルを出してすぐ実行できるから非常にguakeは気に入っている.

  • CompizConfig Setting Manager

 まずubuntu14.04をインストールしてやることの一つに,「ワークスペースを有効にする」ということがある.これによって,作業領域が大幅に増える.

f:id:asaga0:20160528180800p:plain

ぐちゃぐちゃだ…

 それはさておき,ワークスペースが2x2で足りないような人は,CompizConfig Setting Managerによってワークスペースの数を増やすことができる.これまで同様,UbuntuソフトウェアセンターにてDL,インストールできる.

f:id:asaga0:20160528181120p:plain

 インストール後,起動し,"一般->一般オプション->デスクトップサイズ"へ移動して,「水平仮想サイズ」「垂直仮想サイズ」を変更すれば,ワークスペースを任意の数に変更できる.僕はそれぞれ3に設定しているから,

f:id:asaga0:20160528181350p:plain

こうなる.

 

 ソフトウェアを起動時にたちあげたいがそれぞれの設定だけだとうまくいかない場合,Ubuntuのアプリケーション検索から「自動起動するアプリケーション」を選択して,起動時に実行するコマンドを作成,編集できる.(そのコマンドによってアプリケーションを起動する)

 

  • まとめ

 他にも色々設定したんだけど,これまでの足跡を一々残していないので全部は書ききれない.思い出したらその都度追加して行く形にしてとりあえず公開しようと思う.ただ,最近環境がubuntu16に移行しつつあるのでubuntu14でのカスタマイズはあまり挙げられなさそう.まぁ,14も16も自分程度ができるカスタマイズの範疇では特に違いがでないだろうから,別にバージョンは関係がない.

AOJ-ITPを全部解き終わった。

AOJのITPコースの問題を全部解き終わった。(c++で全部書いた)

手間取る問題は無いんだけれども、モチベーションが保てなかったりして1ヶ月たらずくらいかかった。一応コードは、githubにあげておいた。必要とする人はほとんどいないだろうけど、今年度の後輩がc++を触るときに一助になれば幸いだと思っている。

github.com

今後は、AOJの他のコースを少しずつ進めていきたい。GWに思い切り進めても良いし、それでなくともまた少しずつ進めていこうと思う。

 

Ubuntu14.04LTSでのeduroamへの接続設定

使用しているubuntuでeduroamへ接続する時、少し手間取ったため念の為に覚書を残しておくことにする。設定は以下のスクリーンショットの通り。

f:id:asaga0:20160312225018p:plain

 匿名の識別子、ユーザー名、パスワードをそれぞれ入力してやれば良い。自分の端末では、匿名の識別子とユーザー名を同じにしておけば無事eduroamへと接続できた。

IPv4IPv6はともに自分で設定すべきところは無い。

*6/13追記.当然ながらUbuntu16も同様の設定.