Nhận dạng giọng nói tốt hơn. Cách biến chuỗi được nhận dạng thành lệnh. Tạo phụ đề cho phim

“Tôi muốn nói ngay rằng đây là lần đầu tiên tôi làm việc với dịch vụ nhận dạng. Và do đó, tôi sẽ cho bạn biết về các dịch vụ theo quan điểm của một người bình thường,” chuyên gia của chúng tôi lưu ý, “để kiểm tra khả năng nhận dạng, tôi đã sử dụng ba hướng dẫn: Google, Yandex và Azure.”

Google

Tập đoàn CNTT nổi tiếng đề nghị thử nghiệm trực tuyến sản phẩm Google Cloud Platform của mình. Bất cứ ai cũng có thể dùng thử dịch vụ miễn phí. Bản thân sản phẩm rất tiện lợi và dễ sử dụng.

Ưu điểm:

  • hỗ trợ hơn 80 ngôn ngữ;
  • xử lý tên nhanh;
  • nhận dạng chất lượng cao trong điều kiện giao tiếp kém và có âm thanh bên ngoài.

Nhược điểm:

  • có khó khăn trong việc nhận dạng tin nhắn có trọng âm và phát âm kém, khiến bất kỳ ai không phải là người bản xứ khó sử dụng hệ thống;
  • thiếu hỗ trợ kỹ thuật rõ ràng cho dịch vụ.

Yandex

Nhận dạng giọng nói từ Yandex có sẵn trong một số tùy chọn:

  • Đám mây
  • Thư viện để truy cập từ các ứng dụng di động
  • Phiên bản "đóng hộp"
  • API JavaScript

Nhưng hãy khách quan. Chúng tôi chủ yếu quan tâm không phải đến sự đa dạng của khả năng sử dụng mà là chất lượng nhận dạng giọng nói. Vì vậy, chúng tôi đã sử dụng phiên bản dùng thử của SpeechKit.

Ưu điểm:

  • dễ sử dụng và cấu hình;
  • nhận dạng văn bản tốt bằng tiếng Nga;
  • hệ thống cung cấp một số tùy chọn trả lời và thông qua mạng lưới thần kinh, cố gắng tìm ra tùy chọn giống với sự thật nhất.

Nhược điểm:

  • Trong quá trình xử lý luồng, một số từ có thể được xác định không chính xác.

Azure

Azure được phát triển bởi Microsoft. Nó nổi bật so với các chất tương tự do giá của nó. Tuy nhiên, hãy chuẩn bị đối mặt với một số khó khăn. Các hướng dẫn được trình bày trên trang web chính thức không đầy đủ hoặc lỗi thời. Chúng tôi không thể khởi chạy dịch vụ một cách đầy đủ nên chúng tôi phải sử dụng cửa sổ khởi chạy của bên thứ ba. Tuy nhiên, ngay cả ở đây bạn cũng sẽ cần khóa dịch vụ Azure để thử nghiệm.

Ưu điểm:

  • So với các dịch vụ khác, Azure xử lý tin nhắn rất nhanh theo thời gian thực.

Nhược điểm:

  • hệ thống rất nhạy cảm với giọng nói và gặp khó khăn trong việc nhận dạng giọng nói của những người không phải là người bản xứ;
  • Hệ thống chỉ hoạt động bằng tiếng Anh.

Đánh giá kết quả:

Sau khi cân nhắc tất cả ưu và nhược điểm, chúng tôi quyết định sử dụng Yandex. SpeechKit đắt hơn Azure nhưng rẻ hơn Google Cloud Platform. Chương trình của Google đã không ngừng cải thiện chất lượng và độ chính xác của nhận dạng. Dịch vụ này tự cải thiện bằng cách sử dụng công nghệ máy học. Tuy nhiên, khả năng nhận dạng các từ và cụm từ tiếng Nga của Yandex ở một mức độ cao hơn.

Làm thế nào để sử dụng nhận dạng giọng nói trong kinh doanh?

Có rất nhiều lựa chọn để sử dụng sự công nhận, nhưng chúng tôi sẽ tập trung sự chú ý của bạn vào lựa chọn sẽ ảnh hưởng chủ yếu đến doanh số bán hàng của công ty bạn. Để rõ ràng, chúng ta hãy xem quá trình nhận dạng bằng một ví dụ thực tế.

Cách đây không lâu, một dịch vụ SaaS nổi tiếng đã trở thành khách hàng của chúng tôi (theo yêu cầu của công ty, tên dịch vụ không được tiết lộ). Với sự trợ giúp của F1Golos, họ đã ghi lại hai video âm thanh, một trong số đó nhằm mục đích kéo dài tuổi thọ của những khách hàng nồng nhiệt, video còn lại - để xử lý các yêu cầu của khách hàng.

Làm cách nào để kéo dài tuổi thọ của khách hàng bằng nhận dạng giọng nói?

Thông thường, các dịch vụ SaaS hoạt động với phí đăng ký hàng tháng. Sớm hay muộn thì thời gian sử dụng thử hoặc lưu lượng truy cập phải trả phí cũng kết thúc. Khi đó cần phải mở rộng dịch vụ. Công ty quyết định cảnh báo người dùng về việc kết thúc lưu lượng truy cập 2 ngày trước khi hết thời hạn sử dụng. Người dùng đã được thông báo qua thư thoại. Đoạn video có âm thanh như thế này: “Chào buổi chiều, chúng tôi xin nhắc bạn rằng thời gian trả phí sử dụng dịch vụ XXX của bạn sắp kết thúc. Muốn gia hạn dịch vụ thì nói có; muốn hủy dịch vụ đã cung cấp thì nói không.”

Cuộc gọi từ những người dùng nói các từ mã: CÓ, GIA HẠN, TÔI MUỐN, CHI TIẾT THÊM; được tự động chuyển giao cho các nhà điều hành của công ty. Như vậy, khoảng 18% người dùng đã gia hạn đăng ký chỉ sau một cuộc gọi.

Làm cách nào để đơn giản hóa hệ thống xử lý dữ liệu bằng nhận dạng giọng nói?

Đoạn âm thanh thứ hai, do cùng một công ty tung ra, lại có tính chất khác. Họ đã sử dụng tin nhắn thoại để giảm chi phí xác minh số điện thoại. Trước đây, họ đã xác minh số người dùng bằng cách sử dụng cuộc gọi tự động. Robot yêu cầu người dùng nhấn một số phím nhất định trên điện thoại. Tuy nhiên, với sự ra đời của công nghệ nhận dạng, công ty đã thay đổi chiến thuật. Nội dung của video mới như sau: “Bạn đã đăng ký trên cổng XXX, nếu bạn xác nhận đăng ký của mình, hãy nói đồng ý. Nếu bạn không gửi yêu cầu đăng ký, hãy nói không." Nếu khách hàng thốt ra những từ: CÓ, TÔI XÁC NHẬN, AHA hoặc KHÓA HỌC, dữ liệu về điều này sẽ ngay lập tức được chuyển đến hệ thống CRM của công ty. Và yêu cầu đăng ký đã được xác nhận tự động sau vài phút. Sự ra đời của công nghệ nhận dạng đã giảm thời gian của một cuộc gọi từ 30 xuống còn 17 giây. Như vậy, công ty đã giảm được chi phí gần 2 lần.

Nếu bạn quan tâm đến những cách khác để sử dụng nhận dạng giọng nói hoặc muốn tìm hiểu thêm về nhắn tin thoại, hãy nhấp vào liên kết. Trên F1Golos, bạn có thể đăng ký nhận bản tin đầu tiên miễn phí và tự mình tìm hiểu cách hoạt động của các công nghệ nhận dạng mới.

Chúng tôi đã được hỏi một câu hỏi trên Facebook:
“Để làm việc với văn bản, tôi cần chép lại 3 giờ ghi âm giọng nói. Tôi đã cố tải một tệp âm thanh có hình ảnh lên YouTube và sử dụng bộ giải mã văn bản của họ, nhưng hóa ra đó lại là một loại gobbledygook. Hãy cho tôi biết, làm thế nào tôi có thể giải quyết vấn đề này về mặt kỹ thuật? Cảm ơn!
Alexander Konovalov"

Alexander, có một giải pháp kỹ thuật đơn giản - nhưng kết quả sẽ chỉ phụ thuộc vào chất lượng bản ghi của bạn. Hãy để tôi giải thích chất lượng mà chúng ta đang nói đến.

Trong những năm gần đây, công nghệ nhận dạng giọng nói của Nga đã có những tiến bộ đáng kể. Tỷ lệ lỗi nhận dạng đã giảm đến mức việc “phát âm” văn bản khác trong một ứng dụng di động hoặc dịch vụ Internet đặc biệt trở nên dễ dàng hơn, sửa từng “lỗi in sai” theo cách thủ công - hơn là gõ toàn bộ văn bản trên bàn phím.

Nhưng để trí tuệ nhân tạo của hệ thống nhận dạng thực hiện công việc của mình, người dùng phải thực hiện công việc của mình. Cụ thể: nói vào micro rõ ràng và đều đặn, tránh tiếng ồn xung quanh mạnh, nếu có thể hãy sử dụng tai nghe âm thanh nổi hoặc micro ngoài gắn vào lỗ khuyết (để chất lượng nhận diện, điều quan trọng là micro luôn ở cùng khoảng cách với micro). môi của bạn và bản thân bạn nói với cùng một âm lượng ). Đương nhiên, loại thiết bị âm thanh càng cao thì càng tốt.

Không khó để tuân thủ các điều kiện này nếu thay vì truy cập trực tiếp vào dịch vụ nhận dạng giọng nói trên Internet, bạn sử dụng máy ghi âm làm thiết bị trung gian. Nhân tiện, một “thư ký riêng” như vậy đặc biệt không thể thiếu khi bạn không có quyền truy cập Internet. Đương nhiên, tốt hơn hết bạn nên sử dụng ít nhất một máy ghi âm chuyên nghiệp rẻ tiền hơn là thiết bị ghi âm được tích hợp trong máy nghe nhạc MP3 hoặc điện thoại thông minh giá rẻ. Điều này sẽ mang lại cơ hội tốt hơn nhiều để “cung cấp” các bản ghi nhận được cho dịch vụ nhận dạng giọng nói.

Thật khó, nhưng bạn có thể thuyết phục người đối thoại mà bạn đang phỏng vấn tuân theo các quy tắc này (một mẹo nữa: nếu bạn không có micrô gắn ngoài trong bộ đồ nghề của mình, ít nhất hãy để máy ghi âm bên cạnh người đối thoại, chứ không phải với bạn).

Nhưng theo tôi, việc “ghi chép” ở mức độ cần thiết một cách tự động là điều gần như không thực tế (rốt cuộc, bạn sẽ không thể kiểm soát được bài phát biểu của diễn giả và phản ứng của người nghe). Mặc dù có một lựa chọn khá thú vị: biến các bài giảng và sách nói được ghi âm chuyên nghiệp thành văn bản (nếu chúng không bị chồng nhạc nền và tiếng ồn).

Hãy hy vọng rằng chất lượng ghi âm giọng nói của bạn đủ cao để có thể phiên âm thành chế độ tự động.

Nếu không, với hầu hết mọi chất lượng ghi âm, bạn có thể giải mã ở chế độ bán tự động.

Ngoài ra, trong một số trường hợp, nghịch lý thay, việc giải mã trong chế độ thủ công. Chính xác hơn là phiên bản mà bản thân tôi đã sử dụng suốt chục năm nay. 🙂

Vì vậy, theo thứ tự.

1. Nhận dạng giọng nói tự động

Nhiều người khuyên nên ghi âm giọng nói trên YouTube. Nhưng phương pháp này buộc người dùng phải lãng phí thời gian ở giai đoạn tải tệp âm thanh và hình nền, sau đó trong quá trình xóa văn bản thu được khỏi dấu thời gian. Trong khi đó, thật dễ dàng để tiết kiệm thời gian này. 🙂

Bạn có thể nhận dạng bản ghi âm trực tiếp từ máy tính của mình bằng khả năng của một trong các dịch vụ Internet chạy trên công cụ nhận dạng của Google (tôi khuyên dùng Speechpad.ru hoặc Speechlogger.com). Tất cả những gì bạn cần làm là thực hiện một thủ thuật nhỏ: thay vì giọng nói của bạn được phát từ micrô, hãy chuyển hướng luồng âm thanh do trình phát trên máy tính của bạn phát sang dịch vụ.

Thủ thuật này được gọi là phần mềm trộn âm thanh nổi (nó thường được sử dụng để ghi nhạc trên máy tính hoặc phát từ máy tính lên Internet).

Bộ trộn âm thanh nổi đã được đưa vào Windows XP - nhưng đã bị các nhà phát triển loại bỏ khỏi các phiên bản sau của hệ điều hành này (họ nói vì mục đích bảo vệ bản quyền: để ngăn người chơi ăn cắp nhạc từ trò chơi, v.v.). Tuy nhiên, bộ trộn âm thanh nổi thường đi kèm với trình điều khiển card âm thanh (ví dụ: thẻ Realtec được tích hợp trong bo mạch chủ). Nếu bạn không tìm thấy bộ trộn âm thanh nổi trên PC bằng các ảnh chụp màn hình bên dưới, hãy thử cài đặt lại trình điều khiển âm thanh từ đĩa CD đi kèm với bo mạch chủ hoặc từ trang web của nhà sản xuất.

Nếu cách này không hiệu quả, hãy cài đặt một chương trình thay thế trên máy tính của bạn. Ví dụ: Thiết bị âm thanh ảo VB-CABLE miễn phí: chủ sở hữu dịch vụ Speechpad.ru nêu trên khuyên bạn nên sử dụng nó.

Bước đầu tiên Bạn phải tắt micrô để sử dụng ở chế độ ghi và thay vào đó hãy bật bộ trộn âm thanh nổi (hoặc VB-CABLE ảo).

Để thực hiện việc này, hãy nhấp vào biểu tượng loa ở góc dưới bên phải (gần đồng hồ) - hoặc chọn phần “Âm thanh” trong “Bảng điều khiển”. Trong tab “Ghi” của cửa sổ mở ra, nhấp chuột phải và chọn các hộp bên cạnh “Hiển thị các thiết bị bị ngắt kết nối” và “Hiển thị các thiết bị bị ngắt kết nối”. Nhấp chuột phải vào biểu tượng micrô và chọn “Ngắt kết nối” (nói chung, ngắt kết nối tất cả các thiết bị được đánh dấu bằng biểu tượng màu xanh lá cây).

Nhấp chuột phải vào biểu tượng bộ trộn âm thanh nổi và chọn “Bật”. Biểu tượng màu xanh lục sẽ xuất hiện trên biểu tượng, cho biết bộ trộn âm thanh nổi đã trở thành thiết bị mặc định.

Nếu bạn quyết định sử dụng VB-CABLE, hãy kích hoạt nó trong tab “Ghi âm” theo cách tương tự.

Và cả trong tab “Phát lại”.

Bước thứ hai. Bật ghi âm trong bất kỳ trình phát nào (nếu bạn cần chép lại đoạn âm thanh của video, bạn cũng có thể khởi chạy trình phát video). Đồng thời, tải xuống dịch vụ Speechpad.ru trong trình duyệt Chrome và nhấp vào nút “Bật ghi âm” trong đó. Nếu bản ghi có chất lượng đủ cao, bạn sẽ thấy dịch vụ chuyển lời nói thành văn bản có ý nghĩa gần với bản gốc trước mắt bạn như thế nào. Đúng, không có dấu chấm câu mà bạn sẽ phải tự đặt.

Tôi khuyên bạn nên sử dụng AIMP làm trình phát âm thanh, điều này sẽ được thảo luận chi tiết hơn trong chương phụ thứ ba. Bây giờ tôi sẽ chỉ lưu ý rằng trình phát này cho phép bạn làm chậm quá trình ghi mà không làm biến dạng giọng nói, cũng như sửa một số lỗi khác. Điều này phần nào có thể cải thiện khả năng nhận dạng các bản ghi có chất lượng không cao. (Đôi khi người ta thậm chí còn khuyên nên xử lý trước các bản ghi âm xấu trong các chương trình chỉnh sửa âm thanh chuyên nghiệp. Tuy nhiên, theo tôi, đây là một công việc quá tốn thời gian đối với hầu hết người dùng, những người sẽ gõ văn bản bằng tay nhanh hơn nhiều. :)

2. Nhận dạng giọng nói bán tự động

Mọi thứ đều đơn giản ở đây. Nếu bản ghi có chất lượng kém và nhận dạng "nghẹt thở" hoặc dịch vụ tạo ra quá nhiều lỗi, hãy tự giải quyết vấn đề bằng cách "nhúng" vào chuỗi: "trình phát âm thanh - phát thanh viên - hệ thống nhận dạng".

Nhiệm vụ của bạn: nghe giọng nói đã ghi âm bằng tai nghe, đồng thời đọc chính tả qua micrô tới dịch vụ nhận dạng trực tuyến. (Tất nhiên, bạn không cần chuyển từ micrô sang bộ trộn âm thanh nổi hoặc cáp ảo trong danh sách thiết bị ghi âm như phần trước). Và để thay thế cho các dịch vụ Internet được đề cập ở trên, bạn có thể sử dụng các ứng dụng điện thoại thông minh như Yandex.Dicovka miễn phí hoặc chức năng đọc chính tả trên iPhone có hệ điều hành iOS 8 trở lên.

Tôi lưu ý rằng ở chế độ bán tự động, bạn có cơ hội ra lệnh ngay lập tức các dấu chấm câu, những dịch vụ này chưa có khả năng đặt ở chế độ tự động.

Nếu bạn quản lý để đọc chính tả đồng bộ với bản ghi đang phát trên trình phát, thì quá trình phiên âm sơ bộ sẽ mất gần như nhiều thời gian bằng chính bản ghi (không tính thời gian tiếp theo dành cho việc sửa lỗi chính tả và ngữ pháp). Nhưng ngay cả khi làm việc theo sơ đồ: “nghe một cụm từ - đọc chính tả - nghe một cụm từ - đọc chính tả” có thể giúp bạn tiết kiệm thời gian khá nhiều so với cách gõ truyền thống.

Tôi khuyên bạn nên sử dụng AIMP giống như trình phát âm thanh. Trước tiên, bạn có thể sử dụng nó để làm chậm quá trình phát lại đến tốc độ mà bạn cảm thấy thoải mái khi làm việc ở chế độ đọc chính tả đồng thời. Thứ hai, trình phát này có thể trả lại bản ghi âm trong một số giây nhất định: điều này đôi khi cần thiết để nghe rõ hơn một cụm từ khó đọc.

3. Bản ghi âm giọng nói thủ công

Trong thực tế, bạn có thể cảm thấy mệt mỏi với việc đọc chính tả ở chế độ bán tự động quá nhanh. Hoặc bạn mắc quá nhiều sai sót với dịch vụ. Hoặc, nhờ kỹ năng gõ nhanh, bạn có thể tạo văn bản đã sửa sẵn trên bàn phím dễ dàng hơn nhiều so với việc sử dụng chính tả. Hoặc máy ghi âm, micrô trên tai nghe âm thanh nổi hoặc card âm thanh của bạn không cung cấp chất lượng âm thanh có thể chấp nhận được đối với dịch vụ. Hoặc có thể đơn giản là bạn không có khả năng đọc to trong cơ quan hoặc văn phòng tại nhà.

Trong tất cả những trường hợp này, phương pháp giải mã thủ công độc quyền của tôi sẽ giúp bạn (nghe bản ghi trong AIMP - nhập văn bản vào Word). Nó sẽ giúp bạn chuyển bài viết của mình thành văn bản nhanh hơn nhiều nhà báo chuyên nghiệp có tốc độ gõ tương tự như bạn! Đồng thời, bạn sẽ tốn ít công sức và thần kinh hơn họ rất nhiều. 🙂

Nguyên nhân chính khiến năng lượng và thời gian bị lãng phí khi ghi âm theo cách truyền thống là gì? Do người dùng thực hiện nhiều động tác không cần thiết.

Người dùng liên tục tiếp cận với máy ghi âm hoặc bàn phím máy tính. Tôi đã dừng phát lại - gõ đoạn đã nghe vào trình soạn thảo văn bản - bắt đầu phát lại - tua lại đoạn ghi âm khó đọc - v.v., v.v.

Việc sử dụng trình phát phần mềm thông thường trên máy tính không giúp quá trình này dễ dàng hơn nhiều: người dùng phải liên tục thu nhỏ/mở rộng Word, dừng/khởi động trình phát và thậm chí di chuyển thanh trượt trình phát qua lại để tìm một đoạn không đọc được rồi quay lại. đến vị trí được nghe cuối cùng trong bản ghi.

Để giảm thiểu những điều này và thời gian lãng phí khác, các công ty CNTT chuyên ngành đang phát triển các bộ chuyển đổi phần mềm và phần cứng. Đây là những giải pháp khá tốn kém dành cho các chuyên gia - nhà báo, người viết tốc ký của tòa án, điều tra viên, v.v. Nhưng trên thực tế, đối với mục đích của chúng tôi chỉ cần có hai chức năng:

  • khả năng làm chậm quá trình phát lại bản ghi âm giọng nói mà không làm biến dạng hoặc giảm âm lượng (nhiều người chơi cho phép bạn làm chậm tốc độ phát lại - nhưng, than ôi, trong trường hợp này, giọng nói của con người biến thành giọng nói robot quái dị, điều này rất khó để nhận thức bằng tai trong một thời gian dài);
  • khả năng dừng ghi hoặc quay lại trong một số giây được chỉ định và quay lại mà không dừng gõ hoặc thu nhỏ cửa sổ soạn thảo văn bản.

Trong thời gian của mình, tôi đã thử nghiệm hàng chục chương trình âm thanh - và chỉ tìm thấy hai ứng dụng trả phí có sẵn đáp ứng các yêu cầu này. Tôi đã mua một trong số họ. Tôi đã tìm kiếm thêm một chút cho các độc giả thân yêu của mình 🙂 - và tìm thấy một giải pháp miễn phí tuyệt vời - trình phát AIMP mà bản thân tôi vẫn sử dụng.

“Sau khi bạn nhập cài đặt AIMP, hãy tìm phần Khóa chung và cấu hình lại phím Dừng/Bắt đầu cho Escape (Esc). Tin tôi đi, đây là cách tiện lợi nhất vì bạn không cần phải suy nghĩ về điều đó và ngón tay của bạn sẽ không vô tình chạm vào các phím khác. Đặt các mục “Lùi lại một chút” và “Tiến về phía trước một chút” tương ứng bằng phím Ctrl + phím con trỏ lùi/tiến (bạn có bốn phím mũi tên trên bàn phím - hãy chọn hai trong số đó). Chức năng này cần thiết để nghe lại đoạn cuối cùng hoặc tiến về phía trước một chút.

Sau đó, bằng cách mở bộ chỉnh âm, bạn có thể giảm giá trị Tốc độ và Nhịp độ cũng như tăng giá trị Cao độ. Đồng thời, bạn sẽ nhận thấy tốc độ phát lại sẽ chậm lại nhưng cao độ của giọng nói (nếu bạn chọn tốt giá trị “Cao độ”) sẽ không thay đổi. Chọn hai tham số này để bạn có thể gõ văn bản gần như đồng thời, chỉ thỉnh thoảng mới dừng lại.

Khi mọi thứ đã được thiết lập xong, việc gõ phím sẽ khiến bạn mất ít thời gian hơn và tay cũng bớt mỏi hơn. Bạn sẽ có thể chép lại bản ghi âm một cách bình tĩnh và thoải mái, thực tế mà không cần nhấc ngón tay lên khi gõ trên bàn phím.”

Tôi chỉ có thể bổ sung thêm những gì đã nói rằng nếu bản ghi không có chất lượng rất cao, bạn có thể thử cải thiện khả năng phát lại của nó bằng cách thử nghiệm các cài đặt khác trong Trình quản lý hiệu ứng âm thanh AIMP.

Và số giây mà bạn sẽ thuận tiện nhất để di chuyển lùi hoặc tiến qua bản ghi bằng phím nóng - được đặt trong phần “Trình phát” của cửa sổ “Cài đặt” (có thể được gọi bằng cách nhấn “Ctrl + phím nóng P”).

Tôi chúc bạn tiết kiệm nhiều thời gian hơn cho những công việc thường ngày - và sử dụng nó một cách hiệu quả cho những việc quan trọng! 🙂 Và đừng quên bật micro trong danh sách thiết bị ghi âm khi bạn sẵn sàng nói chuyện trên Skype nhé! 😉

3 cách để ghi âm giọng nói: nhận dạng giọng nói, đọc chính tả, chế độ thủ công

Con người luôn bị thu hút bởi ý tưởng điều khiển máy móc bằng ngôn ngữ tự nhiên. Có lẽ điều này một phần là do mong muốn của con người ở TRÊN máy móc. Có thể nói, để cảm thấy vượt trội. Nhưng thông điệp chính là đơn giản hóa sự tương tác của con người với trí tuệ nhân tạo. Điều khiển bằng giọng nói trong Linux đã được triển khai với nhiều mức độ thành công khác nhau trong gần một phần tư thế kỷ. Hãy xem xét vấn đề và cố gắng tiếp cận hệ điều hành của chúng ta càng gần càng tốt.

Mấu chốt của vấn đề

Các hệ thống làm việc bằng giọng nói của con người dành cho Linux đã có từ lâu và có rất nhiều hệ thống trong số đó. Nhưng không phải tất cả đều xử lý chính xác lời nói tiếng Nga. Một số đã bị các nhà phát triển bỏ rơi hoàn toàn. Trong phần đầu tiên của bài đánh giá, chúng tôi sẽ nói trực tiếp về hệ thống nhận dạng giọng nói và trợ lý giọng nói và trong phần thứ hai, chúng tôi sẽ xem xét các ví dụ cụ thể về việc sử dụng chúng trên máy tính để bàn Linux.

Cần phải phân biệt giữa chính các hệ thống nhận dạng giọng nói (dịch giọng nói thành văn bản hoặc thành lệnh), chẳng hạn như CMU Sphinx, Julius, cũng như các ứng dụng dựa trên hai công cụ này và trợ lý giọng nói đã trở nên phổ biến. với sự phát triển của điện thoại thông minh và máy tính bảng. Đúng hơn, đây là sản phẩm phụ của hệ thống nhận dạng giọng nói, sự phát triển hơn nữa của chúng và việc thực hiện tất cả các ý tưởng thành công về nhận dạng giọng nói, ứng dụng của chúng trong thực tế. Có rất ít trong số này dành cho máy tính để bàn Linux.

Bạn cần hiểu rằng công cụ nhận dạng giọng nói và giao diện của nó là hai thứ khác nhau. Đây là nguyên tắc cơ bản của kiến ​​trúc Linux - chia một cơ chế phức tạp thành các thành phần đơn giản hơn. Công việc khó khăn nhất rơi vào vai các động cơ. Đây thường là một chương trình bảng điều khiển nhàm chán chạy mà người dùng không chú ý. Người dùng tương tác chủ yếu với giao diện chương trình. Việc tạo giao diện không khó nên các nhà phát triển tập trung nỗ lực chính vào việc phát triển các công cụ nhận dạng giọng nói nguồn mở.

Chuyện gì đã xảy ra trước đây

Trong lịch sử, tất cả các hệ thống xử lý giọng nói trong Linux đều phát triển chậm và có bước nhảy vọt. Nguyên nhân không phải là sự quanh co của các nhà phát triển mà là mức độ tiếp cận môi trường phát triển cao. Viết mã hệ thống để làm việc bằng giọng nói đòi hỏi một lập trình viên có trình độ cao. Do đó, trước khi bắt đầu tìm hiểu các hệ thống giọng nói trong Linux, cần phải thực hiện một chuyến tham quan ngắn gọn về lịch sử. IBM đã từng có một hệ điều hành tuyệt vời như vậy - OS/2 Warp (Merlin). Nó ra mắt vào tháng 9 năm 1996. Ngoài thực tế là nó có những ưu điểm rõ ràng so với tất cả các hệ điều hành khác, OS/2 còn được trang bị một hệ thống nhận dạng giọng nói rất tiên tiến - IBM ViaVoice. Vào thời điểm đó, điều này thật tuyệt vời vì hệ điều hành này chạy trên các hệ thống có bộ xử lý 486 với RAM 8 MB (!).

Như bạn đã biết, OS/2 đã thua Windows, nhưng nhiều thành phần của nó vẫn tiếp tục tồn tại độc lập. Một trong những thành phần này chính là IBM ViaVoice, đã trở thành một sản phẩm độc lập. Vì IBM luôn yêu thích Linux nên ViaVoice đã được chuyển sang hệ điều hành này, hệ điều hành này đã mang lại cho đứa con tinh thần của Linus Torvalds hệ thống nhận dạng giọng nói tiên tiến nhất vào thời điểm đó.

Thật không may, số phận của ViaVoice lại không diễn ra theo cách mà người dùng Linux mong muốn. Bản thân động cơ đã được phân phối miễn phí, nhưng nguồn của nó vẫn bị đóng. Năm 2003, IBM đã bán bản quyền công nghệ này cho công ty Nuance của Canada-Mỹ. Nuance, công ty có lẽ đã phát triển sản phẩm nhận dạng giọng nói thương mại thành công nhất - Dragon Natural Speeking, vẫn còn tồn tại cho đến ngày nay. Đây gần như là dấu chấm hết cho lịch sử đầy vinh quang của ViaVoice trên Linux. Trong thời gian ngắn ViaVoice miễn phí và có sẵn cho người dùng Linux, một số giao diện đã được phát triển cho nó, chẳng hạn như Xvoice. Tuy nhiên, dự án đã bị bỏ hoang từ lâu và hiện tại gần như không thể hoạt động được.

THÔNG TIN

Phần khó nhất trong nhận dạng giọng nói của máy là ngôn ngữ tự nhiên của con người.

Hôm nay sao?

Hôm nay mọi thứ đã tốt hơn nhiều. Trong những năm gần đây, sau khi phát hiện ra các nguồn API Google Voice, tình hình phát triển hệ thống nhận dạng giọng nói trong Linux đã được cải thiện đáng kể và chất lượng nhận dạng đã tăng lên. Ví dụ: dự án Nhận dạng giọng nói Linux dựa trên API Google Voice cho thấy kết quả rất tốt đối với tiếng Nga. Tất cả các công cụ đều hoạt động gần giống nhau: đầu tiên, âm thanh từ micrô của thiết bị người dùng sẽ đi vào hệ thống nhận dạng, sau đó giọng nói được xử lý trên thiết bị cục bộ hoặc bản ghi âm sẽ được gửi đến máy chủ từ xa để xử lý thêm. Tùy chọn thứ hai phù hợp hơn cho điện thoại thông minh hoặc máy tính bảng. Trên thực tế, đây chính xác là cách hoạt động của các công cụ thương mại - Siri, Google Now và Cortana.

Trong số nhiều công cụ làm việc với giọng nói của con người, có một số công cụ hiện đang hoạt động.

CẢNH BÁO

Việc cài đặt nhiều hệ thống nhận dạng giọng nói được mô tả là một nhiệm vụ không hề đơn giản!

Nhân sư CMU

Phần lớn sự phát triển của CMU Sphinx diễn ra tại Đại học Carnegie Mellon. Vào những thời điểm khác nhau, cả Viện Công nghệ Massachusetts và tập đoàn Sun Microsystems hiện đã qua đời đều cùng thực hiện dự án này. Các nguồn động cơ được phân phối theo giấy phép BSD và có sẵn cho cả mục đích thương mại và phi thương mại. Sphinx không phải là một ứng dụng tùy chỉnh mà là một bộ công cụ có thể được sử dụng để phát triển các ứng dụng cho người dùng cuối. Sphinx hiện là dự án nhận dạng giọng nói lớn nhất. Nó bao gồm một số phần:

  • Pocketsphinx là một chương trình nhỏ, nhanh, xử lý âm thanh, mô hình âm thanh, ngữ pháp và từ điển;
  • Thư viện Sphinxbase, cần thiết để Pocketsphinx hoạt động;
  • Sphinx4 - thư viện nhận dạng thực tế;
  • Sphinxtrain là một chương trình đào tạo các mô hình âm thanh (bản ghi âm giọng nói của con người).

Dự án đang phát triển chậm nhưng chắc chắn. Và quan trọng nhất là nó có thể được sử dụng trong thực tế. Và không chỉ trên PC mà còn trên thiết bị di động. Ngoài ra, động cơ hoạt động rất tốt với giọng nói tiếng Nga. Nếu bạn có đôi tay thẳng và một cái đầu tỉnh táo, bạn có thể thiết lập tính năng nhận dạng giọng nói tiếng Nga bằng Sphinx để điều khiển các thiết bị gia dụng hoặc ngôi nhà thông minh. Trên thực tế, bạn có thể biến một căn hộ bình thường thành một ngôi nhà thông minh, đó là những gì chúng tôi sẽ làm trong phần thứ hai của bài đánh giá này. Việc triển khai Sphinx có sẵn cho Android, iOS và thậm chí cả Windows Phone. Không giống như phương pháp đám mây, khi công việc nhận dạng giọng nói được giao cho máy chủ Google ASR hoặc Yandex SpeechKit, Sphinx hoạt động chính xác hơn, nhanh hơn và rẻ hơn. Và hoàn toàn địa phương. Nếu muốn, bạn có thể dạy Sphinx mô hình ngôn ngữ tiếng Nga và ngữ pháp truy vấn của người dùng. Có, bạn sẽ phải làm việc một chút trong quá trình cài đặt. Cũng giống như việc thiết lập các mẫu và thư viện giọng nói Sphinx không phải là một hoạt động dành cho người mới bắt đầu. Vì cốt lõi của CMU Sphinx, thư viện Sphinx4, được viết bằng Java nên bạn có thể đưa mã của nó vào các ứng dụng nhận dạng giọng nói của mình. Các ví dụ cụ thể về việc sử dụng sẽ được mô tả trong phần thứ hai của bài đánh giá của chúng tôi.

VoxForge

Chúng ta hãy đặc biệt nêu bật khái niệm ngữ liệu lời nói. Kho ngữ liệu là một tập hợp có cấu trúc các đoạn lời nói, được cung cấp phần mềm để truy cập các phần tử riêng lẻ của kho ngữ liệu. Nói cách khác, đó là tập hợp giọng nói của con người ở các ngôn ngữ khác nhau. Nếu không có kho ngữ liệu thì không có hệ thống nhận dạng giọng nói nào có thể hoạt động được. Rất khó để tạo ra một kho ngữ liệu lời nói mở chất lượng cao một mình hoặc thậm chí với một nhóm nhỏ, vì vậy một dự án đặc biệt đang thu thập các bản ghi âm giọng nói của con người - VoxForge.

Bất kỳ ai có quyền truy cập Internet đều có thể đóng góp vào việc tạo ra kho ngữ liệu bằng cách ghi âm và gửi một đoạn lời nói. Việc này thậm chí có thể được thực hiện qua điện thoại, nhưng sử dụng trang web sẽ thuận tiện hơn. Tất nhiên, ngoài bản ghi âm, kho ngữ liệu lời nói phải bao gồm thông tin bổ sung, chẳng hạn như phiên âm. Nếu không có điều này, việc ghi âm giọng nói sẽ trở nên vô nghĩa đối với hệ thống nhận dạng.


HTK, Julius và Simon

HTK - Hidden Markov Model Toolkit là bộ công cụ nghiên cứu và phát triển các công cụ nhận dạng giọng nói sử dụng mô hình Markov ẩn, được phát triển tại Đại học Cambridge dưới sự bảo trợ của Microsoft (Microsoft từng mua mã này từ doanh nghiệp thương mại Entropic Cambridge Research Laboratory Ltd, và sau đó trả lại Cambridge cùng với giấy phép hạn chế). Nguồn của dự án có sẵn cho tất cả mọi người, nhưng việc sử dụng mã HTK trong các sản phẩm dành cho người dùng cuối bị giấy phép cấm.

Tuy nhiên, điều này không có nghĩa là HTK vô dụng đối với các nhà phát triển Linux: nó có thể được sử dụng như một công cụ phụ trợ khi phát triển các công cụ nhận dạng giọng nói nguồn mở (và thương mại), đó là điều mà các nhà phát triển công cụ Julius mã nguồn mở, đó là đang được phát triển ở Nhật Bản, do. Julius làm việc tốt nhất với người Nhật. Sự vĩ đại và quyền lực cũng không bị tước đoạt, bởi vì VoxForge tương tự được sử dụng làm cơ sở dữ liệu giọng nói.

Tiếp tục chỉ có sẵn cho người đăng ký

Tùy chọn 1. Đăng ký Hacker để đọc tất cả tài liệu trên trang web

Việc đăng ký sẽ cho phép bạn đọc TẤT CẢ các tài liệu trả phí trên trang web trong khoảng thời gian được chỉ định. Chúng tôi chấp nhận thanh toán bằng thẻ ngân hàng, tiền điện tử và chuyển khoản từ tài khoản của nhà cung cấp dịch vụ di động.

Có lẽ chương trình sao chép văn bản thuận tiện nhất dành cho Windows và Mac OS, kết hợp trình phát âm thanh và trình soạn thảo văn bản. Nguyên lý hoạt động rất đơn giản - tải một tệp âm thanh vào chương trình, nghe nó bằng các phím nóng trên bàn phím (bạn có thể tự gán chúng) và đồng thời gõ văn bản. Tốc độ phát lại và âm lượng âm thanh cũng được điều chỉnh bằng bàn phím. Bằng cách này, tay của bạn luôn ở trên bàn phím và không cần sử dụng chuột hay chuyển đổi giữa các chương trình khác nhau. Xin lưu ý rằng trình soạn thảo văn bản tích hợp không nhận ra lỗi và không có nhiều chức năng quen thuộc khác, chẳng hạn như chuyển dấu gạch nối sang dấu gạch ngang. Tuy nhiên, bạn có thể sử dụng song song các trình soạn thảo văn bản khác với Express Scribe bằng cách sử dụng phím nóng để điều khiển phát lại âm thanh. Chương trình này là phần mềm chia sẻ, chi phí đầy đủ: $17-50.


02. Phiên âm-pro



Một chương trình tiếng Nga dành cho Windows cho phép bạn không chỉ nghe âm thanh mà còn xem các tệp video. Trình soạn thảo văn bản tích hợp có khả năng thêm dấu thời gian và tên của người đối thoại. Văn bản thu được có thể được nhập vào “bản ghi tương tác” và cũng có thể được điều chỉnh như một phần của dự án nhóm. Ứng dụng này chỉ khả dụng với đăng ký hàng năm, chi phí là 689 rúp mỗi năm.


03. RPlayer V1.4



Một chương trình đơn giản để xử lý và sao chép các tệp âm thanh có hỗ trợ phím nóng và khả năng nhập Microsoft Word. Không giống như các chương trình tương tự trước đây, nó có thể được tải xuống miễn phí nhưng không ổn định trên các phiên bản Windows mới.

04. Voco

Ứng dụng Windows chuyên nghiệp để chuyển đổi giọng nói thành văn bản. Hỗ trợ nhập liệu bằng giọng nói trong bất kỳ trình duyệt thử nghiệm nào, có bộ sưu tập lớn các từ điển chuyên đề và không yêu cầu kết nối Internet để nhận dạng giọng nói. Các phiên bản mở rộng "Voco.Professional" và "Voco.Enterprise" có thể hoạt động với các tệp âm thanh được tạo sẵn. Hạn chế duy nhất là chi phí cao của ứng dụng.


05. Rồng đọc chính tả



Ứng dụng di động miễn phí để nhận dạng giọng nói chính tả. Chương trình có thể nhận dạng khoảng 40 ngôn ngữ và các loại của chúng, cho phép bạn chỉnh sửa văn bản và gửi đến email, mạng xã hội hoặc sao chép vào khay nhớ tạm. Cần có kết nối Internet để hoạt động.


06. RealSpeaker



Một ứng dụng độc đáo không chỉ có thể nhận dạng các tệp âm thanh mà còn có thể nhận dạng giọng nói trực tiếp được nói với camera. Nhờ tiện ích mở rộng video đặc biệt, “RealSpeaker” đọc được chuyển động của môi, từ đó cải thiện quá trình nhận dạng giọng nói lên tới 20-30% so với các thuật toán tương tự khác. Hiện tại, ứng dụng hỗ trợ 11 ngôn ngữ: tiếng Nga, tiếng Anh (phương ngữ Mỹ và Anh), tiếng Pháp, tiếng Đức, tiếng Trung, tiếng Hàn và tiếng Nhật, tiếng Thổ Nhĩ Kỳ, tiếng Tây Ban Nha, tiếng Ý và tiếng Ukraina. Chương trình được phân phối miễn phí, chi phí tùy thuộc vào thời gian đăng ký, phiên bản không giới hạn có giá khoảng 2 nghìn rúp.

) bằng cách sử dụng ví dụ Hello World thực tế về điều khiển thiết bị gia dụng.
Tại sao đồ gia dụng? Có, bởi vì nhờ ví dụ như vậy bạn có thể đánh giá cao điều đó tốc độ và độ chính xác có thể đạt được bằng cách sử dụng hoàn toàn cục bộ nhận dạng giọng nói không có máy chủ như ASR của Google hoặc Bộ bài phát biểu Yandex.
Tôi cũng đính kèm vào bài viết toàn bộ mã nguồn của chương trình và bản lắp ráp dành cho Android.

Tại sao đột nhiên?

Gần đây tình cờ phát hiện ra , tôi đã hỏi tác giả tại sao anh ấy muốn sử dụng tính năng nhận dạng giọng nói dựa trên máy chủ cho chương trình của mình (theo ý kiến ​​​​của tôi, điều này là không cần thiết và dẫn đến một số vấn đề). Tôi đã nhận được một câu hỏi ngược lại về việc liệu tôi có thể mô tả chi tiết hơn việc sử dụng các phương pháp thay thế cho các dự án không cần phải nhận ra bất cứ điều gì và từ điển bao gồm một tập hợp các từ hữu hạn. Và thậm chí với một ví dụ về ứng dụng thực tế...

Tại sao chúng ta cần bất cứ thứ gì khác ngoài Yandex và Google?

Vì “ứng dụng thực tế” đó, tôi đã chọn chủ đề điều khiển giọng nói cho ngôi nhà thông minh.
Tại sao chính xác là ví dụ này? Bởi vì nó cho thấy một số lợi thế của việc nhận dạng giọng nói hoàn toàn cục bộ so với nhận dạng bằng giải pháp đám mây. Cụ thể là:
  • Tốc độ- chúng tôi không phụ thuộc vào máy chủ và do đó không phụ thuộc vào tính khả dụng, băng thông, v.v. các nhân tố
  • Sự chính xác- công cụ của chúng tôi chỉ hoạt động với từ điển mà ứng dụng của chúng tôi quan tâm, do đó nâng cao chất lượng nhận dạng
  • Giá- chúng tôi không phải trả tiền cho mỗi yêu cầu đến máy chủ
  • Kích hoạt bằng giọng nói- như một phần thưởng bổ sung cho những điểm đầu tiên - chúng tôi có thể liên tục “nghe chương trình phát sóng” mà không lãng phí lưu lượng truy cập và không tải máy chủ

Ghi chú

Hãy đặt chỗ ngay nhé những ưu điểm này có thể coi là ưu điểm chỉ dành cho một loại dự án nhất định, Chúng ta ở đâu chúng tôi biết chắc chắn trước, từ điển nào và ngữ pháp nào mà người dùng sẽ sử dụng. Nghĩa là khi chúng ta không cần nhận dạng văn bản tùy ý (ví dụ: tin nhắn SMS hoặc truy vấn tìm kiếm). Nếu không, nhận dạng đám mây là không thể thiếu.

Vì vậy, Android có thể nhận dạng giọng nói mà không cần Internet!
Vâng, vâng... Chỉ có trên JellyBean. Và chỉ từ nửa mét, không hơn. Và sự nhận biết này là cùng một cách diễn đạt, chỉ sử dụng một mô hình nhỏ hơn nhiều. Vì vậy, chúng tôi cũng không thể quản lý hoặc định cấu hình nó. Và những gì cô ấy sẽ trở lại với chúng tôi trong thời gian tới vẫn chưa được biết. Mặc dù chỉ phù hợp với SMS!

Chúng ta làm gì?

Chúng tôi sẽ triển khai điều khiển từ xa bằng giọng nói cho các thiết bị gia dụng, điều này sẽ hoạt động chính xác và nhanh chóng, từ vài mét và thậm chí trên điện thoại thông minh, máy tính bảng và đồng hồ Android rẻ tiền, tồi tàn, rất rẻ tiền.
Logic sẽ đơn giản nhưng rất thực tế. Chúng tôi kích hoạt micrô và nói một hoặc nhiều tên thiết bị. Ứng dụng nhận dạng chúng và bật và tắt chúng tùy thuộc vào trạng thái hiện tại. Hoặc anh ta nhận được một gia tài từ họ và phát âm nó bằng một giọng nữ dễ chịu. Ví dụ, nhiệt độ hiện tại trong phòng.

Ứng dụng thực tế rất nhiều

Buổi sáng, chưa kịp mở mắt, bạn đã vỗ tay lên màn hình điện thoại thông minh trên đầu giường và ra lệnh “Chào buổi sáng!” - kịch bản bắt đầu, máy pha cà phê bật và kêu vo vo, tiếng nhạc du dương vang lên, rèm mở ra.
Hãy treo một chiếc điện thoại thông minh giá rẻ (2 nghìn, không hơn) lên tường trong mỗi phòng. Chúng tôi về nhà sau giờ làm việc và ra lệnh vào khoảng trống “Ngôi nhà thông minh! Đèn, tivi! - Tôi nghĩ không cần thiết phải nói điều gì sẽ xảy ra tiếp theo.

Phiên âm



Ngữ pháp mô tả cái gì người dùng có thể nói gì. Để Pocketsphinx biết, Làm sao anh ta sẽ phát âm nó, mỗi từ trong ngữ pháp cần phải viết nó phát âm như thế nào trong mô hình ngôn ngữ tương ứng. Đó là phiên mã mọi lời nói. Nó được gọi là từ điển.

Phiên âm được mô tả bằng một cú pháp đặc biệt. Ví dụ:
thông minh uu m n ay j nhà d oo m

Về nguyên tắc, không có gì phức tạp. Một nguyên âm đôi trong phiên âm biểu thị trọng âm. Phụ âm kép là phụ âm mềm theo sau là nguyên âm. Tất cả các kết hợp có thể có cho tất cả các âm thanh của tiếng Nga.

Rõ ràng là chúng tôi không thể mô tả trước tất cả các bản phiên âm trong ứng dụng của mình, vì chúng tôi không biết trước tên mà người dùng sẽ đặt cho thiết bị của họ. Do đó, chúng tôi sẽ tạo ra các phiên âm như vậy một cách “nhanh chóng” theo một số quy tắc ngữ âm tiếng Nga. Để thực hiện việc này, bạn có thể triển khai lớp PhonMapper sau, lớp này có thể nhận một chuỗi làm đầu vào và tạo bản phiên âm chính xác cho chuỗi đó.

Kích hoạt bằng giọng nói

Đây là khả năng của công cụ nhận dạng giọng nói luôn "nghe chương trình phát sóng" để phản ứng với một cụm từ (hoặc các cụm từ) được xác định trước. Đồng thời, tất cả các âm thanh và lời nói khác sẽ bị loại bỏ. Điều này không giống như việc mô tả ngữ pháp và chỉ bật micro. Tôi sẽ không trình bày ở đây lý thuyết về nhiệm vụ này và cơ chế hoạt động của nó. Hãy để tôi nói rằng gần đây các lập trình viên làm việc trên Pocketsphinx đã triển khai một chức năng như vậy và bây giờ nó đã có sẵn trong API.

Một điều chắc chắn đáng được đề cập. Đối với cụm từ kích hoạt, bạn không chỉ cần chỉ định phiên âm mà còn phải chọn cụm từ thích hợp giá trị ngưỡng độ nhạy. Giá trị quá nhỏ sẽ dẫn đến nhiều kết quả dương tính giả (đó là khi bạn không nói cụm từ kích hoạt nhưng hệ thống nhận ra). Và quá cao - đến khả năng miễn dịch. Vì vậy, cài đặt này có tầm quan trọng đặc biệt. Phạm vi giá trị gần đúng - từ 1e-1 đến 1e-40 tùy thuộc vào cụm từ kích hoạt.

Kích hoạt cảm biến tiệm cận

Nhiệm vụ này dành riêng cho dự án của chúng tôi và không liên quan trực tiếp đến việc công nhận. Mã có thể được nhìn thấy trực tiếp trong hoạt động chính.
Cô ấy thực hiện Trình nghe sự kiện cảm biến và tại thời điểm tiếp cận (giá trị cảm biến nhỏ hơn giá trị tối đa), nó sẽ bật bộ hẹn giờ, kiểm tra sau một độ trễ nhất định xem cảm biến có còn bị chặn hay không. Điều này được thực hiện để loại bỏ các kết quả dương tính giả.
Khi cảm biến không bị chặn nữa, chúng tôi sẽ dừng nhận dạng và nhận kết quả (xem mô tả bên dưới).

Hãy bắt đầu công nhận

Pocketsphinx cung cấp API thuận tiện để định cấu hình và chạy quy trình nhận dạng. Đây là những lớp học Trình nhận dạng SpechThiết lập nhận dạng giọng nói.
Cấu hình và khởi chạy nhận dạng trông như thế này:

PhonMapper phonMapper = new PhonMapper(getAssets().open("dict/ru/hotwords")); Ngữ pháp ngữ pháp = ngữ pháp mới(tên, phonMapper); ngữ pháp.addWords(từ nóng); DataFiles dataFiles = new DataFiles(getPackageName(), "ru"); Tệp hmmDir = Tệp mới(dataFiles.getHmm()); Tệp dict = Tệp mới(dataFiles.getDict()); Tệp jsgf = Tệp mới(dataFiles.getJsgf()); copyAssets(hmmDir); saveFile(jsgf, Grammar.getJsgf()); saveFile(dict, Grammar.getDict()); mRecognizer = SpeechRecognizerSetup.defaultSetup() .setAcousticModel(hmmDir) .setDictionary(dict) .setBoolean("-remove_noise", false) .setKeywordThreshold(1e-7f) .getRecognizer(); mRecognizer.addKeyphraseSearch(KWS_SEARCH, từ nóng); mRecognizer.addGrammarSearch(COMMAND_SEARCH, jsgf);

Ở đây, trước tiên chúng tôi sao chép tất cả các tệp cần thiết vào đĩa (Pocketpshinx yêu cầu mô hình âm thanh, ngữ pháp và từ điển có phiên âm trên đĩa). Sau đó, công cụ nhận dạng sẽ được cấu hình. Đường dẫn đến tệp mô hình và từ điển cũng như một số tham số (ngưỡng nhạy cảm cho cụm từ kích hoạt) được chỉ định. Tiếp theo, đường dẫn đến tệp ngữ pháp cũng như cụm từ kích hoạt được định cấu hình.

Như bạn có thể thấy từ mã này, một công cụ được cấu hình để nhận dạng cả ngữ pháp và cụm từ kích hoạt. Tại sao điều này được thực hiện? Để chúng ta có thể nhanh chóng chuyển đổi giữa những gì chúng ta hiện cần nhận biết. Quá trình bắt đầu nhận dạng cụm từ kích hoạt trông như thế này:

MRecognizer.startListening(KWS_SEARCH);
Và đây là cách nhận dạng lời nói theo một ngữ pháp nhất định:

MRecognizer.startListening(COMMAND_SEARCH, 3000);
Đối số thứ hai (tùy chọn) là số mili giây mà sau đó quá trình nhận dạng sẽ tự động kết thúc nếu không có ai nói gì.
Như bạn có thể thấy, bạn chỉ có thể sử dụng một động cơ để giải quyết cả hai vấn đề.

Làm thế nào để có được kết quả công nhận

Để có được kết quả nhận dạng, bạn cũng phải chỉ định một trình xử lý sự kiện triển khai giao diện Trình nghe công nhận.
Nó có một số phương thức được Pocketphinx gọi khi một trong các sự kiện xảy ra:
  • onBeginningOfSpeech- động cơ nghe thấy một số âm thanh, có thể đó là lời nói (hoặc có thể không)
  • onEndOfSpeech- âm thanh kết thúc
  • trênPartialResult- có kết quả nhận dạng trung gian. Đối với cụm từ kích hoạt, điều này có nghĩa là nó đã hoạt động. Lý lẽ giả thuyết
  • trênKết quả- kết quả cuối cùng của sự công nhận. Phương thức này sẽ được gọi sau khi phương thức được gọi dừng lại Tại Trình nhận dạng giọng nói. Lý lẽ giả thuyết chứa dữ liệu nhận dạng (chuỗi và điểm)

Bằng cách triển khai các phương thức onPartialResult và onResult theo cách này hay cách khác, bạn có thể thay đổi logic nhận dạng và thu được kết quả cuối cùng. Đây là cách nó được thực hiện trong trường hợp ứng dụng của chúng tôi:

@Override public void onEndOfSpeech() ( Log.d(TAG, "onEndOfSpeech"); if (mRecognizer.getSearchName().equals(COMMAND_SEARCH)) ( mRecognizer.stop(); ) ) @Override public void onPartialResult(Giả thuyết giả thuyết) ( if (giả thuyết == null) return; Chuỗi văn bản = giả thuyết.getHypstr(); if (KWS_SEARCH.equals(mRecognizer.getSearchName())) ( startRecognition(); ) else ( Log.d(TAG, text); ) ) @Override public void onResult(Giả thuyết giả thuyết) ( mMicView.setBackgroundResource(R.drawable.background_big_mic); mHandler.removeCallbacks(mStopRecognitionCallback); Chuỗi văn bản = giả thuyết != null ?giả thuyết.getHypstr() : null; Log.d(TAG , "onResult " + text); if (COMMAND_SEARCH.equals(mRecognizer.getSearchName())) ( if (text != null) ( Toast.makeText(this, text, Toast.LENGTH_SHORT).show(); process(text ); ) mRecognizer.startListening(KWS_SEARCH);

Khi chúng tôi nhận được sự kiện onEndOfSpeech và nếu đồng thời chúng tôi nhận ra lệnh sẽ được thực thi thì chúng tôi cần dừng nhận dạng, sau đó onResult sẽ được gọi ngay lập tức.
Trong onResult bạn cần kiểm tra những gì vừa được nhận dạng. Nếu đây là lệnh, thì bạn cần khởi chạy nó để thực thi và chuyển động cơ để nhận dạng cụm từ kích hoạt.
Trong onPartialResult chúng tôi chỉ quan tâm đến việc nhận dạng cụm từ kích hoạt. Nếu phát hiện ra, chúng tôi sẽ bắt đầu ngay quá trình nhận dạng lệnh. Đây là những gì nó trông giống như:

Đồng bộ riêng tư void startRecognition() ( if (mRecognizer == null || COMMAND_SEARCH.equals(mRecognizer.getSearchName())) return; mRecognizer.cancel(); new ToneGenerator(AudioManager.STREAM_MUSIC, ToneGenerator.MAX_VOLUME).startTone(ToneGenerator. TONE_CDMA_PIP, 200); post(400, new Runnable() ( @Override public void run() ( mMicView.setBackgroundResource(R.drawable.background_big_mic_green); mRecognizer.startListening(COMMAND_SEARCH, 3000); Log.d(TAG, "Nghe này command"); post(4000, mStopRecognitionCallback); ) )); )
Ở đây, trước tiên chúng tôi phát một tín hiệu nhỏ để thông báo cho người dùng rằng chúng tôi đã nghe thấy anh ấy và sẵn sàng nhận lệnh của anh ấy. Trong thời gian này, micro nên được tắt. Do đó, chúng tôi bắt đầu nhận dạng sau một khoảng thời gian chờ ngắn (dài hơn một chút so với thời lượng của tín hiệu để không nghe thấy tiếng vang của nó). Nó cũng bắt đầu một chuỗi sẽ buộc dừng nhận dạng nếu người dùng nói quá lâu. Trong trường hợp này là 3 giây.

Cách biến chuỗi được nhận dạng thành lệnh

Chà, mọi thứ ở đây đều dành riêng cho một ứng dụng cụ thể. Trong trường hợp ví dụ đơn giản, chúng tôi chỉ cần lấy tên thiết bị từ dòng, tìm kiếm thiết bị mong muốn và thay đổi trạng thái của thiết bị bằng cách sử dụng yêu cầu HTTP tới bộ điều khiển nhà thông minh hoặc báo cáo trạng thái hiện tại của thiết bị (như trong trường hợp của một bộ điều nhiệt). Logic này có thể được nhìn thấy trong lớp Controller.

Cách tổng hợp lời nói

Tổng hợp giọng nói là hoạt động nghịch đảo của nhận dạng. Ở đây thì ngược lại - bạn cần chuyển một dòng văn bản thành lời nói để người dùng có thể nghe thấy.
Trong trường hợp bộ điều chỉnh nhiệt, chúng ta phải làm cho thiết bị Android của mình đọc nhiệt độ hiện tại. Sử dụng API TextToSpeech việc này khá dễ thực hiện (cảm ơn Google đã cung cấp TTS nữ tuyệt vời cho tiếng Nga):

Private void speak(String text) ( được đồng bộ hóa (mSpeechQueue) ( ​​​​mRecognizer.stop(); mSpeechQueue.add(text); HashMap thông số = HashMap mới (2); params.put(TextToSpeech.Engine.KEY_PARAM_UTTERANCE_ID, UUID.randomUUID().toString()); params.put(TextToSpeech.Engine.KEY_PARAM_STREAM, String.valueOf(AudioManager.STREAM_MUSIC)); params.put(TextToSpeech.Engine.KEY_FEATURE_NETWORK_SYNTHESIS, "true"); mTextToSpeech.speak(văn bản, TextToSpeech.QUEUE_ADD, thông số); ) )

Có lẽ tôi sẽ nói điều gì đó tầm thường, nhưng trước quá trình tổng hợp, cần phải tắt tính năng nhận dạng. Trên một số thiết bị (ví dụ: tất cả các thiết bị Samsung), nhìn chung không thể nghe micrô và tổng hợp nội dung nào đó cùng một lúc.
Phần cuối của quá trình tổng hợp giọng nói (nghĩa là phần cuối của quá trình nói văn bản bằng bộ tổng hợp) có thể được theo dõi trong trình nghe:

Cuối cùng riêng tư TextToSpeech.OnUtteranceCompletedListener mUtteranceCompletedListener = new TextToSpeech.OnUtteranceCompletedListener() ( @Override public void onUtteranceCompleted(StringutteranceId) ( được đồng bộ hóa (mSpeechQueue) ( ​​​​ mSpeechQueue.poll(); if (mSpeechQueue.isEmpty()) ( mRecognizer.startListening( KWS_SEARCH) ) ) ) );

Trong đó, chúng tôi chỉ cần kiểm tra xem có gì khác trong hàng đợi tổng hợp hay không và bật nhận dạng cụm từ kích hoạt nếu không có gì khác.

Và đó là tất cả?

Đúng! Như bạn có thể thấy, việc nhận dạng giọng nói trực tiếp trên thiết bị một cách nhanh chóng và hiệu quả không hề khó chút nào nhờ sự hiện diện của những dự án tuyệt vời như Pocketsphinx. Nó cung cấp một API rất tiện lợi có thể được sử dụng để giải quyết các vấn đề liên quan đến nhận dạng lệnh thoại.

Trong ví dụ này, chúng tôi đã đính kèm sự công nhận cho một nhiệm vụ hoàn toàn cụ thể - điều khiển bằng giọng nói của các thiết bị nhà thông minh. Nhờ sự công nhận của địa phương, chúng tôi đã đạt được tốc độ rất cao và giảm thiểu sai sót.
Rõ ràng là mã tương tự có thể được sử dụng cho các tác vụ khác liên quan đến giọng nói. Nó không nhất thiết phải là một ngôi nhà thông minh. Thêm thẻ