Muitas vezes ao começarmos a apresentar um conceito em uma linguagens, temos a necessidade de apresentar uma interface, que permita a interação do usuário come esta linguagem.
Temos visto uma crescente de IoT desenvolvidos especificamente para reconhecer comandos de seu dono, tais dispositivos, como Alexa ou o Google Home, tem se tornado, bem popular.
Iremos neste artigo, aprender a criar nosso próprio google home.
O que é o CMU Sphinx
CMU Sphinx é uma api de reconhecimento de voz. Ela é bastante consagrada, possuindo muitos projetos atrelados a ela.
Trato a biblioteca com bastante foco para desenvolvimento IoT, no meu livro que pode ser baixado livremente.
A grande vantagem desta api, é que ela não necessita de conexão externa ou acesso a internet.
Uso do CMU Sphinx
Utilizaremos o CMU Sphinx como base do nosso projeto.
Para atender a instalação será necessário as seguintes bibliotecas:
apt install bison
apt install libasound2-dev
apt install swig
apt install python
Pré requisitos de instalação
Instalação do Sphinx pelo gerenciador de pacotes
A instalação do sphinx pelo gerenciador de pacote, fica bem mais fácil, porem pode ser necessário, atualizar manualmente a versão, pois ninguem garante que o repositório estará atualizado com a ultima versão.
apt install shinxbase*
apt install pocketsphinx*
instalação através do gerenciador de pacotes
Baixa manual
Nesta modalidade iremos baixar e instalar o sphinx manualmente em nosso linux.
Quem me conhece, sabe da minha luta pelas minhas filhas.
A 12 anos atraz, vi que a minha ex mulher não tinha condições de cuidar das minhas filhas.
Para tentar resolver isso entrei na justiça. Após quase 5 anos de luta na justiça, recebi da Justiça a negativa.
Mesmo apresentando todos os argumentos e provas inequivocas.
Após mais 2 anos de vencido o processo, uma das minhas filhas, comecou a apresentar comportamento que condizia com o abandono, e negligência que reclamava. Ela se cortava.
E eu ficava desesperado, sem conseguir ajuda-la. Mais uma vez eu entrei na justiça, para tentar na justiça dos homens que minha ex desse o tratamento necessário. Que interviessem sobre o assunto, e exigissem o tratamento.
Infelizmente, não fui ouvido, e muitas vezes era injuriado ou chacoteado pela minha insistência.
Mesmo fazendo tudo o que pude, já que não mais detinha o poder pátrio. Pois me foi roubado, na decisão de guarda.
Lutei, mas nada conseguia. Parecia que as portas se fechavam para mim.
Fiz tudo o que pude, para proteger as meninas na epoca. Sempre mostrando para elas (minhas filhas) que o pai amava elas.
Pedia a Deus, que me mostrasse o caminho. Mas só encontrava desespero e abandono.
Sem poder fazer nada por elas. Via mãos e pernas cortados, e meu coração sangrava junto dela. A cada corte meu desespero, e minhas lágrimas corriam em silencio.
Rezava pela outra, pelo abandono e falta de carinho, que a Mae demonstrava. Onde era imposto a mais velha o papel de mãe da mais nova. Mesmo ela não podendo realizar tal comportamento, desde os 7 anos de idade.
Nos poucos momentos que tinha com elas, fazia de tudo, para que naqueles momentos com elas (minhas filhas) fossem momentos inesqueciveis
Mesmo que para isso eu passa-se meses em situação de penúria (comendo miojo e salsicha), nos meses subsequentes.
Anos se passaram, muitas lagrimas cairam, do meu rosto e das minhas filhas.
Mas Deus, sabe seu tempo.
Minhas filhas hoje moram perto de mim.
A mais velha, que sempre foi minha amiga, saiu escondido, ao completar 18 anos da casa da mãe.
E veio morar comigo Hoje ela casou, esta bem, lutando pelo pão, mas sempre nos fins de semana estamos juntos.
A outra, ao completar 18 anos, tambem viu a injustiça. Viu ela mesma as injustiças que sofria e resolveu tomar para si. Veio para minha casa. Hoje vivo com elas (minhas filhas) com minha parceira, que tambem foi algo trazido por Deus. Gosta das minhas filhas, e todos nós estamos juntos como uma famíla.
Sempre sonhei com uma família, lutei muito, construindo um lar.
Montei uma casa, que como eu era destruída.
Aos poucos fui reformando. Sonhando com uma casa para minha família. Onde os filhos estivessem aqui, junto com uma mulher que tornasse aqui um lar.
Teve momentos que jamais acreditaria que o desfecho fosse bom, pois com um relacionamento com uma pessoa extremente egoísta, que não aceitava minha família. Via pouca ou nenhuma a chance de ser feliz por completo.
No entanto, Deus não deixou eu me casar com ela. Separei, sofri, me perdi.
Mas Deus tira as pedras, para liberar a estrada.
Conheci a mulher certa. em 4 meses casei, ela adotou minhas filhas como sua.
Abraçou a família porque ela mesma não tinha a sua.
Hoje Deus me deu tudo isso.
Conclusão
Deus sabe o que faz,
Não peça por vingança.
Peça por dissernimento, peça pelo melhor caminho.
Lute, mas lute com todas as suas forças, contra a injustiça. E pelo que acredita. Não desista.
Porque Deus no final te dá o resultado.
Ele sabe o que faz. Ele abre caminhos, resolve problemas insoluveis.
Infelizmente a gente é imediatista, mas Deus tem seu tempo.
Ele sabe o caminho. E de vagar irá resolver o irresolvivel, te abraçar e confortar.
Seja justo, seja honesto, seja forte, seja sincero. Porque Deus gosta de quem é honesto e sincero.
Confie NELE, o resto vem. Fique tranquilo, sou prova viva disso.
A conexão de todos os scripts são definidos pelo código connectdb.php, conforme fragmento abaixo:
<?php
define("HOSTNAME","localhost");
define("USERNAME","php");
define("PASSWORD","123456");
define("DATABASE","testedb");
?>
$dbhandle = new mysqli(HOSTNAME, USERNAME, PASSWORD, DATABASE) or die("Erro ao conectar no banco de dados");
Nele definimos as definições de conexão que podemos chamar nos demais programas.
Web Service do PHP
Acesso a base de Pessoas, eu criei um web service bem simples.
Podemos notar que todo o serviço pesado é realizado pelo web service, ficando a responsábilidade apenas do controler de consumir as informações passadas.
Não entrarei no detalhe técnico do PHP, nem em detalhes sobre o modelo MVC.
Deixarei tal atividade para um post em momento oportuno.
Conclusão
O PHP é uma linguagem robusta e intuitiva, permitindo escrita elegante de um código limpo e eficiente.
Eu no entanto, não me considero um programador excepcional em PHP, apenas quebro o galho, criando algumas páginas e cumprindo um papel menor.
O PHP é muito mais que apresentado aqui, porem sei que isso será suficiente para dar um norte para muitos.
Espero ter ajudado, e caso tenham gostado do artigo, mandem um email para mim.
Vou apresentar aqui muito sutilmente um caso de construção de uma interface em Lazarus.
Qual a diferença entre uma interface e uma classe.
A Interface é como um contrato, onde se estabelece as conexões de saída (Métodos e propriedades) que serão utilizadas. Nela voce não precisa criar código, pois só estabelece quais serão as conexões.
Ao criar uma classe, vc estabele as conexões porem tem que realizar uma série de codificações (implementation) que de fato não seriam necessárias. Pois a codificação fica a cargo da classe filha.
Exemplo de projeto
Desenvolvi uma interface no projeto da API da impressora.
Na unit imp_generico.pas, estabelecemos a interface, que será herdada das demais classes.
{ TIMP_GENERICO }
TIMP_GENERICO = interface
['{045F6EED-2C11-447D-A7DC-09DB995367C2}']
function getserial : string;
procedure setserial(value : string);
function InitPrint(): string;
function NewLine(): string;
function LineText(Info : string): string;
function Negrito(): string;
function Normal(): string;
function Sublinhado(): string;
function DoubleTexto(): string;
function beep(): string;
function Guilhotina(): string;
function AcionaGaveta(): string;
function Barra1D(Info : string): string;
function Barra2D(info : String): string;
function loadImagem(X,Y : integer; Info : String): string;
function imprimeImagem(X,Y : integer): string;
property Serial : String read getserial write setserial;
end;
No fonte imp_ELGINI9.pas, chamamos a interface, criando os métodos, realmente propostos na interface.
type
{ TIMP_ELGINI9 }
TIMP_ELGINI9 = class(TInterfacedObject,TIMP_GENERICO)
FCOLUNA : integer;
FSERIAL : String;
private
function getserial : string;
procedure setserial(value : string);
public
constructor create();
destructor destroy();
function NewLine(): string;
function InitPrint(): string;
function LineText(Info : string): string;
function beep(): string;
function Negrito(): string;
function Normal(): string;
function Sublinhado(): string;
function DoubleTexto(): string;
function Guilhotina(): string;
function AcionaGaveta(): string;
function Barra2D(Info : string): string;
function Barra1D(Info : string): string;
function loadImagem(X,Y : integer;Info : String): string;
function imprimeImagem(X,Y : integer): string;
function Centralizado(): string;
function PaginaM616(): string;
function CorPg618(): string;
function HabilitaArmazenaDados(): string;
function Armazenadados( Info : string): string;
function ImprimeQRCODEArmazenado(): string;
published
property Serial : String read getserial write setserial;
end;
var
IMPELGINI9: TIMP_ELGINI9;
implementation
Omiti a implementation, para que o artigo não fique demasiado longo.
NCURSES, conforme o wikipédia, fornece uma biblioteca que provê uma API para o desenvolvimento de interfaces em modo texto. Garante também uma otimização quanto as mudanças de telas, reduzindo a latência quando se utiliza acesso remoto via shells.
Instalando o NCURSES
Para instalar o ncurses é muito simples, basta digitar o comando abaixo: