仕事部屋からプラモ部屋へ。データを運び、ソフトを運ぶ【AF-DecalFinder 第5回】

デスクトップアプリを作らせてみた

前回、棚卸モードで200個近いデカールを数分で確かめられるようになりました。

ただ、その作業をしたのは仕事部屋のPCです。スキャナーも、キーボードを常に置いたマルチモニターのPCも、仕事部屋にあります。デカールを貼るのは、別の部屋のプラモ部屋です。

今回は、棚卸したデータとソフトそのものを、プラモ部屋のPCへ運ぶ話です。1.9.0の移行機能、1.9.2のオールインワン配布、そして移したあとに確かめたインポートの中身までを書きます。

完成したWindows用ソフトは無料公開中です。→ ダウンロード・動作環境はこちら

設定と作業データを、ZIPで持ち出す

移行の機能は、1.9.0で棚卸モードと一緒に頼みました。そのときの注文です。

設定とデカール情報のインポート/エクスポート機能が欲しい。VSなどの設定インポート/エクスポート機能のようなもん。ただしこちらはアプリ設定だけではなく画像に紐付いたデカール情報もある。

Visual Studioの設定の書き出し・読み込みのようなものです。ただし、運ぶのは設定だけではありません。画像ごとの読み取り結果、直した番号、棚卸の確認、貼付済みのチェックも含みます。

AF-DecalFinder 1.9.0の「エクスポートする画像」の画面。画像ごとに、ファイル名、寸法、件数、保存場所が並び、チェックを付けた画像だけを書き出せる

書き出す画像は、チェックで選べます。タイトルにあるとおり、画像の原本は含めません。原本は別にコピーし、作業データだけをZIPで運びます。

移した先で、どの画像の情報かをどう見分けるか

難しいのは、移した先で、どの画像の情報なのかを見分ける方法です。

画像ごとのデータは、画像のある場所(フルパス)を手がかりに保存しています。ところが、別のPCでは画像を同じ場所に置くとは限りません。ファイルの更新日時も当てになりません。

画像マッチングに日付は審議ある。コピーの仕方次第ではコピー生成時の日付情報になるじゃん。

画像の中身からハッシュを計算して照合すれば確実ですが、そこまではしないことにしました。

同名・同寸法でも中身が違う可能性はある
これはアプリ側で担保するのは困難。それこそスキャンしてハッシュ作るとかになってしまう。基本ユーザーはおれなのでファイル名とWHで良いと思っている

ファイル名と、画像の幅・高さが一致すれば同じ画像とみなす。使うのは私だけなので、この割り切りで十分です。

読み込んだ時点で一致する画像がなければ、データは「未紐付け」として残しておき、あとで画像を開いたときに紐付けます。候補が複数あれば、自動では決めずに選ばせます。移した先にすでにデータがある画像は、そのままにするか、バックアップを取ってから置き換えるかを聞きます。

AF-DecalFinder 1.9.0の「データの衝突」のダイアログ。有効なローカルデータがあり、「はい」でバックアップして置換、「いいえ」で既存データを維持してスキップと表示されている

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に置きました。

NASのフォルダーに置いた3つのファイル。配布ZIPが141,035KB、テムジンの画像が15,419KB、書き出した作業データのZIPが14KB

ソフトが141MB、画像が15MBなのに対して、棚卸まで済ませた作業データは14KBです。運ぶべき中身は、ほとんどが番号と座標の文字だけでした。

そして、文化の日の午前1時すぎ。プラモ部屋のPCで展開して起動し、作業データを読み込みました。

プラモ部屋の作業机。モニターにAF-DecalFinderが表示され、手前には実体顕微鏡、デカールの台紙、カッティングマット、工具が並んでいる

完璧。インポートと紐付け、棚卸済みデータ反映

Pythonを入れ直すことなく、仕事部屋で棚卸した状態のまま、テムジンの説明書が開きました。

この確認は、プラモ部屋のPC1台で、私が実際に操作したものです。ほかのPCや、何も入っていないWindowsで試したわけではありません。

インポートは、どこまで上書きするのか

動いたところで、運用のことを考え始めました。

棚卸が済んでいれば、貼る作業はほぼマウスだけで済みます。プラモ部屋では、キーボードはふだんPCの上に置いたままです。

棚卸済みなら貼りモードは基本的にクルクル、クリック、チェックで済むはず

一方で、スキャンは仕事部屋でしかできません。新しい説明書をスキャンするたびに、データを運ぶことになります。部屋を移らない場合でも、OCRと棚卸のデータのバックアップと復元は要ります。

そこで、ふと不安になりました。

既存のインポートが何処まで既存データを上書きするかは確認する必要がある。まさか上書きしたうえに自分の棚卸済みデータをインポートにないから消さないよな?w

製品のコードは変えず、今あるインポートの処理を調べてもらいました。ZIPに入っていない画像のデータは残るか。両方にある画像はどうなるか。途中で失敗したらどうなるか。実際のデータとは別の場所に、小さなテスト用の画像とデータを作って試しています。

結果は、こうでした。

  • ZIPに入っていない画像のデータは、そのまま残る。
  • 両方にある画像は、画像単位で置き換えるか、そのままにするかのどちらか。番号ごとに混ぜ合わせることはしない。古いZIPで置き換えると、その後に直した内容は戻ってしまう(置き換える前の状態はバックアップに残る)。
  • 途中で失敗しても、全体を元に戻す仕組みはない。

意外だったのは、調べてほしいと頼んだ項目の中に、存在しない機能があったことです。インポートする画像を選ぶ機能と、アプリの設定を読み込まない切り替えは、1.9.2にはありませんでした。画像を選べるのは、書き出す側だけでした。

アプリ設定項目は割とどうでもいいな。ただ、インポート側にインポートするモノをチェック挟みたい。アプリ設定は項目個別じゃなくて設定全部を適用するしない、画像はインポートするものチェック、ぶつかったら上書きするか確認。

読み込む画像を選ぶ機能と、設定をまとめて読み込むかどうかの切り替えは、次の改修の候補として残っています。1.9.2の時点では、まだ入っていません。

次回:どの説明書で読ませるか、そして「十分実用」

プラモ部屋で動いた夜、寝る前にこう書いています。

寝る前にインポートと紐付けを終えたから明日は実際に貼るフェーズを試す。文化の日らしい過ごし方だ。

次回は最終回です。600dpiのスキャン、スマホの写真などで読み取りを比べた結果と、文化の日に起きたこと、そして「十分実用」と判断するまでを書きます。

前の記事:人の目で選び、キーで片付ける。棚卸モードができるまで【AF-DecalFinder 第4回】

次の記事:実践と課題:どの説明書で読ませるか、そして「十分実用」【AF-DecalFinder 第6回・最終回】

AF-DecalFinderシリーズ全6回の一覧へ

デスクトップアプリ制作の一覧へ

afさんのAIラボのトップへ

コメント

タイトルとURLをコピーしました