Skocz do zawartości

Przeszukaj forum

Pokazywanie wyników dla tagów 'bot'.

  • Szukaj wg tagów

    Wpisz tagi, oddzielając przecinkami.
  • Szukaj wg autora

Typ zawartości


Kategorie forum

  • Elektronika i programowanie
    • Elektronika
    • Arduino i ESP
    • Mikrokontrolery
    • Raspberry Pi
    • Inne komputery jednopłytkowe
    • Układy programowalne
    • Programowanie
    • Zasilanie
  • Artykuły, projekty, DIY
    • Artykuły redakcji (blog)
    • Artykuły użytkowników
    • Projekty - DIY
    • Projekty - DIY roboty
    • Projekty - DIY (mini)
    • Projekty - DIY (początkujący)
    • Projekty - DIY w budowie (worklogi)
    • Wiadomości
  • Pozostałe
    • Oprogramowanie CAD
    • Druk 3D
    • Napędy
    • Mechanika
    • Zawody/Konkursy/Wydarzenia
    • Sprzedam/Kupię/Zamienię/Praca
    • Inne
  • Ogólne
    • Ogłoszenia organizacyjne
    • Dyskusje o FORBOT.pl
    • Na luzie

Kategorie

  • Quizy o elektronice
  • Quizy do kursu elektroniki I
  • Quizy do kursu elektroniki II
  • Quizy do kursów Arduino
  • Quizy do kursu STM32L4
  • Quizy do pozostałych kursów

Szukaj wyników w...

Znajdź wyniki, które zawierają...


Data utworzenia

  • Rozpocznij

    Koniec


Ostatnia aktualizacja

  • Rozpocznij

    Koniec


Filtruj po ilości...

Data dołączenia

  • Rozpocznij

    Koniec


Grupa


Imię


Strona

Znaleziono 2 wyniki

  1. Bot głosowy Marian Każdy chyba słyszał o asystentach głosowych, czy to Alexa czy Asystent Google. Ale czy ktoś z was próbował stworzyć własnego asystenta głosowego? Ja natchniony nowo zakupioną Alexą, postanowiłem spróbować swoich sił w napisaniu prostego bota sterowanego głosem, który może przeprowadzić proste interakcje z użytkownikiem. Sięgnąłem moim zdaniem po najodpowiedniejsze narzędzie do tego projektu, czyli po pythona, co zaowocowało powstaniem Mariana. Ten artykuł bierze udział w naszym konkursie! 🔥 Na zwycięzców czekają karty podarunkowe Allegro, m.in.: 2000 zł, 1000 zł i 500 zł. Potrafisz napisać podobny poradnik? Opublikuj go na forum i zgłoś się do konkursu! Czekamy na ciekawe teksty związane z elektroniką i programowaniem. Sprawdź szczegóły » Do stworzenia własnego bota głosowego wykorzystałem pythona w wersji 3.8.5, środowisko Spyder oraz cztery biblioteki pythona. import speech_recognition as sr #biblioteka odpowiedzialna za rozpoznawanie naszego głosu import pyttsx3 as tts #biblioteka odpowiedzialna za tworzenie głosu bota from playsound import playsound #biblioteka odpowiedzialna za odtwarzanie muzyki przez bota import time Poniżej komendy których należy użyć do pobrania niezbędnych bibliotek. pip install SpeechRecognition pip install pyttsx3 pip install playsound Następne linie kodu prezentują się następująco: version = "1.0" author = "AvirFrog" sleep_time= 3 r = sr.Recognizer() engine = tts.init() engine.setProperty('rate', 150) Zmienne version oraz author są wykorzystywane w dalszej części programu i nie są niezbędne do jego działania (jeśli zdecydujemy się na pominięcie tych zmiennych w kodzie to powinniśmy też usunąć jedną część o której wspomnę później). Zmienna sleep_time = 3 odpowiada za czas oczekiwania na wywołanie uruchomionego bota. Po włączeniu bota jeśli nie usłyszy on swojego imienia przez najbliższe 3 sekundy wyłączy się. Zmienna r = sr.Recognizer() pozwala nam na wczytywanie naszego głosu. Zmienna engine = tts.init() inicjalizuje silnik zmiany tekstu na mowę i właśnie na tej zmiennej możemy operować i modyfikować możliwości głosowe naszego bota. engine.setProperty('rate', 150) - jest to ustawienie prędkości z jaką nasz asystent głosowy mówi. Jeśli chcielibyśmy zmienić głos naszego bota to możemy wykorzystać poniższy kod voices = engine.getProperty('voices') engine.setProperty('voice', voices[0].id) Zmiana voices[0] na voices[1] sprawi że nasz bot będzie mówił głosem męskim po angielsku. Ja wolałem zostać przy podstawowym głosie żeńskim mówiącym po Polsku, ze względu na to że na razie jest to prototyp bota głosowego. def speak(text): engine.say(text) engine.runAndWait() def get_Text(): with sr.Microphone() as source: try: print("Słucham...") audio = r.listen(source) text = r.recognize_google(audio, language='pl-PL') if text != "": return text return 0 except: return 0 Pierwsza funkcja speak jest bardzo prosta, przyjmuje ona parametr text (czyli to co nasz bot będzie miał powiedzieć) i za pomocą engine.say(text) nasz bot jest w stanie powiedzieć to co mu kazaliśmy. Druga funkcja get_Text polega na zarejestrowaniu naszego głosu. W pierwszej linii za pomocą with sr.Microphone() as source: ustawiamy nasz mikrofon jako rejestrator dźwięku. Następnie mamy wychwytywanie błędu w rozpoznawaniu, czasami zdarzyć się może tak że nasz mikrofon nie zostanie wykryty i z tego powodu by zabezpieczyć program przed błędami używamy try/except. By mieć pewność że wszystko dobrze działa program informuje nas komunikatem "Słucham...", kiedy jest gotowy na przyjęcie polecenia. Niżej do zmiennej audio przekazujemy nasz zarejestrowany głos i zmieniamy go na tekst (korzystając z rozpoznawania mowy google). Poniższa funkcja pozwala mi zaokrąglać liczby po dzieleniu, nie ma w niej nic szczególnego i jest jednym z wielu możliwych rozwiązań (wykorzystamy tę funkcję w dalszej części kodu). def rounding_of_numbers(n, decimals=0): multiplier = 10 ** decimals return int(n * multiplier) / multiplier Nareszcie czas na mózg naszego bota głosowego. W tym miejscu wywołujemy powyższe funkcje i decydujemy na co i w jaki sposób reaguje nasz bot. while True: try: txt = get_Text().lower() txt = txt.split() if txt != 0 and txt[0] == 'marian': print(txt) speak("Tak") if txt != 0 and txt[1] == 'witaj': print(txt) speak("Witaj, co mogę dla Ciebie zrobić?") continue elif txt != 0 and txt[1] == 'włącz' and txt[2] == 'muzykę': print(txt) speak("Włączam muzykę") playsound('WikingFoxMusic_music.mp3') speak("Mam nadzieję że muzyka Ci się podobała, bo mi bardzo") elif txt != 0 and txt[1] == 'wyloguj': print(txt) speak("Dozobaczenia") break elif txt != 0 and txt[1] == 'policz': print(txt) speak("Zaraz policzymy") if txt != 0 and txt[3] == 'dodać': print(txt) speak("dodawanie") n1, n2 = int(txt[2]), int(txt[4]) wynik = n1 + n2 mwynik = str(wynik) speak(f'{str(n1)} dodać {str(n2)} jest równe {mwynik}') continue elif txt != 0 and (txt[3] == '-' or txt[3] == 'minus'): print(txt) speak("odejmowanie") n1, n2 = int(txt[2]), int(txt[4]) wynik = n1 - n2 mwynik = str(wynik) speak(f'{str(n1)} minus {str(n2)} jest równe {mwynik}') continue elif txt != 0 and txt[3] == 'na': print(txt) speak("dzielenie") n1, n2 = int(txt[2]), int(txt[4]) wynik = rounding_of_numbers((n1 / n2), 2) mwynik = str(wynik) speak(f'{str(n1)} podzielić {str(n2)} jest równe {mwynik}') continue elif txt != 0 and (txt[3] == 'x' or txt[3] == 'razy'): print(txt) speak("mnożenie") n1, n2 = int(txt[2]), int(txt[4]) wynik = n1 * n2 mwynik = str(wynik) speak(f'{str(n1)} razy {str(n2)} jest równe {mwynik}') continue else: print(txt) speak(f"Potrafię tylko dodawać, odejmować, dzielić i mnożyć dlatego nie wiem co to {txt[3]}") continue elif txt != 0 and txt[1] == 'informacje': print(txt) speak(f"Informacje o bocie głosowym Marian. Wersja {version}, Autor {author}.") continue else: print(txt) continue else: print(txt) continue except: time.sleep(sleep_time) speak("Skoro nic nie mówisz to wyłączam się. Bywaj") break Teraz postaram się wytłumaczyć jak działają poszczególne rzeczy w naszym bocie: txt = get_Text().lower() txt = txt.split() if txt != 0 and txt[0] == 'marian': print(txt) speak("Tak") Powyższy fragment kodu zmienia nasza mowę, rozpoznaną przez bota tak by była stringiem składającym się z małych liter. Wolałem mieć pewność że program nie będzie miał problemu z rozpoznaniem danego słowa kluczowego (czasami niektóre słowa zapisywał sobie z wielkiej litery co powodowało błędy jeśli nie zostało to uwzględnione w dalszej części kodu, dlatego ten mały zabieg zmiany wszystkich liter w wykrytym tekście na małe litery oszczędza nam wielu problemów). Cały string splitujemy dzięki czemu otrzymujemy tablicę ze słowami. Jeśli pierwszym naszym słowem jest "marian" to nasz bot podejmie z nami interakcję, w przeciwnym razie nie będzie reagował. Zainspirowała mnie do tego Alexa i Asystent Google. Po usłyszeniu swojego imienia bot odpowiada "tak". elif txt != 0 and txt[1] == 'włącz' and txt[2] == 'muzykę': print(txt) speak("Włączam muzykę") playsound('WikingFoxMusic_music.mp3') speak("Mam nadzieję że muzyka Ci się podobała, bo mi bardzo") W powyższym fragmencie można zauważyć że staramy się rozpoznać dwa słowa "włącz muzykę", przez zaproponowany przeze mnie sposób wykrywania komend, musimy właśnie w taki sposób operować na komendach składających się z dwóch lub większej ilości słów. Tutaj widzimy wykorzystanie biblioteki playsound, która uruchamia muzykę będącą w tym samym folderze co nasz skrypt z botem. elif txt != 0 and txt[1] == 'wyloguj': print(txt) speak("Dozobaczenia") break Wyżej natomiast mamy komendę do wyłączenia bota, za co odpowiada break, który wychodzi nam z nieskończonej pętli while. elif txt != 0 and txt[1] == 'policz': print(txt) speak("Zaraz policzymy") if txt != 0 and txt[3] == 'dodać': print(txt) speak("dodawanie") n1, n2 = int(txt[2]), int(txt[4]) wynik = n1 + n2 mwynik = str(wynik) speak(f'{str(n1)} dodać {str(n2)} jest równe {mwynik}') continue Tutaj znajduje się nasz prosty kalkulator, w momencie gdy nasz bot jako drugie słowo usłyszy "policz", zacznie liczyć to co mu każemy. Do wyboru mamy dodawanie, odejmowanie, mnożenie i dzielenie. Istotne tutaj jest to że rodzaj działania rozpoznajemy za pomocą czwartego słowa, czyli gdy powiemy "Marian policz cztery dodać pięć" bot podany tekst zmieni na "marian policz 4 dodać 5" z czego otrzymamy taką tablice słów: ["marian", "policz", "4", "dodać", "pięć"] Pamiętając że elementy w tablicy numerowane są od zera, element 0 uruchamia nam bota, element 1 pozwala na obliczanie prostych rzeczy, element 2 i 5 to podane przez nas liczby, zapisane za pomocą cyfr (dlatego w dalszej części kodu konwertujemy "4", które jest typu string na 4, które jest typu int. Uwaga na pułapki. Mówiąc minus, czasem bot da nam znak "-" a czasem słowo "minus" dlatego musimy w skrypcie umieścić informację że jesli chcemy odejmowac to jeśli czwarte słowo jest myślnikiem lub słowem minus. elif txt != 0 and (txt[3] == '-' or txt[3] == 'minus'): jeśli kogoś zastanawia czym jest txt != 0 to chodzi tu o to że nasz rozpoznany tekst nie może być pusty. Na koniec, wyłączanie bota po naszej nieaktywności głosowej. except: time.sleep(sleep_time) speak("Skoro nic nie mówisz to wyłączam się. Bywaj") break Jeśli nasz asystent głosowy nie wykrył naszego głosu przez ustawioną przez nas wcześniej ilość czasu, to się automatycznie wyłączy. Na samym końcu chciałbym jeszcze wspomnieć o kilku bolączkach tego bota, nie jest on idealny, i ma kilka wad. Głównym problemem jest to że bot w takim stanie w jakim jest obecnie (wersja 1.0), potrafi płynnie wykonać 3 lub 4 polecenia, następnie jego reakcje na kolejne polecenia drastycznie spadają. Marian na samym początku miał posłużyć do automatyzacji pewnych zadań, głosem dlatego też zdecydowałem się na taką formę interakcji za pomocą if else jak widzicie wyżej. W trakcie pisania kodu, pomysł ewoluował i powstał amatorski asystent głosowy, który przerósł moje najśmielsze oczekiwania, dlatego pomimo tego że płynnie wykonuje 3 lub 4 polecenia to nadal jest wart uwagi. Kolejnym problemem jest rozpoznawanie mowy, nie wiem jak to wygląda w przypadku innych języków, ale po polsku czasem zaczyna wariować, np. w przypadku podawania komendy "Marian policz dwa dodać dwa", rozpoznawanie głosu zapisuje "dwa" słownie a nie cyfrą, co powoduje problem. Nie jest to oczywiście wina bota, tylko specyfika działania biblioteki z której korzysta. Myślę że samo zmienianie tekstu na mowę oraz rozpoznawanie głosu może mieć szereg zastosowań, np. interaktywna stacja pogodowa, lub mówiący czujnik ruchu, dlatego liczę na to że artykuł pobudzi waszą kreatywność i wpadniecie na pomysł stworzenia czegoś na podstawie powyższego asystenta głosowego, a może uda wam się rozwiązać jego problemy i umieścić na popularnej malinie, co pozwoli na stworzenie własnej wersji Alexy? Kto wie? Podsyłam również link do filmu na YT, prezentującego aktualne możliwości bota ####################### Coś o mnie: Nazywam się Kacper, jestem studentem Bioinformatyki, programuję w pythonie i interesuje się analizą danych. Na Forbocie nazywam się Ruby a na Githubie i YT nazywam się AvirFrog. Zapraszam na na Github: AvirFrog/Marian, jeśli spodobał Ci się mój pomysł na asystenta głosowego zostaw gwiazdkę. Zapraszam również na kanał YT: AvirFrog, aktualnie znajduje się tam film z prezentacją możliwości przedstawionego tu bota głosowego Marian, ale w przyszłości pojawią się kolejne filmy z nowymi projektami, oraz omówienia kolejnych wersji Mariana. Dziękuję za przeczytanie całego artykułu, w razie pytań odnośnie bota, piszcie pod artykułem, chętnie na nie odpowiem. Pozdrawiam Ruby #######################
  2. Witam. Jestem zielony jeśli chodzi o programowanie. Czy ktoś z Was umiałby napisać program który obstawi mi ten sam "typ" który ja podam na wielu kontach na tym samym bukmacherze? Każde konto na innej komórce. A najchętniej czy ktoś doradziłby mi gdzie mogę zacząć naukę tego typu pisania botów, makro czy jakkolwiek się to w świecie IT zwie? Pozdrawiam. Paweł
×
×
  • Utwórz nowe...

Ważne informacje

Ta strona używa ciasteczek (cookies), dzięki którym może działać lepiej. Więcej na ten temat znajdziesz w Polityce Prywatności.