html текст
All interests
  • All interests
  • Design
  • Food
  • Gadgets
  • Humor
  • News
  • Photo
  • Travel
  • Video
Click to see the next recommended page
Like it
Don't like
Add to Favorites

Голосовой переводчик для Mac OS X

В недалёком прошлом лишь в фантастических фильмах можно было видеть «чудо коробочки», в которые говоришь, а в результате слышишь перевод сказанного на другом языке. Но прогресс идёт…

Я очень давно ждал, когда Google откроет API своего сервиса распознавания речи (в своих продуктах компания его использует). Несколько месяцев назад я перевернул «этот ваш ёнтернет», но безрезультатно. И вот на днях я вижу топик на Хабре Используем Google Voice Search в своем приложении .NET! Я был неимоверно счастлив. Топик ссылается на оригинальную статью Accessing Google speech API / Chrome 11. Всё внимательно изучил и «расковырял» исходники Chrome.

Google Speech Recognition API пока неофициальный и стал доступен общественности благодаря браузеру Chrome.

Варианты его использования поистине безграничны. А если объединить это с морфологическими модулями, то может наворотить просто чумовых дел в сфере управления голосом.

Для демонстрации и создания «каркасного движка» (для своих дальнейших нужд) я сделал «Голосовой переводчик» для Mac OS X за пару дней. Это симбиоз технологий Google, Microsoft (произношение) и открытого проекта ffmpeg (конвертация во flac). Это именно голосовой переводчик — никакого набора текста. Просто произносите фразу и слушаете её перевод. Да, качество распознавания может быть не идеальным, но на коротких чётких фразах вполне приемлемо.

Вот видео работы программы:


Как обычно, этот топик я разделю на две части. Одна для обычных пользователей, кто захочет «побаловаться» этой программой. Другая для разработчиков (я предоставлю исходные коды базового проекта).

ДЛЯ ПОЛЬЗОВАТЕЛЕЙ


Загрузить программу можно по ссылке (Mac OS X 10.6+).

Интерфейс программы очень простой. Выбираете нужное языковое направление (в этом демонстрационном проекте я сделал лишь два направления, но сервисы поддерживают намного большее количество языков). Нажимаете кнопку «Записать» и произнесите фразу. Запись автоматически прекратится через 5 секунд или вы можете самостоятельно ее остановить. Всё — слушаем перевод :).





ДЛЯ РАЗРАБОТЧИКОВ


Исходный код на github.

В проекте используется уже собранный бинарный конвертер ffmpeg для конвертации записанного звука во flac. Если вы захотите перенести проект на iOS, то можно использовать статическую библиотеку из проекта libFlac.

Для HUD интерфейс в проекте используется уже собранный BGHUDAppKit framework.

Для обработки JSON используется JSON framework.

Дополнительно (для упрощения) используются некоторые классы из Google Data API.

ЗАПИСЬ ЗВУКА

Звук записывается с помощью стандартной библиотеки QTKit (QuickTime Kit).

Вот код инициализации сессии захвата звуковых данных:
    BOOL success = NO;
 
    mCaptureSession = [[QTCaptureSession alloc] init];
 
    QTCaptureDevice *audioDevice = [QTCaptureDevice defaultInputDeviceWithMediaType:QTMediaTypeSound];
 
    if (!audioDevice)
    {
        [mCaptureSession release], mCaptureSession = nil;
 
        [textLabel setStringValue:NSLocalizedString(@"AudioError"@"")];
        [button setHidden:YES];
        [popUp setHidden:YES];
        [textLabel setHidden:NO];
    }
 
    success = [audioDevice open:NULL];
 
    if (!success)
    {
        [mCaptureSession release], mCaptureSession = nil;
 
        [textLabel setStringValue:NSLocalizedString(@"AudioError"@"")];
        [button setHidden:YES];
        [popUp setHidden:YES];
        [textLabel setHidden:NO];
    }
 
    mCaptureAudioDeviceInput = [[QTCaptureDeviceInput alloc] initWithDevice:audioDevice];
    success = [mCaptureSession addInput:mCaptureAudioDeviceInput error:NULL];
 
    if (!success)
    {
        [mCaptureSession release], mCaptureSession = nil;
        [mCaptureAudioDeviceInput release], mCaptureAudioDeviceInput = nil;
 
        [textLabel setStringValue:NSLocalizedString(@"AudioError"@"")];
        [button setHidden:YES];
        [popUp setHidden:YES];
        [textLabel setHidden:NO];
    }
 
    mCaptureMovieFileOutput = [[QTCaptureMovieFileOutput alloc] init];
    success = [mCaptureSession addOutput:mCaptureMovieFileOutput error:NULL];
 
    if (!success)
    {
        [mCaptureSession release], mCaptureSession = nil;
        [mCaptureAudioDeviceInput release], mCaptureAudioDeviceInput = nil;
        [mCaptureMovieFileOutput release], mCaptureMovieFileOutput = nil;
 
        //error handler
    }
 
    [mCaptureMovieFileOutput setDelegate:self];
 
    [mCaptureMovieFileOutput setCompressionOptions:[QTCompressionOptions compressionOptionsWithIdentifier:@"QTCompressionOptionsHighQualityAACAudio"] forConnection:[[mCaptureMovieFileOutput connections] objectAtIndex:0]];
 
    [mCaptureSession startRunning];        
 

Теперь, чтобы начать запись в файл мы выполняем:
[mCaptureMovieFileOutput recordToOutputFileURL:path];

Чтобы закончить запись:
[mCaptureMovieFileOutput recordToOutputFileURL:nil];


КОНВЕРТАЦИЯ

После того, как мы получили звуковой файл, конвертируем его в формат flac с помощью ffmpeg:
    NSTask *aTask = [[NSTask alloc] init];
    NSMutableArray *args = [NSMutableArray array];
 
    [args addObject:@"-i"];
    [args addObject:@"record.m4a"];
    [args addObject:@"-acodec"];
    [args addObject:@"flac"];
    [args addObject:@"-ac"];
    [args addObject:@"1"];
    [args addObject:@"-ar"];
    [args addObject:@"16000"];
    [args addObject:@"record.flac"];
    [aTask setCurrentDirectoryPath:recordPath];
    [aTask setLaunchPath:[[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:@"ffmpeg"]];
    [aTask setArguments:args];
    [aTask launch];
    [aTask waitUntilExit];
    [aTask release];


ОБЩЕНИЕ С СЕТЕВЫМИ СЕРВИСАМИ

После конвертации запускаем процесс распознавания. Он реализован в отдельном классе GoogleASR. Объект этого класса отсылает запрос (асинхронно) на https://www.google.com/speech-api/v1/recognize, обрабатывает результат и сообщает делегату содержание распознавания или информирует об ошибке. Процесс обработки ответа от сервера очень корректный — он полностью (алгоритм) скопирован из браузера Chrome. В классе всего один основной метод:
- (void)speechRecognition:(NSString *)flacPath language:(NSString *)language


Далее передаем распознанный текст объекту класса GoogleTranslate. Он переводит текст и сообщает делегату результат перевода или информирует об ошибке. Основной метод:
- (void)translate:(NSString *)text from:(NSString *)inLanguage to:(NSString *)outLanguage


Далее в ход вступает объект класса MicrosoftTTS. Он получает аудио данные и передаёт их делегату или информирует об ошибке. Основной метод:
- (void)textToSpeech:(NSString *)text language:(NSString *)language


Не забудьте получить свой Bing AppID у Microsoft (это делается бесплатно) и вставить его в класса MicrosoftTTS, в SpeechURL.

Экспериментируйте!
Читать дальше
Twitter
Одноклассники
Мой Мир

материал с habrahabr.ru

2

      Add

      You can create thematic collections and keep, for instance, all recipes in one place so you will never lose them.

      No images found
      Previous Next 0 / 0
      500
      • Advertisement
      • Animals
      • Architecture
      • Art
      • Auto
      • Aviation
      • Books
      • Cartoons
      • Celebrities
      • Children
      • Culture
      • Design
      • Economics
      • Education
      • Entertainment
      • Fashion
      • Fitness
      • Food
      • Gadgets
      • Games
      • Health
      • History
      • Hobby
      • Humor
      • Interior
      • Moto
      • Movies
      • Music
      • Nature
      • News
      • Photo
      • Pictures
      • Politics
      • Psychology
      • Science
      • Society
      • Sport
      • Technology
      • Travel
      • Video
      • Weapons
      • Web
      • Work
        Submit
        Valid formats are JPG, PNG, GIF.
        Not more than 5 Мb, please.
        30
        surfingbird.ru/site/
        RSS format guidelines
        500
        • Advertisement
        • Animals
        • Architecture
        • Art
        • Auto
        • Aviation
        • Books
        • Cartoons
        • Celebrities
        • Children
        • Culture
        • Design
        • Economics
        • Education
        • Entertainment
        • Fashion
        • Fitness
        • Food
        • Gadgets
        • Games
        • Health
        • History
        • Hobby
        • Humor
        • Interior
        • Moto
        • Movies
        • Music
        • Nature
        • News
        • Photo
        • Pictures
        • Politics
        • Psychology
        • Science
        • Society
        • Sport
        • Technology
        • Travel
        • Video
        • Weapons
        • Web
        • Work

          Submit

          Thank you! Wait for moderation.

          Тебе это не нравится?

          You can block the domain, tag, user or channel, and we'll stop recommend it to you. You can always unblock them in your settings.

          • ninjaproger
          • домен habrahabr.ru

          Get a link

          Спасибо, твоя жалоба принята.

          Log on to Surfingbird

          Recover
          Sign up

          or

          Welcome to Surfingbird.com!

          You'll find thousands of interesting pages, photos, and videos inside.
          Join!

          • Personal
            recommendations

          • Stash
            interesting and useful stuff

          • Anywhere,
            anytime

          Do we already know you? Login or restore the password.

          Close

          Add to collection

             

            Facebook

            Ваш профиль на рассмотрении, обновите страницу через несколько секунд

            Facebook

            К сожалению, вы не попадаете под условия акции