2010-02-23 34 views
29

Tôi đã sử dụng tính năng nhận dạng giọng nói trên Android và tôi thích nó. Đó là một trong những tính năng được đánh giá cao nhất của khách hàng của tôi. Tuy nhiên, định dạng có phần hạn chế. Bạn phải gọi ý định của người nhận dạng, để nó gửi bản ghi âm cho phiên âm sang google và đợi văn bản quay lại.Nhận dạng giọng nói trên Android với clip âm thanh đã ghi?

Một số ý tưởng của tôi sẽ yêu cầu ghi lại âm thanh trong ứng dụng của tôi và sau đó gửi clip đến google để phiên âm.

Có cách nào để tôi có thể gửi clip âm thanh được xử lý bằng lời nói đến văn bản không?

+0

Bạn có biết liệu điều này có được bao gồm trong API không? Nếu bạn không tìm thấy cách giải quyết cho việc gửi bản ghi của riêng bạn đến Google? – ahsteele

+0

Tôi tự hỏi điều tương tự. Tôi không thể tin rằng Android là mức cao này, nghiêm túc là thiếu API khi nói đến phương tiện truyền thông. – Tom

+0

Android không được cung cấp Bất kỳ thư viện nào để thực hiện việc này. – sravan

Trả lời

3

Rất tiếc, không phải lúc này. Giao diện duy nhất hiện được hỗ trợ bởi dịch vụ nhận dạng giọng nói của Android là RecognizerIntent, giao diện này không cho phép bạn cung cấp dữ liệu âm thanh của riêng mình.

Nếu đây là nội dung bạn muốn xem, hãy gửi yêu cầu tính năng theo số http://b.android.com. Điều này cũng liên quan đến hiện tại issue 4541.

+2

Google có cung cấp bất kỳ cơ sở nào để đánh giá độ chính xác của trình nhận dạng hoặc mô hình ngôn ngữ không? Chúng tôi thường đánh giá độ chính xác của trình nhận dạng bằng cách chạy các mẫu được ghi lại với các phiên âm đã biết. Có cách nào tôi có thể kiểm tra trình nhận dạng Google để biết liệu nó có hiệu quả cho ứng dụng của tôi không? Tôi cũng muốn thử nghiệm hai mô hình ngôn ngữ đối với các mẫu đã được sắp xếp trước của tôi để xác định mẫu nào cung cấp độ chính xác tốt hơn. Có cách nào tôi có thể làm điều này? –

+0

Không công khai, không. –

+1

Không có cách nào một âm thanh cụ thể có thể được lặp lại từ micrô? Một cái gì đó giống như một chuyển hướng socket/file/stream? – Snicolas

1

Theo như tôi biết vẫn không có cách nào để gửi trực tiếp một đoạn âm thanh đến Google để phiên âm. Tuy nhiên, Froyo (API cấp 8) đã giới thiệu lớp SpeechRecognizer, cung cấp quyền truy cập trực tiếp vào dịch vụ nhận dạng giọng nói. Vì vậy, ví dụ, bạn có thể bắt đầu phát lại một clip âm thanh và để Activity bắt đầu trình nhận dạng giọng nói nghe trong nền, sẽ trả về kết quả sau khi hoàn thành phương thức gọi lại người nghe do người dùng xác định.

Mã mẫu sau phải được xác định trong một Hoạt động vì các phương thức của SpeechRecognizer phải được chạy trong chuỗi ứng dụng chính. Ngoài ra, bạn cần thêm quyền RECORD_AUDIO vào tệp AndroidManifest.xml của mình.

 


    boolean available = SpeechRecognizer.isRecognitionAvailable(this); 
    if (available) { 
     SpeechRecognizer sr = SpeechRecognizer.createSpeechRecognizer(this); 
     sr.setRecognitionListener(new RecognitionListener() { 
      @Override 
      public void onResults(Bundle results) { 
       // process results here 
      } 
      // define your other overloaded listener methods here 
     }); 
     Intent intent = new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH); 
     // the following appears to be a requirement, but can be a "dummy" value 
     intent.putExtra(RecognizerIntent.EXTRA_CALLING_PACKAGE, "com.dummy"); 
     // define any other intent extras you want 

     // start playback of audio clip here 

     // this will start the speech recognizer service in the background 
     // without starting a separate activity 
     sr.startListening(intent); 
    } 
 

Bạn cũng có thể xác định dịch vụ nhận dạng giọng nói của riêng bạn bằng cách mở rộng RecognitionService, nhưng điều đó nằm ngoài phạm vi của câu trả lời này :)

+0

Có ai đã thử điều này và đã thành công không? Bạn có phải đợi toàn bộ thời lượng phát lại để có một tệp âm thanh dài để nhận được lời nói không? – rmooney

+0

Mặc dù điều này đã được đăng một thời gian trước đây, tôi đã xác nhận (với nhiều mã hơn) rằng ý tưởng này không hoạt động (trên Android N). Sau khi gọi 'startListening()', đợi lệnh 'RecognitionListener.onReadyForSpeech()' và phát lại đoạn âm thanh (lớn tiếng!). – adelphus

+0

@adelphus bạn có thể tải lên mã nguồn không? – Hamza

10

tôi nhận được một giải pháp đó là làm việc tốt để có bài phát biểu công nhận và ghi âm . Đây là link cho một dự án Android đơn giản mà tôi đã tạo để hiển thị giải pháp đang hoạt động. Ngoài ra, tôi đặt một số màn hình in bên trong dự án để minh họa cho ứng dụng.

Tôi sẽ cố giải thích ngắn gọn cách tiếp cận tôi đã sử dụng. Tôi kết hợp hai tính năng trong dự án đó: Google Speech API và Flac recording.

API Google Speech được gọi thông qua kết nối HTTP. Mike Pultz cung cấp thêm thông tin chi tiết về API:

"(...) API [Google] mới là API truyền trực tiếp song công. Điều này có nghĩa là nó thực sự sử dụng hai kết nối HTTP - một yêu cầu POST để tải lên nội dung dưới dạng luồng chunked "sống" và yêu cầu GET thứ hai để truy cập vào các kết quả, điều này có ý nghĩa hơn đối với các mẫu âm thanh dài hơn hoặc để phát trực tuyến âm thanh ".

Tuy nhiên, API này cần nhận tệp âm thanh FLAC để hoạt động bình thường. Điều đó khiến chúng tôi chuyển sang phần thứ hai: Ghi âm Flac

Tôi đã thực hiện ghi Flac trong dự án đó thông qua trích xuất và điều chỉnh một số đoạn mã và thư viện từ một ứng dụng mã nguồn mở được gọi là AudioBoo. AudioBoo sử dụng mã gốc để ghi lại và chơi định dạng flac.

Do đó, bạn có thể ghi lại âm thanh flac, gửi âm thanh tới API Google Speech, tải văn bản và phát âm thanh vừa được ghi.

Dự án tôi đã tạo có nguyên tắc cơ bản để làm cho nó hoạt động và có thể được cải thiện cho các tình huống cụ thể. Để làm cho nó hoạt động trong một kịch bản khác, bạn cần có khóa Google Speech API, được lấy từ một phần của nhóm Google Chromium-dev. Tôi để lại một chìa khóa trong dự án đó chỉ để cho thấy nó hoạt động, nhưng cuối cùng tôi sẽ loại bỏ nó. Nếu ai đó cần thêm thông tin về nó, hãy cho tôi biết nguyên nhân tôi không thể đặt nhiều hơn 2 liên kết trong bài đăng này.

+0

@Isantsan Tôi cần phải thực hiện chức năng tương tự nhưng tôi đang tìm phần thứ hai (ghi trong FLAC) thực sự khó khăn, bạn có thể giúp tôi. Tôi cũng đã xem xét dự án AudioBoo nhưng không biết bắt đầu từ đâu. –

+0

thực sự có thay đổi trong api và mã trên bị treo khi tôi cố gắng kiểm tra, điều này thực sự có thể có giọng nói ghi lại cũng như lời nói để kiểm tra trong android – KOTIOS

+0

Nếu API đã thay đổi, dự án có thể cần một số chỉnh sửa. Tôi đã không theo kịp với API trong một thời gian. Tuy nhiên, khi câu trả lời này được đăng, mọi thứ đã hoạt động như mô tả. – lsantsan

Các vấn đề liên quan