Newer
Older
TIASDataHub / docs / 03_PLAN / PLAN_01_要件定義書.md

要件定義書 (Requirements)

プロジェクトの目的 (Purpose)

舌診研究のデータ(舌画像・ラベル・派生データ等)を研究室 PC でまとめて管理する共有のデータ基盤を作る.

舌診研究のデータを使うリポジトリは今後も増える.各リポジトリが個別に研究室 PC のフォルダを読む形をやめ,本リポジトリを共通の入口にする.各リポジトリは「データセット名」を指定してデータを取り出す.

  • 現在あるデータは舌色の画像とラベル(5 分類+程度)だけだが,今後ほかの種類のデータを増やす.データの種類が増えても骨組みを作り直さずに済む構造にする
  • 置き場所・データ集合の版・派生データの由来を基盤側で管理し,各リポジトリの実験の再現性と由来の追跡を支える

対象ユーザー (Target Users)

区分対象
直接開発者本人(hasegawa)のみ
使う側のリポジトリTIASJudgeModel(舌色分類モデルの学習),TIASjudge(舌色診断アプリ),DeepTIAS(舌画像の解析.C# WinForms),今後増えるもの
  • 研究室の他メンバーが使う予定は無い.複数人での利用(同時編集・利用者ごとの権限管理等)は考慮しない

スコープ (Scope)

やること (In Scope)

  • データの目録(カタログ): 症例・撮影・画像ファイル・ラベル・派生データと,それらの関係を記録する
  • データセットの定義と版: 「データセット名」で取り出せるデータ集合を定義し,データを追加した後も過去と同じ集合を取り出せるようにする
  • 由来(プロビナンス)の記録: 派生データを「どの元データから,どのプログラムのどの版で」作ったかを記録する
  • アクセス用ライブラリ(Python): 使う側の Python プロジェクトが import して,データセット名から一覧・パスを取り出す
  • CLI: データの登録・データセットの定義・manifest(CSV 等)の書き出し.Python 以外のプロジェクトや,目録に直接触れない計算サーバには書き出したファイルを渡す
  • 置き場所の管理: データの実際の置き場所は設定または目録で管理し,コードに書かない
  • ダミーデータ: 臨床データの無い環境(手元 PC・CI)で,ライブラリ・CLI を同じコードパスで動かすための合成データ
  • 手順書: 研究室 PC での運用・データ登録・計算サーバへの受け渡しの手順

やらないこと (Out of Scope)

  • データ本体・実際の患者 ID と研究用 ID の対応表を本リポジトリに入れること(GitHub・研究室の GitBucket のどちらにも入れない)
  • 機械学習の学習・評価(TIASJudgeModel 等,使う側の仕事)
  • 画像処理そのもの(色補正・セグメンテーション・特徴量の計算.DeepTIAS 等の仕事.基盤はその結果と由来を記録するだけ)
  • 臨床データを手元 PC に置くこと
  • 研究室の外から目録・データに直接アクセスする仕組み(Web API・クラウドストレージ等)

データ (Data)

現在あるデータ (Current Data)

データ内容原本の置き場所(研究室 PC)
舌色データセット舌領域を切り出した舌画像(PNG).舌色 5 分類+程度のラベルごとに 9 フォルダ・1085 枚.1 患者 1 枚ではない(約 450 人.2 枚以上の患者がいる.下記)C:\Users\Papin\clinical-data\TIASJudgeModel\
セグメンテーション用データResUNet の開発時の画像と正解マスクC:\Users\Papin\clinical-data\TongueSegmentation\
舌色データセットの DeepTIAS 出力舌色データセットの各画像の元になった DeepTIAS の全工程の出力(1-detection〜4-featureExtraction.analysis.csv を含む).番号ごとのフォルダ・1085 個.フォルダ名は番号だけで患者 ID を含まないC:\Users\Papin\clinical-data\DeepTIAS_TIASJudgeModel\<番号>\
  • 舌色データセットは DeepTIAS 2.7 の Image&Calib モードの出力(色補正後の画像を枠で切り出し,マスク外を黒にしたもの)から作られている(TIASJudgeModel の SPEC_04)
  • ラベルは現在フォルダ名で表現されている.基盤に登録するときは,フォルダ名から読み取ったラベルを目録の項目として記録する
  • 画像の番号(ファイル名)と,DeepTIAS の出力側の患者 ID・何枚目の画像かの対応は,研究室 PC の対応表(C:\Users\Papin\clinical-data\DeepTIAS後_ID_番号.xlsx)にある.2026-10-03 に件数だけを照合し,1085 枚が約 450 人分(2 枚以上の患者が 239 人・874 枚)であることが分かった(TIASJudgeModel の「1 患者 1 枚」の前提は誤りで,ユーザーも確認済み).患者単位で扱うには,この対応表を取り込みに使う必要がある
  • DeepTIAS の出力(元は患者 ID のフォルダ DeepTIAS後_亥鼻_村上_2025.08修正)は,2026-10-03 に舌色データセットで使った画像の分だけを番号ごとのフォルダへ移し,残り(使わない出力 約 8GB)を削除した(元のデータは研究室のサーバにある).各番号の画像は 2-cropped × 3-resized(127 超)で作り直したものと画素で一致する(完全一致 1073・違う画素 1% 未満 12).経緯は docs/PROGRESS.md
  • 舌色データセットには同じ写真の重複が 5 組ある(2026-10-03 確認).ファイルが同一で対応表の患者 ID が違う 2 組(122/184・548/566.ラベルは同じ),ほぼ同じ画像(違う画素約 0.7%)が連番で 2 回登録された 3 組(381/382・508/509・515/516.うち 381/382 は程度,515/516 は舌色のラベルが違う).382・509・516 のフォルダの DeepTIAS 出力は,それぞれ 381・508・515 の出力のコピー(元の出力は見つからなかった)

表せるようにする関係 (Relationships)

症例(患者.研究用 ID)
└── 撮影(1 回の撮影.日時・撮影装置)
    ├── 舌画像
    ├── カラーチャート画像
    ├── ラベル(舌色・程度.将来は別の所見も)
    └── 派生データ(色補正後の画像・マスク・特徴量 analysis.csv 等)
         └── 由来: 元データ・プログラム名・プログラムの版・作成日時
  • 現在のデータにも同じ患者の複数枚がある.複数回の撮影・経時的な撮影にも対応する
  • ラベルは 1 つの撮影に複数付きうる(所見の種類が増える,評価者が複数いる等)

今後増やす候補 (Future Data Candidates)

いずれも現時点では作り込まず,追加時に骨組みを変えずに足せることだけを要件とする.

  • 舌色以外の所見(苔の色・厚さ等)
  • 問診・体質の情報
  • 同じ患者の経時的な撮影
  • 別の撮影装置で撮った画像
  • DeepTIAS の解析結果(色補正後の画像・マスク・特徴量 analysis.csv)

基本方針 (Principles)

  1. 置き場所をコードに書かない: データの置き場所は設定または目録で管理し,使う側はデータセット名で指定する.置き場所を変えても 1 か所の変更で済む
  2. 再現性: データセットは版(スナップショット)を持ち,実験が「どのデータセットのどの版」を使ったかを記録・再取得できる.データを追加しても過去の版の中身は変わらない
  3. 由来の記録: 派生データには作成したプログラムとその版を必ず記録する.DeepTIAS は旧 exe(2021 年 12 月版)と現行ソースで解析結果がずれることが分かっているため,同じ元データの派生データを版ごとに区別して保持できるようにする
  4. 個人情報をリポジトリに入れない: リポジトリに置くのはスキーマ・ライブラリ・CLI・手順書・ダミーデータのみ
  5. 拡張しやすさ: データの種類(所見・派生データの種類)の追加は,目録の項目の追加で済み,既存のテーブル構造・コードの作り直しを要しない

使う側との連携 (Integration with Consumers)

使う側連携の方法
Python のプロジェクト(TIASJudgeModel・TIASjudge 等)本リポジトリを git サブモジュール(例: external/TIASDataHub)として置き,[tool.uv.sources] で編集可能なパッケージとして読み込む(例: tiasdata = { path = "external/TIASDataHub", editable = true })
Python 以外(DeepTIAS 等)CLI で書き出した manifest 等のファイルを読む
目録に直接触れない場所(計算サーバ Newton・Archimedes)研究室 PC で CLI が書き出した manifest と,コピーしたデータを使う
  • 使う側の作業中に基盤側もその場で直せるよう,サブモジュールは編集可能な形で使う
  • 複数のリポジトリから編集するため,基盤の変更は本リポジトリの作業ブランチ → PR で main に入れる.使う側のサブモジュールはマージ済みのコミットを指す
  • 使う側から見たライブラリの API・manifest の列は互換性を保つ(変える場合は使う側への影響を手順書に書く)

制約 (Constraints)

個人情報・臨床データの扱い(必須)

  • データ本体と,実際の患者 ID ↔ 研究用 ID の対応表は本リポジトリに入れない(GitHub・研究室の GitBucket のどちらにも)
  • 原本は研究室 PC の C:\Users\Papin\clinical-data\ 配下に置く.研究室 PC のドキュメントフォルダは OneDrive に同期されるため,その配下には置かない(目録の DB ファイルも同様)
  • 学習は研究室の計算サーバ(Newton・Archimedes)で行い,臨床データを手元 PC に置かない.手元 PC ではダミーデータで開発する
  • Claude にデータの中身を読ませない.データフォルダは .claude/repo-access.json の deny_read に入れる
  • エラーメッセージ・ログ・CLI の出力に,実際の患者 ID・個人を特定できる情報を出さない
  • 倫理審査で定められた保管ルールに合わせる(詳細は要確認.下記「未確定事項」)

運用環境 (Environment)

場所役割臨床データ
研究室 PC原本と目録を置く.登録・manifest の書き出しを行うあり(原本)
計算サーバ(Newton・Archimedes)学習・解析.研究室 PC から作業用コピーを受け取るあり(作業用コピー)
手元 PC開発.ダミーデータのみなし
  • リモート: origin = GitHub(rintoHasegawa/TIASDataHub,Private.メイン),nakaguchi = 研究室の GitBucket(コピー)

成功基準 (Success Criteria)

  1. 現在の舌色データセット(1085 枚)が目録に登録され,データセット名で取り出せる
  2. TIASJudgeModel が,研究室 PC の固定パスを書かずに本基盤経由で同じデータ集合(manifest)を得られる
  3. データを追加した後も,過去の版のデータセットを同じ中身で取り出せる
  4. 派生データに由来(元データ・プログラム・版)が記録され,同じ元データでも版の違う派生データを区別できる
  5. 新しい種類の所見を 1 つ追加するとき,既存のスキーマ・コードを作り直さずに済む(ダミーデータで確認する)
  6. 手元 PC ではダミーデータだけでライブラリ・CLI のテストが通る
  7. リポジトリに個人情報・データ本体が含まれていない

前提・未確定事項 (Assumptions & Open Questions)

後のフェーズで一緒に決めること

事項決めるフェーズ
データベースの形(SQLite +画像ファイル置き場,等)技術選定
研究用 ID の付け方(匿名化の方法)と,対応表の置き場所・管理方法仕様設計
データセットの版の表し方(スナップショットの単位・識別子)仕様設計
計算サーバにコピーした作業用データと原本・データセットの版の対応の管理方法仕様設計
manifest の形式・列(TIASJudgeModel の現行 manifest との互換)仕様設計
最初に対応するデータの種類(舌色のみか,セグメンテーション用データ・DeepTIAS の派生データも含めるか)開発計画

人間が確認すること

  • 倫理審査で定められた臨床データの保管ルール(保管場所・アクセスできる人の範囲・保管期間・計算サーバへのコピーの可否)