AI Hunter
Member
Bạn đã chán giọng "chị Google" robot đều đều?
Trong bài viết này, chúng ta sẽ dùng Python để tạo ra giọng nói AI tiếng Việt tự nhiên, có ngữ điệu, cảm xúc để Jarvis giao tiếp với bạn.
Quy trình giao tiếp 2 chiều sẽ như sau:
Chúng ta cần `edge-tts` để tạo giọng nói và `pygame` để phát âm thanh.
Tạo file `jarvis_voice.py`.
Chúng ta sẽ chọn giọng **Nam Minh** (Nam) hoặc **Hoài My** (Nữ) - đây là 2 giọng tiếng Việt Neural (AI) hay nhất hiện nay.
Bây giờ hãy ghép đoạn code trên vào hệ thống ChatBot cũ.
Llama 3 trả lời khá dài. Nếu đợi nó viết xong hết mới bắt đầu đọc thì rất lâu.
Giải pháp chuyên nghiệp là **Streaming**: Llama 3 nhả ra câu nào -> Jarvis đọc ngay câu đó. Cảm giác hội thoại sẽ tức thì (Real-time). (Kỹ thuật này hơi phức tạp, chúng ta sẽ bàn ở các bài chuyên sâu sau).
* Báo thức: 7:00 sáng, Jarvis tự đọc bản tin thời tiết và giá vàng.
* Cảnh báo: Khi Camera phát hiện người lạ -> Phát loa cảnh báo "Yêu cầu rời khỏi khu vực này ngay lập tức".
* XenForo: Tích hợp vào diễn đàn để có tính năng "Nghe bài viết" (dành cho người lười đọc).
Trong bài viết này, chúng ta sẽ dùng Python để tạo ra giọng nói AI tiếng Việt tự nhiên, có ngữ điệu, cảm xúc để Jarvis giao tiếp với bạn.
1. Nguyên lý hoạt động
Quy trình giao tiếp 2 chiều sẽ như sau:
- Nghe (Input): Bạn gõ chat hoặc nói vào micro.
- Suy nghĩ (LLM): Llama 3 xử lý và trả về văn bản (Text).
- Nói (TTS): Python gửi văn bản đó lên Server của Microsoft Edge.
- Phát (Audio): Tải file `.mp3` về và phát ra loa ngay lập tức.
2. Cài đặt
Chúng ta cần `edge-tts` để tạo giọng nói và `pygame` để phát âm thanh.
Mã:
pip install edge-tts pygame
3. Triển khai Code (Full Source)
Tạo file `jarvis_voice.py`.
Chúng ta sẽ chọn giọng **Nam Minh** (Nam) hoặc **Hoài My** (Nữ) - đây là 2 giọng tiếng Việt Neural (AI) hay nhất hiện nay.
Python:
import edge_tts
import asyncio
import pygame
import os
# --- CẤU HÌNH ---
# Giọng đọc: 'vi-VN-NamMinhNeural' (Nam) hoặc 'vi-VN-HoaiMyNeural' (Nữ)
VOICE = "vi-VN-NamMinhNeural"
OUTPUT_FILE = "reply.mp3"
async def text_to_speech(text):
"""Chuyển văn bản thành file âm thanh MP3"""
print(f"🗣️ Jarvis đang nói: {text}")
communicate = edge_tts.Communicate(text, VOICE)
await communicate.save(OUTPUT_FILE)
def play_audio():
"""Phát file âm thanh vừa tạo"""
pygame.mixer.init()
pygame.mixer.music.load(OUTPUT_FILE)
pygame.mixer.music.play()
# Đợi phát xong mới dừng
while pygame.mixer.music.get_busy():
pygame.time.Clock().tick(10)
pygame.mixer.quit()
# Xóa file rác sau khi đọc xong (tùy chọn)
# os.remove(OUTPUT_FILE)
# --- HÀM MAIN ĐỂ TEST ---
if __name__ == "__main__":
# Đây là văn bản giả lập (bình thường sẽ lấy từ Llama 3)
text_input = "Chào sếp! Hệ thống an ninh đã được kích hoạt. Chúc sếp một ngày làm việc hiệu quả."
# Chạy hàm async
loop = asyncio.get_event_loop_policy().get_event_loop()
loop.run_until_complete(text_to_speech(text_input))
# Phát loa
play_audio()
4. Kết hợp với Llama 3 (Tạo Jarvis hoàn chỉnh)
Bây giờ hãy ghép đoạn code trên vào hệ thống ChatBot cũ.
Python:
import ollama
import asyncio
# Import các hàm TTS ở trên vào đây (hoặc để chung 1 file)
def chat_with_jarvis():
print("--- JARVIS VOICE ASSISTANT ---")
while True:
user_input = input("Bạn: ")
if user_input.lower() == "exit": break
# 1. Hỏi Llama 3
print("🧠 Đang suy nghĩ...")
response = ollama.chat(model='llama3', messages=[{'role': 'user', 'content': user_input}])
ai_reply = response['message']['content']
# 2. In ra màn hình
print(f"Jarvis: {ai_reply}")
# 3. Đọc to câu trả lời
loop = asyncio.get_event_loop_policy().get_event_loop()
loop.run_until_complete(text_to_speech(ai_reply))
play_audio()
# Chạy thử
# chat_with_jarvis()
5. Mẹo nâng cao: Streaming (Đọc ngay khi đang nghĩ)
Llama 3 trả lời khá dài. Nếu đợi nó viết xong hết mới bắt đầu đọc thì rất lâu.
Giải pháp chuyên nghiệp là **Streaming**: Llama 3 nhả ra câu nào -> Jarvis đọc ngay câu đó. Cảm giác hội thoại sẽ tức thì (Real-time). (Kỹ thuật này hơi phức tạp, chúng ta sẽ bàn ở các bài chuyên sâu sau).
6. Ứng dụng thực tế
* Báo thức: 7:00 sáng, Jarvis tự đọc bản tin thời tiết và giá vàng.
* Cảnh báo: Khi Camera phát hiện người lạ -> Phát loa cảnh báo "Yêu cầu rời khỏi khu vực này ngay lập tức".
* XenForo: Tích hợp vào diễn đàn để có tính năng "Nghe bài viết" (dành cho người lười đọc).
Bài viết liên quan