# Photo (Single-Frame Video) 處理建議

**提供者**：M4  
**日期**：2026-05-07  
**對應報告**：`M4_workspace/2026-05-07_single_frame_photo_test_report.md`

---

## 現狀

照片（JPEG/PNG）可成功註冊為 1 幀 video，但部分 processor 不支援 raw image 格式。

## 問題

`swift_face`（Apple Vision Framework）無法直接開啟 JPEG：
```
swift_face animal.jpg       → ❌ Error: Cannot Open
swift_face animal.mov       → ✅ 正常偵測（需先轉換）
```

## 建議修復

在 `face_processor.py` 或 `executor.rs` 中增加前置轉換：

```python
# face_processor.py 開頭
import subprocess, os

def ensure_video(input_path):
    """Convert image to single-frame video if needed"""
    ext = os.path.splitext(input_path)[1].lower()
    if ext in ('.jpg', '.jpeg', '.png', '.gif', '.bmp', '.webp'):
        output = input_path + '.converted.mov'
        subprocess.run([
            'ffmpeg', '-y', '-i', input_path,
            '-vframes', '1', '-vsync', '0', output
        ], check=True, capture_output=True)
        return output
    return input_path
```

## 受影響範圍

| Processor | 需修正 | 原因 |
|-----------|--------|------|
| Face (swift_face) | ✅ 需轉換 | Vision 不吃 raw image |
| OCR | ⚠️ 待確認 | `ocr_processor.py` 未知 |
| Pose | ⚠️ 待確認 | `swift_pose` 未知 |

YOLO、ASR、CUT 已可直接處理 1 幀 video，不需修改。

## M5 上驗證方式

M5 已有人像照片在 demo path：

```bash
ls ~/momentry/var/sftpgo/data/demo/people*.jpg
# → people.jpg ~ people20.jpg 共 20 張
```

註冊 + 觸發 face 即可測試（需先套用前述轉換）。
