Tabla de contenido:

Espelho Mágico: 6 pasos
Espelho Mágico: 6 pasos

Video: Espelho Mágico: 6 pasos

Video: Espelho Mágico: 6 pasos
Video: A TÉCNICA DO ESPELHO MÁGICO - FAÇA E VEJA O RESULTADO - Lu Lampert 2024, Noviembre
Anonim
Image
Image

Neste Instructables mostramos como criar um protótipo de um espelho inteligente que projeta informações de clima e notícias, utilizando comandos de voz.

Embora seja o projeto de um espelho, não houve como utilizar um devido a contratempos.

Paso 1: hardware

Hardware
Hardware

Dragonboard 410c

Tablero de entresuelo de audio

Paso 2:

Imagen
Imagen

Para un programa que se utilizó en Visual Studio Community 2017, y un idioma c #. Una interfaz gráfica para feita utilizando el editor XAML de Visual Studio.

Paso 3: Programación - Detección de Voz

O primeiro passo, foi trabalhar com a detecção de voz. A placa Audio Mezzanine Board já possui dois microfones integrados, que foram utilizados para una detección. No Visual Studio, utilizamos una biblioteca Windows. Media. SpeechRecognition para decodificar una voz.

Foi used o method found aqui para a inicialização da detecção de voz, que é mostró también abaixo.

private async void InicializaVoz () {var idioma = new Windows. Globalization. Language ("en-US"); SpeechRecognizer Recognizer = nuevo SpeechRecognizer (idioma); Recognizer. StateChanged + = RecognizerStateChanged; Recognizer. ContinuousRecognitionSession. ResultGenerated + = RecognizerResultGenerated; string fileName = String. Format (SRGS_FILE); StorageFile grammarContentFile = aguardar Package. Current. InstalledLocation. GetFileAsync (fileName); SpeechRecognitionGrammarFileConstraint grammarConstraint = new SpeechRecognitionGrammarFileConstraint (grammarContentFile); Recognizer. Constraints. Add (grammarConstraint); SpeechRecognitionCompilationResult compilationResult = espera al reconocedor. CompileConstraintsAsync (); if (compilationResult. Status == SpeechRecognitionResultStatus. Success) {Debug. WriteLine ("Resultado:" + compilationResult. ToString ()); aguardar reconocedor. ContinuousRecognitionSession. StartAsync (); } else {Debug. WriteLine ("Estado:" + compilationResult. Status); }}

Após iniciar o reconhecimento, o método RecognizerResultGenerated recebe os comandos que foram interpretados y compare com os comandos com os que estão configurados em um arquivo xml que foi criado e inserido na solução.

Como no se puede inserir en idioma portugués, los comandos utilizados para mostrar (mostrar) e ocultar (esconder) e o que deve ser mostrado pronóstico (previso) e noticias (notícias).

private async void RecognizerResultGenerated (sesión SpeechContinuousRecognitionSession, argumentos SpeechContinuousRecognitionResultGeneratedEventArgs) {

int count = args. Result. SemanticInterpretation. Properties. Count;

// Busca diferentes etiquetas e inicializa las variables

String target = args. Result. SemanticInterpretation. Properties. ContainsKey ("target")? args. Result. SemanticInterpretation. Properties ["objetivo"] [0]. ToString (): "";

Cadena cmd = args. Result. SemanticInterpretation. Properties. ContainsKey ("cmd")?

args. Result. SemanticInterpretation. Properties ["cmd"] [0]. ToString (): "";

String device = args. Result. SemanticInterpretation. Properties. ContainsKey ("dispositivo")?

args. Result. SemanticInterpretation. Properties ["dispositivo"] [0]. ToString (): "";

// Primero verifique a qué dispositivo se refiere el usuario

if (cmd. Equals ("mostrar"))

{

if (device. Equals ("pronóstico")) {Consulta_previsao (); } else if (dispositivo. Equals ("noticias")) {Consulta_noticias (); } else {//Debug. WriteLine("Unknown Device "); }

} else if (cmd. Equals ("ocultar"))

{

if (device. Equals ("pronóstico")) {//Tempo. Text = ""; espere this. Dispatcher. RunAsync (Windows. UI. Core. CoreDispatcherPriority. High, () => {// Esto ahora funciona, porque se está ejecutando en el hilo de la interfaz de usuario: this. Max_tit. Text = ""; this. Min_tit. Text = ""; this. Min. Text = ""; this. Max. Text = ""; this. Img_Tempo. Source = new BitmapImage (new Uri ("ms-appx: ///Images/blank.png"));

});

}

else if (device. Equals ("news")) {await this. Dispatcher. RunAsync (Windows. UI. Core. CoreDispatcherPriority. High, () => {// Esto ahora funciona, porque se está ejecutando en el subproceso de la interfaz de usuario: esto. News1. Text = ""; this. News2. Text = ""; this. News3. Text = ""; this. News4. Text = ""; this. News5. Text = "";}); } else {// Debug. WriteLine ("Dispositivo desconocido"); }} else {//Debug. WriteLine("Unknown Command "); }

}

Paso 4: Programación - Exibir Previsão Do Tempo

Se o comando de voz detectado para mostrar pronóstico, o método Consulta_previsao envia uma requisição HTTP ao sitio CPTEC do INPE, que retorna una previsión de tempo em um arquivo xml. Após a leitura do xml, uma imagem é mostrada na tela de acordo com una previsión y também são mostradas como temperaturas máximas e mínimas.

private async void Consulta_previsao () {

HttpClient httpcliente = new HttpClient ();

// HttpResponseMessage resp = httpcliente. GetAsync ("https://servicos.cptec.inpe.br/XML/cidade/222/previsao.xml"). Result; var resp = httpcliente. GetAsync ("https://servicos.cptec.inpe.br/XML/cidade/222/previsao.xml"). Result; resp. EnsureSuccessStatusCode (); var respbody = resp. Content. ReadAsStringAsync (); XmlDocument previsao = new XmlDocument ();

previsao. LoadXml (respbody. Result);

XmlElement root = previsao. DocumentElement;

Nodos XmlNodeList = root. GetElementsByTagName ("tempo");

string prevtempo = (nodes. Item (0). InnerText);

string prevtempo1 = (nodes. Item (1). InnerText); string prevtempo2 = (nodes. Item (2). InnerText); string prevtempo3 = (nodes. Item (3). InnerText); nodos = root. GetElementsByTagName ("mínimo"); string tempmin = (nodes. Item (0). InnerText); nodos = root. GetElementsByTagName ("maxima"); string tempmax = (nodes. Item (0). InnerText);

string rsultado_previsao = "";

cambiar (tiempo anterior)

{case "ec": rsultado_previsao = "Chuvas_Isoladas.png"; rotura; case "ci": rsultado_previsao = "Chuvas_Isoladas.png"; rotura; caso "c": rsultado_previsao = "Chuva.png"; rotura; caso "en": rsultado_previsao = "Instavel.png"; rotura; caso "pp": rsultado_previsao = "Chuva.png"; rotura; case "cm": rsultado_previsao = "Chuva.png"; rotura; case "cn": rsultado_previsao = "Chuvas_Isoladas_Noite.png"; rotura; case "pt": rsultado_previsao = "Chuva.png"; rotura; case "pm": rsultado_previsao = "Chuvas_Isoladas.png"; rotura; case "np": rsultado_previsao = "Chuva.png"; rotura; caso "pc": rsultado_previsao = "Chuva.png"; rotura; case "pn": rsultado_previsao = "Nublado.png"; rotura; case "cv": rsultado_previsao = "Chuva.png"; rotura; case "ch": rsultado_previsao = "Chuva.png"; rotura; case "t": rsultado_previsao = "Tempestade.png"; rotura; caso "ps": rsultado_previsao = "Sol.png"; rotura; caso "e": rsultado_previsao = "Sol_Encoberto.png"; rotura; caso "n": rsultado_previsao = "Nublado.png"; rotura; case "cl": rsultado_previsao = "Sol.png"; rotura; case "nv": rsultado_previsao = "Nevoeiro.png"; rotura; caso "g": rsultado_previsao = "Neve.png"; rotura; caso "ne": rsultado_previsao = "Neve.png"; rotura; caso "nd": rsultado_previsao = "na.png"; rotura; case "pnt": rsultado_previsao = "Chuvas_Isoladas_Noite.png"; rotura; case "psc": rsultado_previsao = "Chuva.png"; rotura; case "pcm": rsultado_previsao = "Chuva.png"; rotura; case "pct": rsultado_previsao = "Chuva.png"; rotura; caso "pcn": rsultado_previsao = "Chuva.png"; rotura; case "npt": rsultado_previsao = "Chuva.png"; rotura; case "npn": rsultado_previsao = "Chuva.png"; rotura; case "ncn": rsultado_previsao = "Chuva.png"; rotura; case "nct": rsultado_previsao = "Chuva.png"; rotura; case "ncm": rsultado_previsao = "Chuva.png"; rotura; case "npm": rsultado_previsao = "Chuva.png"; rotura; case "npp": rsultado_previsao = "Chuva.png"; rotura; case "vn": rsultado_previsao = "Instavel.png"; rotura; case "ct": rsultado_previsao = "Chuva.png"; rotura; case "ppn": rsultado_previsao = "Chuvas_Isoladas_Noite.png"; rotura; case "ppt": rsultado_previsao = "Chuva.png"; rotura; caso "ppm": rsultado_previsao = "Chuva.png"; rotura;

}

await this. Dispatcher. RunAsync (Windows. UI. Core. CoreDispatcherPriority. High, () => {// Esto ahora funciona, porque se está ejecutando en el hilo de la interfaz de usuario: this. Max_tit. Text = "Máxima"; this. Min_tit. Text = "Mínima"; this. Min. Text = tempmin + "°"; this. Max. Text = tempmax + "°"; this. Img_Tempo. Source = new BitmapImage (new Uri ("ms-appx: /// Imágenes / "+ rsultado_previsao));});

}

Paso 5: Programación - Exibir Notícias

Se o comando detectado para mostrar noticias, o método Consulta_noticias envia uma requisição HTTP ao feed de notícias da BBC, que también retorna um XML. Como cinco primeras notificaciones de noticias en pantalla en bloques de texto.

private async void Consulta_noticias () {

HttpClient httpcliente2 = new HttpClient ();

var resp2 = httpcliente2. GetAsync ("https://feeds.bbci.co.uk/portuguese/rss.xml"). Result;

resp2. EnsureSuccessStatusCode (); var respbody2 = resp2. Content. ReadAsStringAsync (); XmlDocument noticia = new XmlDocument ();

noticia. LoadXml (respbody2. Result);

XmlElement root2 = noticia. DocumentElement;

XmlNodeList nodes2 = root2. GetElementsByTagName (@ "título");

espera esto. Dispatcher. RunAsync (Windows. UI. Core. CoreDispatcherPriority. High, () =>

{this. News1. Text = (nodes2. Item (2). InnerText); this. News2. Text = (nodes2. Item (3). InnerText); this. News3. Text = (nodes2. Item (4). InnerText); this. News4. Text = (nodes2. Item (5). InnerText); this. News5. Text = (nodes2. Item (6). InnerText);

});

}

Paso 6: Conclusión

Ao reproduzir esse instructables, será posible realizar la detección de comandos de voz utilizando alguma placa con Windos IoT Core instalado. Basta criar o arquivo de gramática com os comandos desejados.

Autores: Egon Patrick Marques Silva

Frederico Clark

Recomendado: