Isi kandungan:

Espelho Mágico: 6 Langkah
Espelho Mágico: 6 Langkah

Video: Espelho Mágico: 6 Langkah

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

Instructables Neste 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.

Langkah 1: Perkakasan

Perkakasan
Perkakasan

Papan Naga 410c

Papan Mezzanine Audio

Langkah 2:

Imej
Imej

Sebagai programação juga memanfaatkan Visual Studio Komuniti 2017, e linguagem c #. Antaramuka yang digunakan untuk penyunting XAML do Visual Studio.

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

Wahai primeiro passo, juga trabalhar com a detecção de voz. Papan Audio Mezzanine placa dengan integrasi mikrofon, que foram utilizados para a detecção. Tidak ada Visual Studio, menggunakan biblioteca Windows. Media. SpeechRecognition untuk decodificar a voz.

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

async peribadi tidak sah InicializaVoz () {var idioma = Windows. Globalization. Language baru ("en-US"); SpeechRecognizer mengenali = SpeechRecognizer baru (idioma); mengenali. StateChanged + = RecognizerStateChanged; mengenali. ContinuousRecognitionSession. ResultGenerated + = RecognizerResultGenerated; string fileName = String. Format (SRGS_FILE); StorageFile grammarContentFile = tunggu Pakej. Current. InstalledLocation. GetFileAsync (fileName); SpeechRecognitionGrammarFileConstraint grammarConstraint = baru SpeechRecognitionGrammarFileConstraint (grammarContentFile); pengecam. Constraints. Add (tatabahasaConstraint); SpeechRecognitionCompilationResult compilationResult = tunggu pengenal. KompilasiConstraintsAsync (); if (compilationResult. Status == SpeechRecognitionResultStatus. Success) {Debug. WriteLine ("Hasil:" + kompilasiResult. ToString ()); tunggu pengecam. ContinuousRecognitionSession. StartAsync (); } lain {Debug. WriteLine ("Status:" + compilationResult. Status); }}

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

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

async void RecognizerResultGenerated (sesi SpeechContinuousRecognitionSession, SpeechContinuousRecognitionResultGeneratedEventArgs args) {

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

// Periksa teg yang berbeza dan mulakan pemboleh ubah

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

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

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

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

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

// Periksa dahulu peranti mana yang dirujuk oleh pengguna

jika (cmd. Equals ("tunjukkan"))

{

jika (device. Equals ("ramalan")) {Consulta_previsao (); } lain jika (device. Equals ("news")) {Consulta_noticias (); } lain {//Debug. WriteLine("Unknown Device "); }

} lain jika (cmd. Equals ("hide"))

{

if (device. Equals ("ramalan")) {//Tempo. Text = ""; tunggu ini. Dispatcher. RunAsync (Windows. UI. Core. CoreDispatcherPriority. High, () => {// Ini sekarang berfungsi, kerana berjalan di utas UI: this. Max_tit. Text = ""; this. Min_tit. Text = ""; ini. Min. Text = ""; ini. Max. Text = ""; ini. Img_Tempo. Source = baru BitmapImage (Uri baru ("ms-appx: ///Images/blank.png"));

});

}

lain jika (device. Equals ("news")) {tunggu ini. Dispatcher. RunAsync (Windows. UI. Core. CoreDispatcherPriority. High, () => {// Ini sekarang berfungsi, kerana berjalan di utas UI: ini. News1. Text = ""; this. News2. Text = ""; this. News3. Text = ""; this. News4. Text = ""; this. News5. Text = "";}); } lain {// Debug. WriteLine ("Peranti Tidak Dikenal"); }} lain {//Debug. WriteLine("Unknown Command "); }

}

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

Se o comando de voz Detectado untuk ramalan pertunjukan, o método Consulta_previsao envia uma requisição HTTP ao site CPTEC do INPE, que retorna a previsão do tempo em um arquivo xml. Oleh itu, lakukan semua xml, semua gambaran yang paling baik dan teratur sebagai pilihan yang lebih awal seperti temperaturas mimaxima.

async peribadi tidak sah Consulta_previsao () {

HttpClient httpcliente = HttpClient baru ();

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

previsao. LoadXml (respbody. Result);

XmlElement root = previsao. DocumentElement;

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

string prevtempo = (node. Iem (0). InnerText);

string prevtempo1 = (node. Iem (1). InnerText); string prevtempo2 = (node. Iem (2). InnerText); string prevtempo3 = (node. Iem (3). InnerText); node = root. GetElementsByTagName ("minima"); rentetan tempmin = (node. Item (0). InnerText); node = root. GetElementsByTagName ("maxima"); rentetan tempmax = (node. Iem (0). InnerText);

rentetan rsultado_previsao = "";

tukar (prevtempo)

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

}

tunggu ini. Dispatcher. RunAsync (Windows. UI. Core. CoreDispatcherPriority. High, () => {// Ini sekarang berfungsi, kerana berjalan di utas UI: this. Max_tit. Text = "Máxima"; this. Min_tit. Teks = "Mínima"; ini. Min. Text = tempmin + "°"; ini. Max. Text = tempmax + "°"; ini. Img_Tempo. Source = baru BitmapImage (Uri baru ("ms-appx: /// Imej / "+ rsultado_previsao));});

}

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

Se o comando Detectado untuk berita persembahan, o método Consulta_noticias envia uma requisição HTTP ao feed de notícias da BBC, que também retorna um XML. Sebagai sekatan teks cinco primeiras notícias são exibidas na tela em.

async void Consulta_noticias peribadi () {

HttpClient httpcliente2 = HttpClient baru ();

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

resp2. EnsureSuccessStatusCode (); var respbody2 = resp2. Content. ReadAsStringAsync (); Notis XmlDocument = Dokumen Xml baru ();

noticia. LoadXml (respbody2. Result);

XmlElement root2 = noticia. DocumentElement;

Nod XmlNodeList2 = root2. GetElementsByTagName (@ "tajuk");

tunggu ini. Dispatcher. RunAsync (Windows. UI. Core. CoreDispatcherPriority. High, () =>

{this. News1. Text = (node2. Iem (2). InnerText); ini. News2. Text = (node2. Iem (3). InnerText); ini. News3. Text = (node2. Iem (4). InnerText); ini. News4. Text = (node2. Iem (5). InnerText); ini. News5. Text = (node2. Iem (6). InnerText);

});

}

Langkah 6: Kesimpulannya

Pengajaran semula karya semula, será possível realizar detecção de comandos de voz utilizando alguma placa com o Windos IoT Core instalado. Basta criar o arquivo de gramática com os comandos desejados.

Autores: Egon Patrick Marques Silva

Frederico Clark

Disyorkan: