Сегодня решил немного передать скрипт по выполнению голосовых команд, а точнее, упростить его. По задумке скрипт должен был распознавать речь и набирать текст в открытое окно. Задуманное боле-менее получилось, но всего за секунду до того, как я уже собирался опубликовать статью. Так что статья будет разбита на 2 части: первая посвящена скрипту, который позволяет надиктовывать текст в документ, а вторая скрипту, который будет печатать текст в любое окно, например, чат (эта часть получилась в последний момент).
В самом начале устанавливаем необходимый софт:
sudo apt-get install sox flac php5-curl
Теперь создадим папку, где будет находится скрипт. Если будете переносить, то не забудьте отредактировать скрипты.
mkdir -p ~/bin/vo
Теперь переходим в созданную папку, качаем файлы скрипта и распаковываем.
cd ~/bin/vo
wget http://dl.dropbox.com/u/24844052/tuksik/voras.zip
unzip voras.zip
Делаем три основных файла исполняемыми:
chmod +x voras
chmod +x voras2
chmod +x mic
Теперь нужно забиндить включение и отключение микрофона на клавишу. Возможно есть шанс, что будет всё срабатывать автоматически, но практически у всех это не работает. Поэтому просто назначаете на скрипт mic любое сочетание клавиш. И нажимаем это сочетание пару раз, что бы микрофон выключился. Что бы убедится в этом можно запустить alsamixer.
А теперь можно запускать сам скрипт voras.
./voras
Я не программист и не знаю ни одного ЯП, так что смог придумать тока следующие (просьба сильно не пугаться).
После запуска скрипт практически сразу же запустит вторую свою версию(voras2) и будет готов начать записывать. Вторая же версия(voras2) будет ждать того момента, когда первый скрипт остановит запись и займётся самим распознаванием. Потом они поменяются местами.
Сделано этого потому, что гугл не даёт загружать на себя очень длинный текст и приходится разбивать его (например по предложениям). и пока обрабатывается первое предложение идёт запись второго. Если будет не хватать двух потоков, то можно создать, по аналогии, третий… вроде гуглу всё равно.
После запуска voras (над названием вообще не думал) нужно включить микрофон, произнести фразу, отключить микрофон (делаем всё тем же сочетанием клавиш), а затем (секунду спустя или чуть раньше) можно опять включать микрофон и диктовать следующую фразу. Каждая новая фраза будет помещаться в текстовый документ в папке со скриптом.
Тут было произнесено три фразы и все они распознались без проблем с первого раза.
Далее можно отредактировать результат. Например, добавить точку в конце строк
sed -i 's/$/./g' profit.txt
Или склеить строки… имхо, проще всего это выполнить таким скриптом:
#!/bin/bash
a=`cat profit.txt`
echo $a > profit.txt
А теперь переходим ко скрипту, который распознаёт речь и пишет текст в любое окно.
Я изначально использовал для этой цели xdotool. Я пробовал заменять буквы на их кириллические коды. Например, Cyrillic_zhe это ж. Но оказалось, что xdotool довольно сильно глючит при длинных предложениях. Решением послужило использование цифренных кодов клавиш. Например, й это 24, ц это 25 и т.д. Но теперь нужно ставить русскую раскладку клавиатуры. Зато глюков меньше. Узнать, у какой клавиши, какой код можно выполнив команду:
xev | grep keycode
Если у вас отличается положение от моих, то не забудьте подправить.
Так же вам понадобится сама программа xdotool в debian дистрибутивах её можно установить коммандой
sudo apt-get install xdotool
И так сам скрипт. Для удобства засунем его в другую папку… позже сами отредактируете, как вам удобнее, но изначально он будет настроенн именно на эту папку:
mkdir -p ~/bin/von
Далее переходим, качаем, распаковываем, как и в первом скрипте
cd ~/bin/von
wget http://dl.dropbox.com/u/24844052/tuksik/vonab.zip
unzip vonab.zip
Делаем три основных файла исполняемыми:
chmod +x vonab
chmod +x vonab2
chmod +x mic
Биндим клавишу на включение и выключение микрофона. Зачем это нужно и как работает скрипт, можно узнать в первой части. Всё отличие этого скрипта от первого в том, что он печатает текст в любое окно.
Что бы запустить скрипт набираем в терминале:
./vonab
Активация скрипта этого распозновальщика происходит также, как и первого. То есть включаем и выключаем микрофон (подробнее в первой части статьи). Выглядит это примерно так:
Гугл умеет распознавать точку и запятую, так что можно набирать текст голосом даже со знаками препинания.
Скрипт выложен на дропбоксе и ссылка на него будет постоянна, но его содержимое может меняться. Сейчас час ночи, кофе кончилось, я замёрз и хочу спать, но позже я собираюсь научить скрипт отправлять набранное сообщение в аське, переходить на новую строку и тому подобное.
Не ленитесь сами улучшать скрипт. Только просьба, отписываться в комментариях (или на почту, она есть в скрипте) с ссылкой на свою версию.
P.S.: xdootool всё же иногда глючит. Есть подозрение, что на старых компьютерах глюки будут в разы сильнее, так что надо бы подыскать замену.
P.P.S.: Если я опять изобрёл велосипед, то тоже отпишитесь в комментариях. А то я очень далёк от программирования и я уверен, что если хоть кто-то делал, что-то подобное, то там оно лучше.
>> не знаю ни одного ЯП
Bash не в счет?
Имелось ввиду полноценные языки программирования. Я уже плохо припоминаю, но вроде для того, что бы ЯП был полноценным он должен обладать тьюринговской полнотой (подсмотрел на вики… могу ошибаться). bash, lua и прочие скриптовые языки этой полнотой не обладают и сильно ограничены в возможностях. Зато изучить их можно полностью часа за два, да и то если совсем с нуля начинать.
Как это не обладают, если даже brainfuck с 8 командами обладает (см вики)?!
на баше и на луа легко написать брейнфак-интерпретатор, так что они тьюринг-полные
./voras: строка 22: php: команда не найдена
как исправить)
Кому надо, могу дать немного усовершенствованную версию
Можно выложить ссылку на новую версию прямо сюда, или скинуть мне по скайпу или аське (есть в контактах), тогда новая версия сразу попадёт в тело статьи с указанием автора.