Xử lý đầu vào âm thanh từ kính AI bằng tính năng Nhận dạng lời nói tự động

Các thiết bị XR áp dụng
Hướng dẫn này giúp bạn tạo trải nghiệm cho các loại thiết bị XR này.
Kính AI

Bạn có thể sử dụng tính năng Nhận dạng lời nói tự động (ASR) để nhận dạng những câu nói cụ thể của người dùng bằng cách sử dụng SpeechRecognizer và chuyển chúng thành văn bản. SpeechRecognizer được tích hợp vào Android (không cần thêm thư viện) và hoạt động ngay cả khi không có mạng.

Để SpeechRecognizer chuyển lời nói của người dùng thành văn bản, người dùng cần cấp quyền RECORD_AUDIO cho ứng dụng của bạn. Để tìm hiểu cách yêu cầu quyền này cho ứng dụng của bạn, hãy xem phần Yêu cầu quyền truy cập vào phần cứng.

Khởi tạo SpeechRecognizer

Tạo thực thể SpeechRecognizer trong phương thức onCreate() của hoạt động kính AI để có thể dùng trong suốt thời gian hoạt động:

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)

    //The RECORD_AUDIO permission must be granted to your app before instantiation

    speechRecognizer = SpeechRecognizer.createOnDeviceSpeechRecognizer(this)
    speechRecognizer?.setRecognitionListener(recognitionListener)
    ...
}

Định cấu hình RecognitionListener

Phương thức setRecognitionListener() cho phép bạn chỉ định đối tượng nơi các lệnh gọi lại quan trọng được thực hiện, chẳng hạn như trong RecognitionListener.onResults() mà hệ thống gọi sau khi nhận dạng ngôn ngữ được nói.

val recognitionListener = object : RecognitionListener {

    override fun onResults(results: Bundle?) {

        val matches = results?.getStringArrayList(RESULTS_RECOGNITION)
        val confidences = results?.getFloatArray(CONFIDENCE_SCORES)

        val mostConfidentIndex = confidences!!.indices.maxByOrNull { confidences[it] }

        if (mostConfidentIndex != null){
            val spokenText = matches[mostConfidentIndex]

            if (spokenText.equals("Start my Run", ignoreCase = true)){
                // User indicated they want to start a run
            }
        }

    }
    ...
}

Các điểm chính về mã

  • Gói được truy vấn cho 2 mảng. Mảng đầu tiên bao gồm tất cả các kết quả trùng khớp và mảng thứ hai là độ tin cậy của trình nhận dạng lời nói đối với những gì đã nghe được. Các chỉ mục của những mảng này tương ứng với nhau. Kết quả khớp có giá trị độ tin cậy cao nhất (mostConfidentIndex) sẽ được sử dụng.

  • Hệ thống sẽ thực hiện so khớp chuỗi không phân biệt chữ hoa chữ thường để xác định hành động mà người dùng muốn thực hiện.

Các phương pháp thay thế khi so khớp

Trong ví dụ trước, kết quả khớp có giá trị độ tin cậy cao nhất sẽ được dùng. Lựa chọn này có nghĩa là hệ thống phải khá chắc chắn về những gì hệ thống hiểu được từ người dùng, nếu không hệ thống sẽ không gắn cờ kết quả trùng khớp. Khi sử dụng phương pháp này, bạn có thể nhận được kết quả âm tính giả.

Một cách tiếp cận khác là xem xét tất cả các kết quả trùng khớp bất kể độ tin cậy và tìm bất kỳ kết quả trùng khớp nào phù hợp với dữ liệu đầu vào mà bạn đang tìm kiếm. Ngược lại, cách tiếp cận này có thể dẫn đến nhiều trường hợp dương tính giả hơn. Phương pháp bạn nên áp dụng phần lớn phụ thuộc vào trường hợp sử dụng của bạn.

Bắt đầu nghe

Để bắt đầu lắng nghe người dùng, hãy chỉ định ý định ACTION_RECOGNIZE_SPEECH khi gọi startListening().

override fun onStart() {
    super.onStart()

    val intent = Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH).apply {
        putExtra(RecognizerIntent.EXTRA_LANGUAGE_MODEL, RecognizerIntent.LANGUAGE_MODEL_FREE_FORM)
    }

    speechRecognizer?.startListening(intent)

}

Các điểm chính về mã