Giới thiệu dự án

Theo báo cáo của Tổ chức Y tế Thế giới (WHO), toàn cầu hiện có hơn 2,2 tỷ người đang sống chung với các dạng suy giảm thị lực hoặc khiếm thị hoàn toàn. Tại Việt Nam, con số này vượt mốc 2 triệu người. Mặc dù công cuộc chuyển đổi số đang diễn ra mạnh mẽ trong mọi lĩnh vực đời sống, khả năng tiếp cận tri thức số (Digital Accessibility) của cộng đồng người khiếm thị vẫn gặp rào cản rất lớn. Phần lớn các nền tảng đọc sách điện tử (e-book) hiện nay được thiết kế ưu tiên cho thị giác, phụ thuộc hoàn toàn vào thao tác chạm (touch) hoặc chuột (point-and-click), trong khi các phần mềm đọc màn hình chuyên dụng (như NVDA, JAWS hay VoiceOver) đòi hỏi kỹ năng ghi nhớ tổ hợp phím phức tạp và phản hồi chậm với tiếng Việt.

Đề tài "Xây dựng website đọc sách điều khiển bằng giọng nói cho người khiếm thị" (Chuyên ngành Kỹ thuật Dữ liệu, Khoa Công nghệ Thông tin, Trường Đại học Sư phạm Kỹ thuật TP.HCM) giải quyết trực tiếp bài toán bất bình đẳng trong tiếp cận thông tin. Hệ thống cung cấp giải pháp đọc sách trực tuyến tương tác hai chiều thông qua giọng nói tiếng Việt, loại bỏ hoàn toàn sự phụ thuộc vào thiết bị ngoại vi truyền thống.

[Người dùng Khiếm thị] 
       │ (Phát âm khẩu lệnh tiếng Việt)
       ▼
[Web Speech API: SpeechRecognition] ──(Chuỗi văn bản / Intent)──► [Core Application Controller (ReactJS/Redux)]
                                                                           │
       ▲                                                                   ▼
       │ (Phát âm thanh đọc sách / Phản hồi)                      [RESTful API Backend (Node.js/Express)]
       │                                                                   │
[Web Speech API: SpeechSynthesis] ◄──(Truy xuất dữ liệu sách)─────── [Cơ sở dữ liệu MongoDB]

Mục tiêu của đề tài

  1. Nghiên cứu cơ sở lý thuyết: Phân tích cấu trúc hệ thống nhận dạng tiếng nói (Automatic Speech Recognition - ASR), trích xuất đặc trưng âm học Mel-Frequency Cepstral Coefficients (MFCC), mô hình chuỗi thời gian Hidden Markov Models (HMM), và các kiến trúc tổng hợp tiếng nói (Text-To-Speech - TTS) từ ghép nối (Concatenative) đến học sâu đầu-cuối (Seq2Seq, Tacotron).
  2. Thiết kế kiến trúc hệ thống Client-Side Voice Interface: Khai thác tiêu chuẩn Web Speech API (W3C) để hiện thực hóa việc nhận dạng khẩu lệnh (Speech-To-Text - STT) và tổng hợp giọng đọc tiếng Việt (Text-To-Speech - TTS) trực tiếp trên trình duyệt mà không phát sinh chi phí hạ tầng máy chủ AI đắt đỏ.
  3. Xây dựng nền tảng Full-stack hoàn chỉnh: Triển khai Single Page Application (SPA) bằng ReactJS 18.2 kết hợp Redux quản lý trạng thái tập trung; xây dựng RESTful API bằng Node.js 18.x LTS và Express.js 4.18; lưu trữ dữ liệu sách, chương mục và tiến trình đọc trên MongoDB 6.0.
  4. Tối ưu hóa trải nghiệm trợ năng: Phát triển các luồng xử lý giọng nói chuyên biệt cho người khiếm thị: tìm kiếm sách, tìm kiếm bài hát, điều khiển âm lượng, dừng/phát âm thanh, chuyển chương linh hoạt và đánh dấu vị trí đọc (bookmarking).

Phạm vi và giới hạn đề tài

  • Phạm vi: Ứng dụng web chạy trên các trình duyệt hiện đại hỗ trợ tiêu chuẩn Web Speech API (tối ưu hóa trên Google Chrome v110+ và Microsoft Edge v110+); hỗ trợ xử lý giọng nói và đọc sách văn bản tiếng Việt có dấu.
  • Giới hạn kỹ thuật: Hệ thống phụ thuộc vào chính sách bảo mật trình duyệt (Autoplay Policy và quyền truy cập Microphone cần sự tương tác ban đầu của người dùng); độ chính xác nhận dạng chịu ảnh hưởng bởi tạp âm môi trường (>55 dB) và các biến thể ngữ âm vùng miền phức tạp.

Phân tích và thiết kế giải pháp

Phân tích hiện trạng

Các giải pháp hỗ trợ người khiếm thị hiện nay chủ yếu phân tách thành hai nhóm: phần mềm đọc màn hình truyền thống và các dịch vụ đám mây thương mại.

Tiêu chí Phần mềm đọc màn hình (NVDA/JAWS) Nền tảng Cloud TTS thương mại (Amazon Polly / Azure TTS) Giải pháp Website Đọc sách Voice-Driven (Đề tài)
Giao thức điều khiển Bàn phím / Phím tắt phức tạp API / Giao diện người dùng tiêu chuẩn 100% Giọng nói (Voice-controlled)
Xử lý tiếng Việt Giọng máy eSpeak cơ bản, đơn điệu Giọng nơ-ron (Neural TTS) tự nhiên, phát âm chuẩn Web Speech Synthesis tích hợp giọng Việt hệ thống
Chi phí vận hành Miễn phí (NVDA) / Rất cao (JAWS ~$1,000) Trả phí theo ký tự ($16.00 / 1M ký tự Neural) 0 VNĐ (Không tốn chi phí gọi Cloud API)
Độ trễ phản hồi Tức thì (<50ms) 300ms - 800ms (phụ thuộc mạng) < 200ms (Client-side Speech Recognition)
Khả năng đồng bộ Không lưu trạng thái đọc đa nền tảng Lưu theo tài khoản ứng dụng Lưu lịch sử và vị trí đọc chính xác vào MongoDB

Yêu cầu người dùng theo mô hình MoSCoW:

  • Must-have: Nhận dạng lệnh điều hướng ("Trở về trang chủ", "Dừng", "Tăng/Giảm âm lượng"); tìm kiếm sách bằng giọng nói; đọc nội dung văn bản từng chương; lưu tiến trình đọc của người dùng.
  • Should-have: Tìm kiếm và phát nhạc thư giãn hỗ trợ tập trung; phản hồi âm thanh xác nhận hành động bằng giọng nói (Voice feedback loop).
  • Could-have: Tính năng highlight vị trí câu/đoạn đang được tổng hợp giọng đọc; điều chỉnh tốc độ (rate) và cao độ (pitch) giọng nói.
  • Won't-have: Tự động huấn luyện lại mô hình ngôn ngữ ASR ngoại tuyến cục bộ trên trình duyệt.
┌────────────────────────────────────────────────────────────────────────┐
│                        KIẾN TRÚC TỔNG THỂ HỆ THỐNG                     │
└────────────────────────────────────────────────────────────────────────┘
 [User Mic] ──► [SpeechRecognition Engine] ──► [Voice Command Parser]
                                                        │
 ┌──────────────────────────────────────────────────────┴──────────────┐
 │                      FRONTEND LAYER (ReactJS 18.2)                  │
 │  ┌────────────────────────┐  ┌───────────────────────────────────┐  │
 │  │ Redux Store            │  │ SpeechSynthesis Controller        │  │
 │  │ - Audio State          │  │ - Text Parsing & Normalization    │  │
 │  │ - Book Playback State  │  │ - Utterance Event Listeners       │  │
 │  └───────────▲────────────┘  └─────────────────▲─────────────────┘  │
 └──────────────┼─────────────────────────────────┼────────────────────┘
                │ Axios HTTP Requests             │ Speech Synthesis Output
                ▼                                 ▼
 ┌─────────────────────────────────────────┐  [Loa / Tai nghe]
 │      BACKEND LAYER (Node.js / Express)  │
 │  - /api/v1/books (CRUD & Search)        │
 │  - /api/v1/audio (Music Management)     │
 │  - /api/v1/history (Progress Tracking)  │
 └────────────────────▲────────────────────┘
                      │ Mongoose ODM
                      ▼
 ┌─────────────────────────────────────────┐
 │     DATABASE LAYER (MongoDB Atlas)      │
 │  - Collections: Books, Chapters, Music  │
 └─────────────────────────────────────────┘

Thiết kế hệ thống

1. Technology Stack chi tiết

  • Frontend Client: ReactJS 18.2.0, Redux Toolkit 2.0, React Router DOM 6.14, Axios 1.4.2.
  • Web APIs: W3C Web Speech API (webkitSpeechRecognition, SpeechSynthesis, SpeechSynthesisUtterance).
  • Backend Server: Node.js v18.16.0 LTS, Express.js v4.18.2, CORS, Dotenv.
  • Database Engine: MongoDB Community Server v6.0.8 kết hợp Mongoose ODM v7.5.0.
  • Acoustic & DSP Foundations: Chuẩn hóa tín hiệu dựa trên giải thuật trích xuất đặc trưng MFCC 13 chiều, biến đổi Fourier nhanh (FFT) qua dải lọc Mel Filter Bank.

2. Thiết kế Cơ sở Dữ liệu (Database Schema)

// models/Book.js - Mongoose Schema cho Sách và Chương
const mongoose = require('mongoose');

const ChapterSchema = new mongoose.Schema({
  chapterNumber: { type: Number, required: true },
  title: { type: String, required: true },
  content: { type: String, required: true },
  durationEstimate: { type: Number } // tính bằng phút
});

const BookSchema = new mongoose.Schema({
  title: { type: String, required: true, index: true },
  author: { type: String, required: true, index: true },
  category: { type: String, required: true },
  description: { type: String },
  chapters: [ChapterSchema],
  coverUrl: { type: String },
  createdAt: { type: Date, default: Date.now }
});

module.exports = mongoose.model('Book', BookSchema);
// models/History.js - Mongoose Schema lưu tiến trình đọc
const mongoose = require('mongoose');

const HistorySchema = new mongoose.Schema({
  userId: { type: String, required: true, index: true },
  bookId: { type: mongoose.Schema.Types.ObjectId, ref: 'Book', required: true },
  lastChapterNumber: { type: Number, default: 1 },
  lastPositionChar: { type: Number, default: 0 },
  updatedAt: { type: Date, default: Date.now }
});

module.exports = mongoose.model('History', HistorySchema);

3. Thiết kế RESTful API

HTTP Method Endpoint Chức năng Tham số / Body Mã phản hồi
GET /api/v1/books Lấy danh mục tất cả sách limit, page, category 200 OK
GET /api/v1/books/search Tìm kiếm sách bằng văn bản/giọng nói q (Query keyword) 200 OK, 404 Not Found
GET /api/v1/books/:id/chapters/:num Lấy nội dung chi tiết chương id (BookId), num (ChapterNumber) 200 OK, 404 Not Found
POST /api/v1/history/save Lưu vị trí đọc tự động { userId, bookId, chapterNumber, lastPositionChar } 201 Created
GET /api/v1/history/:userId/:bookId Lấy vị trí đã nghe gần nhất userId, bookId 200 OK

Methodology

Dự án được thực hiện theo quy trình Agile/Scrum tinh gọn kéo dài 16 tuần (04/03/2024 - 05/07/2024), chia thành 5 giai đoạn (Sprints):

Sprint 1 (Tuần 1-2)  : Nghiên cứu lý thuyết ASR, TTS, MFCC, HMM, Seq2Seq & Web Speech API.
Sprint 2 (Tuần 3-4)  : Thiết kế tài liệu kiến trúc phần mềm, Use case, DB Schema MongoDB.
Sprint 3 (Tuần 5-8)  : Xây dựng RESTful API Backend & tích hợp SpeechRecognition / Synthesis vào ReactJS.
Sprint 4 (Tuần 9-12) : Triển khai logic điều hướng giọng nói, tìm kiếm sách/nhạc và tính năng highlight.
Sprint 5 (Tuần 13-16): Kiểm thử phần mềm (Testing), UAT, khắc phục lỗi và hoàn thiện khóa luận.

Implementation và kết quả

Development process & Core Implementation

Hạt nhân của ứng dụng là module điều khiển giọng nói Client-side, tích hợp SpeechRecognition để lắng nghe liên tục và SpeechSynthesis để phản hồi âm thanh.

1. Khởi tạo và Xử lý Speech Recognition (STT)

// hooks/useVoiceCommander.js - Custom Hook điều khiển bằng giọng nói
import { useEffect, useState, useRef } from 'react';
import { useNavigate } from 'react-router-dom';

export const useVoiceCommander = (speakResponse) => {
  const [isListening, setIsListening] = useState(false);
  const [transcript, setTranscript] = useState('');
  const recognitionRef = useRef(null);
  const navigate = useNavigate();

  useEffect(() => {
    const SpeechRecognition = window.SpeechRecognition || window.webkitSpeechRecognition;
    if (!SpeechRecognition) {
      console.error("Trình duyệt không hỗ trợ Web Speech API.");
      return;
    }

    const recognition = new SpeechRecognition();
    recognition.continuous = true;
    recognition.interimResults = false;
    recognition.lang = 'vi-VN'; // Cấu hình nhận diện tiếng Việt

    recognition.onresult = (event) => {
      const current = event.resultIndex;
      const text = event.results[current][0].transcript.trim().toLowerCase();
      setTranscript(text);
      processVoiceCommand(text);
    };

    recognition.onerror = (event) => {
      console.error("Lỗi Speech Recognition:", event.error);
    };

    recognition.onend = () => {
      // Tự động khởi động lại để duy trì trạng thái luôn lắng nghe
      if (isListening) recognition.start();
    };

    recognitionRef.current = recognition;
  }, [isListening]);

  const processVoiceCommand = (command) => {
    console.log("Khẩu lệnh nhận diện được:", command);

    if (command.includes("trở về trang chủ")) {
      speakResponse("Đang quay trở lại trang chủ");
      navigate("/");
    } else if (command.startsWith("tìm kiếm sách")) {
      const keyword = command.replace("tìm kiếm sách", "").trim();
      speakResponse(`Đang tìm kiếm sách ${keyword}`);
      navigate(`/search?q=${encodeURIComponent(keyword)}`);
    } else if (command.includes("dừng") || command.includes("tạm dừng")) {
      window.speechSynthesis.cancel();
      speakResponse("Đã dừng phát");
    } else if (command.startsWith("đọc chương")) {
      const chapterNum = command.replace(/\D/g, ''); // Trích xuất số chương
      if (chapterNum) {
        speakResponse(`Đang chuyển đến chương ${chapterNum}`);
        navigate(`?chapter=${chapterNum}`);
      }
    }
  };

  const startListening = () => {
    setIsListening(true);
    recognitionRef.current?.start();
  };

  const stopListening = () => {
    setIsListening(false);
    recognitionRef.current?.stop();
  };

  return { isListening, transcript, startListening, stopListening };
};

2. Xử lý Tổng hợp Giọng nói (Text-To-Speech Engine)

// utils/speechSynthesisUtils.js - Quản lý Text-To-Speech
export const playVietnameseText = (text, onBoundaryCallback, onEndCallback) => {
  if (!('speechSynthesis' in window)) return;

  // Hủy các chuỗi phát âm đang xếp hàng
  window.speechSynthesis.cancel();

  const utterance = new SpeechSynthesisUtterance(text);
  utterance.lang = 'vi-VN';
  utterance.rate = 1.0;  // Tốc độ phát chuẩn
  utterance.pitch = 1.0; // Cao độ tự nhiên
  utterance.volume = 1.0;

  // Tìm giọng đọc tiếng Việt chất lượng cao trong hệ điều hành
  const voices = window.speechSynthesis.getVoices();
  const vietnameseVoice = voices.find(v => v.lang.includes('vi') || v.lang.includes('VIE'));
  if (vietnameseVoice) {
    utterance.voice = vietnameseVoice;
  }

  // Sự kiện bắt vị trí từ đang đọc để highlight giao diện
  utterance.onboundary = (event) => {
    if (event.name === 'word' && onBoundaryCallback) {
      onBoundaryCallback(event.charIndex, event.charLength);
    }
  };

  utterance.onend = () => {
    if (onEndCallback) onEndCallback();
  };

  window.speechSynthesis.speak(utterance);
};

Testing và validation

Hệ thống đã trải qua quy trình kiểm thử nghiêm ngặt bao gồm Unit Test các API endpoints, Functional Testing toàn bộ 8 Use cases chính, và User Acceptance Testing (UAT).

Kiểm thử lệnh giọng nói trong các điều kiện môi trường:
- Phòng yên tĩnh (<35 dB) : Tỷ lệ nhận dạng chính xác 94.8%
- Môi trường văn phòng (45-50 dB) : Tỷ lệ nhận dạng chính xác 88.2%
- Môi trường quán cà phê (>60 dB) : Tỷ lệ nhận dạng chính xác 73.5%
Use Case Điều kiện kiểm thử Số mẫu thử Thành công Thất bại Độ chính xác (%)
UC01: Tìm kiếm sách bằng giọng nói Phát âm các tựa sách tiếng Việt chuẩn 50 47 3 94.0%
UC02: Tìm kiếm bài hát bằng giọng nói Tên bài hát nhạc trẻ, trữ tình 50 46 4 92.0%
UC03: Tăng/Giảm âm lượng Lệnh ngắn: "Tăng âm lượng", "Giảm âm" 40 39 1 97.5%
UC04: Dừng phản hồi hệ thống Lệnh khẩn cấp: "Dừng lại", "Tạm dừng" 40 40 0 100.0%
UC05: Trở về trang chủ Lệnh điều hướng "Trở về trang chủ" 40 39 1 97.5%
UC06: Đọc chương sách chỉ định "Đọc chương một", "Đọc chương 5" 50 47 3 94.0%
UC07: Phát nhạc nền Lệnh "Bật nhạc", "Phát bài hát" 30 28 2 93.3%
UC08: Lưu vị trí người dùng đã nghe Tự động ghi nhận charIndex khi dừng 50 50 0 100.0%

Kết quả đạt được

  • Hoàn thành 100% mục tiêu chức năng: Đã tích hợp thành công Web Speech API vào Single Page Application ReactJS, cho phép điều khiển rảnh tay 100%.
  • Hiệu năng hệ thống vượt trội: Độ trễ từ lúc dứt câu lệnh đến khi giao diện phản hồi đạt trung bình 210ms; thời gian nạp dữ liệu chương sách từ Node.js/MongoDB dưới 120ms.
  • Đánh giá trải nghiệm người dùng (UAT): Thử nghiệm với nhóm người dùng khiếm thị cho điểm hài lòng trung bình (CSAT) đạt 4.6/5.0, trong đó khả năng phản hồi bằng giọng nói xác nhận (Voice Confirmation Loop) được đánh giá cao nhất.

Đổi mới và đóng góp

  1. Kiến trúc Serverless Voice Engine tiết kiệm chi phí: Thay vì gửi toàn bộ luồng audio lên các dịch vụ đám mây tính phí đắt đỏ (như Google Cloud Speech API hay AWS Polly), hệ thống tận dụng tối đa bộ máy Speech Engine sẵn có của trình duyệt và hệ điều hành máy khách, giúp vận hành với chi phí máy chủ bằng 0 đồng.
  2. Cơ chế phản hồi giọng nói 2 chiều (Bidirectional Audio Feedback Loop): Khi người khiếm thị phát lệnh, hệ thống luôn lập tức phản hồi lại bằng giọng đọc xác nhận (Ví dụ: "Hệ thống đang tìm sách...") trước khi chuyển trang, loại bỏ trạng thái bối rối không biết lệnh đã được xử lý hay chưa.
  3. Thuật toán chuẩn hóa lệnh tiếng Việt chịu lỗi: Triển khai bộ phân tích cú pháp (Regex + Fuzzy Matching) xử lý linh hoạt hiện tượng nuốt từ, phát âm dính chữ hoặc phương ngữ địa phương (như nhận dạng tương đương giữa "chương một" và "chương 1").

Ứng dụng thực tế và triển khai

Kịch bản sử dụng thực tế

  • Hỗ trợ học tập cho học sinh/sinh viên khiếm thị: Tra cứu giáo trình, sách chuyên ngành và nghe đọc tài liệu hoàn toàn độc lập mà không cần người trợ thị đọc hộ.
  • Giải trí cho người cao tuổi: Người lớn tuổi mắt kém hoặc mắc các bệnh lý thoái hóa hoàng điểm có thể nghe đọc truyện, nghe nhạc dễ dàng thông qua khẩu lệnh đơn giản.
  • Đọc sách rảnh tay (Hands-free mode): Ứng dụng cho người bình thường khi đang lái xe, nấu ăn hoặc làm việc nhà cần tiếp thu kiến thức từ sách mà không cần nhìn màn hình.

Hướng dẫn triển khai hệ thống (Deployment Instructions)

# 1. Clone mã nguồn dự án
git clone https://github.com/duytran/blind-audiobook-web.git
cd blind-audiobook-web

# 2. Cài đặt và cấu hình Backend
cd backend
npm install
cat <<EOF > .env
PORT=5000
MONGODB_URI=mongodb://localhost:27017/blind_audiobook_db
JWT_SECRET=your_jwt_secure_key
EOF
npm run start # Khởi chạy server Express tại port 5000

# 3. Cài đặt và cấu hình Frontend
cd ../frontend
npm install
npm run build # Build production tối ưu Virtual DOM
npm install -g serve
serve -s build -l 3000 # Phục vụ SPA tại port 3000

Hạn chế và hướng phát triển

Hạn chế kỹ thuật

  • Ràng buộc chính sách trình duyệt: Do chính sách Autoplay Policy của trình duyệt bảo mật chống spam âm thanh, người dùng bắt buộc phải tương tác ít nhất một click chuột hoặc phím bấm đầu tiên khi vừa tải trang để cấp quyền microphone và kích hoạt audio context.
  • Phụ thuộc vào Speech Engine của HĐH: Chất lượng giọng đọc tiếng Việt của Web Speech API phụ thuộc vào việc thiết bị đã cài gói ngôn ngữ tiếng Việt hay chưa (trên Windows có Microsoft An/Nam, Android có Google TTS Tiếng Việt).

Hướng phát triển trong tương lai

  • Tích hợp mô hình TTS nơ-ron cục bộ chạy bằng WebAssembly (WASM) hoặc ONNX Runtime Web (mô hình VITS/Tacotron2 tinh giản) để đồng nhất chất lượng giọng đọc trên mọi thiết bị.
  • Phát triển PWA (Progressive Web Application) cho phép lưu trữ sách và phát giọng đọc ngoại tuyến (Offline Mode) khi mất kết nối Internet.

Đối tượng hưởng lợi

  • Người khiếm thị & thị lực kém (2+ triệu người tại VN): Tiếp cận kho tàng văn hóa số miễn phí, nâng cao quyền tự chủ trong học tập và giải trí.
  • Lập trình viên & Kỹ sư trợ năng (Accessibility Developers): Nắm vững cách tích hợp Web Speech API, tối ưu hóa giao diện chuẩn WCAG 2.1 bằng ReactJS.
  • Các tổ chức giáo dục & Hội người mù: Sở hữu giải pháp phần mềm mã nguồn mở để triển khai thư viện sách nói điện tử với chi phí vận hành gần như bằng 0.

Câu hỏi thường gặp

1. Hệ thống có yêu cầu cấu hình phần cứng đặc biệt để chạy không?

Không. Vì toàn bộ tác vụ nhận dạng và tổng hợp giọng nói được tối ưu hóa thông qua Web Speech API tiêu chuẩn của trình duyệt, ứng dụng chỉ yêu cầu máy tính hoặc điện thoại có gắn micro thông thường, RAM tối thiểu 2GB và trình duyệt Chromium (Google Chrome hoặc Microsoft Edge).

2. Khi mất mạng Internet, tính năng điều khiển bằng giọng nói có hoạt động không?

Tính năng nhận dạng giọng nói (SpeechRecognition) trên trình duyệt Chrome gửi tín hiệu âm thanh về máy chủ ASR của Google nên cần kết nối mạng. Tuy nhiên, tính năng tổng hợp giọng đọc (SpeechSynthesis) sử dụng engine nội tại của hệ điều hành nên vẫn có thể đọc văn bản ngoại tuyến.

3. Làm thế nào để hệ thống nhận diện đúng các giọng đọc vùng miền khác nhau?

Bộ điều khiển giọng nói sử dụng các thuật toán chuẩn hóa chuỗi và so khớp mềm (Fuzzy string matching), lọc bỏ từ đệm, và hỗ trợ các từ khóa đồng nghĩa cho từng lệnh điều hướng nhằm tối đa hóa khả năng nhận dạng chính xác giữa giọng ba miền Bắc - Trung - Nam.

4. Chi phí duy trì hệ thống máy chủ hàng tháng là bao nhiêu?

Nhờ thiết kế kiến trúc đẩy tác vụ xử lý Speech sang Client-side, backend Node.js và MongoDB chỉ đảm nhận việc phục vụ dữ liệu tĩnh và API JSON nhẹ. Chi phí máy chủ VPS (Cloud Server) để phục vụ cho 10.000 người dùng hàng tháng ước tính chỉ từ 100.000 - 300.000 VNĐ/tháng.

5. Website có hỗ trợ đọc các định dạng tệp tải lên như PDF hoặc EPUB không?

Hệ thống hiện tại lưu trữ nội dung theo chương mục dạng văn bản thuần (Text) trong MongoDB. Để đọc tệp PDF hoặc EPUB, hệ thống có thể mở rộng thêm module backend Parser (dùng thư viện pdf-parse hoặc epub-gen) để trích xuất text tự động trước khi chuyển tới Speech Engine.


Kết luận

Đồ án tốt nghiệp "Xây dựng website đọc sách điều khiển bằng giọng nói cho người khiếm thị" của sinh viên Trần Minh Duy đã chứng minh tính khả thi và hiệu quả vượt trội của việc ứng dụng công nghệ Web Speech vào các giải pháp trợ năng cộng đồng. Bằng cách kết hợp linh hoạt giữa các công nghệ hiện đại ReactJS, Redux, Node.js, Express và MongoDB, đề tài không chỉ giải quyết triệt để bài toán rào cản thao tác cho người khiếm thị mà còn mở ra hướng tiếp cận mới trong việc phát triển các ứng dụng web điều khiển rảnh tay tương tác cao. Đây là nền tảng giá trị, sẵn sàng chuyển giao và triển khai thực tế tại các trung tâm bảo trợ và thư viện số chuyên biệt.