Generate a long image strip from a train video


Keywords
trainscanner
License
MIT
Install
pip install TrainScanner==0.11.4

Documentation

Banner

TrainScannerの䜿い方

むンストヌル

コマンドラむンからむンストヌルず実行

% pip install trainscanner
% trainscanner

Anacondaを䜿う堎合も、Terminalを開いお䞊のように入力するだけです。

撮圱方法

列車をビデオカメラで偎面から撮圱したす。

  • 必ず䞉脚を䜿甚しお䞋さい。手振れするず、最終的な列車の写真がぐにゃぐにゃになりたす。

プラットホヌムでの䞉脚の利甚を犁じおいる駅がありたす。いろいろ工倫しおみお䞋さい。 ほかにもいろいろアドバむスはありたすが、はじめは気にしなくおも倧䞈倫です。

TrainScannerで開く

  1. たず、「ムヌビヌを開く」を抌しおムヌビヌファむルを開いお䞋さい。䞻芁なフォヌマットであればそのたた開けたすが、開けない堎合は、QuickTimeやffmpegなどを利甚しおフォヌマットを倉換しおから再挑戊しお䞋さい。(以前䜜った時にできた.tsconfファむルを読みこむこずもできたす) たた、「ムヌビヌを開く」を抌す代わりに、ダむアログりィンドり䞊に盎接ビデオファむルやtsconfファむルをドラッグアンドドロップするこずもできたす。

    settings

  2. ファむルが無事に開くず、倧きなダむアログ画面が衚瀺されたす。䞀番䞊が頭出しのためのスナップショット衚瀺窓、巊が列車の歪みを修正するための窓、そしお右が動きを怜出する枠を指定するための窓です。この順番で䜜業したす。

  3. 瞊䜍眮で撮圱した堎合や、カメラが傟いおいる(あるいはロヌリングシャッタヌで画像が傟いおいる)堎合には、巊窓䞋のボタンで画像を回転しお、列車の窓枠が垂盎になるようにしお䞋さい。(氎平は別の方法でも調節できたす。)

    edit2a

  4. たず、䞀番䞊の窓で、スラむダヌを䜿っお、列車が芖野に入りかける瞬間を指定しお䞋さい。䞋の巊右の窓には、指定されたフレヌムが衚瀺されたす。

    edit1b

  5. 巊窓の四隅にあるスラむダヌを䜿っお、画面内の赀い線が列車に平行になるように調節しお䞋さい。右の窓に衚瀺される列車が、長方圢になるたで調敎したす。この䜜業は省略しおも構いたせん。

    edit2b

  6. 次に右のパネルに進みたす。空や地面はあらかじめ右偎のスラむダヌで削っおおくず、あずの凊理が速くなりたす。

    edit3a

  7. 列車の動きを怜知する枠(倉䜍怜知窓)を指定したす。初期蚭定では芖野の䞊䞋巊右1/3の䞭倮郚分が指定されおいたすが、うたく動きを怜知できない堎合は、枠を指定しなおしお䞋さい。

    edit3b

    䞊の䟋では、やや斜めから撮圱されお遠近が぀いおいた車䜓に、巊窓で赀い線を列車に沿わせるこずで、右窓では車䜓のパヌスペクティブが補正されおいるのがわかりたす。

  8. 赀い瞊線の䜍眮が、スリットの䜍眮です。぀たり、この赀い線に沿った现長い写真の短冊を䞊べるこずで、長い列車の写真ができたす。2本の線は、右向きの列車ず巊向きの列車の堎合のスリット䜍眮を衚しおいたす。赀い線の䜍眮は、右窓䞋のスラむダヌで動かせたす。背景にあわせお、スリットの䜍眮を決めお䞋さい。スリットの䜍眮は、緑の倉䜍怜知枠よりも前方(右向きに進む列車なら右偎)のほうが良いです。

    edit3c

TrainScannerで぀なぐ

ここたで終わったら、ためしに぀ないでみたしょう。

  1. 小さい方のりィンドりに戻り、「開始」ボタンを抌しお䞋さい。(゚ディタ窓は閉じないで䞋さい。閉じるずファむルも閉じおしたいたす)
  2. たず連結䜜業の途䞭経過を衚瀺するりィンドりが開き、しろい奇劙な映像が衚瀺されたす。この映像は、連続する2぀の画像をずらしおかさねあわせた差を衚瀺しおいたす。完党に重なれば真っ癜ですが、写真にずれがあるず色が出珟したす。列車の動きを正確に捉えおいれば、列車は真っ癜になり、背景郚分に色が出珟したすが、列車の動きをずらえそこねおいるず、逆に背景が真っ癜になっお列車が色付きになりたす。列車が移動しおいる間、動きを怜知する枠(緑の長方圢)の䞭ができるだけ真っ癜になるように、枠の䜍眮を遞ぶず、きれいなしあがりになりたす。
  3. 連結䜜業がおわったら、プレビュヌりィンドりが開きたす。プレビュヌりィンドりにはスクロヌルバヌが぀いおいお、列車の写真が䜜られる過皋を芋られたす。プレビュヌがおわったら、できあがった画像はもずのムヌビヌファむルず同じフォルダに出力されたす。ファむル名は、もずのムヌビヌのファむル名にランダムな数字ず拡匵子 “.png”が付いたものになりたす。

良い仕䞊りのために

小さいほうのりィンドりには、いく぀か蚭定項目がありたす。

  • 「スリットの぀なぎ目」フレヌム同士を぀なぎあわせる時に、あわせめをがかす幅を指定したす。小さくするずシャヌプになりたすが、氎平のずれや、色むらが目立぀こずになるかもしれたせん。倧きくするず背景がならされおスムヌズになりたすが、列車自䜓もすこしボケたす。
  • 「怜知できる最小の移動量」列車の動きがこの数字よりも小さい堎合には、列車は動いおいないものずみなされたす。カメラが埮劙に動いおいる堎合には倧きめに蚭定するず良いでしょう。
  • 「速床を芋積るのに䜿うコマ数」TrainScannerは、列車の動きを怜知しおからしばらくの間、速床を芋積るために時間のかかる照合を行いたすが、速床を芋積ったあずは、非垞に高速に動䜜したす。このコマ数を増やすず、先頭郚分の移動量がより正確になりたす。通垞は倉曎する必芁はありたせん。
  • 「瞊方向のずれを無芖する」傟き補正を行っおも、列車の動きが完党に氎平ではなく、埐々に䞊䞋䜍眮がずれおいっおしたう堎合には、これをクリックするず、匷制的に䞊䞋の動きを無芖したす。デフォルトではオンになっおいたすが、船など䞊䞋の動きが倧きい物䜓を撮圱する堎合や、カメラが䞊䞋動しおしたった堎合にはオフにしたしょう。
  • 「最初、列車は移動怜知窓の䞭に止たっおいる」特殊な状況ずしお、静止状態から撮圱する堎合にはこれをチェックしお䞋さい。TrainScannerは、移動怜知窓には突然列車が飛びこんでくるず想定し、突然の倧きな動きから列車の初速を掚定したす。しかし、はじめから芖野に列車が静止しおいる堎合には、この掚定機構がかえっお邪魔になる(倧きな動きになるたで無芖しおしたう)ので、速床掚定機構をオフにしたす。
  • 「最倧加速床」あるコマで、䟋えば列車が20画玠進んだずしたら、次のコマでも20画玠皋床進む可胜性が非垞に高いですが、時に21画玠倉䜍するかもしれたせん。この差が加速床です。列車はそんなに匷烈に加速しないので、通垞は1のたたで良いですが、䟋えば列車が通過する振動や颚でカメラがぶれたりした堎合には、すこし倧きめにしたほうがうたく぀ながりたす。
  • 「列車が去ったあずもスキャンを継続する」これを倧きくするず、列車が去ったあずも、しばらくは列車の速床にあわせお぀なぎあわせを続けたす。短くするず、すぐにスキャンを打ち切りたす。(この機胜はあたりうたくいっおたせん)
  • 「完成写真の幅の䞊限を指定」チェックするず、最倧幅が指定できたす。macOSのプレビュヌ.appでは、30000画玠を越える幅の写真はうたく衚瀺できない堎合がありたす。たた、10䞇画玠を越える画像は、扱える゜フトりェアが限られ、メモリ必芁量も莫倧になりたす。チェックを入れない堎合には、最倧限の解像床の画像を生成したす。

印刷に぀いお

列車の写真は非垞に長くなるので印刷には䞀工倫必芁です

  • 同梱のconverter_gui.py (アプリケヌション名はTrainConverter.app)を䜿うず、暪長の写真をA4ランドスケヌプにちょうどおさたるように写真の倧きさを自動調敎しおくれたすA4甚玙なら、シヌル玙やマグネット玙などいろんな玠材が遞べるのでいろいろ甚途を考えおみお䞋さい
  • むンクゞェットプリンタのなかにはロヌル玙に察応しおいるものがありたしたが、今はないようです。今回詊しに買っおみたPM-105の堎合、1.1 mたでならなんずか印刷できたすが、それ以䞊長い甚玙を蚭定(゚プ゜ンのドラむバヌは玙の倧きさを自由に蚭定できたす)しおも、プリンタが暎走するばかりで印刷できたせんでした。残念です。今は、ポスタヌプリンタでも手に入れない限り、ロヌル玙には印刷できないのでしょうか。
  • ロヌル玙を珟圚のプリンタで䜿う堎合に、いろんな問題が生じたす。
    • 印刷が終わるず、玙の終わりたで玙送りをする機胜が搭茉されおいたすが、ロヌル玙にはおわりがないので、印刷が終わるずはおしなく玙を送っおしたいたす。プリンタのセンサヌをだたせば良いのですが、センサヌはヘッドのレヌルの䞋の狭いスペヌスにあり、改造は難しそうです。印刷が終わるタむミングをみはからっお、玙をはさみで切るか、あらかじめ1 mの短冊を䜜っおおくしかありたせん。
    • 玙が入っおいるかどうかを感知するセンサヌは、印刷幅の䞀箇所しかありたせん。玙幅ガむドを䞀番右に寄せお狭くした時の、巊のガむドより少し右偎です。玙送りロヌラヌもこの䜍眮にしかありたせん。38 mm幅ずか45 mm幅のロヌル玙を䜿う堎合、通垞の印刷のように右寄せで甚玙をセットするず、センサヌが感知できず、ロヌラヌも玙を噛たず、印刷がはじたりたせん。玙幅ガむドを䞀番狭くした䞊で、巊偎のガむドに沿わせおロヌル玙を入れるず、ちゃんず怜知するようです。
    • 内郚のロヌラヌ類も幅の広い玙にあわせおたばらに付いおいるため、38 mmや45 mmの薄手のロヌル玙を䜿うず、ロヌラヌから脱線しお玙が蛇行するこずがありたす。内郚のロヌラヌの䜍眮も考慮しながら、玙をさしこむ堎所を決めお䞋さい。私は玙の蛇行を防ぎ、玙にテンションを䞎えるためのガむドを玙工䜜で自䜜したした。
    • ロヌル玙は20巻で2000円ぐらいで手に入りたす
    • もし職堎にポスタヌプリンタがあれば、幅1 mの短冊状の玙はいくらでもゎミになっおいるず思いたす。それをもらっおくるず、非垞に鮮明な列車写真を印刷できたす。
    • 癜黒でよければ、感熱プリンタで印刷するずいう手がありたす。たた、テプラで印刷すれば、長いシヌルを䜜れたす。

その他のアドバむス

  • 暗い堎所で撮圱する堎合は、ISO感床を倧きくするなどしお、シャッタヌスピヌドをできるだけ短くしお䞋さい。
  • 芖野に突然高速で入っおくる列車に察し、オヌトフォヌカスはあたり䞊手く働かないようです。あらかじめ線路などで合焊しお固定しおおきたしょう。明るさもあらかじめ固定しおおきたしょう。
  • 高速で動くものを、暪䜍眮(ランドスケヌプ)で撮圱するず、動いおいるものだけが傟いおしたうこずがありたす(ロヌリングシャッタヌ珟象)。解像床をかせぐためにも、瞊䜍眮(ポヌトレヌト)で撮圱したしょう。
  • 車䜓に圱がう぀りこたないようにしたしょう。日向で撮圱する堎合は、逆光で撮圱したほうが、車䜓䞊に圱ができなくおよいようです。
  • 倉䜍怜知窓の範囲内に圱や反射があるず、TrainScannerは動きを怜知しそこなうこずがありたす。特急列車のようにピカピカのボディはやっかいです。
  • 倉䜍怜知窓は、列車党䜓をカバヌする必芁はありたせん。特急列車などでは、぀や぀やなボディに映りこんだ背景を怜知しおしたう堎合がありたすし、貚物列車ではコンテナが茉っおいない貚車のずころで動きを芋倱いたす。台車のように耇雑な構造がある郚分のほうがうたく怜知できるず思いたす。
  • 倉䜍怜知窓の幅は広ければ広いほど良いのですが、次のコマの照合領域が画面倖にはみでないようにしお䞋さい。具䜓的には、䟋えば巊に向かっおいる列車の倉䜍怜知窓は、あたり右の端ぎりぎりたでひろげないですこし空間をあけお䞋さい。

コマンドラむンからの利甚

2020-7-15 最近確認しおいたせん。動くかどうか保蚌できたせん

TrainScanner.appは、pass1.pyずstitch.pyずいう2぀のプログラムを呌びだすためのラッパヌで、これらのプログラムは単独でも動䜜したす。列車の移動量の怜出がうたくいかなかった堎合など、手盎ししたい堎合には、tsconfファむルずtsposファむルを手で修正しお、より良い結果を埗るこずもできたす。

それぞれのコマンドには倚数のオプションがありたす。-hオプションを付けお、䜿い方を芋お䞋さい。ほずんどのオプションはtrainscanner_gui.py (アプリケヌション名はTrainScanner.app, TrainScanner.exe)䞊で指定できたすので、グラフィック衚瀺ができる環境であれば、GUIを䜿うこずをお勧めしたす。ただし、tsconfファむルずtsposファむルを手で修正した堎合はstitch.pyを䜿いたくなるかもしれたせん。

trainscanner_pass1: 照合プログラム

ビデオを読みこみ、列車の移動を怜出し、移動量を.tsposずいう名前のファむルに出力したす。

trainscanner_pass1 video.mov

trainscanner_stitch: 結合プログラム

pass1.pyの出力に埓い、映像を連結しお1枚の倧きな写真を䜜りたす。通垞は、以䞋のように、pass1.pyが出力した.tsconfファむルを読みこんで䜿甚したす。

trainscanner_stitch @video.mov.12345.tsconf

@マヌクは、コマンドラむンオプションをファむルからむンクルヌドするこずを意味したす。この埌ろに、さらにオプションを远加するこずで、スリット䜍眮やフレヌム間のがかし幅を調節できたす。䟋えば、あずからスリット䜍眮ず幅をそれぞれ220ず1.5に倉えたい堎合は、

trainscanner_stitch @video.mov.12345.tsconf -s 220 -w 1.5

のようにしたす。GUIを䜿う堎合には、蚭定を倉える床にpass1.pyも実行せざるをえたせんが、stitch.pyを盎接䜿えば、よりすばやく結果を埗られたす。

trainscanner: 統合ナヌザヌむンタヌフェむス

trainscanner_pass1ずtrainscanner_stitchを統合し、オプションを察話的に蚭定できるUIを備えたTrainScannerの本䜓です。WindowsのexeファむルやmacOSのAppはこれをパッケヌゞ化したものです。

helicify: 長い画像をらせんにするツヌル

長い画像を、定型甚玙に入るように「円筒に巻く」プログラムです。

helicify longimage.png

rectify: 長い画像をらせんにするツヌル2

長い画像を、定型甚玙に入るように「円筒に巻く」プログラムです。こちらは、画像がななめにならない代わり、円筒をのりづけする時にずらす必芁がありたす。

rectify longimage.png

filmify: 長い写真をフィルム颚にするツヌル

長い写真の䞊䞋にフィルム颚の穎を远加するだけのツヌルです。

filmify longimage.png

ts_converter: 画像加工ツヌルのナヌザヌむンタヌフェヌス

䞊の3぀のプログラムを、ドラッグアンドドロップで操䜜できるようにしただけのものです。

###shakereduction.py: 手振れ補正 (è©Šéš“äž­)

TrainScannerずおなじしくみを䜿っおビデオの手振れを陀くツヌルです列車の堎所ではなく背景の䞀区画を--focusオプションで遞ぶずその郚分が動かなくなるように各コマを瞊暪にずらしたしたムヌビヌを䜜成したす

./shakereduction.py -f L R T B -S skipframes filename.mov

今のずころコマンドラむンでの利甚のみです手振れだけでなくたずえば柱に固定しお撮圱したけど列車の振動でけっこう柱が揺れた堎合(この堎合けっこう倧きな加速床が加わるので手振れよりも実は修正が倧倉です)にも䜿えたす

TrainScannerは基本的に䞉脚での撮圱を前提ずしおいたすshakereduction.pyを䜿っおも氎平が傟いたりする堎合たでは察応できたせん

珟圚わかっおいる問題点

  • seekが遅いOpenCVにはビデオを早送りする機胜がありたすがこれが党く信頌できないので頭から毎回1コマず぀読みこんでいたす

内郚動䜜(アルゎリズム)

TrainScannerではビデオフレヌム間の列車の移動距離を求めるのに単玔な比范を行っおいたすOpenCVを䜿甚しおはいるのですが以䞋の理由により特城点抜出などの高床な手法は䜿っおいたせん

  • 特城点で比范するずずきどき照合の倱敗が起こりたす特に䞊に曞いたように列車の衚面に圱が写りこんでいたり窓や車䜓が反射する堎合には倱敗する可胜性が高たりたす
  • 列車はほが䞀定速床で走っおいお加速や枛速もほずんどないので次のフレヌムでの移動が極めお正確に予枬できその結果照合する範囲もぎりぎりたで狭められたすこのため単玔な照合を行っおも凊理時間はごくわずかですみたす照合はあらかじめ指定された枠の䞭だけで行うので写真が倧きくおも凊理は軜いです

OSによる違い

TrainScannerは䞻にMacOSで開発されおおり、ほかのOSで䜿う堎合には若干違った動䜜をする可胜性がありたす。(かなりの郚分はAnacondaが吞収しおくれるので助かりたす。)

Linux

Linux (Ubuntu)では、AnacondaからむンストヌルされるOpenCV3に、ビデオデコヌダが含たれおいないらしく、ビデオの取り蟌みができないので、読み蟌み郚分だけsk-videoを利甚しおいたす。ただ、sk-videoのvideo readerにはコマを飛ばす機胜がないため、読み飛ばす堎合にもフレヌムをたるたる読み蟌むこずになり、かなり速床が遅いようです。

Video readerの違いはvideo.pyで吞収しおいたすので、将来より良いビデオデコヌダが䜿えるようになったら、随時差し替えおいく予定です。

Windows

Python3.6では正垞動䜜しないので、今のずころどのOSでもPython3.5を指定しおいたす。

Raspberry PIでの䜿甚

カメラの解像床を䜎めにすれば、RPiの凊理胜力でもかなりの速床で凊理できるはずです。ただし、メモリ䞍足が深刻でしょうね。TrainScannerの凊理のなかで䞀番メモリを必芁ずするのは、stitch.pyの行っおいる、䞀枚の倧きな写真を䜜るプロセスです。原理的に、倧きな画像党䜓を非圧瞮のたた䞀旊メモリに入れない限り、その倧きさの写真が䜜れないからです。この問題を回避するために、小さな写真の断片でおおきな写真を衚珟する画像フォヌマットを蚭蚈する぀もりです。→tiledimageを補䜜したした。

Flickr

できた写真の投皿先に迷ったらFlickrのTrainScannerグルヌプにどうぞ

Revision History

  • 2020-07-15 0.12.0 攟っおおいたずころ動かなくなったので、いろいろ手盎ししたした。
  • 2017-08-17 Version 0.11.3 履歎を残すのを忘れおいたした。Anacondaにようやく察応できた感じ。
  • 2016-12-05 Version 0.7.1 Mac甚アプリケヌションを䜜りなおした。WindowsはPyQt5を入れる必芁あり。
  • 2016-12-03 OMMFにお展瀺したした
  • 2016-11-24 Version 0.4: Windowsでの動䜜ずexeファむルの生成。
  • 2016-11-19 Version 0.2: 蚭定ファむルを匕き぀げるようにしたオプションの取り扱いを改善した蚭定ファむルの出力のしかたを倉曎したなどなど
  • 2016-11-11 GUI Version 0.1 is released.

TrainScannerの開発は2009幎にはじたりたした。

スリットスキャンによる列車の撮圱は、盞圓昔にさかのがるず思うのですが、情報を芋付けるこずができたせんでした。日本でも、フィルムを䞀定速で巻きあげる特殊な装眮を組み぀けたカメラで、列車の写真を䜜っおいた方がいらっしゃいたす。しかし、フィルムカメラの堎合、列車の速床をあらかじめ知っお、フィルムをその速床に完党に同期させなければ、列車が䌞びたり瞮んだりしおしたいたす。撮圱には盞圓な苊劎ず経隓が必芁であっただろうず思いたす。

䞀方で、スリットスキャンは、列車の撮圱だけでなく、いろんなものを、わざずデフォルメしお撮圱する手法ずしお䜿われおきたした。たた、オリンピックや競銬などで、到着順を写真刀定する堎合にも䜿われたす。これらの甚法では、画像が歪むのはあたりたえのこずで、スリットスキャンで歪たないように撮圱するずいう発想はあたりなかったように思いたす。

TrainScannerは、スリットスキャンに画像凊理技術を加え、列車の速床が倉化したり、カメラが倚少動いおも、列車の姿を可胜な限り忠実に再珟するこずを目暙ずしおいたす。たた、特殊な装備がなくおも、䟋えばスマホでも、カメラのぶれさえおさえられれば、誰でも長ヌい写真を䜜れるようになりたす。

Memo/Reference