【てんかく忍者工場】てんかく忍者工場のデータベース加工&静的マップアプリ生成工程を紹介!
ようこそ!わが"データベース加工/コンテンツ制作ライン"へ
前工程でparquet、_yolo.mp4が出力されるところをご覧いただきました。
ここからは、parquetデータベースと動画ファイルを使って、GISで使える各種データフォーマットと、フレーム単位で切り落とした静止画、ローカル環境で地図・画像を確認できるWEB地図"4D-db_local"を生成する工程をご覧いただきます。
しかし、実は、本工程はてんかく忍者工場の自動実行フローと直接接続されていません。
その理由は・・・
この工程は、時間のかかる静止画書き出しや、人による成果の確認、何が必要かの判断など、変更が発生した場合に大きな影響を受ける工程だからです。生成されたデータベースで同期の精度や物体検出の精度などを検査が挟まれるという事情があります。
例えば、この工程の前後でよく起こることとしては
・YOLO物体検出済み動画を確認して、検出結果が思わしくなく、モデルを調整してかけなおしたい
・位置が微妙にずれているので開始フレームをスライドしたい
このような場合に、前工程のやり直しに巻き込まれないように・・もあります。
また自工程で不具合があったけど一部やり直したいといったことも起こり得ます。
例えば、特に静止画書き出しでは
・書き出し中にトラブルが発生して中途半端な枚数になっていたり
そのような場合には再度静止画生成だけやりなおすといったケースがあります。
■はじめに:この工程での成果品
この工程での成果品をご覧いただきます。
このラインでは、動画から静止画の書き出しと、各種GISに対応した地理情報データベースと、ローカル環境で閲覧できるWEBアプリ"4d-db_local"を作ります。
|
[生成された静止画] |
![]() |
|
[各種GISデータ] |
![]() |
|
[WEBブラウザで開いた4d-db_local] |
![]() |
動画素材やデータベース素材といった原材料を元に、静止画、地理情報データベースに加工するのが本工程です。
この工程から出力される成果品
- images/ :動画から書き出される静止画
- shapefile/ :ESRI Shapeファイル形式
- data/ :4d-db_localで使用するデータ
- js/ :4d-db_localで使用するデータ
- css/ :4d-db_localで使用するデータ
- *.geojson :WEBマップで利用するGISデータ
- *.gpkg :QGISプラグインで利用するGISデータ
- *.geoparquet:将来的に利活用が期待されるgeoparquet形式データ(QGISでは読み込みのみ)
- *.kml :GoogleEarthのGISデータ
- *.html,*.js :4d-db_local関連ファイル
|
成果品の一覧 |
![]() |
■ローカル環境で動作する地図・静止画ビューア"4D-db_local"
|
[4d-db_local全体] |
![]() |
ここでもう少し詳しくローカル対応地図・静止画ビューア"4d-db_local"を見てみます。
この地図・静止画ビューアは、Webブラウザのみで動作するJavascriptプログラムで作られています。NAS上のWEBディレクトリやまたはローカルPCのWEBサーバ機能を使って、動的な地図表示と、超高速な静止画閲覧を可能にします。
地図の表示はleafletを使用しており、データベース"geojson"をメモリ上に展開し、動的な地物表示を行っています。
|
[geojsonをgeojson.ioでチェック] |
![]() |
主な機能
- 背景地図:OpenStreetMap
- フィルムストリップによるサムネール高速表示・選択
- 拡縮可能な静止画ビューア
- キロ程(KP)をKML形式で重ね合わせ表示可能
- ユーザレイヤをKMZ形式で重ね合わせ可能
- カスタマイズによって各種主題図の生成が可能※
※デフォルトではGNSSの受信精度によってヒートマップを生成しています。
スクリーンショット
|
[画像ビューア] |
![]() |
|
[フィルムストリップ] |
![]() |
|
[KPオーバーレイ] |
![]() |
|
[ユーザレイヤ(KMZ)オーバーレイ] |
![]() |
|
[主題図生成(カスタマイズ例)] GNSS受信モードの可視化 |
![]() |
■工程の流れ(generate_maps)
成果品を一通りご覧いただいたので、
続いてライン長の"generate_maps"が工程全体の流れをご説明します。
私、generate_mapsは、オーダー受付の窓口を担当し、アーカイブルート配下の複数ジョブを処理するのか、単独でGISデータや静止画だけを処理するのかをjob_runnerに指示します。
アーカイブ用フォルダ(W:\WatchFolder\Archive)配下のすべてのジョブフォルダをスキャンして実行する。
job_runnerを通した一括処理か、generate_mapsを個別のparquetファイルに対して実行するモードを選択し、特定のものだけやり直すこともできます。imagesフォルダをあえて削除(リネーム)して静止画の再生成をやり直すなどの部分処理も可能なようになっています。
すべての工程を終えると、私からダッシュボードに"DONE_MAP""地図生成完了"を通知します。
何が必要なのかをおっしゃっていただければ必要なタスクを手配し、結果をリアルタイムでご報告します。
generate_maps モジュール
YOLO検出結果をもとに、地図と画像を自動生成するコマンドラインツール。
Parquet形式の検出ログを入力として、GeoJSONやHTMLマップ、画像フレームを出力する。
|
generate_maps実行中のコンソール画面 |
![]() |
■データベース加工、コンテンツ生成処理(job_runner)
job_runnerは、指示されたparquetファイルをスキャンし、指定するフォルダ配下の.job.jsonを参照し、データベース加工、コンテンツ生成が行われていないジョブを対象に、自工程の作業を実行します。
デフォルトでは静止画を生成するモードで動作しますが、すでに画像が生成されていれば(imagesフォルダが存在していれば)静止画生成をスキップし、データベース加工に処理を移します。
おおよそ動画の録画時間の3倍から5倍程度のお時間を頂き、静止画を処理していくこととなります。
長い時間をかけての処理になりますが、実行するコンピュータのメモリ容量に合わせて、稼働するライン数(起動するスレッド数)を調整し対応いたします。
また納品先の倉庫(NAS)や配送ルート(転送)の都合で何らかの納品トラブルがあった際には、リカバリ処理によって、完全な静止画のセットが出来上がることを保証いたします。
本工程は完全自動ラインになっておりますので、いつでも何回でもお気軽にご用命くださいませ。
この工程で実行すること
- fused.parquet を探す
- Parquet読み込みとbbox正規化
- フィルタ処理を通す(補完・整形・フィルタ済みのdfを得る)
- YOLO検出結果配列のJSON化
- フィールドの加工(YOLO結果、日本時間)
- GeoDataFrame生成(加工+geometry生成、属性選択はなし=全フィールドをそのまま出力)
- コンテンツ中心を指定する
- 初回用テンプレート生成(上書きしない)
- Webマップ用GeoJSON + 表示名辞書を出力
- geoJSONを書き出す
- 全GIS形式の出力
- HTMLマップ生成
- frame_index.json 生成
job_runner モジュール
指定された archive_root 以下の .parquet ファイルを再帰的に走査し、
各ファイルに対して画像生成および地図描画処理を実行するユーティリティ。
主に MapJobRunner クラスを通じて、YOLO検出結果の可視化を自動化する。
まとめ
この記事のまとめです。
この工程では、parquetデータベースとYOLO物体検出済みのmp4動画から、動画各フレームに対応する静止画や、各種GISで活用するためのGISデータを出力します。
またgeojsonデータベースと静止画をWEBブラウザで閲覧するための、超高速ローカル地図・画像ビューア"4d-db_local"を出力します。
正確に地点合わせされた構造物の静止画を、ローカル環境(手元)で活用するためのデータを生成する、"コンテンツ生成工場"をご覧いただきました。
▼この記事を書いたひと

R&Dセンター 松井 良行
R&Dセンター 技術戦略担当部長。コンピュータと共に35年。そしてこれからも!










