На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
Модераторы: RaD, nsh
Страницы: (7) « Первая ... 4 5 [6] 7  все  ( Перейти к последнему сообщению )  
> Алгоритм распознавания речи , выбор алгоритма
    ну если и правда всё так просто , то реализуйте в коде и все дела...
    пофонемное распознавание дело нехитрое но есть одно "но",оно дикторозависимое и требует специальных условий и длительной настройки-тренировки под пользователя.А это в свою очередь означает , что практического смысла в таком ПО будет немного...так удовлетворить чисто научный интерес.
      Цитата
      пофонемное распознавание дело нехитрое но есть одно "но",оно дикторозависимое и требует специальных условий и длительной настройки-тренировки под пользователя.


      С такими высказываниями нужно быть осторожнее :oops:
        Цитата
        С такими высказываниями нужно быть осторожнее

        Что конкретно вас смутило?Обоснуйте если не сложно.
        ага кажется догадался...ну скажем так:
        пофонемное распознавание дело нехитрое но есть одно "но",оно дикторозависимое(для близкого к 100% опознавания) и требует специальных условий и длительной настройки-тренировки под пользователя.
        Сообщение отредактировано: MedEx -
          Такой вот вопрос, можно ли с помощью стандартных библиотек некрософта (NetFW, Speechlib) получить пофонемное распознавание?
          Сколько не мучаюсь не могу нигде найти такого...Хотя по идее там это должно быть, так как в грамматическом словаре xml можно задавать из каких фонем состоит слово и просто добавлять фонемы...

          Или вот еще (пока писал вспомнил), можно как нибудь изменить задержку между распознаваемыми словами в этих библиотеках? Если можно, то реально будет прописать все фонемы в словарь и не мучаться...Нашел настроики рекогнайзеров в реестре, там такого нет...???
          Сообщение отредактировано: Roman55555 -
            Отвечаю на свой вопрос :D
            Можно, но частично и через задний проход...
            С помощью XML правил можно подогнать транскрипцию слов, транскрипция фонем есть в описании MS SDK.
            Пример XML правил:
            Цитата

            <GRAMMAR LANGID="409" LEXDELIMITER="|" WORDTYPE="LEXICAL">
            <RULE NAME="1" TOPLEVEL="ACTIVE">
            <P>|bender|bandar|b eh n d ae r;</P>
            </RULE>
            <RULE NAME="2" TOPLEVEL="ACTIVE">
            <P>|baran|baaraan|b aa r aa n;</P>
            </RULE>
            </GRAMMAR>

            Причем если слово в транскрипции разделить менее чем по 3 буквы, то это автоматически будет считаться фонемой... воооооооот...
            Если надо могу выложить полный код на C# c английскими фонемами.
              Roman55555! Конечно выкладывай!
                Черт, так и знал... ;)
                Цитата

                using System;
                using System.Collections.Generic;
                using System.ComponentModel;
                using System.Data;
                using System.Drawing;
                using System.Text;
                using System.Windows.Forms;
                using System.IO;
                using SpeechLib;
                using System.Collections;

                namespace SpeechTest
                {

                public class Form1 : System.Windows.Forms.Form
                {
                private System.Windows.Forms.Button cmdEnable;
                private SpeechLib.SpSharedRecoContext objRecoContext = null;
                private SpeechLib.ISpeechRecoGrammar grammar = null;
                private SpeechLib.ISpeechGrammarRule menuRule = null;
                private System.Windows.Forms.TextBox txtReco;
                private TextBox textBox1;
                private IContainer components;

                public Form1()
                {
                InitializeComponent();
                }

                protected override void Dispose( bool disposing )
                {
                if( disposing )
                {
                if (components != null)
                {
                components.Dispose();
                }
                }
                base.Dispose( disposing );
                }


                private void InitializeComponent()
                {
                this.cmdEnable = new System.Windows.Forms.Button();
                this.txtReco = new System.Windows.Forms.TextBox();
                this.textBox1 = new System.Windows.Forms.TextBox();
                this.SuspendLayout();
                //
                // cmdEnable
                //
                this.cmdEnable.Location = new System.Drawing.Point(16, 16);
                this.cmdEnable.Name = "cmdEnable";
                this.cmdEnable.Size = new System.Drawing.Size(96, 23);
                this.cmdEnable.TabIndex = 0;
                this.cmdEnable.Text = "Enable Speech";
                this.cmdEnable.Click += new System.EventHandler(this.cmdEnable_Click);
                //
                // txtReco
                //
                this.txtReco.Location = new System.Drawing.Point(16, 75);
                this.txtReco.Name = "txtReco";
                this.txtReco.Size = new System.Drawing.Size(590, 20);
                this.txtReco.TabIndex = 5;
                //
                // textBox1
                //
                this.textBox1.Location = new System.Drawing.Point(16, 49);
                this.textBox1.Name = "textBox1";
                this.textBox1.Size = new System.Drawing.Size(590, 20);
                this.textBox1.TabIndex = 10;
                //
                // Form1
                //
                this.AutoScaleBaseSize = new System.Drawing.Size(5, 13);
                this.ClientSize = new System.Drawing.Size(618, 107);
                this.Controls.Add(this.textBox1);
                this.Controls.Add(this.txtReco);
                this.Controls.Add(this.cmdEnable);
                this.Name = "Form1";
                this.Text = "Speech Test";
                this.ResumeLayout(false);
                this.PerformLayout();

                }

                [STAThread]
                static void Main()
                {
                Application.Run(new Form1());
                }

                private void cmdEnable_Click(object sender, System.EventArgs e)
                {
                // Get an insance of RecoContext. I am using the shared RecoContext.
                objRecoContext = new SpeechLib.SpSharedRecoContext();

                // Assign a eventhandler for the Hypothesis Event.
                objRecoContext.Hypothesis += new _ISpeechRecoContextEvents_HypothesisEventHandler(Hypo_Event);

                // Assign a eventhandler for the Recognition Event.
                objRecoContext.Recognition += new _ISpeechRecoContextEvents_RecognitionEventHandler(Reco_Event);

                //Creating an instance of the grammer object.
                grammar = objRecoContext.CreateGrammar(0);
                grammar.CmdLoadFromFile("z.xml", SpeechLoadOption.SLODynamic);
                grammar.CmdSetRuleIdState(0, SpeechRuleState.SGDSActive);

                /* ЗАГРУЗКА ИЗ ОБЫЧНОГО ТХТ ФАЙЛА
                //Activate the Menu Commands.
                menuRule = grammar.Rules.Add("MenuCommands",SpeechRuleAttributes.SRATopLevel|SpeechRuleAttributes.SRADynamic,1);
                object PropValue = "";

                StreamReader sr = new StreamReader("D:\\trans.txt");
                string line;
                while ((line = sr.ReadLine()) != null)
                {
                menuRule.InitialState.AddWordTransition(null, line, "", SpeechGrammarWordType.SGLexical, line, 1, ref PropValue, 0.2F);
                }
                grammar.Rules.Commit();
                grammar.CmdSetRuleState("MenuCommands", SpeechRuleState.SGDSActive);
                textBox1.AppendText("!");
                */
                }

                private void Reco_Event(int StreamNumber, object StreamPosition, SpeechRecognitionType RecognitionType, ISpeechRecoResult Result)
                {
                textBox1.AppendText(Result.PhraseInfo.GetText(0, -1, false));
                }

                private void Hypo_Event(int StreamNumber, object StreamPosition, ISpeechRecoResult Result)
                {
                txtReco.AppendText(Result.PhraseInfo.GetText(0, -1, false));
                }

                }
                }

                Кстати распознавать стало на порядок лучше... Но проблема осталась старая > распознаются целые слова, а не фонемы, хотя при пополнении словаря слов и написании преобразователя их транскрипций можно достичь похожег о результата...
                Прикрепил еще в нагрузку транскрипции на англ и перевод на русский (делал сам, так что не обессудьте)
                Для новичков могу выложить целый проект... ну я думаю разберетесь...

                Еще чуть не забыл, если в xml правилах задавать фонемы, то только из списка который я дал, иначе вылетит ошибка! Вобщем если будут вопросы пишите - постараюсь ответить...
                Сообщение отредактировано: Roman55555 -

                Прикреплённый файлПрикреплённый файлtranscrypt.rar (12.55 Кбайт, скачиваний: 709)
                  Может кто знает где сие добыть -> Phoneme Editor and Extraction Tool или Phoneme Tool
                  на wikipedia ссылка на Microsoft
                  а там ничего по этому поводу не сказано...

                  Есть еще идея адаптировать Japanese Language Pack к русскому языку, все таки у них более похожее на русский произношение...
                    Вот еще полезная информация про SDK и вообще.
                    С помощью следующего кода можно менять лимит загрузки процессора при распознавании, задержку между словами или фразами, адаптацию и пределы расспознавания:
                    Цитата

                    Boolean SRprop;
                    objRecoContext = new SpeechLib.SpSharedRecoContext();
                    SRprop = objRecoContext.Recognizer.SetPropertyNumber("ResourceUsage", 80);
                    SRprop = objRecoContext.Recognizer.SetPropertyNumber("ResponseSpeed", 200);
                    SRprop = objRecoContext.Recognizer.SetPropertyNumber("ComplexResponseSpeed", 200);
                    SRprop = objRecoContext.Recognizer.SetPropertyNumber("HighConfidenceThreshold", 90);
                    SRprop = objRecoContext.Recognizer.SetPropertyNumber("NormalConfidenceThreshold", 50);
                    SRprop = objRecoContext.Recognizer.SetPropertyNumber("LowConfidenceThreshold", 10);
                    SRprop = objRecoContext.Recognizer.SetPropertyNumber("AdaptationOn", 0);

                    Еще транскрипции с русского на английский!
                    Цитата

                    Russian letter Symbol Pronunciation
                    Я (stressed) ya as ya in yahoo
                    Я (unstressed) ee as ee in meet, but very short
                    Е (stressed) ye as ye in yes
                    Е (unstressed) ee as ee in meet, but very short
                    Ё (always stressed) yo as yo in yonder
                    Ю yoo as the word you
                    И (stressed) ee as ee in meet

                    Russian letter Symbol Pronunciation
                    A (stressed) ah as Ah, but shorter
                    A (unstressed) a as u in but
                    O (stressed) o as aw in law
                    O (unstressed) a as u in but
                    Ы i no English equivalent
                    У oo as oo in wood
                    Э e as e in pet

                    Russian letter Symbol Pronounced as
                    Б (soft) b b in bee
                    Б (hard) b b in but
                    В (soft) v v in view
                    В (hard) v v in voice
                    Г (soft) g g in girl
                    Г (hard) g g in go
                    Д (soft) d d in dew
                    Д (hard) d d in dial
                    З (soft) z z in zeal
                    З (hard) z z in zoom
                    К (soft) k k in okey
                    К (hard) k c in clock
                    Л (soft) l l in leak
                    Л (hard) l l in lump
                    М (soft) m m in muse
                    М (hard) m m in monk
                    Н (soft) n n in need
                    Н (hard) n n in noon
                    П (soft) p p in pew
                    П (hard) p p in mop
                    Р (soft) r no equivalent
                    Р (hard) r no equivalent
                    С (soft) s s in seed, sew
                    С (hard) s s in soup
                    Т (soft) t t in stew
                    Т (hard) t t in ten
                    Ф (soft) f f in few
                    Ф (hard) f f in fault
                    Х (soft) kh h in huge
                    Х (hard) kh h in host
                    Ц (always hard) ts ts in what's up
                    Ч (mostly soft) ch ch in church
                    Ш (hard) sh sh in shield
                    Щ (soft) shch no equivalent
                    й (soft) j y in yes or may
                      Здравствуйте, Roman55555. Появилось ли за год что-нибудь нового по данной теме?
                        Evgeniyuser, чем вас cmu-sphinx не устраивает как готовое и открытое решение для распознования речи?
                        p.s. на сколько я вижу roman55555 Unregistered
                        Сообщение отредактировано: zamir -
                          zamir
                          А если точить под свои нужды? Я понял, что нужно использовать Java? А на С# пойдет?
                            sphinx4 на java
                            pocketsphinx на Cи - на сколько я понял компилируется и на windows и на linux
                            я про С# ничего не знаю - но если он как-то совместим с Си, то наверное достатоночно подключить библиотеки с Pocketpshinx в C# builder....
                              zamir
                              Может подскажете. У меня стоит задача распознать слова (английские и русские) и записать их в определенном порядке в таблицу Excel. Где это проще и лучше будет реализовать? Я начинающий.
                                можно использовать тот-же pocketsphinx
                                если прямо русские или английские - то надо обобщить все фонемы
                                а языковую модель создать из русских и английских слов
                                можно просто запускать програму и парсить вывод (я так делаю так как на Си не програмирую)
                                а можно написать собственое приложение используя библиотеки pocketsphinx

                                Если нужна помощь, то думаю можно финансово заинтересовать Николая Шмырёва (одного из разработчиков этого продукта) и он вам возможно поможет реализовать задуманное.
                                0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
                                0 пользователей:


                                Рейтинг@Mail.ru
                                [ Script execution time: 0,0696 ]   [ 16 queries used ]   [ Generated: 28.03.24, 15:00 GMT ]