Skocz do zawartości

kampo

Użytkownicy
  • Zawartość

    67
  • Rejestracja

  • Ostatnio

  • Wygrane dni

    1

kampo wygrał w ostatnim dniu 26 maja 2019

kampo ma najbardziej lubianą zawartość!

Reputacja

19 Dobra

O kampo

  • Ranga
    4/10

Informacje

  • Płeć
    Mężczyzna
  • Lokalizacja
    Świdnica

Ostatnio na profilu byli

Blok z ostatnio odwiedzającymi jest wyłączony i nie jest wyświetlany innym użytkownikom.

  1. Dzień dobry Zdecydowałem się jednak na rozwiązanie z głośnikami i mikrofonami MEMS, które mógłbym umieścić wokół robota, co dałoby możliwość określenia kierunku źródła dźwięku. Zamawiałem nieco części potrzebnych do podwozia gąsienicowego, a przy okazji z Chin wziąłem dwa 3-watowe głośniczki, jakieś wzmacniacze audio i przetestowałem: Jakość dźwięku nie jest najgorsza, jest dostatecznie głośno i wyraźnie słychać mowę, może i nawet jakaś melodyjka by uszła Docelowo robot będzie "niezależny dźwiękowo", czyli będzie miał na pokładzie wszystko co potrzebne, aby z nim porozmawiać. Lub kazać mu coś zrobić. Zatem reasearch w tym kierunku prowadzi mnie do takiego zestawu. Jakość audio to już - zakładam - kwestia technologii i środków Jeśli tutaj chodziło Ci o część software'ową, to ostatnio również badam temat, jednak w perspektywie miesiąca czeka mnie przeprowadzka, więc postęp nad wszelkimi pracami w projekcie zwolnił. Po wstępnym rozpoznaniu rozważam skorzystanie z usług AWS lub hybrydy z innym rozwiązaniem, ale ostatecznej decyzji jeszcze nie podjąłem.
  2. Da się, oczywiście, fajny pomysł. Z kolei moja pragmatyczna strona twierdzi, że smartfona już mam i mogę osiągnąć ten sam efekt, a słuchawki musiałbym kupić. Tak czy inaczej dziękuję za podsunięcie propozycji, rozważę
  3. Bardzo dziękuję @ethanak Kilka dni temu testowałem Jabrę, ale miałem problem z odtwarzaniem dźwięku (był podbity). Jabrę na razie zawiesiłem, wstępnie szukałem też jakiegoś alternatywnego i sensownego mikrofonu i głośnika, tylko nie trafiłem jeszcze na nic wartego uwagi. Rozważam też prostszy sposób, czyli wykorzystanie smartfona. Względnie robot jakiś mały telefon utrzyma, ale możnaby także porozumiewać się dźwiękowo na odległość
  4. Witajcie ponownie, postanowiłem zrobić eksperyment z nieco odmienną formą filmu przedstawiającego nowe umiejętności AgeBota przez umieszczenie w nim małej nutki humoru. Można go traktować jako dopełnienie poprzedniego wideo: https://www.youtube.com/watch?v=OpLQMO29a0k Cieszę się, jeśli chociaż minimalny uśmiech pojawił się na Waszych twarzach
  5. Witajcie, trochę czasu się nie odzywałem, ale projekt nie został porzucony W moim ostatnim poście wspomniałem o nawigacji, planowaniu (SLAM). Na razie postanowiłem przesunąć temat na później, gdy w końcu sprawię sobie bardziej rozbudowaną platformę. Tak jak w jednym z poprzednich postów wspominałem, mógłbym wykorzystać do tego celu kamerę, ale mimo wszystko pomiary nie będą dokładne, także wolę pracować na docelowym hardware. Zamiast tego zrobiłem mały kroczek do dużo bardziej złożonego celu, jakim jest wykonywanie złożonych zadań, np. podania kawy, w dynamicznym środowisku, czego SLAM jest oczywiście istotnym elementem. Zapraszam zatem do obejrzenia poniższego filmu z nowymi zdolnościami AgeBota: https://www.youtube.com/watch?v=JKCDzwdYd_g Co dalej? W kontekście powyższego wideo, oprócz stawiania kolejnych kroków w kierunku celu, zostało mi do dokończenia parę kwestii komunikacyjnych pomiędzy robotem a człowiekiem. Dodatkowy czas przez znaną sytuację (pracuję z domu) pozwolił na odkopanie starych zajawek, a jedną z nich jest zakupione kiedyś podwozie na gąsienicach. Chodzi mi po głowie przeniesienie AgeBota na nie, oczywiście z zachowaniem "starego" - będą kumplami Równolegle rozwijam aplikację z graficznym interfejsem. Pozdrawiam i życzę zdrowia
  6. @Treker Na razie w wolnej chwili ulepszam mechanizmy (np. autoryzacji) na styku robota i reszty systemu, jednak to nie będzie "widoczna" zmiana. Również staram się w tzw. "międzyczasie" realizować koncepcyjne rozwiązania - oczywiście przekłada się to na jakiś kod, najczęściej - właśnie z dziedziny nawigacji czy planowania. Także na razie aktualizacji brak, ale praca wre... swoim tempem Jeśli tylko będę miał coś nowego, to bardzo chętnie się podzielę
  7. @Treker Dziękuję, platformy wyglądają ciekawie, także przyjrzę się im "z bliska"
  8. Cześć wszystkim, dawno nic nie wrzucałem, ale projekt powoli, konsekwentnie idzie do przodu W celu ułatwienia sobie życia popełniłem taką oto symulację AgeBota, do której dojdzie jeszcze kilka elementów, m.in. przetwarzanie obrazu z symulowanej kamery czy sygnałów z kamery RGBD (np. Kinect) i/lub Lidar. Co dalej? Od niedawna pracuję nad mapowaniem przestrzeni 3D oraz lokalizacją i nawigacją robota, co może potem zostać użyte w planowaniu tras, np. przy zadaniu "Podaj piwo" - gdy już nauczy się (lub ja nauczę go), gdzie jest lodówka i jak do niej dojechać, jak ją otworzyć i jak wygląda piwo Za pomocą jednej kamery, która znajduje się aktualnie na pokładzie robota, jestem w stanie zaimplementować odometrię, a nawet kamerę RGBD czy inne ciekawe fajerwerki, ale nie będą to obliczenia z dużą dokładnością, bo jednak wciąż jest to jeden, płaski obraz (być może wrzucę jakiś materiał z tym związany, ale jako ciekawostkę). Także nadszedł już czas, aby też myśleć nad nową, nieco bardziej zaawansowaną platformą Czy ktoś z Was mógłby podpowiedzieć, gdzie takowej szukać, która zawierałaby kamerę RGBD, opcjonalnie lidar, sensowną kolekcję czujników i byłaby gotowa (najwyżej do złożenia) we w miarę przystępnej cenie (załóżmy budżet do 5000zł)?
  9. Stało się - AgeBot zyskał możliwość "paczania" Na pierwszy rzut zaimplementowane zostało rozpoznawanie i uczenie się (oczywiście dowolnej ilości) twarzy z wykorzystaniem wcześniej zaprezentowanych umiejętności robota, ale to dopiero początek...
  10. Zgadza się, wspomniałem o tym już na początku artykułu, że do języka polskiego - w tym też innych słowiańskich czy fleksyjnych jak napisałeś - należy podejść nieco inaczej. Generalnie pamiętajmy, że jest sporo ludzi, który nie mieli do czynienia z NLP w ogóle. Być może przesadnie używałem słowa "zdanie" i doświadczona osoba w tym obszarze może wskazać wiele uwag, ale chciałem artykuł utrzymać w jak najprostszej formie. Artykuł przedstawia pewne podejście i zawiera kawałek nowej wiedzy, którą trzeba przyswoić, więc aby nie komplikować za bardzo - uprościłem niektóre rzeczy. Jest to też trochę ten przypadek "skończ gadać i pokaż kod" (przynajmniej dla mnie ) Zakładam, że jeśli kogoś NLP zaintryguje i zacznie drążyć na własną rękę, to prędzej czy później dojdzie do takich wniosków odnośnie przedstawionego tutaj procesu zastosowanego do języka polskiego przykładowo Nie traktuję tego jako coś złego, dla mnie wszystkie uwagi i konstruktywna krytyka są mile widziane. Dobrze też wiedzieć, że masz z tym doświadczenie Inna sprawa, że cały czas uczę się przekazywać wiedzę w taki sposób, aby było to zrozumiałe. Także dziękuję za uwagi Dokładnie taki był cel
  11. Właśnie opublikowałem artykuł, także zapraszam: https://forbot.pl/forum/topic/16344-wstep-do-przetwarzania-jezyka-naturalnego---klasyfikacja-tekstu/
  12. Witajcie, w artykule zajmiemy się klasyfikacją tekstu z wykorzystaniem sieci neuronowej. W kontekście robotyki, klasyfikacji możemy użyć w sterowaniu robotem za pomocą języka naturalnego. Przykład można zobaczyć w wątku AgeBot. Przetwarzanie języka naturalnego (NLP) jest obszernym tematem, dlatego nie będziemy wdawać się zbytnio w szczegóły, ale przedstawię ogólną koncepcję i narzędzia przydatne do przetwarzania tekstu - da Wam punkt startowy w tej ciekawej dziedzinie Aby utrzymać artykuł we w miarę któtkiej formie zawierającej samo „mięso” założę, że Python jest Wam znany. Będziemy przetwarzać zdania w języku angielskim, który jest jednym z łatwiejszych języków w NLP. Język polski jest problematyczny (chociaż do niego też są narzędzia), więcej można dowiedzieć się z tego filmu. Niniejszy artykuł objaśni bardziej proces normalizacji tekstu, da Wam informacje czego dalej szukać oraz pokaże jak klasyfikacja tekstu z grubsza działa. Konkretną implementację udostępniłem na GitHubie (link), którą możecie traktować jako bazę, aby zrobić podobne sterowanie w Waszych robotach Polecam jednak przestudiować podlinkowany przykład kodu, aby dokładniej zrozumieć, co tam się dzieje lub rozwiać wątpliwości po przeczytaniu poniższych akapitów. Zacznijmy od początku Wspomniałem o sieci neuronowej, ale co to właściwie jest i jak ona działa? Polecam ten film. Wiedza jak działa sieć neuronowa nie jest jednak niezbędna, aby korzystać z powyższego kodu Jeśli korzystacie w swoich robotach z Raspberry PI, spokojnie powinniście bez problemu wykonywać poniższe czynności oraz uruchomić przykładowy kod na tejże platformie. Zainstalujmy potrzebne zależności: pip3 install tensorflow nltk tflearn numpy Tensorflow jest biblioteką, dzięki której możemy budować modele uczenia maszynowego. Tflearn jest nakładką, która ułatwia korzystanie z Tensorflow. Z Numpy korzystać będzie Tensorflow. Nltk natomiast jest biblioteką, która zawiera szereg przydatnych funkcji, jeśli zajmujemy się NLP. Po zainstalowaniu, przygotujmy bibliotekę nltk do użytku za pomocą konsoli Pythona (po tym kroku można uruchomić skrypt z GitHuba): import nltk nltk.download(‘punkt’) Pora na mięso Jeśli mamy sterować robotem, to przyjmijmy sobie jedno zdanie na którym objaśnię kolejne etapy - niech to będzie „move forward please”. W pierwszym kroku następuje tzw. tokenizacja – podzielenie zdania na mniejsze części, które nazywamy tokenami. W przypadku przyjętego zdania, dostaniemy: [‘move’, ‘forward’, ‘please’] Używamy do tego funkcji „word_tokenize” z biblioteki „nltk”. Samo zdanie zostało podzielone na słowa, jednak wynik przy trudniejszych zdaniach będzie wyglądał nieco inaczej. Spróbujmy „robot didn’t move!”. [‘robot’, ‘did’, „n’t”, ‘moved’, ‘!’] Pamiętajmy jednak, że języki mają różne reguły, więc rozbicie zdania za pomocą „spacji” niekoniecznie będzie poprawnym sposobem W powyższym „n’t” możemy zastąpić na „not”, gdyż te dwa słowa oznaczają to samo. Jeśli tego nie zrobimy, oba będą traktowane jako dwa osobne słowa, co może zakłócić trafność klasyfikacji. Kolejnym krokiem jest stemming. Co to takiego? Jest to redukcja konkretnych słów do ich podstawowych form. Co dzięki stemmingowi osiągamy? Jedną intencję można wyrazić na kilka sposobów, używając różnych odmian danych słów, jednak te zdania nadal oznaczają jedno. Istnieje wiele algorytmów, możecie pobawić się nimi tutaj. My użyjemy algorytmu Lancaster, który jest dosyć agresywny. Przykładowo zdanie: Programmer programmed a program which programs new programs zostanie zredukowane do formy program program a program which program new program Ostatnim krokiem jest normalizacja danych w taki sposób, aby proces był powtarzalny. Tworzymy więc sobie słownik zawierający unikalne słowa, w którym umieszczamy tokeny po stemmingu posortowane wg. alfabetu. Dane treningowe dla modelu, jako że sieć neuronowa pracuje na liczbach, musimy przekształcić... na liczby . Zakładając, że nasz słownik już po tokenizacji i stemmingu wygląda następująco: [‘forward’, ‘mov’, ‘pleas’] Tworzymy pierwszy wiersz danych trenujących korzystając z przykładów zdań. W naszym przypadku jest jedno zdanie, ale słowo „please” jest właściwie opcjonalne. Bez „please” po prostu będziemy mniej mili Tworzymy nową tablicę i iterujemy po słowniku. Jeśli napotkamy w nim słowo, które występuje w zdaniu, wstawiamy do nowo utworzonej tablicy 1, w przeciwnym wypadku 0. Ilość elementów w jednym wierszu danych trenujących musi być równa ilości słów w słowniku oraz ich kolejność musi być identyczna, stąd taki zabieg. Uzyskujemy następujące dane treningowe: Dla zdania „move forward please”: [1, 1, 1] Dla zdania „move forward”: [1, 1, 0] Analogicznie postępujemy z danymi wyjściowymi, czyli naszymi klasami. Tworzymy tablicę dostępnych, unikalnych oraz posortowanych alfabetycznie klas. Przyjmijmy, że nasze zdanie będzie sklasyfikowane jako „move” oraz do przykładów dodamy zdanie „hello there” oznaczone klasą „greeting”: [‘greeting’, ‘move’] Wyjściem będzie: Dla zdania „move forward please”: [0, 1] Dla zdania „move forward”: [0, 1] (to jest ta sama klasa zdania) Dla zdania „hello there”: [1, 0] Skupmy się jednak dalej na naszym bazowym zdaniu „move forward please”. Dane trenujące, które uzyskamy w całym tym procesie, czyli: X = [[1, 1, 1], [1, 1, 0]] Y = [[0, 1], [0, 1]] używamy, aby wytrenować sieć neuronową. Po wytrenowaniu, klasyfikując konkretne zdania, proces powtarzamy – sprowadzamy zdanie do liczb i klasyfikujemy. Gdy mamy już wytrenowany model (sieć), używamy go w celu klasyfikacji nowych (lub tych z przykładów) zdań. Ostatecznie pisząc do robota „move forward please” wiemy, że autorowi chodzi o „move”, ponieważ wyjście sieci neuronowej to prawdopodobieństwo z jaką algorytm jest "pewien" danej klasy. Suma tych liczb, przez użycie funkcji aktywacyjnej "softmax" będzie równać się jeden, niezależnie od ilości klas. Zatem programujemy programujemy robota zależnie od naszych potrzeb W tym artykule to już wszystko. Polecam jeszcze raz, aby zapoznać się z kodem na GitHubie. Jeśli coś było niejasne, chętnie odpowiem na Wasze pytania. PS: Celowo pominąłem część przykładów z kodem, ponieważ zależnie od tego jakiej biblioteki użyjecie, nazwy funkcji mogą się różnić.
  13. Jasne, może podałem nienajlepszy przykład, ale wiadomo o co chodzi Dodam jeszcze, że nie tylko ja muszę inicjować odpowiedź robota. On sam też do mnie pisze, jeśli np. wywnioskuje, że kończy mu się bateria, więc powinien zwolnić, aby ograniczyć zużycie prądu i poinformować mnie o tym, żeby naładować akumulator. W planach mam również zrobienie stacji dokującej (raczej dalszy plan), aby nie zawracał głowy
  14. Na ten moment mój serwis wspiera tylko język angielski, ponieważ jest prostszy w "obróbce" (przynajmniej prostszy od polskiego, ale o tym w nadchodzącym poście). Dodam język polski na pewno, natomiast nie zastanawiałem się nad docelowym językiem komunikacji z moim robotem - w sumie fajna okazja do przećwiczenia angielskiego, co w sumie robię w pracy, więc bardziej byłbym za polskim Czat w filmikach jest po angielsku, żeby rozumiała większa ilość osób, o czym się tam rozmawia (przynajmniej wydaje mi się, że tak jest) Super, dziękuję PS: Wspomniałem o poście. Mam zamiar napisać tam nieco szczegółowych informacji o samym procesie przetwarzania tekstu i dać taki punkt startowy dla tych, który się zainteresują. I tutaj mam do Was pytanie, czy bylibyście zainteresowani zrobić też takie sterowanie w Waszych konstrukcjach? Zaznaczam, że to wcale nie musi być robot. Możecie nawet swojemu "asystentowi" (który byłby kawałkiem programu) powiedzieć lub napisać, żeby przestać grzać w mieszkaniu, bo za gorąco Robot, dron, asystent, autonomiczny odkurzacz lub coś, do czego sięga Wasza fantazja.
  15. Oprócz czatowania mam w planie również zamontować jakiś głośnik z mikrofonem, aby można było z robotem porozmawiać. Sam czat stworzył pewne podwaliny pod tę warstwę, do tego jest elementem projektu, o którym wspomniałem na końcu posta Jeśli chodzi o czatowanie i przetwarzanie tekstu, to dobranie odpowiednich parametrów modelu tak, aby miał jak największą, poprawną trafność tego, "co ja chcę od robota", niezależnie od trenowania modelu.
×
×
  • Utwórz nowe...