Sommario:

Espelho Magico: 6 Passi
Espelho Magico: 6 Passi

Video: Espelho Magico: 6 Passi

Video: Espelho Magico: 6 Passi
Video: ESPELHOS MÁGICOS / NAVES IMPERIAIS | MORADA (CLIPE OFICIAL) 2024, Novembre
Anonim
Image
Image

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

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

Passaggio 1: hardware

Hardware
Hardware

Dragonboard 410c

Scheda audio mezzanino

Passo 2:

Immagine
Immagine

Per una programmazione per l'utilizzo di Visual Studio Community 2017, e una lingua c#. Un'interfaccia grafica per l'utilizzo dell'editor XAML per Visual Studio.

Fase 3: Programmazione - Rilevamento della voce

O primeiro passo, foi trabalhar com a detecção de voz. A placa Audio Mezzanine Board è possibile integrare microfoni, che foram utilizados per un rilevamento. No Visual Studio, utilizza una biblioteca Windows. Media. SpeechRecognition para decodificatore a voz.

Foi utilizado o método encontrado aqui para a inicialização da detecção de voz, que é mostrado também abaixo.

private async void InicializaVoz() { var idioma = new Windows. Globalization. Language("en-US"); Riconoscitore vocale = new Riconoscitore vocale (idioma); riconoscimento. StateChanged += RecognizerStateChanged; riconoscimento. ContinuousRecognitionSession. ResultGenerated += RecognizerResultGenerated; string nomefile = String. Format(SRGS_FILE); StorageFile grammarContentFile = wait Package. Current. InstalledLocation. GetFileAsync(fileName); SpeechRecognitionGrammarFileConstraint grammarConstraint = new SpeechRecognitionGrammarFileConstraint(grammarContentFile); riconosciuto. Constraints. Add(grammarConstraint); SpeechRecognitionCompilationResult compilationResult = attendi il riconoscimento. CompileConstraintsAsync(); if (compilationResult. Status == SpeechRecognitionResultStatus. Success) { Debug. WriteLine("Risultato: " + compilationResult. ToString()); attendono il riconoscimento. ContinuousRecognitionSession. StartAsync(); } else { Debug. WriteLine("Status: " + compilationResult. Status); } }

Após iniciar o reconhecimento, o metodo RecognizerResultGenerated ricebe os comandi che foram interpretados e compara con os comandi com os que estão configurados em um arquivo xml que foi criado e inserido na solução.

Come non puoi inserire o idioma português, os comandi utilizados foram show (mostrar) e hide (esconder)e o que deve ser showdo forecast (previsão) e news (notícias).

private async void RecognizerResultGenerated(SpeechContinuousRecognitionSession session, SpeechContinuousRecognitionResultGeneratedEventArgs args) {

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

// Verifica la presenza di tag diversi e inizializza le variabili

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

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

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

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

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

// Prima controlla a quale dispositivo si riferisce l'utente

if (cmd. Equals("mostra"))

{

if (device. Equals("forecast")) { Consulta_previsao(); } else if (device. Equals("news")) { Consulta_noticias(); } else { //Debug. WriteLine("Dispositivo sconosciuto"); }

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

{

if (device. Equals("forecast")) { //Tempo. Text = ""; attendi this. Dispatcher. RunAsync(Windows. UI. Core. CoreDispatcherPriority. High, () => { // Ora funziona, perché è in esecuzione sul thread dell'interfaccia utente: 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")) { wait this. Dispatcher. RunAsync(Windows. UI. Core. CoreDispatcherPriority. High, () => { // Questo ora funziona, perché è in esecuzione sul thread dell'interfaccia utente: this. News1. Text = ""; this. News2. Text = ""; this. News3. Text = ""; this. News4. Text = ""; this. News5. Text = ""; }); } else { // Debug. WriteLine("Dispositivo sconosciuto"); } } else { //Debug. WriteLine("Comando sconosciuto"); }

}

Fase 4: Programação - Exibir Previsão Do Tempo

Se o comando de voz rilevato per le previsioni dello spettacolo, o metodo Consulta_previsao richiede una richiesta HTTP o un sito CPTEC fa INPE, che restituisce una anteprima del tempo em um arquivo xml. Após a leitura do xml, uma imagem é mostrada na tela de acordo com a previsão e também são showdas as temperaturas máxima e mínima.

privato asincrono void Consulta_previsao() {

HttpClient httpcliente = new

//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;

XmlNodeList nodes = 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); nodes = root. GetElementsByTagName("minima"); string tempmin = (nodes. Item(0). InnerText); nodes = root. GetElementsByTagName("maxima"); string tempmax = (nodes. Item(0). InnerText);

string rsulado_previsao = "";

interruttore (prec.)

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

}

attendi this. Dispatcher. RunAsync(Windows. UI. Core. CoreDispatcherPriority. High, () => { // Ora funziona, perché è in esecuzione sul thread dell'interfaccia utente: 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:/// Immagini/" + rsulado_previsao)); });

}

Fase 5: Programmazione - Exibir Notícias

Se o comando rilevato per notizie di spettacolo, o metodo Consulta_noticias richiede una richiesta HTTP o feed di notizie da BBC, che também restituisce um XML. Come cinco primeiras notícias são exibidas na tela em textblocks.

privato asincrono void Consulta_noticias() {

HttpClient httpcliente2 = new

var resp2 =

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

noticia. LoadXml(respbody2. Result);

XmlElement root2 = noticia. DocumentElement;

XmlNodeList nodes2 = root2. GetElementsByTagName(@"title");

aspetta questo. 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);

});

}

Fase 6: Conclusione

Inoltre, è possibile riprodurre le istruzioni, se possibile realizzare il rilevamento dei comandi di voz utilizando alguma placa con Windos IoT Core installato. Basta criar o arquivo de gramática com os comandi desejados.

Autore: Egon Patrick Marques Silva

Frederico Clark

Consigliato: