Sommario:
- Passaggio 1: hardware
- Passo 2:
- Fase 3: Programmazione - Rilevamento della voce
- Fase 4: Programação - Exibir Previsão Do Tempo
- Fase 5: Programmazione - Exibir Notícias
- Fase 6: Conclusione
Video: Espelho Magico: 6 Passi
2024 Autore: John Day | [email protected]. Ultima modifica: 2024-01-30 10:04
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
Dragonboard 410c
Scheda audio mezzanino
Passo 2:
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:
Carillon magico: 6 passaggi
Magic Music Box: Il mio progetto Arduino si chiama Magic Music Box. È una scatola speciale che emette suoni e musica. Ha anche uno schermo che mostra i nomi delle note musicali mentre emette il suono corrispondente. Questa è una macchina di apprendimento perfetta per i bambini che sono disposti a imparare
Giardino Magico Interattivo: 4 Passi
Giardino magico interattivo: amo davvero le piante, ma a volte le piante non ti ameranno. Sono la peggior mamma vegetale di sempre, quindi ho deciso di creare un giardino interattivo. Questo giardino ti dirà quando vuole l'acqua, quindi non dimenticarti mai di farlo. Volevo anche fare il garde
Pendolo magico della saggezza: 8 passi
Magic Pendulum of Wisdom: ho sempre amato gli affascinanti movimenti caotici dei doppi pendoli. Tempo fa ho visto un video in cui questo tizio attaccava un LED UV per tracciare il percorso che stava prendendo il pendolo. (https://www.youtube.com/watch?v=mZ1hF_-cubA) Ho adorato questo effetto s
L'orologio musicale magico: 8 passi (con immagini)
L'orologio musicale magico: tutti noi amiamo gli orologi musicali. Il suono ci fa sognare ed è una bella sensazione caricarlo e lasciarlo suonare dei bei suoni. C'è un sito web con molte di queste meraviglie meccaniche che mi fanno sognare. Ma gli orologi musicali sono costosi e non molto flessibili
IL MODO PI SEMPLICE PER FARE UNA LUCE COMPATTA!! 3 SEMPLICI PASSI!!: 3 Passi
IL MODO PI SEMPLICE PER FARE UNA LUCE COMPATTA!! 3 SEMPLICI PASSI!!: Cosa ti servirà - foglio di stagnola 1 batteria AA (alcune batterie AAA funzioneranno) 1 mini lampadina (lampadine utilizzate per la maggior parte delle torce elettriche; fare riferimento all'immagine) Righello (se necessario)