Blog (22)
Komentarze (619)
Recenzje (0)
@alucosoftwareGłosowy czytnik RSS (Antyweb i dobreprogramy)

Głosowy czytnik RSS (Antyweb i dobreprogramy)

14.05.2014 18:28

Jak będzie wyglądała komunikacja człowieka z maszyną za kilkanaście lat? Czy wszystko wokół nas będzie sterowane dotykiem, czy może znajdziemy bardziej odpowiednią formę dialogu z urządzeniami? Zalążek takiej naturalnej formy komunikacji odnajdziesz w tym wpisie w postaci głosowego czytnika RSS współpracującego obecnie z portalami Antyweb oraz dobreprogramy. Mechanizm jest jednak ten sam dla większości kanałów RSS w sieci.

Ale po kolei...

Otrzymałem pytanie od osoby, która chce wykorzystać SpikitAPI, ale nie posiada dużej wiedzy z zakresu programowania. Obiecałem, że zaprezentuję jak krok po kroku utworzyć aplikację okienkową komunikującą się ze Spikit i reagującą na kilka prostych komend. Środowiskiem programistycznym, w którym utworzę mały projekt będzie bezpłatny Visual C# 2010 Express, który dostępny jest na stronie Microsoftu.

Kod odpowiedzialny za komunikację z programem Spikit znajdziecie w tym wpisie (patrz: SpikitAPI.PipeClient) na Blogu dobrychprogramów.

Choć sam proces wymiany informacji przez tzw. 'potok' między jakimś zewnętrznym programem, a Spikit jest stosunkowo prosty, to jednak umiejętność dobrego programowania przychodzi z czasem i nie należy się zbyt szybko poddawać. Tym bardziej jeśli odniesione korzyści mogą być o wiele większe niż się to Tobie początkowo wydaje. Programowanie uczy bowiem logicznego myślenia i radzenia sobie z problemami (choć te w realnym życiu biją wszytko na głowę...). W sieci odnaleźć można multum materiałów (choćby ten ), które mogą pomóc Tobie opanować język programowania C#. Ale warto czasem wybrać się do zwykłej biblioteki, bo w bibliotekach raz, że książki darmo dają, a dwa - jest ich tak wiele, że można się o nie przewrócić :‑) Jest więc z czego wybierać. Osobom znającym język angielski zalecam zasoby MSDN, a szczególnie serię przygotowaną specjalnie dla początkujących adeptów sztuki programowania.

Przejdźmy do konkretów

Utwórzmy nowy projekt aplikacji Windows Forms.

517167

Taki program będzie posiadał standardowe okno. Nadajmy temu projektowi wiele mówiącą nazwę - Kolory. Nazwa 'Kolory' będzie także domyślną przestrzenią nazw w naszym projekcie.

517169

Kod komunikujący się ze Spikit znajduje się w zupełnie innej przestrzeni nazw - to bardzo istotna informacja. Ponieważ SpikitAPI nie jest jeszcze rozprowadzane w postaci biblioteki, utwórzmy w naszym projekcie 'Nowy element' typu 'CodeFile' (kliknij PPM na zielonej ikonie z nazwą projektu), który będzie po prostu zupełnie pustym plikiem z rozszerzeniem .cs. Nadajmy mu nazwę SpikitAPI.cs

517171
517172

Do SpikitAPI.cs wklej kod z poprzedniego wpisu blogowego (czyli SpikitAPI.PipeClient) i voila! W każdej chwili możesz nawiązać komunikację z silnikiem rozpoznawania mowy. Aby to uczynić, kliknij PPM na ikonce Form1.cs i przejdź do kodu głównego okna programu.

517174

Ostatnią rzeczą jaką musimy teraz zrobić to doprowadzić do sytuacji, w której zobaczymy Dokładnie (przez duże D) coś takiego:

517176

Dla ułatwienia zamieszczę kod źródłowy w postaci tekstowej.

Form1.cs


using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace Kolory
{
    public partial class Form1 : Form
    {
        SpikitAPI.PipeClient client = null;

        public Form1()
        {
            InitializeComponent();

            client = new SpikitAPI.PipeClient();
            client.MessageReceived += new SpikitAPI.PipeClient.MessageReceivedEventHandler(client_MessageReceived);

            this.FormClosing += new FormClosingEventHandler(Form1_FormClosing);
        }

        void client_MessageReceived(object sender, SpikitAPI.PipeClient.PipeClientEventArgs e)
        {
            // Dostęp do kontrolki musi odbyć się z wątku, na którym ta kontrolka została utworzona
            this.Invoke(new MethodInvoker(delegate
                {
                    // Tu rozpoczyna się właściwy kod użytkownika

                    if (e.Message.Equals("czerwony", StringComparison.OrdinalIgnoreCase)) // if (e.Message == "czerwony") ; else if ; else
                        this.BackColor = Color.Red;
                    else if (e.Message.Equals("zielony", StringComparison.OrdinalIgnoreCase))
                        this.BackColor = Color.Green;
                    else if (e.Message.Equals("niebieski", StringComparison.OrdinalIgnoreCase))
                        this.BackColor = Color.Blue;
                    
                    // Tu kończy się właściwy kod użytkownika
                }));
        }

        void Form1_FormClosing(object sender, FormClosingEventArgs e)
        {
            if (client != null)
                client.Stop(); // Podczas zamykania okna zakończ połączenie z programem i zwolnij zasoby
        }
    }
}

Po wprowadzeniu wszytkich zmian najlepszą rzeczą byłoby teraz zapisanie całego projektu, na wypadek chwilowego zaniku napięcia w sieci ;‑)

517181
517182

Gotowe. Drzwi do technologii rozpoznawania i syntezy mowy polskiej zostały nam szeroko otwarte. Przed uruchomieniem programu, zastanów się chwilkę cóż on takiego może robić. Pamiętaj również, aby dodać do Spikit polecenia, których Twój program spodziewa się usłyszeć.

517184

Efektem kilku linijek kodu po stronie programisty-amatora mogą być np. takie drobne produkcje.

Gwóźdź programu - czytnik RSS sterowany głosem

Ale gdzie jest wspomniany we wstępie głosowy czytnik, z którym można by zamienić zdanie w jakimś normalnym języku? Znajdziesz go poniżej.

Zapraszam wszystkich do obejrzenia od początku do końca filmu prezentującego zasady działania głosowego czytnika nagłówków RSS. Trzeba przyznać, że dostępny w Windows 8.1 polski głos syntezatora mowy (Microsoft Paulina Desktop) radzi sobie bardzo dobrze, jeśli nie doskonale. Popełnił raptem kilka drobnych potknięć w nieoczywistych sytuacjach. Dlaczego Antyweb i dobreprogramy? Są one dla mnie źródłem ciekawych informacji ze świata nowych technolgii. Możliwości rozbudowy takiego czytnika opartego o program Spikit są przeogromne. Jeśli zainteresowanie takim rozwiązaniem (tj. głosowym przyswajaniem treści) będzie wystarczająco duże - wydam jego publiczną wersję. W takiej wersji na pewno pojawi się możliwość większej personalizacji i na przykład ustalania listy interesujących nas kanałów oraz ilości pobieranych nagłówków za pomocą jakiegoś okienka dialogowego. A może macie jakieś inne pomysły?

Przy okazji przypominam o zabawie na najciekawszą aplikację wykorzystującą SpikitAPI. Jest jeszcze trochę czasu :‑)

Jak zwykle czekam na Wasze sugestie dotyczące zarówno Spikit jak i udostępnionego Wam interfejsu programistycznego. Tylko dzięki nim i zaangażowaniu użytkowników projekty takie mają szansę się rozwijać.

Wybrane dla Ciebie
Komentarze (22)