# SmTIAS-Capture

千葉大学フロンティア医工学センターの舌画像撮影・解析システム（TIAS）のスマートフォン版。
PC 側のシミュレーション（SmTIAS-LightSim）と実機撮影を定量比較するため、Camera2 API の
完全マニュアル制御で RAW（DNG）を撮影・保存することに特化したアプリ。

## 主な機能

- **定量モード撮影（DNG）**: フロントカメラを Camera2 API でフルマニュアル制御（AE/AWB/AF/NR/EDGE OFF・線形トーンマップ・露光 1/120s・ISO 40 固定）し、10-bit BGGR Bayer の RAW を `.dng`（約 16 MB）で保存
- **メタデータ JSON**: 撮影設定・実適用値・センサ特性・LSC マップ・画素統計・Hot pixel map を `.meta.json` に保存
- **プレビュー JPEG**: シャッター瞬間のライブプレビュー（自動 ISP 処理）スナップショットを `.preview.jpg` として保存し、アプリ内で撮れ具合を確認
- **一覧・閲覧・削除**: 撮影画像のサムネイル一覧、拡大表示、関連 3 ファイル連動削除
- **カメラ診断**: 実機 Camera2 能力（HW Level・対応モード・出力サイズ等）を JSON 出力（インフラのみ・UI 非表示）
- 端末を逆さに装着する専用アタッチメントに対応した 180° 回転 UI、画面輝度調整、シャッター音 ON/OFF

> 旧通常モードの非圧縮 PNG 撮影パス（`captureFullResolutionPng`）はフォールバック用にコードを温存。

## 対象デバイス

- AQUOS sense3（SH-02M）/ フロントカメラ + LED ライト付きアタッチメント
- 診断結果: HW Level 3 + RAW + MANUAL_SENSOR + MANUAL_POST_PROCESSING 対応

## 技術スタック

| 項目 | 技術 |
|------|------|
| フレームワーク | Flutter（stable）/ Dart |
| 状態管理 | Provider |
| カメラ（プレビュー） | camera パッケージ（ライブプレビュー用） |
| カメラ（撮影・変換） | Android ネイティブ Kotlin（Camera2 API / `DngCreator` / YUV→JPEG・PNG エンコード） |
| 権限管理 | permission_handler |
| 設定保存 | shared_preferences（シャッター音 ON/OFF 等） |
| 画面輝度 | screen_brightness |

詳細は [docs/02_ENV/ENV_01_技術スタック.md](docs/02_ENV/ENV_01_技術スタック.md) を参照。

## セットアップ

```powershell
# 1. リポジトリをクローン
git clone https://github.com/rintoHasegawa/SmTIAS-Capture.git
cd SmTIAS-Capture

# 2. セットアップスクリプトを実行（Flutter・Android SDK 等を自動インストール）
./scripts/setup.ps1

# 3. ライセンスに同意
flutter doctor --android-licenses

# 4. 環境を確認
flutter doctor
```

詳細な手順は [docs/02_ENV/ENV_02_環境構築手順.md](docs/02_ENV/ENV_02_環境構築手順.md) を参照。

## ビルド・実行

```bash
# USB デバッグを有効にした端末を接続
flutter devices    # 端末が認識されていることを確認
flutter run        # ビルド＆実行
```

撮影データ（`.dng` / `.meta.json` / `.preview.jpg`）は端末の `Pictures/MiniTIAS/` に保存される。
PC への転送は **adb pull** を推奨（大容量 DNG では MTP に不整合リスクあり）。

## プロジェクト構成

```
lib/
├── screens/        # 画面（ホーム・撮影・一覧）
├── providers/      # 状態管理（カメラ・ギャラリー・診断）
├── services/       # ビジネスロジック（ファイル保存・権限・RAW 撮影・サウンド）
├── widgets/        # 共通ウィジェット（プレビュー・シャッターボタン・グリッド）
├── app.dart        # アプリ設定
└── main.dart       # エントリポイント

android/app/src/main/kotlin/com/example/mini_tias/
└── RawCapturePlugin.kt   # Camera2 撮影・DNG/PNG/JPEG 変換・診断のネイティブ実装

docs/
├── 01_GUIDE/       # 開発規約・ルール
├── 02_ENV/         # 環境構築
├── 03_PLAN/        # 要件定義・開発ステップ
├── 04_SPEC/        # 画面・カメラ撮影・設計/非機能の各仕様
├── 05_TECH/        # 技術設計・SmTIAS-LightSim 側との外部要求/合意
└── 06_TEST/        # 実機検証結果（カメラ診断など）
```

## 開発ガイド

| ルール | 概要 |
|--------|------|
| ブランチ命名 | `feature/` `fix/` `docs/` `chore/` + kebab-case |
| コミットメッセージ | `[add]` `[update]` `[fix]` `[remove]` `[clean]` + 日本語 |
| 実装フロー | `/implement` でコーディング → テスト → リファクタリング |
| コミット前 | `dart analyze` → `dart format .` → `flutter test` |

詳細は [docs/01_GUIDE/](docs/01_GUIDE/) 配下の各ガイドを参照。

## ドキュメント

- [要件定義書](docs/03_PLAN/PLAN_01_要件定義書.md)
- [開発ステップ](docs/03_PLAN/PLAN_02_開発ステップ.md)
- [画面機能仕様書](docs/04_SPEC/SPEC_01_画面機能仕様書.md) / [カメラ撮影仕様書](docs/04_SPEC/SPEC_02_カメラ撮影仕様書.md) / [アーキテクチャと非機能](docs/04_SPEC/SPEC_03_アーキテクチャと非機能.md)
- [定量モード設計の経緯と合意](docs/05_TECH/TECH_01_定量モード設計の経緯と合意.md)
- [開発進捗ログ](docs/PROGRESS.md)
- [Git 運用ルール](docs/01_GUIDE/GUIDE_04_Git運用ルール.md)
- [コーディング規約](docs/01_GUIDE/GUIDE_06_コーディング規約.md)
- [テスト方針](docs/01_GUIDE/GUIDE_07_テスト方針.md)
</content>
</invoke>
