Cuprins:

Espelho Mágico: 6 pași
Espelho Mágico: 6 pași

Video: Espelho Mágico: 6 pași

Video: Espelho Mágico: 6 pași
Video: De ce nu poți avea multe oglinzi în casă? Magia oglinzilor. Semne populare despre oglinzi probleme 2024, Noiembrie
Anonim
Image
Image

Neste Instructables mostramos as criar um protótipo de um spelho inteligente that project information Informații despre clima și notificări, folosind comenzi de voce.

Embora seja o projeto de um spelho, não houve as use um devido a contractempos.

Pasul 1: Hardware

Hardware
Hardware

Dragonboard 410c

Audio Mezzanine Board

Pasul 2:

Imagine
Imagine

Pentru un program folosit de Visual Studio Community 2017, e a linguagem c #. O interfață grafică a fost folosită de editorul XAML de Visual Studio.

Pasul 3: Programare - Detectare De Voz

O primul pas, a fost de lucru cu o detecție de voce. A placa Audio Mezzanine Board are dois microfones integrated, that foram used for a detecção. No Visual Studio, utilizează o bibliotecă Windows. Media. SpeechRecognition pentru a decodifica o voce.

Foi utilizado o method found aqui for a initialização da detecção de voz, that is mostrado alsom 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 = așteaptă Package. Current. InstalledLocation. GetFileAsync (fileName); SpeechRecognitionGrammarFileConstraint grammarConstraint = new SpeechRecognitionGrammarFileConstraint (grammarContentFile); recognizer. Constraints. Add (grammarConstraint); SpeechRecognitionCompilationResult compilationResult = await recognizer. CompileConstraintsAsync (); if (compilationResult. Status == SpeechRecognitionResultStatus. Success) {Debug. WriteLine ("Rezultat:" + compilationResult. ToString ()); așteaptă recognizer. ContinuousRecognitionSession. StartAsync (); } else {Debug. WriteLine ("Status:" + compilationResult. Status); }}

Apos init o reconhecimento, o method RecognizerResultGenerated recebe os commandos that foram interpretados e compara com os comandos com os that estão configurados em um arquivo xml that was criado and inserido na solutionção.

Como não foi possível inserir o idioma português, os commandos used foram show (mostrar) e hide (esconder) e o that deve ser mostrado forecast (previsão) e news (noticias).

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

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

// Verificați dacă există diferite etichete și inițializați variabilele

String target = args. Result. SemanticInterpretation. Properties. ContainsKey („țintă”)? args. Result. SemanticInterpretation. Properties ["target"] [0]. ToString (): "";

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

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

String device = args. Result. SemanticInterpretation. Properties. ContainsKey („dispozitiv”)?

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

// Mai întâi verificați la ce dispozitiv se referă utilizatorul

if (cmd. Equals („arată”))

{

if (device. Equals ("forecast")) {Consulta_previsao (); } else if (device. Equals ("news")) {Consulta_noticias (); } else {//Debug. WriteLine("Unknown Device "); }

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

{

if (device. Equals ("forecast")) {//Tempo. Text = ""; așteaptă this. Dispatcher. RunAsync (Windows. UI. Core. CoreDispatcherPriority. High, () => {// Acum funcționează, deoarece rulează pe firul 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")) {{așteaptă this. Dispatcher. RunAsync (Windows. UI. Core. CoreDispatcherPriority. High, () => {// Acum funcționează, deoarece rulează pe firul UI: this. News1. Text = ""; this. News2. Text = ""; this. News3. Text = ""; this. News4. Text = ""; this. News5. Text = "";}); } else {// Debug. WriteLine ("Dispozitiv necunoscut"); }} else {//Debug. WriteLine("Comanda necunoscută "); }

}

Pasul 4: Programare - Exibir Previsão Do Tempo

Se o comandă de voce detectată pentru prognoza spectacolului, sau o metodă Consulta_previsao envia uma cerere HTTP sau site-ul CPTEC do INPE, care returna previziunea do tempo em um arquivo xml. Após a leitura do xml, uma imagem é mostrada na tela de acord com a previsão și prea são mostradas as temperaturas maximum e minimum.

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;

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

șir prevtempo = (nodes. Item (0). InnerText);

șir prevtempo1 = (noduri. Item (1). InnerText); șir prevtempo2 = (noduri. Item (2). InnerText); șir prevtempo3 = (noduri. Item (3). InnerText); noduri = root. GetElementsByTagName ("minime"); string tempmin = (nodes. Item (0). InnerText); noduri = root. GetElementsByTagName ("maxima"); șir tempmax = (nodes. Item (0). InnerText);

șir rsultado_previsao = "";

comuta (prevtempo)

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

}

așteptați this. Dispatcher. RunAsync (Windows. UI. Core. CoreDispatcherPriority. High, () => {// Acum funcționează, deoarece rulează pe firul UI: this. Max_tit. Text = "Máxima"; this. Min_tit. Text = "Minima"; this. Min. Text = tempmin + "°"; this. Max. Text = tempmax + "°"; this. Img_Tempo. Source = new BitmapImage (new Uri ("ms-appx: /// Imagini / "+ rsultado_previsao));});

}

Pasul 5: Programare - Exibir Notícies

Se comandă detectat pentru știri de spectacol, sau metodă Consulta_noticias envia uma cerere HTTP ca feed de notificări de la BBC, care se returna și XML. As five primeiras noticias são exibidas na tela em textblocks.

private async void Consulta_noticias () {

HttpClient httpcliente2 = new HttpClient ();

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

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

noticia. LoadXml (respbody2. Result);

XmlElement root2 = noticia. DocumentElement;

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

așteaptă acest lucru. 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);

});

}

Pasul 6: Concluzie

Reproducerea lor este instructabilă, va fi posibilă realizarea detecției de comenzi de voce folosind o placă cu o componentă Windos IoT Core instalată. Basta criar o arquivo de gramática com os comandos desejados.

Autori: Egon Patrick Marques Silva

Frederico Clark

Recomandat: