Tabla de contenido:
- Paso 1: hardware
- Paso 2:
- Paso 3: Programación - Detección de Voz
- Paso 4: Programación - Exibir Previsão Do Tempo
- Paso 5: Programación - Exibir Notícias
- Paso 6: Conclusión
Video: Espelho Mágico: 6 pasos
2024 Autor: John Day | [email protected]. Última modificación: 2024-01-30 08:43
Neste Instructables 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.
Paso 1: hardware
Dragonboard 410c
Tablero de entresuelo de audio
Paso 2:
Para un programa que se utilizó en Visual Studio Community 2017, y un idioma c #. Una interfaz gráfica para feita utilizando el editor XAML de Visual Studio.
Paso 3: Programación - Detección de Voz
O primeiro passo, foi trabalhar com a detecção de voz. A placa Audio Mezzanine Board já possui dois microfones integrados, que foram utilizados para una detección. No Visual Studio, utilizamos una biblioteca Windows. Media. SpeechRecognition para decodificar una voz.
Foi used o method found aqui para a inicialização da detecção de voz, que é mostró también abaixo.
private async void InicializaVoz () {var idioma = new Windows. Globalization. Language ("en-US"); SpeechRecognizer Recognizer = nuevo SpeechRecognizer (idioma); Recognizer. StateChanged + = RecognizerStateChanged; Recognizer. ContinuousRecognitionSession. ResultGenerated + = RecognizerResultGenerated; string fileName = String. Format (SRGS_FILE); StorageFile grammarContentFile = aguardar Package. Current. InstalledLocation. GetFileAsync (fileName); SpeechRecognitionGrammarFileConstraint grammarConstraint = new SpeechRecognitionGrammarFileConstraint (grammarContentFile); Recognizer. Constraints. Add (grammarConstraint); SpeechRecognitionCompilationResult compilationResult = espera al reconocedor. CompileConstraintsAsync (); if (compilationResult. Status == SpeechRecognitionResultStatus. Success) {Debug. WriteLine ("Resultado:" + compilationResult. ToString ()); aguardar reconocedor. ContinuousRecognitionSession. StartAsync (); } else {Debug. WriteLine ("Estado:" + compilationResult. Status); }}
Após iniciar o reconhecimento, o método RecognizerResultGenerated recebe os comandos que foram interpretados y compare com os comandos com os que estão configurados em um arquivo xml que foi criado e inserido na solução.
Como no se puede inserir en idioma portugués, los comandos utilizados para mostrar (mostrar) e ocultar (esconder) e o que deve ser mostrado pronóstico (previso) e noticias (notícias).
private async void RecognizerResultGenerated (sesión SpeechContinuousRecognitionSession, argumentos SpeechContinuousRecognitionResultGeneratedEventArgs) {
int count = args. Result. SemanticInterpretation. Properties. Count;
// Busca diferentes etiquetas e inicializa las variables
String target = args. Result. SemanticInterpretation. Properties. ContainsKey ("target")? args. Result. SemanticInterpretation. Properties ["objetivo"] [0]. ToString (): "";
Cadena cmd = args. Result. SemanticInterpretation. Properties. ContainsKey ("cmd")?
args. Result. SemanticInterpretation. Properties ["cmd"] [0]. ToString (): "";
String device = args. Result. SemanticInterpretation. Properties. ContainsKey ("dispositivo")?
args. Result. SemanticInterpretation. Properties ["dispositivo"] [0]. ToString (): "";
// Primero verifique a qué dispositivo se refiere el usuario
if (cmd. Equals ("mostrar"))
{
if (device. Equals ("pronóstico")) {Consulta_previsao (); } else if (dispositivo. Equals ("noticias")) {Consulta_noticias (); } else {//Debug. WriteLine("Unknown Device "); }
} else if (cmd. Equals ("ocultar"))
{
if (device. Equals ("pronóstico")) {//Tempo. Text = ""; espere this. Dispatcher. RunAsync (Windows. UI. Core. CoreDispatcherPriority. High, () => {// Esto ahora funciona, porque se está ejecutando en el hilo de la interfaz de usuario: 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")) {await this. Dispatcher. RunAsync (Windows. UI. Core. CoreDispatcherPriority. High, () => {// Esto ahora funciona, porque se está ejecutando en el subproceso de la interfaz de usuario: esto. News1. Text = ""; this. News2. Text = ""; this. News3. Text = ""; this. News4. Text = ""; this. News5. Text = "";}); } else {// Debug. WriteLine ("Dispositivo desconocido"); }} else {//Debug. WriteLine("Unknown Command "); }
}
Paso 4: Programación - Exibir Previsão Do Tempo
Se o comando de voz detectado para mostrar pronóstico, o método Consulta_previsao envia uma requisição HTTP ao sitio CPTEC do INPE, que retorna una previsión de tempo em um arquivo xml. Após a leitura do xml, uma imagem é mostrada na tela de acordo com una previsión y também são mostradas como temperaturas máximas e mínimas.
private async void Consulta_previsao () {
HttpClient httpcliente = new HttpClient ();
// 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;
Nodos 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); nodos = root. GetElementsByTagName ("mínimo"); string tempmin = (nodes. Item (0). InnerText); nodos = root. GetElementsByTagName ("maxima"); string tempmax = (nodes. Item (0). InnerText);
string rsultado_previsao = "";
cambiar (tiempo anterior)
{case "ec": rsultado_previsao = "Chuvas_Isoladas.png"; rotura; case "ci": rsultado_previsao = "Chuvas_Isoladas.png"; rotura; caso "c": rsultado_previsao = "Chuva.png"; rotura; caso "en": rsultado_previsao = "Instavel.png"; rotura; caso "pp": rsultado_previsao = "Chuva.png"; rotura; case "cm": rsultado_previsao = "Chuva.png"; rotura; case "cn": rsultado_previsao = "Chuvas_Isoladas_Noite.png"; rotura; case "pt": rsultado_previsao = "Chuva.png"; rotura; case "pm": rsultado_previsao = "Chuvas_Isoladas.png"; rotura; case "np": rsultado_previsao = "Chuva.png"; rotura; caso "pc": rsultado_previsao = "Chuva.png"; rotura; case "pn": rsultado_previsao = "Nublado.png"; rotura; case "cv": rsultado_previsao = "Chuva.png"; rotura; case "ch": rsultado_previsao = "Chuva.png"; rotura; case "t": rsultado_previsao = "Tempestade.png"; rotura; caso "ps": rsultado_previsao = "Sol.png"; rotura; caso "e": rsultado_previsao = "Sol_Encoberto.png"; rotura; caso "n": rsultado_previsao = "Nublado.png"; rotura; case "cl": rsultado_previsao = "Sol.png"; rotura; case "nv": rsultado_previsao = "Nevoeiro.png"; rotura; caso "g": rsultado_previsao = "Neve.png"; rotura; caso "ne": rsultado_previsao = "Neve.png"; rotura; caso "nd": rsultado_previsao = "na.png"; rotura; case "pnt": rsultado_previsao = "Chuvas_Isoladas_Noite.png"; rotura; case "psc": rsultado_previsao = "Chuva.png"; rotura; case "pcm": rsultado_previsao = "Chuva.png"; rotura; case "pct": rsultado_previsao = "Chuva.png"; rotura; caso "pcn": rsultado_previsao = "Chuva.png"; rotura; case "npt": rsultado_previsao = "Chuva.png"; rotura; case "npn": rsultado_previsao = "Chuva.png"; rotura; case "ncn": rsultado_previsao = "Chuva.png"; rotura; case "nct": rsultado_previsao = "Chuva.png"; rotura; case "ncm": rsultado_previsao = "Chuva.png"; rotura; case "npm": rsultado_previsao = "Chuva.png"; rotura; case "npp": rsultado_previsao = "Chuva.png"; rotura; case "vn": rsultado_previsao = "Instavel.png"; rotura; case "ct": rsultado_previsao = "Chuva.png"; rotura; case "ppn": rsultado_previsao = "Chuvas_Isoladas_Noite.png"; rotura; case "ppt": rsultado_previsao = "Chuva.png"; rotura; caso "ppm": rsultado_previsao = "Chuva.png"; rotura;
}
await this. Dispatcher. RunAsync (Windows. UI. Core. CoreDispatcherPriority. High, () => {// Esto ahora funciona, porque se está ejecutando en el hilo de la interfaz de usuario: 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: /// Imágenes / "+ rsultado_previsao));});
}
Paso 5: Programación - Exibir Notícias
Se o comando detectado para mostrar noticias, o método Consulta_noticias envia uma requisição HTTP ao feed de notícias da BBC, que también retorna um XML. Como cinco primeras notificaciones de noticias en pantalla en bloques de texto.
private async void Consulta_noticias () {
HttpClient httpcliente2 = new HttpClient ();
var resp2 = httpcliente2. GetAsync ("https://feeds.bbci.co.uk/portuguese/rss.xml"). Result;
resp2. EnsureSuccessStatusCode (); var respbody2 = resp2. Content. ReadAsStringAsync (); XmlDocument noticia = new XmlDocument ();
noticia. LoadXml (respbody2. Result);
XmlElement root2 = noticia. DocumentElement;
XmlNodeList nodes2 = root2. GetElementsByTagName (@ "título");
espera esto. 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);
});
}
Paso 6: Conclusión
Ao reproduzir esse instructables, será posible realizar la detección de comandos de voz utilizando alguma placa con Windos IoT Core instalado. Basta criar o arquivo de gramática com os comandos desejados.
Autores: Egon Patrick Marques Silva
Frederico Clark
Recomendado:
Marco mágico: 4 pasos
Magic Frame: esta es una reelaboración del famoso " Slow Dance " marco: https: //www.instructables.com/id/Slow-Dance-a-Fusi
Espejo mágico con noticias, clima, alarma, temporizador y lista todoterreno: 9 pasos
Espejo mágico con noticias, clima, alarma, temporizador y lista completa: un espejo mágico es un espejo unidireccional especial con una pantalla detrás. La pantalla, que está conectada a una Raspberry Pi, muestra información como el clima, la temperatura ambiente, la hora, la fecha, un todolist y mucho más. Incluso podría agregar un micrófono y configurar u
Cubo mágico o cubo de microcontrolador: 7 pasos (con imágenes)
Cubo mágico o cubo de microcontrolador: en este Instructables, te mostraré cómo hacer un cubo mágico a partir de un microcontrolador defectuoso.Esta idea proviene de cuando tomé el microcontrolador ATmega2560 defectuoso de Arduino Mega 2560 y hice un cubo .Acerca del hardware Magic Cube, he hecho como
Comedero MÁGICO para gatos: 8 pasos
Comedero MÁGICO para gatos: ¡LA VIDA DE LOS GATOS IMPORTA
Espejo mágico inteligente flotante de una computadora portátil vieja con reconocimiento de voz de Alexa: 6 pasos (con imágenes)
Espejo mágico inteligente flotante de una computadora portátil vieja con reconocimiento de voz de Alexa: Inscríbase en mi curso 'Electrónica en pocas palabras' aquí: https://www.udemy.com/electronics-in-a-nutshell/?couponCode=TINKERSPARK También consulte mi canal de youtube aquí para más proyectos y tutoriales de electrónica: https://www.youtube.com/channel/UCelOO