Привет. Сегодня я хочу рассказать об отличной вещи для разработчиков, распознавание речи силами Google. Ни для кого не секрет, что телефоны на базе Android умеют искать в Google то, что вы им надиктовали, и распознает это весьма успешно. Многие этим пользовались, реверсили запросы и использовали в своих проектах. Увы, где-то весной 2014го это закончилось, Google прикрыли доступ к первой версии своего API, изменили формат запроса и добавили аутентификацию для них.
Сейчас это вполне себе легальная функция для разработчиков, вполне документированная, но не без сложностей. Первую версию API застать мне не случилось, а вот вторую попросили коллеги помочь разобрать, ибо надо было что-то делать. К концу дня стало понятно, что не все подробно описано в рунете (да и в англоязычном тоже). Так что давайте по порядку.
UPD 07.01.2016:
Теперь Google Speech API не поддерживает стерео файлы формата Flac (про wav не уверена), только моно. Для записи тестового файла поспользуйтесь Audacity, внизу слева необходимо выбрать частоту 44100, справа сверху режим «Mono». При экспорте файла в формате Flac на всякий случай выберите уровень сжатия 0. Таким образом, статья все еще актуальна на эту дату.
В качестве бонуса работающий API-key AIzaSyCPYK77NqpUfWoHof_HlhnKaGZAsaMT02Q
, но заведите лучше свой, интерфейс там немного поменялся,сейчас пункт называется API Manager, там в поиске надо найти Speech API, enable его, и завести в Credentials new API Key.
(for non-russian speakers: google speech api doesn’t support flac stereo files, so previous examples doesn’t works now, please, record your own test files via Audacity, use Mono recording channel, this option in top right conner of application, then use python file, which is at the bottom of this article, thanks)
/UPD
1. Надо обязательно зайти сюда и почитать о формате входных данных, выходных данных, используемых кодеков, а так же скачать примеры аудио-записей для тестов. После чего проверить (при наличии микрофона) https://www.google.com/intl/en/chrome/demos/speech.html , как это будет распознаваться в итоге и подходит ли под ваши задачи.
2. Если все понятно, то, в случае, если вам повезло иметь *nix-подобную систему под рукой, то можно тут же проверить при помощи Curl (пример есть по ссылке выше, API-key для тестов можно использовать AIzaSyAqk7vE0vQDR3JItUPgFp6bcPqgJz8h8tI
, работал на август 2014, имейте совесть, заведите свой ключ для продакшена). Если вам не повезло, и под рукой есть только винда, то проверить можно Python скрипта, который опубликован в конце, или любым другим удобным для вас способом написания Post-запросов.
3. Если слова post-запрос и API-key вас не испугали — то вы с абсолютной уверенностью сможете прикрутить распознавание голоса от Google к любой вещи (хоть к чайнику, хоть к умному дому).
Получить API ключ довольно просто (хотя и не тривиально). Необходимо залогиниться под своей учетной записью, зайти на консоль разработчиков, создать новый проект. Перейти слева в раздел APIs и попытаться найти там Speech API. Когда вы его там в списке не нашли, заходим в группу Chromium Dev, вступаем в нее. Снова обновляем страничку APIs, видимо, что Speech API там появился. Радостно включаем его. Google говорит нам, что у нас есть 50 запросов в сутки, но мы ему не верим, ибо это не правда. Скорее всего после релиза бесплатно будет доступно 50-500 запросов, остальное за деньги. А пока можно наслаждаться халявой (подсказывают в тырнетах что 500 запросов в день).
API-key создается в Creditionals -> Create new Key -> Server key -> Create. Все. Ключ готов.
4. Переходим к данным. Оказалось, что это тоже не так просто. Сервер запросто вернет пустой запрос, если язык не тот, или rate в заголовке неверный. Для создания валидных аудио-файлов рекомендовалось использовать Audicity, для формата выходных файлов обязательно flac. Опыт показал, что сколько не бейся, wav работает заметно хуже. Проще конвертировать (или записывать изначально) в flac. Через Audicity просто записываем свой голос, нажимаем файл — экспортировать, выбираем Flac — и готово.
Теперь надо проверить частоту (rate) с которой был записан файл, по умолчанию это 44100, указано в левом нижнем углу приложения Audicity.
5. Для распознавания первого в вашей жизни файла все готово. Теперь нужно в заголовке указать Content-Type: audio/x-flac; rate=44100;
где rate это число, которое мы узнали в Audicity, и запустить post-запрос. В результате вернется что-то похожее на
{
"result":[
{
"alternative":[
{
"transcript":"this is a test",
"confidence":0.97321892
},
{
"transcript":"this is a test for"
}
],
"final":true
}
],
"result_index":0
}
6. Завершением всего этого станет нюанс, что при распознавании вторая версия API почему-то возвращает два результата, первый из которых пустой:
{"result":[]}
. Не пугайтесь, типа так и надо. Причину не знаю, не описано.
7.
Обещанный кусок кода на Python для тестирования:
#!/usr/local/bin/python import urllib2 import sys key = "AIzaSyAqk7vE0vQDR3JItUPgFp6bcPqgJz8h8tI" url = "https://www.google.com/speech-api/v2/recognize?output=json&lang=ru-ru&key="+key try: filename = sys.argv[1] except IndexError: print 'Usage: democode.py <file>' sys.exit(1) audio = open(filename,'rb').read() headers={'Content-Type': 'audio/x-flac; rate=44100'} request = urllib2.Request(url, data=audio, headers=headers) response = urllib2.urlopen(request) print response.read()
p.s. В основном мы бились с тем, что wav файлы пережевывать он не хотел, а в flac у нас был другой rate, при экспорте из телефонии у нас получался 8000.
Удачного распознавания!
Чтобы я не делал, но так и получаю только первый пустой {«result»:[]} ответ. Второго с данными не вижу. Пробовал скачивать примеры звуковых файлов. Тоже самое. Гугл запросы считает, это видно. Подскажите куда копать. Пробовал и ru и en, wav и flac. Но всегда пустой ответ.
Грабли были в @ перед именем файла
Как я поняла, в итоге все получилось?
https://github.com/gillesdemey/google-speech-v2
из этих примеров, только один вышел нормально
democode.py good-morning-google.flac
{"result":[]}
{"result":[{"alternative":[{"transcript":"good morning Google how are you feelin
g today","confidence":0.987629},{"transcript":"morning Google how are you feelin
g today"},{"transcript":"good morning Google how are you feeling today I"},{"tra
nscript":"morning Google how are you feeling today I"}],"final":true}],"result_i
ndex":0}
И очень точное ваше замечание. Сервер запросто вернет пустой запрос, если язык не тот, или rate в заголовке неверный.
У меня тоже не работает, выдает {«result»:[]} и все. Куда копать и как исправить?
На март 2016 работает шикарно. Внимательно смотрите в заголовках на язык и частоту. Долго возвращал пустой result,пока не поправил частоту на ту,которая и есть в файле.
Отлично!
Всем привет. Есть у кого скрипт десериализации?
Спасибо за статью, в своё время вы очень помогли 🙂 Сейчас мне снова понадобилось написать реализацию, и возникает вопрос: любая информация о формате принимаемых и выдаваемых этим API данных берётся из реверс-инжиниринга? То есть, официальной документации в принципе не существует?
К сожалению, да. Нет никаких оправданий гуглу за такие вещи, но у него часто такое бывает. Работает-работает, а потом без объявления войны и документации что-то перестает поддерживаться и приходится разбираться, почему так.
Не могу понять в чем дело. Можно *.flac для тестов?
Посмотрите, пожалуйста, примечание к статье, теперь flac принимается только в mono режиме, audacity вполне может записать такой flac с микрофона.
Спасибо за отличную статью! Получилось, но только с wav файлом.
Рада, что у вас все получилось! Напишите, если не сложно, характеристики wav файла, с которыми у вас все вышло.
Так сделал
import json
import urllib
import urllib.request
key = «key»
url = «https://www.google.com/speech-api/v2/recognize?output=json&lang=ru-ru&key=»+key
audio = open(«/home/xmaster/PycharmProjects/project1/myparser/proba1/115.flac»,’rb’).read()
req = urllib.request.Request(url,data=audio,headers={‘Content-Type’: ‘audio/x-flac; rate=44100’})
f = urllib.request.urlopen(req)
print(f.read().decode(‘utf-8’))
Спасибо! Статья очень помогла. Все получилось. Запрос к google api делал из java, конвертирование в моно flac тоже делаю средствами java. Если кому надо, пишите, код скину.
Приветствую.А никто не может поделиться действующей реализацией на C#?
Подскажите, пожалуйста, как делаете конвертацию в моно flac средствами java.
Добрый день, какие библиотеки нужно цеплять на java? понять не могу..
Хотел бы посмотреть на вашу реализацию.
Сергей, какими средствами вы делали конвертирование в моно flac в java и что использовали для отправки запроса к google api? Скиньте код, пожалуйста. Заранее спасибо.
Доброго времени суток. при посылке запроса все время возвращает 403 ошибку,
var api_key =»#############»;
var path = @»C:\test.flac»;
var bytes = File.ReadAllBytes(path);
var client = new WebClient();
client.Headers.Add(«Content-Type», «audio/x-flac; rate=44100″);
var result = client.UploadData($»http://www.google.com/speech-api/v2/recognize?lang=uk-UA&key={api_key}&output=json», «POST», bytes);
var s = client.Encoding.GetString(result);
Console.ReadLine();
В прошлом году Я сорвал джекпот в этом современном онлайн-казино
На праздниках Я поймал удачу в этом
любимом клубе
1 месяц назад Я выиграл деньжищи в этом знаменитом казино
Пару месяцев назад Я выигрыл 100
штук в этом уважаемом онлайн-клубе
Пару недель назад Я победил в этом любимом онлайн-казино
Недавно Я стал богатым в этом онлайн-казино
Нужны деньги ещё вчера? Тут они будут уже завтра!
http://cuzobut.cf
Ищите игры для андроид? Тогда вы зашли по адресу! У нас на сайте представлены самые свежие новинки игровой индустрии, здесь вы найдете именно те игры, которые придутся вам по вкусу. На нашем ресурсе собраны только наиболее популярные игры, проверенные тысячами геймеров из разных уголков земного шара. Стратегии, экшэн, головоломки, симуляторы – все эти и многие другие жанры находятся именно здесь.
Андроид игры: взломанный шедоу файт 2
1. Результатов инвентаризации материальных
ценностей, находящихся на предприятии.
2.
Выравнивание потолков штукатурными смесями,
шпаклёвка поверхностей потолка, покраска.
Отделка стен.
Видосы для взрослых на Android и планшет на портале — Порно
Смотрите лучшее Отборное порно в HD формате абсолютно бесплатно
A parvenue sound http://youtubemusic.ws with albums, 1, videos, remixes, live performances and added for Android, iOS and top side.
Youtube Watcher http://youtubeviewer.net Request for inquiring and streaming videos from YouTube
На веб-сайте http://kofevarki-i-kofemashiny.com найдутся сводку наихороших кофемашин
Добрый вечер! Советую навестить интернет-портал ссылка на гидру зеркало, там где присутствует множество заманчивого.
В основном здесь http://stiralki-sushilki.com Стиральные и также сушильные техники
Если только вы лично представляетесь фанатом эффектных порно игр, то на данном блоге вы всегда сможете подыскать инновации эротической игровой отрасли и кроме того смотреть прохождения уровней на видео в режиме online. Предположим входите на вэб-страницу https://pornomamki.online/ и удостоверитесь, что абсолютно все гейм новинки ждут вас в едином месте.
продвижение сайта на joomla
Доброго времени суток
наткнулся хочу поделиться
https://ya.ru/
Здрасте
позырьте
https://ya.ru/
रूसी मेटल: आपका भरोसा — हमारा गर्व। https://remzestar.com/
За последние несколько лет услуга установка счетчиков тепла в Киеве и прилегающих районах стала чрезвычайно популярной и востребованной. Это легко объяснимо, учитывая постоянный рост тарифов на коммунальные услуги. Особенно ощутимо это становится при получении счетов за отопление, которые заставляют многих задуматься о способах экономии на теплоэнергии. Мы предлагаем установку счетчиков тепла по доступной и прозрачной стоимости: 7000 грн, включая ультразвуковой счетчик, его подключение и регистрацию в системе Киевтеплоэнерго.https://www.instagram.com/schetchiki_tepla_kiev_ua/
Hello dear friends and valued partners,
We extend a warm welcome to you in our dynamic company, where quality and reliability are our guiding principles. We are ready to deliver our products and services, adhering to the highest standards, to every corner of the globe.
Our commitment to excellence has led us to successful collaborations in various business sectors. We stand prepared to support you by providing innovative and dependable solutions across diverse industries.
We look forward to having you as part of our network, where each domain becomes an integral aspect of our mutually beneficial collaboration.
company website: https://global.arpc-ir.com/
Best regards,
Petrova Ekaterina
Hello dear friends and valued partners,
We extend a warm welcome to you in our dynamic company, where quality and reliability are our guiding principles. We are ready to deliver our products and services, adhering to the highest standards, to every corner of the globe.
Our commitment to excellence has led us to successful collaborations in various business sectors. We stand prepared to support you by providing innovative and dependable solutions across diverse industries.
We look forward to having you as part of our network, where each domain becomes an integral aspect of our mutually beneficial collaboration.
company website: https://global.arpc-ir.com/
Best regards,
Egorova Denis
Hello dear friends and esteemed connections,
We extend a warm welcome to you in our dynamic company, where quality and reliability are our guiding principles. We are ready to deliver our products and services, adhering to the highest standards, to every corner of the globe.
Our commitment to excellence has led us to successful collaborations in various business sectors. We stand prepared to support you by providing innovative and dependable solutions across diverse industries.
We look forward to having you as part of our network, where each domain becomes an integral aspect of our mutually beneficial collaboration.
company website: https://global.kao-azot.com/
Best regards,
Suvorov Ekaterina
Greetings to our dear friends and esteemed comrades,
We extend a warm welcome to you in our dynamic company, where quality and reliability are our guiding principles. We are ready to deliver our products and services, adhering to the highest standards, to every corner of the globe.
Our commitment to excellence has led us to successful collaborations in various business sectors. We stand prepared to support you by providing innovative and dependable solutions across diverse industries.
We look forward to having you as part of our network, where each domain becomes an integral aspect of our mutually beneficial collaboration.
company website: https://bolsugar.com/
Best regards,
Korolev Viktor
Warm salutations to our dear friends and esteemed partners,
We extend a warm welcome to you in our dynamic company, where quality and reliability are our guiding principles. We are ready to deliver our products and services, adhering to the highest standards, to every corner of the globe.
Our commitment to excellence has led us to successful collaborations in various business sectors. We stand prepared to support you by providing innovative and dependable solutions across diverse industries.
We look forward to having you as part of our network, where each domain becomes an integral aspect of our mutually beneficial collaboration.
company website: https://global.nevmez.com/
Best regards,
Petrova Ekaterina
Hello dear friends and esteemed connections,
We extend a warm welcome to you in our dynamic company, where quality and reliability are our guiding principles. We are ready to deliver our products and services, adhering to the highest standards, to every corner of the globe.
Our commitment to excellence has led us to successful collaborations in various business sectors. We stand prepared to support you by providing innovative and dependable solutions across diverse industries.
We look forward to having you as part of our network, where each domain becomes an integral aspect of our mutually beneficial collaboration.
company website: https://siburperm.com/
Best regards,
Koroleva Dmitry
Warm welcome to our friends and esteemed partners,
We extend a warm welcome to you in our dynamic company, where quality and reliability are our guiding principles. We are ready to deliver our products and services, adhering to the highest standards, to every corner of the globe.
Our commitment to excellence has led us to successful collaborations in various business sectors. We stand prepared to support you by providing innovative and dependable solutions across diverse industries.
We look forward to having you as part of our network, where each domain becomes an integral aspect of our mutually beneficial collaboration.
company website: https://siburperm.com/
Best regards,
Sokolova Ekaterina
Hello dear friends and esteemed connections,
We extend a warm welcome to you in our dynamic company, where quality and reliability are our guiding principles. We are ready to deliver our products and services, adhering to the highest standards, to every corner of the globe.
Our commitment to excellence has led us to successful collaborations in various business sectors. We stand prepared to support you by providing innovative and dependable solutions across diverse industries.
We look forward to having you as part of our network, where each domain becomes an integral aspect of our mutually beneficial collaboration.
company website: https://global.nevmez.com/
Best regards,
Sokolova Ekaterina