raspberry pi распознавание речи

29.10.2016

Организуем распознавание речи через Яндекс speech api.

Инсталлируем:

 
apt-get install v4l-utils sox alsa-tools alsa-oss

Запускаем:

 
arecord -B --buffer-time=1000000 -f dat -r 16000 -d 4 -D plughw:1,0 send.wav
php ya_speech.php

Код для работы с самим API

 
<?php

  /**
  * Генерация уникального $uuid
  * 
  * @param int $min
  * @param int $max
  * @param int $count
  * 
  * @return array
  */
  function generateRandomSelection($min, $max, $count)
  {
    $result=array();
    if($min>$max) return $result;
    $count=min(max($count,0),$max-$min+1);
    while(count($result)<$count) {
        $value=rand($min,$max-count($result));
        foreach($result as $used) if($used<=$value) $value++; else break;
        $result[]=dechex($value);
        sort($result);
    }
    shuffle($result);
    return $result;
  }

  function recognize($file)
  {
    $key = 'XXXXX';
    $uuid=generateRandomSelection(0,30,64);
    $uuid=implode($uuid);    $uuid=substr($uuid,1,32);
    $curl = curl_init();
    $url = 'https://asr.yandex.net/asr_xml?'.http_build_query(array(
        'key'=>$key,
        'uuid' => $uuid,
        'topic' => 'queries',
        'lang'=>'ru-RU'
    ));
    curl_setopt($curl, CURLOPT_URL, $url);
    $data=file_get_contents(realpath($file));
    curl_setopt($curl, CURLOPT_POST, true);
    curl_setopt($curl, CURLOPT_POSTFIELDS, $data);
    curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, 0);
    curl_setopt($curl, CURLOPT_FOLLOWLOCATION, true);
    // https://tech.yandex.ru/speechkit/cloud/doc/dg/concepts/speechkit-dg-recogn-params-docpage/
    curl_setopt($curl, CURLOPT_HTTPHEADER, array('Content-Type: audio/x-wav'));
    //curl_setopt($curl, CURLOPT_VERBOSE, true);
    $response = curl_exec($curl);
    $err = curl_errno($curl);
    curl_close($curl);
    
    if ($err)
	{
	  throw new exception("curl err $err");
	}
	else
	{
	  $oResponse = simplexml_load_string($response);
	  $i = 1;
	  foreach($oResponse->variant as $oVariant)
      {
        $sText = (string) $oVariant[0];
        $aAttributes = $oVariant->attributes();
        echo $i.': '.$sText.' ('.$aAttributes['confidence'].')'."\n";
        $i++;
      }
	  
	}
  }

  recognize('send.wav');
  
  echo("Done\n");

Основная статья по API Яндекса


Категории: PHP, raspberry pi 3 / arduino
Яндекс.Метрика