# Module: ai — AI 輔助診斷與語音

`handprobe.application.ai`（算法/診斷）+ `handprobe.components.ai`（推理引擎封裝）實現了完整的 AI 輔助診斷功能集。

## Responsibilities

- **診斷測量**：單次觸發 → 模型推理 → 輪廓/數值疊加顯示
- **推理引擎封裝**：PyTorch（`libpytorch_jni`）與 TensorFlow Lite（`libtensorflowlite_jni` + GPU delegate）
- **離線語音控制**：Vosk 中/英文識別，語音指令操作掃描界面

## 診斷功能清單（application/ai 實測）

| 類 | 功能 |
|---|---|
| `BladderMeas` | 膀胱體積測量 |
| `CardiacAutoEF` | 心臟射血分數（EF）自動計算 |
| `LungBLineDetector` | 肺部 B 線檢測（新冠肺炎/肺水腫場景） |
| `ObHcMeas` | 產科頭圍（HC）測量 |
| `PcosDiagnose` | 多囊卵巢綜合徵診斷 |
| `PwAutoPositionCarotid(0)` | 頸動脈 PW 自動取樣門定位 |
| `ThyroidDiagnose` | 甲狀腺診斷 |
| `NerveSegment` | 神經分割（麻醉導引） |
| `SkinSegment` | 皮膚層分割 |
| `VaricosityMeas` | 靜脈曲張測量 |
| `AssistDiagnose` | 通用輔助診斷 |
| `AiFuncMng` / `AiMeasBase` | AI 功能管理 / 測量基類 |
| `UltraSpeechRecognizer` | 語音識別入口（包裝 Vosk） |

## Key Files

- `application/ai/AiFuncMng.java` — AI 功能註冊/調度
- `application/ai/UltraSpeechRecognizer.java` — 語音指令識別（+ `components/audio/voice/vosk/VoskSpeechRecognizer.java` 實際 Vosk 調用）
- `components/ai/AiModelBase.java` — 模型基類（加載/推理生命周期）
- `components/ai/MaskProcessor.java` + `Mask3Diam` / `MaskInnerDiameter` / `MaskUtils` / `LineSegment` — 分割掩膜後處理（直徑/輪廓擬合）
- `components/ai/pytorch/`、`components/ai/tensorflow/` — 引擎適配
- `components/ai/ImageUtils.java` / `AiData.java` — 影像預處理

## 推理鏈

```
UI 觸發 → AiFuncMng → AiMeasBase 子類（ROI 選擇、預處理）
        → MaskProcessor/ImageUtils → pytorch / tensorflow 引擎
        → libpytorch_jni / libtensorflowlite_jni
        → Mask 後處理（擬合直徑/面積）→ 數值疊加顯示
```

## Dependencies

- **Used by:** `gui.fragment.ImageDisplayFragment`（影像界面集成）
- **Uses:** `org.pytorch`、`org.tensorflow`、`org.vosk`、`ultrasys`（取當前幀）

## Notable Patterns / Gotchas

- 模型體積：`libpytorch_jni.so` 達 76 MB（打包了 PyTorch 運行時）
- TFLite 帶 GPU delegate（`libtensorflowlite_gpu_jni.so`），OpenCL 加速
- Vosk 模型在 `assets/vosk/`：中文 `vosk-model-small-cn-0.22`、英文 `vosk-model-small-en-us-0.15`（含 graph/HCLr/Gr.fst、am/final.mdl、ivector）
- AI 測量在 UI 線程外異步跑，結果以 Observer 回調刷新
