falawin.php
2010-12-31 17:36:33
2010-12-31 15:38:02
Autor: Sony Santos
https://gigawiki.com/sony/falawin-php
Permalink: https://gigawiki.com/922
categ = script; linguagem = php; projeto = Reconhecimento de fala; sistema = windows
<?php
# Sistema de reconhecimento de fala. Idioma português brasileiro.
# Mostra um menu de opções e cola o resultado no aplicativo em uso.
# Feito para windows (testado no Windows Vista). Licença: Domínio público.
# (c) 2010 Sony Fermino dos Santos - http://gigawiki.com/sony/
# Fornecido sem quaisquer garantias. Use por sua conta e risco.
# Veja instruções de uso em http://gigawiki.com/sony/reconhecimento-de-fala
#
# Parte destes comentários foi redigida verbalmente com este programa.

# abre comunicação com o Julius
$f = popen('julius -C opcoes.jconf', 'r');

while (true) {
  # aguarda a saída de 10 opções do julius
  $linha = '';
  while (strpos($linha .= fread($f, 4096), 'sentence10') == false);

  # separa as frases candidatas
  preg_match_all('/sentence\d+.(.*)/m', $linha, $matches);
  $opcoes = $matches[1];

  # ignora a respiração
  $opcoes = array_map('trim', $opcoes);
  $opcoes = array_map('utf8_decode', $opcoes);
  if (in_array('há um ano', $opcoes)) {
    ignora('respiração', opcoes);
    continue;
  }

  # monta um menu com as opções, e cola o resultado na aplicação corrente
  menu($opcoes);
}

# monta um menu com as opções
function menu($opcoes) {
  global $esta_janela;

  # monta opções de comando
  $op_cmd = '';
  $tamanho = 0;
  foreach($opcoes as $opcao) {
    if ($opcao) {
      # tira espaços repetidos
      $opcao = preg_replace('/\s{2,}/', ' ', $opcao);
      $op_cmd .= " \"$opcao\"";
      $tamanho += strlen($opcao);
    }
  }

  # na escolha da frase pode haver ruídos
  # se o tamanho total for pequeno, ignora.
  if ($tamanho < 50) return ignora("tamanho insuficiente: $tamanho", $opcoes);

  # monta comando

  # comando se o autohotkey estiver instalado (no vista):
  # $comando = "\"c:\program Files\AutoHotkey\AutoHotkey.exe\" menu.ahk $op_cmd";

  # comando para uso com menu.exe:
  $comando = "menu $op_cmd";

  # executa o comando
  shell_exec($comando);
}

function ignora($motivo, $opcoes) {
  # loga motivo
  echo "\nIgnorando: $motivo\nOpções:\n";
  foreach ($opcoes as $opcao) echo "    '$opcao'\n";
  return false;
}

?>
blog comments powered by Disqus