diff --git "a/docs/02_ENV/ENV_01_\346\212\200\350\241\223\343\202\271\343\202\277\343\203\203\343\202\257.md" "b/docs/02_ENV/ENV_01_\346\212\200\350\241\223\343\202\271\343\202\277\343\203\203\343\202\257.md" new file mode 100644 index 0000000..7522deb --- /dev/null +++ "b/docs/02_ENV/ENV_01_\346\212\200\350\241\223\343\202\271\343\202\277\343\203\203\343\202\257.md" @@ -0,0 +1,74 @@ +# 技術スタック (Tech Stack) + +引き継いだ DeepTIAS v2.7 の技術構成を記録し,今後の開発で使う技術を定める. +既存アプリの保守が目的のため,言語・フレームワークは現行を維持し,新規に選定するのは開発環境とテスト基盤のみとする. + +## アプリケーション (Application) + +| 項目 | 採用技術 | 備考 | +| --- | --- | --- | +| 言語 | C#(7.3) | .NET Framework 4.8 の既定バージョン | +| フレームワーク | .NET Framework 4.8 | 旧形式の csproj(SDK 形式ではない) | +| UI | Windows Forms | 画面は `Form1` の 1 画面のみ | +| 対象プラットフォーム | Windows x64 | ネイティブ DLL が x64 のため | +| パッケージ管理 | NuGet(`packages.config`) | `PackageReference` への移行は行わない | + +## 主要ライブラリ (Libraries) + +| ライブラリ | バージョン | 用途 | +| --- | --- | --- | +| OpenCvSharp4(+ Extensions,runtime.win) | 4.9.0.20240103 | 画像の読み書き・二値化・輪郭検出・描画 | +| TensorFlowSharp | 1.15.1 | 舌検出モデル(`Detection_Normal.pb`)の推論 | +| Microsoft.ML.OnnxRuntime | 1.9.0 | 舌領域抽出モデル(`ResUNet.onnx`)の推論 | + +- ※ Microsoft.ML(1.6.0 一式),Newtonsoft.Json,OpenCvSharp.WpfExtensions,OpenCvSharp.Blob 等はコードから使われていないため,コード整理で参照を削除する. + +## 学習済みモデル (Models) + +| ファイル | 形式 | 用途 | +| --- | --- | --- | +| `models/Detection_Normal.pb` | TensorFlow(Object Detection API) | 舌の矩形検出(入力 256×256) | +| `models/ResUNet.onnx` | ONNX(PyTorch 1.10 から出力) | 舌領域のセグメンテーション(入力 1×3×256×256) | +| `models/ResUnet_0.9518.pb` | ONNX(拡張子は `.pb`,PyTorch 1.8 から出力) | 未使用.旧版の ResUNet と思われる | + +- ※ モデルは Git LFS で管理する(`.gitattributes` で `*.pb`・`*.onnx` を対象にしている). + +## 外部バイナリ (External Binaries) + +ソースコードが無く,ビルド済みのまま使うもの.Git LFS で管理する. + +| ファイル | 種類 | 用途 | 注意点 | +| --- | --- | --- | --- | +| `RemoveSmallRegionDLL.dll` | ネイティブ DLL(C++) | 二値画像の小領域除去 | OpenCV 3.2(`opencv_world320.dll`)に依存 | +| `TongueAnalysisDLL.dll` | ネイティブ DLL(C++) | 宣言のみで未使用 | デバッグビルド | +| `python/TongueFeatures.exe` | PyInstaller で exe 化した Python | 色統計量・GLCM 特徴量の算出 | 約 116 MB | +| `rgb2lab/TongueAnalysis.exe` | ネイティブ exe(C++) | カラーチャートによる色補正(L\*a\*b\* 変換) | デバッグビルド.VC++ のデバッグ用ランタイムが必要 | + +## 開発環境 (Development Environment) + +| 項目 | 採用技術 | 備考 | +| --- | --- | --- | +| OS | Windows 11 | | +| IDE | Visual Studio 2022 Community | ワークロード「.NET デスクトップ開発」「C++ によるデスクトップ開発」 | +| ビルド | MSBuild(Visual Studio 2022 付属) | コマンドラインでは `msbuild` を使う | +| NuGet 復元 | `msbuild -t:restore -p:RestorePackagesConfig=true` | `nuget.exe` を別途入れずに済む | +| テスト | MSTest | .NET Framework 4.8 のテストプロジェクトとして作る | +| バージョン管理 | Git + Git LFS,GitHub | | + +## 選定理由 (Rationale) + +### IDE + +- Visual Studio 2022 Community を採用する.WinForms のデザイナ(画面の見た目の編集)とデバッガが使え,C# の WinForms 開発では標準的なため. +- 「C++ によるデスクトップ開発」ワークロードも入れる.`rgb2lab\TongueAnalysis.exe` がデバッグビルドで,VC++ のデバッグ用ランタイム(`ucrtbased.dll` 等)が無いと起動しないため. +- ※ VS Code + Build Tools も候補にしたが,WinForms デザイナが使えず画面の変更時に `Form1.Designer.cs` を手で書く必要があるため不採用とした. + +### テストフレームワーク + +- MSTest を採用する.Visual Studio に最初から入っており,後任の学生も追加の知識なしで使えるため. +- 主なテストは回帰テストとする.旧ビルドで出した `analysis.csv` を正解とし,整理後のコードで同じ入力を解析した結果が一致するかを確認する. + +## 維持するもの・変えないもの (What We Keep) + +- .NET Framework 4.8 から .NET 8 以降への移行は行わない(TensorFlowSharp が .NET Framework 向けで,移行すると推論部分の作り直しが必要になるため). +- 外部バイナリは作り直さずにそのまま使う.