Taula de continguts:

Espelho Mágico: 6 passos
Espelho Mágico: 6 passos

Vídeo: Espelho Mágico: 6 passos

Vídeo: Espelho Mágico: 6 passos
Vídeo: TUTORIAL 2024, De novembre
Anonim
Image
Image

Neste Instructables mostramos com criar um protótito de um espelho intel·ligent que projecta informació de clima i notícies, utilitzant comandos de veu.

Embora seja o projecto de um espelho, no hauríem d’utilitzar um devido a contratempos.

Pas 1: maquinari

Maquinari
Maquinari

Dragonboard 410c

Tauler altell d’àudio

Pas 2:

Imatge
Imatge

Per a un programa utilitzat per Visual Studio Community 2017, e a linguagem c #. Una interfície gràfica s'ha utilitzat amb l'editor XAML de Visual Studio.

Pas 3: Programa - Detecció de Voz

O primer passo, foi treballant com a detecció de veu. A placa Audio Mezzanine Board pot tenir diversos micròfons integrats, que utilitzen per a la detecció. No Visual Studio, utilitza una biblioteca Windows. Media. SpeechRecognition per descodificar una veu.

Foi utilitzat o mètode trobat aqui per a una inicialització de detecció de veu, que és mostrat també abaixo.

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

Após iniciar o reconhecimento, o method RecognizerResultGenerated recebe os comandos que foram interpretats e compara com os commandos com os que estão configurado em um arquivo xml que foi criado e inserido na solución.

Com no es va poder introduir un idioma portuguès, els comandaments utilitzats foram show (mostrar) i hide (esconder) e o que deve ser mostrado forecast (previsão) e news (notícies).

private async void RecognizerResultGenerated (sessió SpeechContinuousRecognitionSecession, SpeechContinuousRecognitionResultGeneratedEventArgs args) {

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

// Comproveu si hi ha etiquetes diferents i inicialitzeu les variables

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

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

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

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

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

// Primer comproveu a quin dispositiu fa referència l’usuari

if (cmd. Equals ("mostrar"))

{

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

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

{

if (device. Equals ("forecast")) {//Tempo. Text = ""; wait this. Dispatcher. RunAsync (Windows. UI. Core. CoreDispatcherPriority. High, () => {// Ara funciona, perquè s'executa al fil de la IU: this. Max_tit. Text = ""; this. Min_tit. Text = ""; this. Min. Text = ""; this. Max. Text = ""; this. Img_Tempo. Source = nova imatge Bitmap (Uri nou ("ms-appx: ///Images/blank.png"));

});

}

else if (device. Equals ("news"))) {await this. Dispatcher. RunAsync (Windows. UI. Core. CoreDispatcherPriority. High, () => {// Ara funciona, perquè s'executa al fil de la IU: això. News1. Text = ""; this. News2. Text = ""; this. News3. Text = ""; this. News4. Text = ""; this. News5. Text = "";}); } else {// Debug. WriteLine ("Dispositiu desconegut"); }} else {//Debug. WriteLine("Ordre desconegut "); }

}

Pas 4: Programa - Exibir Previsió Do Tempo

Si es comanda de veu detectada per a la predicció del programa, o el mètode Consulta_previsao envia uma requisição HTTP al site CPTEC do INPE, que retorna una previsió del temps en un arxiu xml. Após a leitura do xml, uma imagem é mostrada na tela of acord com a previsão e também são mostrades as temperatures màxima e mínima.

private async void Consulta_previsao () {

HttpClient httpcliente = new HttpClient ();

// HttpResponseMessage resp = httpcliente. GetAsync ("https://servicos.cptec.inpe.br/XML/cidade/222/previsao.xml"). Resultat; var resp = httpcliente. GetAsync ("https://servicos.cptec.inpe.br/XML/cidade/222/previsao.xml"). Resultat; resp. EnsureSuccessStatusCode (); var respbody = resp. Content. ReadAsStringAsync (); XmlDocument previsao = nou 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 ("mínims"); string tempmin = (nodes. Item (0). InnerText); nodes = root. GetElementsByTagName ("màxims"); string tempmax = (nodes. Item (0). InnerText);

string rsultado_previsao = "";

commutador (prevtempo)

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

}

wait this. Dispatcher. RunAsync (Windows. UI. Core. CoreDispatcherPriority. High, () => {// Ara funciona, perquè s’executa al fil de la IU: 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: /// Imatges / "+ rsultado_previsao));});

}

Pas 5: Programa - Exibir Notícies

Veure el comandament detectat per a les notícies del programa, o el mètode Consulta_noticias envia uma requisição HTTP al feed de notícies de la BBC, que també retorna a XML. As five primeiras notícias são exibidas na tela em textblocks.

privat asíncron buit Consulta_noticias () {

HttpClient httpcliente2 = new HttpClient ();

var resp2 = httpcliente2. GetAsync ("https://feeds.bbci.co.uk/portuguès/rss.xml"). Resultat;

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

noticia. LoadXml (respbody2. Result);

XmlElement root2 = noticia. DocumentElement;

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

espera 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);

});

}

Pas 6: Conclusió

Si es reprodueixen instruccions, es podrà realitzar detecció de comandaments de veu mitjançant una placa d'alguma com a Windos IoT Core instal·lat. Basta criar o arquivo de gramática com os comandos desejados.

Autors: Egon Patrick Marques Silva

Frederico Clark

Recomanat: