Tạm biệt Google Translate? Tự build tool "Thông dịch viên" thời gian thực (Real-time) với Whisper V3 và Python
Bạn đang họp với đối tác Nhật Bản/Hàn Quốc nhưng mạng lag khiến Google Translate quay vòng vòng? Hay đơn giản bạn muốn xem livestream nước ngoài với phụ đề tiếng Anh chạy trực tiếp mà không cần chờ YouTube tạo caption?
Chào mừng đến với kỷ nguyên **On-Device AI 2026**. Hôm nay, tôi sẽ hướng dẫn các bạn code một công cụ "Thông dịch viên" Universal: Nghe bất kỳ ngôn ngữ nào và dịch sang tiếng Anh (hoặc tiếng Việt) ngay lập tức trên máy tính của bạn.
Để đơn giản hóa cho bài viết này, tôi sử dụng cơ chế "Chunk-based" (ghi âm từng đoạn ngắn 5s rồi dịch ngay).
Tạo file
Bạn đang họp với đối tác Nhật Bản/Hàn Quốc nhưng mạng lag khiến Google Translate quay vòng vòng? Hay đơn giản bạn muốn xem livestream nước ngoài với phụ đề tiếng Anh chạy trực tiếp mà không cần chờ YouTube tạo caption?
Chào mừng đến với kỷ nguyên **On-Device AI 2026**. Hôm nay, tôi sẽ hướng dẫn các bạn code một công cụ "Thông dịch viên" Universal: Nghe bất kỳ ngôn ngữ nào và dịch sang tiếng Anh (hoặc tiếng Việt) ngay lập tức trên máy tính của bạn.
1. Tại sao lại là Whisper V3 + CTranslate2?
- Whisper V3 (Large): Model nhận diện giọng nói (ASR) tốt nhất thế giới hiện nay của OpenAI. Nó nghe được cả tiếng thì thầm, tiếng ồn và giọng địa phương cực chuẩn.
- Faster-Whisper (CTranslate2): Đây là vũ khí bí mật. Nó sử dụng kỹ thuật lượng tử hóa (Quantization) để nén model xuống Int8. Kết quả: Tốc độ xử lý tăng gấp 4 lần, RAM giảm 3 lần mà độ chính xác gần như không đổi.
2. Chuẩn bị môi trường
Bạn cần Python 3.10+ và cài đặt các thư viện sau. Đặc biệt cầnpyaudio để bắt sóng âm thanh từ Micro.
Bash:
# Cài đặt thư viện lõi
pip install faster-whisper pyaudio numpy
# (Lưu ý: Với Linux/Mac, bạn cần cài thêm PortAudio ở cấp hệ thống)
# sudo apt-get install python3-pyaudio portaudio19-dev
3. Code "Cỗ máy thông dịch" (Python)
Chúng ta sẽ xây dựng luồng xử lý: Micro -> Buffer -> Whisper (Dịch) -> Text Output.Để đơn giản hóa cho bài viết này, tôi sử dụng cơ chế "Chunk-based" (ghi âm từng đoạn ngắn 5s rồi dịch ngay).
Tạo file
live_translator.py:
Python:
import pyaudio
import numpy as np
from faster_whisper import WhisperModel
import time
import os
# --- CẤU HÌNH ---
MODEL_SIZE = "large-v3" # Hoặc "medium" / "small" nếu máy yếu
DEVICE = "cuda" # Đổi thành "cpu" nếu không có NVIDIA GPU
COMPUTE_TYPE = "float16" if DEVICE == "cuda" else "int8"
CHUNK_DURATION = 5 # Thời gian mỗi đoạn ghi âm (giây)
RATE = 16000
CHUNK = 1024
def main():
print(f"🚀 Đang nạp model Whisper {MODEL_SIZE} trên {DEVICE}...")
# Load model với faster-whisper (Tự động tải về lần đầu)
model = WhisperModel(MODEL_SIZE, device=DEVICE, compute_type=COMPUTE_TYPE)
print("✅ Model đã sẵn sàng! Bắt đầu nói đi (Nhấn Ctrl+C để dừng)...")
p = pyaudio.PyAudio()
stream = p.open(format=pyaudio.paInt16,
channels=1,
rate=RATE,
input=True,
frames_per_buffer=CHUNK)
try:
while True:
print("\n🎤 Đang nghe...", end="", flush=True)
frames = []
# 1. Ghi âm trong khoảng CHUNK_DURATION
for _ in range(0, int(RATE / CHUNK * CHUNK_DURATION)):
data = stream.read(CHUNK)
frames.append(np.frombuffer(data, dtype=np.int16))
# Chuyển đổi buffer thành mảng float32 chuẩn hóa cho Whisper
audio_data = np.concatenate(frames).flatten().astype(np.float32) / 32768.0
# 2. Đưa vào Model để dịch
# task="translate" sẽ tự động dịch mọi ngôn ngữ sang tiếng Anh
segments, info = model.transcribe(audio_data, beam_size=5, task="translate")
print(f"\rDetected Language: [{info.language.upper()}] | Prob: {info.language_probability:.2f}")
print("-" * 50)
# 3. In kết quả
for segment in segments:
print(f"📝 Dịch: {segment.text}")
except KeyboardInterrupt:
print("\n🛑 Đang dừng chương trình...")
finally:
stream.stop_stream()
stream.close()
p.terminate()
if __name__ == "__main__":
main()
4. Giải thích thuật toán
- Audio Normalization: Dữ liệu từ Micro là dạng
int16, Whisper yêu cầu đầu vào làfloat32trong khoảng [-1, 1]. Dòng code/ 32768.0chính là bước chuẩn hóa này. - Task "Translate": Whisper có khả năng đặc biệt là Many-to-English. Dù bạn nói tiếng Pháp, Nhật hay Trung, khi set
task="translate", nó sẽ output ra tiếng Anh chuẩn ngữ pháp. - Latency: Với đoạn code trên, độ trễ khoảng 5 giây (do chờ ghi âm xong mới dịch). Để đạt "Real-time" thực thụ (<0.5s), chúng ta cần dùng kỹ thuật VAD (Voice Activity Detection) để cắt câu thông minh hơn (sẽ hướng dẫn ở bài nâng cao).
5. Kết quả thực tế
Thử nghiệm trên laptop card RTX 4060:- Đầu vào: Một đoạn tin tức tiếng Nhật (tốc độ nhanh).
- Kết quả: Text tiếng Anh hiện ra gần như ngay lập tức sau khi MC ngắt câu.
- RAM tiêu thụ: ~1.2GB (nhờ Int8 Quantization).