Chuyển tới nội dung chính

Xử lý sự cố

Các vấn đề về giai đoạn staging của mô hình ngôn ngữ

Hầu hết các vấn đề đều liên quan đến việc staging mô hình ngôn ngữ, điều này có thể gây ra sự cố trong bản build đã đóng gói. Cụ thể, bạn có thể gặp phải các log sau:

LogRuntimeSpeechRecognizer: Error: Language model loading failed: Failed to load the language model asset '/RuntimeSpeechRecognizer/LanguageModels/LanguageModel.LanguageModel'

Để khắc phục điều này, hãy đến Project Settings, sau đó điều hướng đến phần Project -> Packaging. Cuộn xuống và mở rộng danh mục Advanced, và đảm bảo rằng:

  1. DirectoriesToAlwaysCook (được dán nhãn là Additional Asset Directories to Cook) có một mục cho /RuntimeSpeechRecognizer/LanguageModels bên trong. Việc này được plugin tự động thực hiện trong lúc biên tập, nhưng một số người dùng đã báo cáo rằng họ phải làm thủ công, vì vậy hãy đảm bảo kiểm tra. Điều này cần thiết để đảm bảo rằng asset mô hình ngôn ngữ luôn được đưa vào bản build đóng gói.

Additional Asset Directories to Cook

  1. bCookMapsOnly được đặt thành false. Nếu đặt thành true, nó sẽ bỏ qua thuộc tính trước đó và có khả năng asset mô hình ngôn ngữ sẽ không được đưa vào staging đúng cách. Việc này cũng được plugin tự động thực hiện, nhưng để chắc chắn, vui lòng kiểm tra biến này theo cách thủ công.

Additional Asset Directories to Cook

Sự cố trên Android và iOS

Trong một số trường hợp trên Android và iOS, sự cố có thể xảy ra trong thời gian chạy (chẳng hạn như khi kiểm thử TestFlight). Nguyên nhân là do các yêu cầu cấp phát bộ nhớ của thư viện cơ sở whisper.cpp xung đột với bộ cấp phát mặc định của Unreal Engine trên các nền tảng này. Trên các nền tảng khác, FMalloc mặc định sử dụng bộ cấp phát ANSI, vì vậy vấn đề này chỉ xảy ra trên Android và iOS.

Để giải quyết vấn đề này, bạn cần buộc bộ cấp phát ANSI trong tệp Target.cs của dự án:

Dành cho Unreal Engine 5.5 trở về trước:

  • Dự án của bạn phải sử dụng engine được build từ mã nguồn (không phải bản binary được biên dịch sẵn)
  • Thêm dòng sau vào tệp Target.cs của bạn:
GlobalDefinitions.Add("FORCE_ANSI_ALLOCATOR=1");

Đối với Unreal Engine 5.6 trở lên:

  • Hoạt động với cả bản dựng engine từ mã nguồn và bản dựng engine biên dịch sẵn
  • Thêm hai dòng sau vào tệp Target.cs của bạn:
bOverrideBuildEnvironment = true;
StaticAllocator = StaticAllocatorType.Ansi;

Điều này buộc Unreal Engine sử dụng bộ cấp phát ANSI trên Android và iOS, khớp với bộ cấp phát được whisper.cpp sử dụng.

ghi chú

Cách khắc phục này giải quyết xung đột bộ cấp phát đặc thù của whisper.cpp. Nếu dự án của bạn sử dụng tiện ích mở rộng Vosk làm nhà cung cấp trên Android, bước này không bắt buộc.