6 / 6 / 1
Регистрация: 15.09.2013
Сообщений: 149

Написание системы распознавания речи!

26.11.2013, 22:29. Показов 12074. Ответов 7
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Привет форумчанам!
Задумался я над интересно темой: Распознавание речи.Тема довольна перспективна,особенно в наши времена.

Перед написанием подобного надо , ессе-но,изучить все термины и узнать в общих чертах как это работает.

Так как я задумался написать такую систему под андроид,то и копать надо в ту же сторону.
У кого есть какие то материалы по данной тематике - выкладывайте!Все

Прежде чем писать такую систему разберем основные компоненты системы:

1)Запись звука - это запись звука То есть, сказали что то в микрофон, файл записался(Точнее он может и не записаться,а сразу перейти во второй этап)

2)Анализ сигнала - Ядро нашей программы,анализирует записанную с микрофона речь.Самая сложная часть.

3)Вывод - Тут уж в зависимости от назначения программы.Для начала надо научиться просто выводить слово.


Этап первый,начнем.

Так как самое главное нам это запись звука с микрофона,накропал небольшой кодец:
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
import java.io.File;
import java.io.IOException;
import java.util.Scanner;
 
import javax.sound.sampled.AudioFileFormat;
import javax.sound.sampled.AudioFormat;
import javax.sound.sampled.AudioInputStream;
import javax.sound.sampled.AudioSystem;
import javax.sound.sampled.DataLine;
import javax.sound.sampled.LineUnavailableException;
import javax.sound.sampled.TargetDataLine;
 
public class Main {
    
    final static int MONO = 1;
    private static AudioFileFormat.Type fileType = AudioFileFormat.Type.WAVE;
 
    public static void main(String[] args) {
        AudioFormat format = new AudioFormat(AudioFormat.Encoding.PCM_SIGNED,
                44100, 16, MONO, 2, 44100, true);
        DataLine.Info info = new DataLine.Info(TargetDataLine.class, format);
        int numb = 5; //номер файла
        String files = "C:\\test\\mix" + numb + "." + fileType;
        File fileOut = new File(files);
 
        if (!AudioSystem.isLineSupported(info)) {
            System.out.println("Line nit supporot!");
        }
        System.out.println("Для остановки записи звука введите - g");
        TargetDataLine mike = null;
        try {
            mike = (TargetDataLine) AudioSystem.getLine(info);
            mike.open(format);
            AudioInputStream sound = new AudioInputStream(mike);
            mike.start();
            
            try {
                AudioSystem.write(sound, fileType, fileOut);
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        } catch (LineUnavailableException e) {
            System.out.println("line not avaible");
        }
        
        Scanner sc = new Scanner(System.in);
        String scc;
        if (sc.hasNext()) { 
            System.out.println("Запись звука остановлена");
            scc = sc.nextLine();
            if (scc.equals("g")) {
                System.out.println("Запись звука остановлена");
                mike.stop();
            }
        }
        
        
    }
}
Эта часть кода немного неправильно работает:
Java
1
2
3
4
5
6
7
8
9
10
Scanner sc = new Scanner(System.in);
        String scc;
        if (sc.hasNext()) { 
            System.out.println("Запись звука остановлена");
            scc = sc.nextLine();
            if (scc.equals("g")) {
                System.out.println("Запись звука остановлена");
                mike.stop();
            }
        }
Но если программу остановить,все будет хорошо,звук запишется.

Пожалуйста,выкладывайте любые ссылки по теме,говорите какие недочеты есть в коде)
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
26.11.2013, 22:29
Ответы с готовыми решениями:

Написание системы обработки инцедентов
Привет всем! Мне нужно написать систему HelpDesk, тоесть систему обработки инцедентов, для бакалаврской работы (соответственно ничего...

ПО для распознавания речи
Понадобилась прога по сабжу. По указанным ссылка на ifolder скачать прогу не удалось(( У кого завалялся сей экземпляр ?! очень нужно ...

Ускорение распознавания речи
Недавно начал учить распознавание речи в Python, есть код: import speech_recognition as sr def command(): r = sr.Recognizer() ...

7
ɐwʎ ɔ vǝmоɔ dиw ɐʚонɔ
 Аватар для tankomaz
443 / 442 / 100
Регистрация: 14.10.2012
Сообщений: 1,146
Записей в блоге: 9
26.11.2013, 23:30
воу-воу-воу, палехче! Гугл повержен?

Добавлено через 3 минуты
Scanner sc = new Scanner(System.in);
String scc;
if (sc.hasNext()) {
System.out.println("Запись звука остановлена");
scc = sc.nextLine();
if (scc.equals("g")) {
System.out.println("Запись звука остановлена");
mike.stop();
}
}
вопрос по теме!
ТС, как вы думаете, как работает данный код и каково его место под солнцем?
1
6 / 6 / 1
Регистрация: 15.09.2013
Сообщений: 149
26.11.2013, 23:54  [ТС]
Вообще он работает,если вставить его в другое место,но файл записи тогда получается пустым..

Добавлено через 20 секунд
Работает только остановкой программы в еклипсе(красный квадратик)
0
Кандёхаем веселее!
 Аватар для MLPMan
296 / 330 / 76
Регистрация: 02.10.2012
Сообщений: 2,175
27.11.2013, 07:02
Силами одного кодера(не эксперта предметной области) реально реализовать только сравнение фрагментов. Как голосовые команды в мобилах.
1
92 / 59 / 8
Регистрация: 09.11.2011
Сообщений: 443
27.11.2013, 09:27
Цитата Сообщение от LanGrande Посмотреть сообщение
Прежде чем писать такую систему
надо устроиться в http://google.com поработать опыта понабраться
1
6 / 6 / 1
Регистрация: 15.09.2013
Сообщений: 149
27.11.2013, 13:46  [ТС]
Цитата Сообщение от tankomaz Посмотреть сообщение
ТС, как вы думаете, как работает данный код и каково его место под солнцем?
Хм.Имеется Сканнер если он не пустой(имеет что то), то присвоить это строке,если строка совпадает с буквой g,то остановить запись,примерно так)
Цитата Сообщение от Cheb Посмотреть сообщение
надо устроиться в http://google.com поработать опыта понабраться
Куда то я потерял пару ссылок,на тему устройства распознавания речи от гугл..
0
ɐwʎ ɔ vǝmоɔ dиw ɐʚонɔ
 Аватар для tankomaz
443 / 442 / 100
Регистрация: 14.10.2012
Сообщений: 1,146
Записей в блоге: 9
27.11.2013, 14:56
Java
1
2
3
Scanner sc = new Scanner(System.in);
String scc;
if (sc.hasNext()) {
что будет в переменной sc после инициализации? будет .hasNext работать или нет?
1
6 / 6 / 1
Регистрация: 15.09.2013
Сообщений: 149
28.11.2013, 19:30  [ТС]
Цитата Сообщение от tankomaz Посмотреть сообщение
что будет в переменной sc после инициализации?
Введенный нами текст,разве нет?))
Цитата Сообщение от tankomaz Посмотреть сообщение
будет .hasNext работать или нет?
Не знаю,наверно,будет)
Наверно правильнее было бы проверить sc на не null , а не так..

Добавлено через 12 минут
Пока на закуску пару ссылок:

http://habrahabr.ru/post/144580/

http://habrahabr.ru/company/yandex/blog/198556/

Добавлено через 1 час 9 минут
Почему то никак не могу воспроизвести звуковой файл.
Тут уже вопрос задвал:
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
import java.io.File;
import javax.sound.sampled.AudioInputStream;
import javax.sound.sampled.AudioSystem;
import javax.sound.sampled.Clip;
import javax.sound.sampled.DataLine;
 
public class Main {
    public static void main(String[] args) {
 
        try {
            System.out.println("Start");
            File f = new File("c://music.wav");
            AudioInputStream source = AudioSystem.getAudioInputStream(f);
 
            DataLine.Info info = new DataLine.Info(Clip.class,
                    source.getFormat());
 
            Clip clip = null;
            if (AudioSystem.isLineSupported(info)) {
                clip = (Clip) AudioSystem.getLine(info);
            }
 
            clip.open(source);
            clip.start();
 
        } catch (Exception E) {
            System.out.println(E.getMessage());
 
        }
    }
}
Добавлено через 19 часов 7 минут
Ругается на эту строку:
Java
1
 clip.open(source);
Добавлено через 1 час 17 минут
Воспроизведение заработало!)

Первый вариант где то с хабра:

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
import java.io.File;
import java.io.IOException;
 
import javax.sound.sampled.AudioFileFormat;
import javax.sound.sampled.AudioInputStream;
import javax.sound.sampled.AudioSystem;
import javax.sound.sampled.Clip;
import javax.sound.sampled.FloatControl;
import javax.sound.sampled.LineUnavailableException;
import javax.sound.sampled.UnsupportedAudioFileException;
 
public class Test1 {
    private static AudioFileFormat.Type fileType = AudioFileFormat.Type.WAVE;
 
    public static void main(String[] args) {
 
        System.out.println("Start");
        String fileN = "C:\\test\\mix7" + "." + fileType;
        File soundFile = new File(fileN); // Звуковой файл
 
        AudioInputStream ais = null;
 
        try {
            ais = AudioSystem.getAudioInputStream(soundFile);
        } catch (UnsupportedAudioFileException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
 
        Clip clip = null;
 
        try {
            clip = AudioSystem.getClip();
            clip.open(ais);
        } catch (LineUnavailableException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
 
        FloatControl vc = (FloatControl) clip
                .getControl(FloatControl.Type.MASTER_GAIN);
 
        System.out.println(vc.getMinimum());
        System.out.println(vc.getMaximum());
 
        vc.setValue(5); // Громче обычного
 
        clip.setFramePosition(0);
        clip.start();
 
        try {
            Thread.sleep(clip.getMicrosecondLength() / 1000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        clip.stop();
        clip.close();
 
    }
 
}
Второй вариант:

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
import java.io.File;
import java.io.IOException;
 
import javax.sound.sampled.AudioFileFormat;
import javax.sound.sampled.AudioFormat;
import javax.sound.sampled.AudioInputStream;
import javax.sound.sampled.AudioSystem;
import javax.sound.sampled.DataLine;
import javax.sound.sampled.LineUnavailableException;
import javax.sound.sampled.SourceDataLine;
import javax.sound.sampled.UnsupportedAudioFileException;
 
public class Splay {
    private static final int EXTERNAL_BUFFER_SIZE = 1048576;// 128Kb
    private static AudioFileFormat.Type fileType = AudioFileFormat.Type.WAVE;
 
    public static void main(String[] args) {
 
        boolean playing = true;
        System.out.println("Start");
        String fileN = "C:\\test\\mix7" + "." + fileType;
        File f = new File(fileN);
 
        AudioInputStream source = null;
        try {
            source = AudioSystem.getAudioInputStream(f);
        } catch (UnsupportedAudioFileException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
 
        AudioFormat format = source.getFormat();
        System.out.println(format);
        SourceDataLine auline = null;
        DataLine.Info info = new DataLine.Info(SourceDataLine.class, format);
 
        try {
            auline = (SourceDataLine) AudioSystem.getLine(info);
            auline.open(format);
        } catch (LineUnavailableException e) {
            e.printStackTrace();
            return;
        } catch (Exception e) {
            e.printStackTrace();
            return;
        }
        
        auline.start();
        
        int nBytesRead = 0;
        byte[] abData = new byte[EXTERNAL_BUFFER_SIZE];
 
        try {
            
            while(playing){
            while (nBytesRead != -1) {
                nBytesRead = source.read(abData, 0, abData.length);
                if (nBytesRead >= 0)
                    auline.write(abData, 0, nBytesRead);
                System.out.println("Фрейм " + auline.getFramePosition());
                System.out.println("Громкость " + auline.getLevel());
                System.out.println("Микро " + auline.getMicrosecondPosition());
            }
            }
        } catch (IOException e) {
            e.printStackTrace();
            return;
        } finally {
            auline.drain();
            auline.close();
        }
 
    }
}
Добавлено через 23 секунды
Осталось распознать!)

Добавлено через 39 минут
Отличная статья:
http://habrahabr.ru/post/140828/

Примерный план реализации уже есть!
(не для получения слова,а для получения MFCC векторов)

Ну и вот это(как ж без этого)
http://ru.wikipedia.org/wiki/Д... ание_Фурье
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
28.11.2013, 19:30
Помогаю со студенческими работами здесь

Система распознавания речи
Хочу написать программу которая работала бы как Google Voice Search (Голосовой поиск Гугл) только на компьютере! Приблизительно знаю схему!...

Рекуррентная НС для распознавания речи
Доброго времени суток. Стоит задача написать классификатор для кластеризации языка голоса. Языка всего 2. Английский и русский. Хотел...

Математическая модель распознавания речи
Здравствуйте,форумчане!!! Такой вопрос, наступил тот момент,пришла пора писать диплом. Диплом связан с распознаванием голосовых команд....

Динамический вывод распознавания речи
Как можно сделать динамический вывод голоса в текст? То есть во время разговора оно заполняет TextView, а не после окончания. Использую...

Написать программу распознавания речи
я чайник в программировании конечно еше тот бейсик тока знал так во лазил по форумам напоролся на ссылку в конце текста написана ну и...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Опции темы

Новые блоги и статьи
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
Фото: Daniel Greenwood
kumehtar 13.11.2025
Расскажи мне о Мире, бродяга
kumehtar 12.11.2025
— Расскажи мне о Мире, бродяга, Ты же видел моря и метели. Как сменялись короны и стяги, Как эпохи стрелою летели. - Этот мир — это крылья и горы, Снег и пламя, любовь и тревоги, И бескрайние. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru