前回、棚卸モードで200個近いデカールを数分で確かめられるようになりました。
ただ、その作業をしたのは仕事部屋のPCです。スキャナーも、キーボードを常に置いたマルチモニターのPCも、仕事部屋にあります。デカールを貼るのは、別の部屋のプラモ部屋です。
今回は、棚卸したデータとソフトそのものを、プラモ部屋のPCへ運ぶ話です。1.9.0の移行機能、1.9.2のオールインワン配布、そして移したあとに確かめたインポートの中身までを書きます。
完成したWindows用ソフトは無料公開中です。→ ダウンロード・動作環境はこちら
設定と作業データを、ZIPで持ち出す
移行の機能は、1.9.0で棚卸モードと一緒に頼みました。そのときの注文です。
設定とデカール情報のインポート/エクスポート機能が欲しい。VSなどの設定インポート/エクスポート機能のようなもん。ただしこちらはアプリ設定だけではなく画像に紐付いたデカール情報もある。
Visual Studioの設定の書き出し・読み込みのようなものです。ただし、運ぶのは設定だけではありません。画像ごとの読み取り結果、直した番号、棚卸の確認、貼付済みのチェックも含みます。

書き出す画像は、チェックで選べます。タイトルにあるとおり、画像の原本は含めません。原本は別にコピーし、作業データだけをZIPで運びます。
移した先で、どの画像の情報かをどう見分けるか
難しいのは、移した先で、どの画像の情報なのかを見分ける方法です。
画像ごとのデータは、画像のある場所(フルパス)を手がかりに保存しています。ところが、別のPCでは画像を同じ場所に置くとは限りません。ファイルの更新日時も当てになりません。
画像マッチングに日付は審議ある。コピーの仕方次第ではコピー生成時の日付情報になるじゃん。
画像の中身からハッシュを計算して照合すれば確実ですが、そこまではしないことにしました。
同名・同寸法でも中身が違う可能性はある
これはアプリ側で担保するのは困難。それこそスキャンしてハッシュ作るとかになってしまう。基本ユーザーはおれなのでファイル名とWHで良いと思っている
ファイル名と、画像の幅・高さが一致すれば同じ画像とみなす。使うのは私だけなので、この割り切りで十分です。
読み込んだ時点で一致する画像がなければ、データは「未紐付け」として残しておき、あとで画像を開いたときに紐付けます。候補が複数あれば、自動では決めずに選ばせます。移した先にすでにデータがある画像は、そのままにするか、バックアップを取ってから置き換えるかを聞きます。

Codexが1.9.0の確認で表示させた、衝突時のダイアログです。
プラモ部屋のPCには、古いPythonしかない
1.9.1で棚卸まで終え、いよいよプラモ部屋で動かす段階になりました。ところが、その手前にもう一つ問題がありました。
仕事PCで棚卸まで完了したのでいよいよエクスポート・インポート機能使ってプラモ部屋PCで実際に動かすところまで来た。その手前でもう一悶着ある。Python他ライブラリの整備だ。
AF-DecalFinderのOCRは、Pythonと、TesseractなどのOCRのライブラリで動いています。開発したPCには揃っていますが、プラモ部屋のPCは長く仕事に使っておらず、Pythonも.NETもかなり古いはずです。プラモ部屋で環境を整え直すのは、避けたいところでした。
オールインワンを第一に、だめなら手順書
このプロジェクトの開発規約では、配布ZIPにランタイムを入れず、100MB未満にすることにしています。プラモ部屋向けには、この規約を外す必要がありました。そこで、こう決めました。
次の指示は完成は一段落で別PCリリースパッケージの作成。まずはオールインワンを目指す。ライセンスと容量どちらもクリアしたらオールインワン配布パッケージ、どっちかこけたらexe配布とライブラリインストールドキュメント作成で
100MBという上限は、GitHubで配布するときの制約だと考えていました。でも、今回は私がプラモ部屋で使うためのものです。
100MBはな。GitHub制約。なのでおれだけがプラモ部屋で使う専用パッケージなら事実上無制限でも良い
ベストはオールインワンでzipが100MB未満。それなら記事の最後でGitHub配布にも転用できる。だが、それのために俺が不便でもう一回プラモ部屋で格闘するのはむーんだ
一番いいのは、全部入りで100MB未満。でも、そのために自分が不便になるなら、容量は諦める。優先順位をはっきりさせてから、Codexへ指示を出しました。
指示書の冒頭は、目的と方針です。
今回の目的は、開発PC以外のWindows PCでAF-DecalFinderを動作させることです。
既存のOCR・棚卸・編集・検索・済みチェック・インポート/エクスポート機能は変更しないでください。
第一候補は、必要な実行環境を同梱したオールインワンパッケージです。
Python、Tesseract、Pythonのライブラリ、.NETのランタイムを、どれも事前にインストールしなくていい。フォルダーを展開してEXEを起動するだけで動く。インストーラーは要らない。そのうえで、実装の前に、使っている部品をすべて洗い出すよう求めました。名前、バージョン、ライセンス、再配布の条件、同梱すべきライセンス文書、必要なファイル、容量。間接的に使っている部品も含めます。
ライセンスの確認は、作るより長かった
Codexの作業で時間がかかったのは、作ることより、ライセンスを確かめることでした。
もう10分近い。ライセンス確認なめてた
できあがった1.9.2は、ZIPが144.42MB、展開すると350.02MBです。.NETは自己完結型で同梱し、Pythonは公式の組み込み用の配布物を使いました。ライセンスの原文と通知もまとめて同梱しています。
途中で一つ、不具合も見つかりました。日本語を含むフォルダーに展開すると、OCRが言語データを見つけられませんでした。言語データを配布フォルダーからの相対パスで探すように直しています。
Codexは、開発PCの上でPATHなどを切り離した状態で、667項目の自動確認を通しました。ただし報告には、実際の別のPCと、何も入っていないWindowsでの確認はまだだとも書かれていました。
ちなみに、100MBの壁はGitHubのリリース機能を使えば気にしなくてよいと、このあとクロさんに教わりました。
GitHub Releasesというものを認識してなかった。クロさんに聞いてきた。もう、これでいーじゃんか
NASに置いて、プラモ部屋で開く
配布ZIPと、書き出した作業データ、それにテムジンの画像を、家のNASに置きました。

ソフトが141MB、画像が15MBなのに対して、棚卸まで済ませた作業データは14KBです。運ぶべき中身は、ほとんどが番号と座標の文字だけでした。
そして、文化の日の午前1時すぎ。プラモ部屋のPCで展開して起動し、作業データを読み込みました。

完璧。インポートと紐付け、棚卸済みデータ反映
Pythonを入れ直すことなく、仕事部屋で棚卸した状態のまま、テムジンの説明書が開きました。
この確認は、プラモ部屋のPC1台で、私が実際に操作したものです。ほかのPCや、何も入っていないWindowsで試したわけではありません。
インポートは、どこまで上書きするのか
動いたところで、運用のことを考え始めました。
棚卸が済んでいれば、貼る作業はほぼマウスだけで済みます。プラモ部屋では、キーボードはふだんPCの上に置いたままです。
棚卸済みなら貼りモードは基本的にクルクル、クリック、チェックで済むはず
一方で、スキャンは仕事部屋でしかできません。新しい説明書をスキャンするたびに、データを運ぶことになります。部屋を移らない場合でも、OCRと棚卸のデータのバックアップと復元は要ります。
そこで、ふと不安になりました。
既存のインポートが何処まで既存データを上書きするかは確認する必要がある。まさか上書きしたうえに自分の棚卸済みデータをインポートにないから消さないよな?w
製品のコードは変えず、今あるインポートの処理を調べてもらいました。ZIPに入っていない画像のデータは残るか。両方にある画像はどうなるか。途中で失敗したらどうなるか。実際のデータとは別の場所に、小さなテスト用の画像とデータを作って試しています。
結果は、こうでした。
- ZIPに入っていない画像のデータは、そのまま残る。
- 両方にある画像は、画像単位で置き換えるか、そのままにするかのどちらか。番号ごとに混ぜ合わせることはしない。古いZIPで置き換えると、その後に直した内容は戻ってしまう(置き換える前の状態はバックアップに残る)。
- 途中で失敗しても、全体を元に戻す仕組みはない。
意外だったのは、調べてほしいと頼んだ項目の中に、存在しない機能があったことです。インポートする画像を選ぶ機能と、アプリの設定を読み込まない切り替えは、1.9.2にはありませんでした。画像を選べるのは、書き出す側だけでした。
アプリ設定項目は割とどうでもいいな。ただ、インポート側にインポートするモノをチェック挟みたい。アプリ設定は項目個別じゃなくて設定全部を適用するしない、画像はインポートするものチェック、ぶつかったら上書きするか確認。
読み込む画像を選ぶ機能と、設定をまとめて読み込むかどうかの切り替えは、次の改修の候補として残っています。1.9.2の時点では、まだ入っていません。
次回:どの説明書で読ませるか、そして「十分実用」
プラモ部屋で動いた夜、寝る前にこう書いています。
寝る前にインポートと紐付けを終えたから明日は実際に貼るフェーズを試す。文化の日らしい過ごし方だ。
次回は最終回です。600dpiのスキャン、スマホの写真などで読み取りを比べた結果と、文化の日に起きたこと、そして「十分実用」と判断するまでを書きます。
前の記事:人の目で選び、キーで片付ける。棚卸モードができるまで【AF-DecalFinder 第4回】



コメント