Spisu treści:

Espelho Mágico: 6 kroków
Espelho Mágico: 6 kroków

Wideo: Espelho Mágico: 6 kroków

Wideo: Espelho Mágico: 6 kroków
Wideo: Я работаю в Страшном музее для Богатых и Знаменитых. Страшные истории. Ужасы. 2024, Listopad
Anonim
Image
Image

Neste Instructables pomaga w prowadzeniu inteligentnych projektów inteligentnych informacji o klimacie i informacjach, korzystając z poleceń głosowych.

Embora seja o projeto de um espelho, não houve como utilizar um devido a contratempos.

Krok 1: Sprzęt

Sprzęt komputerowy
Sprzęt komputerowy

Dragonboard 410c

Płyta antresoli audio

Krok 2:

Obraz
Obraz

Jako program do obsługi programu Visual Studio Community 2017, a także w języku c#. Graficzny interfejs, który można wykorzystać w edytorze XAML do Visual Studio.

Krok 3: Programação - Detecção 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 a detecção. Nie Visual Studio, używamy biblioteki Windows. Media. SpeechRecognition do dekodowania i 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"); Aparat rozpoznawania SpeechRecognizer = new SpeechRecognizer(idioma); rozpoznanie. StateChanged += RecognizerStateChanged; rozpoznanie. ContinuousRecognitionSession. ResultGenerated += RecognizerResultGenerated; string fileName = String. Format(SRGS_FILE); StorageFile grammarContentFile = czekaj na Package. Current. InstalledLocation. GetFileAsync(fileName); SpeechRecognitionGrammarFileConstraint grammarConstraint = new SpeechRecognitionGrammarFileConstraint(grammarContentFile); rozpoznawanie. Ograniczenia. Add(GrammarConstraint); SpeechRecognitionCompilationResult kompilacjaResult = czekaj na rozpoznanie. CompileConstraintsAsync(); if (compilationResult. Status == SpeechRecognitionResultStatus. Success) { Debug. WriteLine("Wynik: " + compilationResult. ToString()); czekaj na rozpoznanie. ContinuousRecognitionSession. StartAsync(); } else { Debug. WriteLine("Status: " + compilationResult. Status); } }

Após iniciar o reconhecimento, o método RecognizerResultGenerated recebe o poleceniach dotyczących interpretacji i porównań z poleceniami dotyczącymi konfiguracji em um arquivo xml que foi criado e inserido na rozwiązanie.

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 prognoza (previsão) e news (notícias).

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

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

// Sprawdź różne tagi i zainicjuj zmienne

Docelowy ciąg znaków = args. Result. SemanticInterpretation. Properties. ContainsKey("target") ? args. Result. SemanticInterpretation. Properties["target"][0]. ToString(): "";

Ciąg cmd = args. Result. SemanticInterpretation. Properties. ContainsKey("cmd") ?

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

String device = args. Result. SemanticInterpretation. Properties. ContainsKey("urządzenie") ?

args. Result. SemanticInterpretation. Properties["urządzenie"][0]. ToString(): "";

// Najpierw sprawdź, do którego urządzenia odnosi się użytkownik

if (cmd. Equals("pokaż"))

{

if (urządzenie. Equals("prognoza")) { Consulta_previsao(); } else if (device. Equals("wiadomości")) { Consulta_noticias(); } else { //Debug. WriteLine("Nieznane urządzenie"); }

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

{

if (device. Equals("prognoza")) { //Tempo. Text = ""; await this. Dispatcher. RunAsync(Windows. UI. Core. CoreDispatcherPriority. High, () => { // To teraz działa, ponieważ działa w wątku interfejsu użytkownika: 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, () => { // To teraz działa, ponieważ działa w wątku interfejsu użytkownika: this. News1. Text = ""; this. News2. Text = ""; this. News3. Text = ""; this. News4. Text = ""; this. News5. Text = ""; }); } else { // Debug. WriteLine("Nieznane urządzenie"); } } else { //Debug. WriteLine("Nieznane polecenie"); }

}

Krok 4: Programação - Exibir Previsão Do Tempo

Se o comando de voz detectado dla prognozy pokazu, o método Consulta_previsao envia uma requisição HTTP ao site CPTEC do INPE, que retorna a 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.

prywatna async void Consulta_previsao() {

HttpClient httpcliente = new

//HttpResponseMessage odp = 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; ew. ZapewnijSuccessStatusCode(); var respbody = resp. Content. ReadAsStringAsync(); Poprzednia wersja XmlDocument = new XmlDocument();

previsao. LoadXml(odp.body. Wynik);

XmlElement root = previsao. DocumentElement;

Węzły XmlNodeList = root. GetElementsByTagName("tempo");

string prevtempo = (węzły. Item(0). InnerText);

string prevtempo1 = (węzły. Item(1). InnerText); string prevtempo2 = (węzły. Item(2). InnerText); string prevtempo3 = (węzły. Item(3). InnerText); węzły = root. GetElementsByTagName("minima"); string tempmin = (węzły. Item(0). InnerText); węzły = root. GetElementsByTagName("maxima"); string tempmax = (węzły. Item(0). InnerText);

ciąg rsultado_previsao = "";

przełącznik (prevtempo)

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

}

await this. Dispatcher. RunAsync(Windows. UI. Core. CoreDispatcherPriority. High, () => { // To teraz działa, ponieważ działa w wątku interfejsu użytkownika: this. Max_tit. Text = "Maxima"; this. Min_tit. Text = "Mínima"; this. Min. Text = tempmin + "°"; this. Max. Text = tempmax + "°"; this. Img_Tempo. Source = new BitmapImage(new Uri("ms-appx:///) Obrazy/" + rsultado_previsao)); });

}

Krok 5: Programação - Exibir Notícias

Sprawdź komunikaty dotyczące wiadomości z programów, lub metody Consulta_noticias envia uma requisição HTTP, ao feed of notícias BBC, que também retorna um XML. Jako cinco primeiras notícias sao exibidas na tela em textblocks.

private async void Consulta_noticias() {

HttpClient httpcliente2 = nowy

var resp2 =

resp2. EnsureSuccessStatusCode(); var odpbody2 = odp2. Content. ReadAsStringAsync(); Noticia XmlDocument = new XmlDocument();

noticia. LoadXml(respbody2. Result);

XmlElement root2 = noticia. DocumentElement;

XmlNodeList nodes2 = root2. GetElementsByTagName(@"tytuł");

czekaj na this. Dispatcher. RunAsync(Windows. UI. Core. CoreDispatcherPriority. High, () =>

{ this. News1. Text = (węzły2. Item(2). InnerText); this. News2. Text = (węzły2. Item(3). InnerText); this. News3. Text = (węzły2. Item(4). InnerText); this. News4. Text = (węzły2. Item(5). Tekst wewnętrzny); this. News5. Text = (węzły2. Item(6). Tekst wewnętrzny);

});

}

Krok 6: Podsumowanie

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

Autorzy: Egon Patrick Marques Silva

Frederico Clark

Zalecana: