Inhaltsverzeichnis:

Espelho Mágico - Gunook
Espelho Mágico - Gunook

Video: Espelho Mágico - Gunook

Video: Espelho Mágico - Gunook
Video: Oficina G3 | Espelhos Mágicos (DVD Acústico) 2024, November
Anonim
Image
Image

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

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

Schritt 1: Hardware

Hardware
Hardware

Drachenbrett 410c

Audio Mezzanine-Board

Schritt 2:

Bild
Bild

Para a programação foi utilizado of Visual Studio Community 2017, e a linguagem c#. Eine grafische Benutzeroberfläche für die Verwendung von XAML-Editor für Visual Studio.

Schritt 3: Programação - Detecção De Voz

O primeiro passo, foi trabalhar com a detecção de voz. A placa Audio Mezzanine Board mit Mikrofon-Integrados, que foram utilizados para a detecção. Kein Visual Studio, verwendet eine Bibliothek von Windows. Media. SpeechRecognition für decodificar a voz.

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

privat async void InicializaVoz() { var idioma = new Windows. Globalization. Language("en-US"); SpeechRecognizer-Erkenner = neuer SpeechRecognizer (Idiom); Recognizer. StateChanged += RecognizerStateChanged; cognizer. ContinuousRecognitionSession. ResultGenerated += RecognizerResultGenerated; string fileName = String. Format(SRGS_FILE); StorageFile grammarContentFile = warten Package. Current. InstalledLocation. GetFileAsync(fileName); SpeechRecognitionGrammarFileConstraint grammarConstraint = new SpeechRecognitionGrammarFileConstraint(grammarContentFile); cognizer. Constraints. Add(grammatikConstraint); SpeechRecognitionCompilationResult compilationResult = waitcognizer. CompileConstraintsAsync(); if (compilationResult. Status == SpeechRecognitionResultStatus. Success) { Debug. WriteLine("Ergebnis: " + compilationResult. ToString()); Warteerkennung. ContinuousRecognitionSession. StartAsync(); } else { Debug. WriteLine("Status: " + KompilierungResult. Status); } }

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

Como não foi possível inserir or idioma português, os comandos utilizados foram show (mostrar) and hide (esconder) oder que deve ser Mostrado Forecast (previsão) and news (notícias).

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

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

// Auf verschiedene Tags prüfen und die Variablen initialisieren

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

Zeichenfolge 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["Gerät"][0]. ToString(): "";

// Prüfen Sie zuerst, auf welches Gerät sich der Benutzer bezieht

if (cmd. Equals("zeigen"))

{

if (device. Equals("Forecast")) { Consulta_previsao(); } else if (device. Equals("news")) { Consulta_noticias(); } else { //Debug. WriteLine("Unbekanntes Gerät"); }

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

{

if (device. Equals("forecast")) { //Tempo. Text = ""; wait this. Dispatcher. RunAsync(Windows. UI. Core. CoreDispatcherPriority. High, () => { // Das funktioniert jetzt, weil es auf dem UI-Thread läuft: 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, () => { // Das funktioniert jetzt, weil es auf dem UI-Thread läuft: this. News1. Text = ""; this. News2. Text = ""; this. News3. Text = ""; this. News4. Text = ""; this. News5. Text = ""; }); } else { // Debug. WriteLine("Unbekanntes Gerät"); } } else { //Debug. WriteLine("Unbekannter Befehl"); }

}

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

Se o comando de voz Detectado für Show-Vorhersage, o método Consulta_previsao envia uma requisição HTTP oo Site CPTEC do INPE, que retorna a previsão do tempo em um arquivo xml. Após a leitura do xml, uma imagem é mostrada na tela de acordo com a previsão und também são mostradas als Temperaturas maxima e minima.

privat asynchron void Consulta_previsao() {

HttpClient httpcliente = new

//HttpResponseMessage bzw. = 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"). Ergebnis; bzw. EnsureSuccessStatusCode(); var respbody = resp. Content. ReadAsStringAsync(); XmlDocument previsao = neues XmlDocument();

previsao. LoadXml(respbody. Result);

XmlElement root = previsao. DocumentElement;

XmlNodeList-Knoten = 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); Knoten = root. GetElementsByTagName("Minima"); Zeichenfolge tempmin = (nodes. Item(0). InnerText); Knoten = root. GetElementsByTagName("Maxima"); Zeichenfolge tempmax = (nodes. Item(0). InnerText);

string rsultado_previsao = "";

Schalter (vorheriges Tempo)

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

}

wait this. Dispatcher. RunAsync(Windows. UI. Core. CoreDispatcherPriority. High, () => { // Das funktioniert jetzt, weil es auf dem UI-Thread läuft: 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:/// Bilder/" + rsultado_previsao)); });

}

Schritt 5: Programação - Exibir Notícias

Se o comando Detectado für Show-News, oder método Consulta_noticias envia um eine HTTP-Anforderung oder Feed von BBC-Notizen, que também retorna um XML. Als cinco primeiras notícias são exibidas na tela em textblocks.

privat async 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 node2 = root2. GetElementsByTagName(@"title");

wait this. 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);

});

}

Schritt 6: Fazit

Ao reproduzier esse instructables, será possível realizar detecção de comandos de voz utilizando Alguma placa com o Windos IoT Core instalado. Basta criar oder arquivo de gramática com os comandos desejados.

Autores: Egon Patrick Marques Silva

Frederico Clark