| # OmniSub — Dịch phụ đề ZH→VI bằng Qwen3-Omni (đa phương thức) |
|
|
| Dịch và hiệu đính phụ đề SRT **Trung → Việt**, trong đó mô hình **nghe giọng nói thật** và |
| **nhìn ngữ cảnh video** để chọn **xưng hô** (anh/em, mẹ/con, tỷ/muội, ngài/ta…) cho đúng vai vế — |
| thay vì suy đoán bằng luật regex như bản cũ. |
|
|
| > Đây là bản viết lại, tối ưu từ dự án `Gemma-4`. Khác biệt chính: gom về **một họ Qwen**, |
| > dùng **Qwen3-Omni** nghe–nhìn–dịch trong cùng một mô hình, và **bỏ toàn bộ regex khóa quan hệ/xưng hô**. |
|
|
| ## Vì sao đổi từ Gemma sang Qwen3-Omni |
| - **Dịch ZH→VI tốt hơn**: Qwen dẫn đầu benchmark tiếng Việt & tiếng Trung (SEA-HELM 2026). |
| - **Nghe hiểu giọng**: Qwen3-Omni nhận **text + ảnh + audio + video** natively, SOTA audio, |
| cho biết giới tính/tuổi/cảm xúc/vai vế của người đang nói → neo xưng hô vào ngữ cảnh thật. |
| - **Đơn giản hóa**: một mô hình thay cho 3 stack rời (LLM + wav2vec2 + regex). |
|
|
| ## Kiến trúc — 5 bước (cloud-first, Colab L4) |
| ``` |
| Video + SRT(ZH) |
| ├─ Bước 1 Chuẩn bị SRT parse, gom cảnh, ghép cue [OCR: mặc định tắt] |
| ├─ Bước 2 Phân tích người nói pyannote → ai nói lúc nào |
| ├─ Bước 3 Hồ sơ giọng Qwen3-Omni nghe → VoiceProfile từng nhân vật |
| ├─ Bước 4 Dịch đa phương thức Qwen3-Omni: audio + frame + cue + hồ sơ → VN |
| └─ Bước 5 Hậu kiểm & xuất glossary + fit thời lượng → phim.vi.srt |
| ``` |
| Qwen3-Omni-30B-A3B đảm nhiệm **Bước 3 & 4** (nghe giọng, nhìn cảnh, dịch). pyannote dùng ở |
| **Bước 2** (gán nhãn người nói nhất quán — việc Omni chưa làm tốt natively). |
|
|
| ## Phần cứng — chạy trên Colab |
| Qwen3-Omni 4-bit/AWQ khá nặng nên **toàn bộ pipeline chạy trên Colab**, không có nhánh chạy local. |
|
|
| | Nơi chạy | Cấu hình | Vai trò | |
| |---|---|---| |
| | **Colab** | GPU **A100 40GB** | Chạy Qwen3-Omni **AWQ Int4** chỉ thinker (~17GB) + pyannote — toàn bộ pipeline, không offload nên nhanh | |
|
|
| > Có thể chạy trên **L4 24GB** vì chỉ nạp thinker; A100 nhanh hơn rõ rệt do không phải offload. |
|
|
| ## Trạng thái |
| 🚧 Đang phát triển. Đã xong **M1 — Chuẩn bị SRT** (parse → ghép cue vụn → gom cảnh → xuất) |
| và bộ khung đầy đủ Bước 2–5 (diarization, hồ sơ giọng, dịch đa phương thức, hậu kiểm) cùng |
| backend Qwen3-Omni cho Colab. Chi tiết kiến trúc, module và lộ trình: xem [`PLAN.md`](PLAN.md). |
|
|
| ## Cách dùng (Colab) |
| Mở [`colab/OmniSub_Colab.ipynb`](colab/OmniSub_Colab.ipynb) trên Colab (Runtime → L4) và chạy lần lượt các cell. |
| Cell cuối gọi pipeline tương đương: |
| ```bash |
| python -m omnisub.cli run phim.srt --video phim.mp4 --backend qwen --config config.yaml |
| ``` |
| Kiểm tra nhanh Bước 1 (không nạp model) ngay trong Colab/môi trường có Python: |
| ```bash |
| python -m omnisub.cli prepare samples/demo.zh.srt |
| ``` |
|
|
| ## Cấu trúc thư mục |
| ``` |
| Gemma/ |
| ├── README.md / PLAN.md |
| ├── pyproject.toml / requirements-colab.txt / config.yaml |
| ├── src/omnisub/{srt,scenes,diarize,correct,profiles,scene_context,translate,glossary,pipeline,cli,config}.py |
| │ └── backends/{base,transformers_qwen}.py |
| ├── colab/OmniSub_Colab.ipynb |
| └── samples/demo.zh.srt |
| ``` |
|
|