Newer
Older
DeepTIAS / docs / 02_ENV / ENV_01_技術スタック.md
@rintoHasegawa rintoHasegawa 14 days ago 4 KB [add] 技術スタックを選定

技術スタック (Tech Stack)

引き継いだ DeepTIAS v2.7 の技術構成を記録し,今後の開発で使う技術を定める. 既存アプリの保守が目的のため,言語・フレームワークは現行を維持し,新規に選定するのは開発環境とテスト基盤のみとする.

アプリケーション (Application)

項目採用技術備考
言語C#(7.3).NET Framework 4.8 の既定バージョン
フレームワーク.NET Framework 4.8旧形式の csproj(SDK 形式ではない)
UIWindows Forms画面は Form1 の 1 画面のみ
対象プラットフォームWindows x64ネイティブ DLL が x64 のため
パッケージ管理NuGet(packages.config)PackageReference への移行は行わない

主要ライブラリ (Libraries)

ライブラリバージョン用途
OpenCvSharp4(+ Extensions,runtime.win)4.9.0.20240103画像の読み書き・二値化・輪郭検出・描画
TensorFlowSharp1.15.1舌検出モデル(Detection_Normal.pb)の推論
Microsoft.ML.OnnxRuntime1.9.0舌領域抽出モデル(ResUNet.onnx)の推論
  • ※ Microsoft.ML(1.6.0 一式),Newtonsoft.Json,OpenCvSharp.WpfExtensions,OpenCvSharp.Blob 等はコードから使われていないため,コード整理で参照を削除する.

学習済みモデル (Models)

ファイル形式用途
models/Detection_Normal.pbTensorFlow(Object Detection API)舌の矩形検出(入力 256×256)
models/ResUNet.onnxONNX(PyTorch 1.10 から出力)舌領域のセグメンテーション(入力 1×3×256×256)
models/ResUnet_0.9518.pbONNX(拡張子は .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.exePyInstaller で exe 化した Python色統計量・GLCM 特徴量の算出約 116 MB
rgb2lab/TongueAnalysis.exeネイティブ exe(C++)カラーチャートによる色補正(L*a*b* 変換)デバッグビルド.VC++ のデバッグ用ランタイムが必要

開発環境 (Development Environment)

項目採用技術備考
OSWindows 11
IDEVisual Studio 2022 Communityワークロード「.NET デスクトップ開発」「C++ によるデスクトップ開発」
ビルドMSBuild(Visual Studio 2022 付属)コマンドラインでは msbuild を使う
NuGet 復元msbuild -t:restore -p:RestorePackagesConfig=truenuget.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 向けで,移行すると推論部分の作り直しが必要になるため).
  • 外部バイナリは作り直さずにそのまま使う.