Nhập môn Nhận dạng Giọng nói với SenseVoice-small: Mô hình 230MB và Hướng dẫn Sử dụng REST API

1. Giới thiệu về SenseVoice-small

SenseVoice-small là một công cụ nhận dạng giọng nói nhỏ gọn nhưng mạnh mẽ, chỉ có kích thước 230MB. Mô hình này có thể nhận dạng hơn 50 ngôn ngữ, bao gồm tiếng Trung, tiếng Anh, tiếng Nhật, tiếng Hàn, và thậm chí cả tiếng Quảng Đông.

Điểm nổi bật của SenseVoice-small là không cần thiết bị GPU đắt tiền, chỉ cần máy tính thông thường cũng có thể chạy. Thời gian chuyển đổi âm thanh thành văn bản rất nhanh, chỉ 70ms cho 10 giây âm thanh. Điều này giúp bạn có thể sử dụng nó để chuyển đổi ghi âm cuộc họp, xử lý ghi chú bằng giọng nói, hoặc thêm phụ đề cho video mà không lo về tốc độ.

Mô hình còn có các chức năng hữu ích như phát hiện cảm xúc của người nói, nhận biết sự kiện đặc biệt trong âm thanh (như tiếng cười, vỗ tay), và chuyển đổi từ cách diễn đạt tự nhiên sang định dạng văn bản chuẩn. Ví dụ, "ba giờ" sẽ được chuyển thành "3:00".

2. Chuẩn bị Môi trường và Cài đặt

2.1 Cài đặt Các Gói Cần Thiết

Mở terminal và cài đặt các gói Python sau:

pip install funasr-onnx gradio fastapi uvicorn soundfile jieba
  • funasr-onnx: Động cơ nhận dạng giọng nói chính
  • gradiofastapi: Tạo giao diện web và dịch vụ API
  • uvicorn: Máy chủ chạy dịch vụ web
  • soundfile: Xử lý đọc và ghi file âm thanh
  • jieba: Công cụ phân đoạn tiếng Trung, cải thiện độ chính xác

Quá trình cài đặt thường mất vài phút, tùy thuộc vào tốc độ mạng của bạn.

2.2 Tải Mô hình

Nếu bạn đã có mô hình, hãy đặt nó ở đường dẫn /root/ai-models/danieldong/sensevoice-small-onnx-quant. Nếu chưa, mô hình sẽ được tải tự động khi lần đầu chạy, nhưng tốt nhất nên chuẩn bị sẵn để tiết kiệm thời gian.

3. Khởi động Dịch vụ Nhận dạng Giọng nói

3.1 Khởi động qua Command Line

Tạo một file Python tên app.py và chạy lệnh sau:

python3 app.py --host 0.0.0.0 --port 7860
  • 0.0.0.0 cho phép tất cả thiết bị mạng truy cập, nếu chỉ dùng cục bộ, thay bằng 127.0.0.1.
  • 7860 là cổng mặc định, nếu bị chiếm, thay bằng số khác như 7861.

3.2 Kiểm tra Trạng thái Dịch vụ

  • Giao diện Web: Mở http://localhost:7860
  • Tài liệu API: Truy cập http://localhost:7860/docs
  • Kiểm tra Trạng thái: Truy cập http://localhost:7860/health

Nếu thấy trang web hiển thị bình thường, dịch vụ đã hoạt động.

4. Chi Tiết Về Gọi REST API

SenseVoice-small cung cấp API REST đơn giản để sử dụng chức năng nhận dạng giọng nói qua HTTP.

4.1 Yêu cầu Chuyển đổi Cơ bản

Sử dụng lệnh curl để gửi file âm thanh:

curl -X POST "http://localhost:7860/api/transcribe" \
  -F "file=@audio.wav" \
  -F "language=auto" \
  -F "use_itn=true"
  • Gửi yêu cầu POST đến /api/transcribe
  • Tải lên file âm thanh audio.wav
  • Đặt các tham số: tự động phát hiện ngôn ngữ và mở chức năng chuẩn hóa văn bản

4.2 Giải Thích Các Tham Số

  • file: File âm thanh, hỗ trợ các định dạng như wav, mp3, m4a, flac
  • language: Ngôn ngữ, dùng auto để tự động phát hiện, hoặc chỉ định zh (tiếng Trung), en (tiếng Anh)
  • use_itn: Mở chức năng chuẩn hóa văn bản, khuyên dùng true
  • batch_size: Kích thước lô, ảnh hưởng đến tốc độ, giá trị mặc định thường đủ

4.3 Xử Lý Phản Hồi API

Phản hồi thành công trả về JSON:

{
  "text": "Nội dung văn bản",
  "language": "Mã ngôn ngữ",
  "emotion": "Kết quả phân tích cảm xúc",
  "events": ["Các sự kiện âm thanh"]
}

Nếu có lỗi, API trả về mã lỗi và thông tin chi tiết.

5. Gọi trực tiếp từ Python

Ngoài việc sử dụng API, bạn cũng có thể gọi chức năng trực tiếp từ Python.

5.1 Ví dụ Gọi Cơ bản

from funasr_onnx import SenseVoiceSmall

# Khởi tạo mô hình
model = SenseVoiceSmall(
    "/root/ai-models/danieldong/sensevoice-small-onnx-quant",
    batch_size=10,
    quantize=True
)

# Thực hiện nhận dạng
result = model(["audio.wav"], language="auto", use_itn=True)
print(result[0])

5.2 Xử Lý Nhiều File Đồng Thời

audio_files = ["meeting1.wav", "interview.mp3", "lecture.m4a"]
results = model(audio_files, language="zh", use_itn=True)

for i, result in enumerate(results):
    print(f"Kết quả cho file {audio_files[i]}:")
    print(result)

6. Ví dụ về Ứng Dụng Thực tế

  • Chuyển ghi âm cuộc họp thành văn bản
  • Tạo phụ đề cho video
  • Chuyển ghi chú bằng giọng nói thành văn bản
  • Hỗ trợ học ngoại ngữ

7. Giải Quyết Vấn Đề Thường Gặp

  • Lỗi tải mô hình: Kiểm tra đường dẫn mô hình
  • Lỗi định dạng âm thanh: Chuyển đổi thành định dạng wav, tỷ lệ mẫu 16000Hz
  • Độ chính xác thấp: Nói chậm và rõ, hiệu chỉnh sau
  • Tốc độ xử lý chậm: Tăng batch_size nhưng không vượt quá dung lượng bộ nhớ

8. Kết Luận

SenseVoice-small là công cụ hữu ích, đặc biệt cho những ai cần giải pháp nhận dạng giọng nói nhẹ. Hy vọng bài viết đã giúp bạn hiểu cách cài đặt, triển khai, và sử dụng công cụ này.

Thẻ: SenseVoice-Small REST API voice recognition python ONNX

Đăng vào ngày 12 tháng 6 lúc 06:31