Страница 2 из 5

Re: голосовой ввод через браузер

Добавлено: Вт янв 06, 2015 9:13 pm
Vit
обновился......все равно вот так

http://c2n.me/39ZFp0q.png


добавил код, все равно цикл

Изображение

Re: голосовой ввод через браузер

Добавлено: Вт янв 06, 2015 9:33 pm
sergejey
Vit писал(а):обновился......все равно вот так
добавил код, все равно цикл
Забавно... она сама себя может распознать не совсем так, как сказала :)
Тут пока даже не соображу как бороться, т.к. проверка на полное совпадение не работает. Как вариант не запускать интерфейс с распознаванием на том же компьютере, что и сервер, что б система сама себя не могла слышать.

Re: голосовой ввод через браузер

Добавлено: Вт янв 06, 2015 9:35 pm
Vit
sergejey писал(а):
Vit писал(а):обновился......все равно вот так
добавил код, все равно цикл
Забавно... она сама себя может распознать не совсем так, как сказала :)
Тут пока даже не соображу как бороться, т.к. проверка на полное совпадение не работает. Как вариант не запускать интерфейс с распознаванием на том же компьютере, что и сервер, что б система сама себя не могла слышать.

пока данный вариант нет возможности попробовать...кто то из форумчан думаю протестирует и отпишет....

Re: голосовой ввод через браузер

Добавлено: Вт янв 06, 2015 11:52 pm
triada13
Vit писал(а):пока данный вариант нет возможности попробовать...кто то из форумчан думаю протестирует и отпишет....
Vit подскажи что сделать, у меня нет зацикливания.

Re: голосовой ввод через браузер

Добавлено: Чт янв 08, 2015 10:02 pm
Vit
triada13 писал(а):
Vit писал(а):пока данный вариант нет возможности попробовать...кто то из форумчан думаю протестирует и отпишет....
Vit подскажи что сделать, у меня нет зацикливания.
Вот по примеру Сергея:

"Как вариант не запускать интерфейс с распознаванием на том же компьютере, что и сервер, что б система сама себя не могла слышать."

ты на одной машине запускаешь?

Re: голосовой ввод через браузер

Добавлено: Чт янв 08, 2015 10:13 pm
triada13
Vit нет, сервер у меня на CubirTrucke, к нему доступ только по сети.

Re: голосовой ввод через браузер

Добавлено: Чт янв 08, 2015 10:19 pm
sergejey
Ребят, я думаю, что это направление всё-таки не перспективное до тех пор, пока не будет возможности решить проблему с постоянным запросом разрешения.

Re: голосовой ввод через браузер

Добавлено: Чт янв 08, 2015 10:22 pm
triada13
Сергей, а нельзя эту кнопку как то программно нажимать? и нажатие это привязать к ключевому слову?р

Re: голосовой ввод через браузер

Добавлено: Чт янв 08, 2015 11:44 pm
sergejey
triada13 писал(а):Сергей, а нельзя эту кнопку как то программно нажимать? и нажатие это привязать к ключевому слову?р
Боюсь, что это уже не ко мне... по крайней мере, я не знаю как так сделать.

Re: голосовой ввод через браузер

Добавлено: Сб янв 10, 2015 2:03 pm
sergejey
Так-с... всё-таки я решил ещё одну вещь попробовать. Повторюсь, все эксперименты в браузере Chrome.

Итак, вот новый вариант для поля дополнительного Javascript-кода:

Код: Выделить всё

var eventMethod = window.addEventListener ? "addEventListener" : "attachEvent";
var eventer = window[eventMethod];
var messageEvent = eventMethod == "attachEvent" ? "onmessage" : "message";

// Listen to message from child window
eventer(messageEvent,function(e) {
    var key = e.message ? "message" : "data";
    var data = e[key];
    //run function//
    if (data!='') {
    var final_transcript=data;
    $.get('/command.php?qry='+encodeURIComponent(final_transcript),
       function( data ) {
       //alert(data);
      });
    }
},false); 
И вот что должно быть внутри HTML:

Код: Выделить всё

<iframe src="https://smartliving.ru/voice.html" width="100" height="40" marginwidth="0" frameborder="0" seamless></iframe> 
После обновления элемента надо перейти на страницу https://smartliving.ru/voice.html -- она не загрузится из-за невалидного SSL-сертификата, но через ссылку Дополнительно можно всё равно перейти. Там соглашаемся с использованием микрофона и эту ссылку можно закрывать, открыв перед этим сцену с настроенным по инструкциям выше элементом. Так нужно будет делать каждый раз после закрытия браузера, но пока браузер работает повторно ничего подтверждать не нужно (у меня он работает неделями без перезагрузки).

Если вы можете разместить файл voice.html на своём хостинге с нормальным SSL, то действия из предыдущего абзаца выполнять не нужно, нужно залить этот файл и поменять ссылку в HTML-коде с https://smartliving.ru/voice.html на вашу. Файлик сервер сайта совершенно не напрягает и никаких действий с сайтом не производит, важен только факт его загрузки.

Вот содержимое файла voice.html:
SPOILERSPOILER_SHOW

Код: Выделить всё

<html>
 <head>
  <script language="javascript" src="https://code.jquery.com/jquery-2.1.3.min.js"></script>
 </head>
 <body style="padding:0px;maring:0px;">
 <script language="javascript">

window.onmessage = function(event) {
    event.source.postMessage(document.body.innerHTML, event.origin);
};

if ('webkitSpeechRecognition' in window) {

var recognitionStatus=0;
var pauseTimer;

function updateStatus() {
 if (recognitionStatus==1) {
  $('#micURL').html('<span style="color:green">A</span>');
 } else {
  $('#micURL').html('<span style="color:red">P</span>');
 }
}

function pauseRecognition(delay) {

 clearTimeout(pauseTimer);
 if (delay==0) {
  if (recognitionStatus==1) {
   recognition.stop();
   recognitionStatus=0;
  } else {
   recognition.start();
   recognitionStatus=1;
  }
 } else {
  recognition.stop();
  recognitionStatus=0;
  pauseTimer=setTimeout('recognition.start();recognitionStatus=1;updateStatus();', delay*1000);
 }

 updateStatus();
 return false;
}

var recognition;

$(document).ready(function(){
  recognition = new webkitSpeechRecognition();
  var final_transcript = '';
  recognition.continuous = true;
  recognition.interimResults = true;
  recognition.lang = "ru";

  recognition.onend = function() {
    if (recognitionStatus==1) {
     recognition.start();
    }
  }; 

  recognition.onresult = function( event ) {
    var final_transcript = '';
    for (var i = event.resultIndex; i < event.results.length; ++i) {
      if (event.results[i].isFinal) {
        final_transcript += event.results[i][0].transcript;
      } 
    }
    $('#speech_block').val(final_transcript);
    if (final_transcript!='') {
     if(self != top){
      parent.postMessage(final_transcript,'*');
      pauseRecognition(5);
     }
    }
  };
  recognitionStatus=1;
  recognition.start();
});  

}

 </script>
 <input type="text" name="speech_block" id="speech_block" size="5">
 <span id="mic"><a href="#" onClick="pauseRecognition(0);return false;" id="micURL"><span style="color:green">A</span></a></span>
 </body>
</html>
Всё, по идее дожно работать распознавание речи без постоянного запроса использования микрофона. После распознанной фразы идёт принудительная пауза распознавания в 5 секунд, чтобы система сама себя не слышала.