Kazalo:

Espelho Mágico: 6 korakov
Espelho Mágico: 6 korakov

Video: Espelho Mágico: 6 korakov

Video: Espelho Mágico: 6 korakov
Video: Тест каравана в -25° . Ночёвка зимой. Как не замёрзнуть? 2024, November
Anonim
Image
Image

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.

1. korak: Strojna oprema

Strojna oprema
Strojna oprema

Dragonboard 410c

Zvočna mezaninska plošča

2. korak:

Slika
Slika

Za uporabo programa Visual Studio Community 2017, jezikovno c#. Vmesnik, ki se uporablja za urejevalnik XAML do Visual Studio.

3. korak: Programação - Detecção De Voz

O primeiro passo, foi trabalhar com a detecção de voz. Placa Audio Mezzanine Board je združljiva z mikrofoni, ki jih je mogoče uporabiti za zaznavanje. Ni Visual Studio, uporablja biblioteko Windows. Media. SpeechRecognition para decodificar 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 = nov Windows. Globalization. Language ("en-ZDA"); SpeechRecognizer prepoznavalnik = nov SpeechRecognizer (idioma); prepoznavalnik. StateChanged += RecognizerStateChanged; prepoznavalnik. ContinuousRecognitionSession. ResultGenerated += RecognizerResultGenerated; string fileName = String. Format (SRGS_FILE); StorageFile grammarContentFile = čakajo Package. Current. InstalledLocation. GetFileAsync (ime datoteke); SpeechRecognitionGrammarFileConstraint grammarConstraint = nov SpeechRecognitionGrammarFileConstraint (grammarContentFile); prepoznavalec. Konstrakcije. Add (grammarConstraint); SpeechRecognitionCompilationResult compilationResult = čakajo na prepoznavalnika. CompileConstraintsAsync (); if (compilationResult. Status == SpeechRecognitionResultStatus. Success) {Debug. WriteLine ("Rezultat:" + compilationResult. ToString ()); čakajo na prepoznavalnik. ContinuousRecognitionSession. StartAsync (); } else {Debug. WriteLine ("Status:" + compilationResult. Status); }}

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

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

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

// Preverite različne oznake in inicializirajte spremenljivke

Niz target = args. Result. SemanticInterpretation. Properties. ContainsKey ("cilj")? args. Result. SemanticInterpretation. Properties ["target"] [0]. ToString (): "";

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

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

Nizka naprava = args. Result. SemanticInterpretation. Properties. ContainsKey ("naprava")?

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

// Najprej preverite, na katero napravo se uporabnik sklicuje

if (cmd. Equals ("pokaži"))

{

if (device. Equals ("napoved")) {Consulta_previsao (); } else if (device. Equals ("novice")) {Consulta_noticias (); } else {//Debug. WriteLine("Neznana naprava "); }

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

{

if (device. Equals ("napoved")) {//Tempo. Text = ""; počakajte this. Dispatcher. RunAsync (Windows. UI. Core. CoreDispatcherPriority. High, () => {// To zdaj deluje, ker deluje v niti uporabniškega vmesnika: this. Max_tit. Text = ""; this. Min_tit. Text = ""; this. Min. Text = ""; this. Max. Text = ""; this. Img_Tempo. Source = nova BitmapImage (nov Uri ("ms-appx: ///Images/blank.png"));

});

}

else if (device. Equals ("news")) {čakajo na to. Dispatcher. RunAsync (Windows. UI. Core. CoreDispatcherPriority. High, () => {// To zdaj deluje, ker deluje v niti uporabniškega vmesnika: this. News1. Text = ""; this. News2. Text = ""; this. News3. Text = ""; this. News4. Text = ""; this. News5. Text = "";}); } else {// Debug. WriteLine ("Neznana naprava"); }} else {//Debug. WriteLine("Neznan ukaz "); }

}

4. korak: Programação - Exibir Previsão Do Tempo

Komando de voz detectado za napoved oddaje, o metodi Consulta_previsao z zahtevo po zahtevah HTTP na spletnem mestu CPTEC do INPE, que retorna in 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 temperaturas máxima e mínima.

private async void Consulta_previsao () {

HttpClient httpcliente = nov HttpClient ();

// HttpResponseMessage resp = httpcliente. GetAsync ("https://servicos.cptec.inpe.br/XML/cidade/222/previsao.xml"). Rezultat; var resp = httpcliente. GetAsync ("https://servicos.cptec.inpe.br/XML/cidade/222/previsao.xml"). Rezultat; ustrezna. EnsureSuccessStatusCode (); var respbody = resp. Content. ReadAsStringAsync (); XmlDocument previsao = nov XmlDocument ();

previsao. LoadXml (respbody. Result);

XmlElement root = previsao. DocumentElement;

Vozlišča XmlNodeList = root. GetElementsByTagName ("tempo");

niz prevtempo = (nodes. Item (0). InnerText);

niz prevtempo1 = (nodes. Item (1). InnerText); niz prevtempo2 = (nodes. Item (2). InnerText); niz prevtempo3 = (nodes. Item (3). InnerText); vozlišča = root. GetElementsByTagName ("minimum"); niz tempmin = (nodes. Item (0). InnerText); vozlišča = root. GetElementsByTagName ("maksimumi"); niz tempmax = (nodes. Item (0). InnerText);

niz rsultado_previsao = "";

stikalo (prevtempo)

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

}

čakajte this. Dispatcher. RunAsync (Windows. UI. Core. CoreDispatcherPriority. High, () => {// To zdaj deluje, ker deluje v niti uporabniškega vmesnika: this. Max_tit. Text = "Máxima"; this. Min_tit. Text = "Mínima"; this. Min. Text = tempmin + "°"; this. Max. Text = tempmax + "°"; this. Img_Tempo. Source = nova BitmapImage (nov Uri ("ms-appx: /// Slike/" + rsultado_previsao));});

}

5. korak: Programação - Exibir Notícias

Oglejte si odkrivanje za novice o oddajah ali o Consulta_noticias o zahtevi po HTTP ali o viru, ki ni v BBC -ju, če želite to narediti v XML. Kot cinco primeiras notícias são exibidas na tela em tekstovni bloki.

private async void Consulta_noticias () {

HttpClient httpcliente2 = nov HttpClient ();

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

resp2. EnsureSuccessStatusCode (); var respbody2 = resp2. Content. ReadAsStringAsync (); Noticia XmlDocument = nov XmlDocument ();

noticia. LoadXml (respbody2. Result);

XmlElement root2 = noticia. DocumentElement;

Vozlišča XmlNodeList2 = root2. GetElementsByTagName (@"naslov");

čakaj na to. Dispatcher. RunAsync (Windows. UI. Core. CoreDispatcherPriority. High, () =>

{this. News1. Text = (nodes2. Item (2). InnerText); this. News2. Text = (vozlišča2. Item (3). InnerText); this. News3. Text = (nodes2. Item (4). InnerText); this. News4. Text = (nodes2. Item (5). InnerText); this. News5. Text = (nodes2. Item (6). InnerText);

});

}

Korak 6: Zaključek

Ao reproduzir esse instructables, será possível realizar detecção de comandos de voz uselizando alguma placa com o Windos IoT Core instalado. Basta criar o arquivo de grammatica com os comandos desejados.

Avtomobili: Egon Patrick Marques Silva

Frederico Clark

Priporočena: