Taula de continguts:
- Pas 1: maquinari
- Pas 2:
- Pas 3: Programa - Detecció de Voz
- Pas 4: Programa - Exibir Previsió Do Tempo
- Pas 5: Programa - Exibir Notícies
- Pas 6: Conclusió
Vídeo: Espelho Mágico: 6 passos
2024 Autora: John Day | [email protected]. Última modificació: 2024-01-30 08:15
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
Dragonboard 410c
Tauler altell d’àudio
Pas 2:
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:
Disseny de jocs en Flick en 5 passos: 5 passos
Disseny de jocs en Flick en 5 passos: Flick és una manera molt senzilla de fer un joc, sobretot com un trencaclosques, una novel·la visual o un joc d’aventures
Detecció de cares a Raspberry Pi 4B en 3 passos: 3 passos
Detecció de cares a Raspberry Pi 4B en 3 passos: en aquest manual, farem la detecció de cares a Raspberry Pi 4 amb Shunya O / S mitjançant la biblioteca Shunyaface. Shunyaface és una biblioteca de reconeixement / detecció de cares. El projecte té com a objectiu aconseguir una velocitat de detecció i reconeixement més ràpida amb
Com fer un comptador de passos ?: 3 passos (amb imatges)
Com fer un comptador de passos ?: Jo solia tenir un bon rendiment en molts esports: caminar, córrer, anar en bicicleta, jugar a bàdminton, etc. M’encanta viatjar poc després. Bé, mireu el meu ventre corpulent … Bé, de totes maneres, decideixo tornar a començar a fer exercici. Quin equip he de preparar?
Mirall de vanitat de bricolatge en passos senzills (amb llums de tira LED): 4 passos
Mirall de vanitat de bricolatge en passos senzills (amb llums de tires LED): en aquest post vaig crear un mirall de vanitat de bricolatge amb l'ajut de les tires LED. És molt genial i també heu de provar-les
Arduino Halloween Edition: pantalla emergent de zombis (passos amb imatges): 6 passos
Arduino Halloween Edition: pantalla emergent de zombis (passos amb imatges): voleu espantar els vostres amics i fer soroll a Halloween? O simplement voleu fer una bona broma? Aquesta pantalla emergent de Zombies ho pot fer! En aquest instructiu us ensenyaré a fer zombis fàcilment amb Arduino. L'HC-SR0