Daftar Isi:

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

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

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

Langkah 1: Perangkat Keras

Perangkat keras
Perangkat keras

Papan naga 410c

Papan Mezanin Audio

Langkah 2:

Gambar
Gambar

Para programação foi utilizado o Visual Studio Community 2017, dan bahasa c#. Sebuah antarmuka gráfica foi feita utilizando atau editor XAML melakukan Visual Studio.

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

O primeiro passo, foi trabalhar com a detecção de voz. Tempat Audio Mezzanine Board já possui dois microfones integrados, que foram utilizados para a detecção. Tidak ada Visual Studio, gunakan biblioteca Windows. Media. SpeechRecognition untuk dekodificar 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. Globalisasi. Language("en-US"); Pengenal SpeechRecognizer = SpeechRecognizer baru(idioma); recognitionr. StateChanged += RecognizerStateChanged; pengenal. ContinuousRecognitionSession. ResultGenerated += RecognizerResultGenerated; string namafile = String. Format(SRGS_FILE); StorageFile grammarContentFile = menunggu Package. Current. InstalledLocation. GetFileAsync(namafile); SpeechRecognitionGrammarFileConstraint grammarConstraint = baru SpeechRecognitionGrammarFileConstraint(grammarContentFile); pengenal. Constraints. Add(tata bahasaConstraint); SpeechRecognitionCompilationResult kompilasiResult = menunggu pengenal. CompileConstraintsAsync(); if (compilationResult. Status == SpeechRecognitionResultStatus. Success) { Debug. WriteLine("Hasil: " + kompilasiResult. ToString()); menunggu pengenal. ContinuousRecognitionSession. StartAsync(); } else { Debug. WriteLine("Status: " + kompilasiResult. Status); } }

Após iniciar o reconhecimento, o método RecognizerResultGenerated recebe os comandos que foram interpretados dan compara com os comandos com os que estão configurados em um arquivo xml que foi criado dan 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 forecast (previsão) e news (notícias).

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

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

// Periksa tag yang berbeda dan inisialisasi variabel

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(): "";

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

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

// Pertama periksa perangkat mana yang dirujuk pengguna

if (cmd. Equals("tampilkan"))

{

if (device. Equals("forecast")) { Consulta_previsao(); } else if (device. Equals("news")) { Consulta_noticias(); } else { //Debug. WriteLine("Perangkat Tidak Dikenal"); }

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

{

if (device. Equals("forecast")) { //Tempo. Text = ""; wait this. Dispatcher. RunAsync(Windows. UI. Core. CoreDispatcherPriority. High, () => { // Ini sekarang berfungsi, karena berjalan di utas UI: 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")) { menunggu this. Dispatcher. RunAsync(Windows. UI. Core. CoreDispatcherPriority. High, () => { // Ini sekarang berfungsi, karena berjalan di utas UI: this. News1. Text = ""; this. News2. Text = ""; this. News3. Text = ""; this. News4. Text = ""; this. News5. Text = ""; }); } else { // Debug. WriteLine("Perangkat Tidak Dikenal"); } } else { //Debug. WriteLine("Perintah Tidak Diketahui"); }

}

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

Se o comando de voz detectado untuk prakiraan acara, o método Consulta_previsao envia uma requisição HTTP ao situs CPTEC lakukan 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 e também são mostradas as temperatureas máxima e mínima.

async pribadi batal Consulta_previsao() {

HttpClient httpcliente = 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 = new XmlDocument();

previsao. LoadXml(respbody. Result);

Akar XmlElement = previsao. DocumentElement;

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

string rsultado_previsao = "";

beralih (prevtempo)

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

}

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

}

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

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

async pribadi batal Consulta_noticias() {

HttpClient httpcliente2 = HttpClient baru();

var resp2 =

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

noticia. LoadXml(respbody2. Result);

XmlElement root2 = noticia. DocumentElement;

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

tunggu ini. 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);

});

}

Langkah 6: Kesimpulan

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

Penulis: Egon Patrick Marques Silva

Frederico Clark

Direkomendasikan: