diff --git a/Jarvis.py b/Jarvis.py index d50703ade33f04c77ecc25ebde8f6c0a4ec8b100..0d1389b2869139ed96f35c22557f3493b5d7ffaf 100755 --- a/Jarvis.py +++ b/Jarvis.py @@ -12,6 +12,16 @@ Projet Jarvis from myimports import * +def tts_custom(text, file, lang='fr-CA'): # plus rapide que gtts mais meme resultat + with open(file, 'w') as f: + f.write('') # on vide le fichier avant + with open(file, 'ab') as f: + for i in text.split('. '): + params = {'ie': 'UTF-8', 'q': i + '.', 'tl': 'fr-CA', 'client': 'gtx'} + r = requests.get(url, params=params) + f.write(r.content) + + def var_name(var): """return the name of the variable var""" for name, value in globals().items(): @@ -42,6 +52,7 @@ def get_speech(message="entrée"): entre = r.recognize_google(audio, language="fr") understand = True print(entre) + os.system('mpg321 sounds/compris.mp3 2>/dev/null') except: print("[!] impossible de comprendre votre charabia [!]") entre = '' @@ -71,8 +82,9 @@ def parle(texte, save=True, lang='fr-CA'): line_no = test_list.index(texte.replace('\n', '')) except ValueError: line_no = len(lines) - 1 if len(lines) != 0 else 0 - tts = gTTS(text=texte, lang=lang) - tts.save("saved_voice/{}.mp3".format(line_no)) + # tts = gTTS(text=texte, lang=lang) + # tts.save("saved_voice/{}.mp3".format(line_no)) + tts_custom(texte, "saved_voice/{}.mp3".format(line_no), lang=lang) if save: with open("database.txt", 'a') as f: f.writelines(['{}\n|'.format(texte)]) @@ -239,19 +251,6 @@ def message(): parle("l'Envoi du mail est annulé.") -def wiki(texte): - global topics - topics = [] - try: - page = wikipedia.page(texte) - texte1 = page.summary - parle(texte1.encode().decode('utf-8').encode('cp850', 'ignore').decode('cp850')) - except: - topics = wikipedia.search(texte) - texte1 = "Vous voulez dire : " + ", ".join(topics) - parle(texte1.encode().decode('utf-8').encode('cp850', 'ignore').decode('cp850')) - - def location(entre): '''ouvre maps pour montrer un lieu''' if "ou est " in entre: @@ -316,6 +315,7 @@ def tests(entre): # meteo if "meteo" in entre: + parle('Une petite minute.') meteo(entre) # verrouillage jarvis @@ -343,10 +343,10 @@ def tests(entre): if "cherche" in entre and "sur wiki" in entre: texte = " ".join((entre.replace("cherche", "").replace("sur wikipedia", "")).split(" ")) parle("je vais chercher :" + texte) - wiki(texte) + parle(usefull.wiki(texte)) elif "cherche" in entrepreced and "sur wikipedia" in entrepreced and topics != []: try: - wiki(entre) + parle(usefull.wiki(entre)) except: pass @@ -451,9 +451,11 @@ def tests(entre): parle("je n'ai pas compris.") else: print("je n'ai pas compris") + os.system('mpg321 sounds/pascompris.mp3 2>/dev/null') if not currently_playing: dire_un_truc_en_mode_random(verbosity) compris = 0 + entrepreced = entre if merci == 0: comprispreced = compris diff --git a/README.md b/README.md index f275a8067f6502a4846c22868419f2c270447920..7f39699be83e1896c254f97cf12d5978b82f7b46 100644 --- a/README.md +++ b/README.md @@ -4,14 +4,23 @@ Mon Jarvis pour windows et linux (peut-être un truc sur android aussi :°°) # INSTALLATION - debian : - * `sudo apt install python3 python3-pyaudio python3-pip` - * `git clone https://git.iiens.net/dubard2018/jarvis.git cd jarvis/` - * `pip3 install -r requirements.txt` - * `chmod +x jarvis.py` + > * `sudo apt install python3 python3-pyaudio python3-pip mpg321` + > * `git clone https://git.iiens.net/dubard2018/jarvis.git cd jarvis/` + > * `pip3 install -r requirements.txt` + > * `chmod +x jarvis.py` # USE - debian : - * `./jarvis.py` + > * `./jarvis.py` + +# ISSUES +## ALSA lib pcm.c:7843:(snd_pcm_recover) underrun occurred + +Dans /etc/pulse/daemon.conf décommenter et modifier ces lignes : + > * `default-fragments = 5` + > * `default-fragment-size-msec = 2` + +---- # TODOLIST: - lit le contenu affiché à l'écran @@ -21,10 +30,33 @@ Mon Jarvis pour windows et linux (peut-être un truc sur android aussi :°°) - parler du grand Chuck Norris ! - quizz - migrer les fonctionalités usefull dans un package 'usefull' -- petit son quand qqch est detecté -- petit son quand qqch est compris + +---- # CHANGELOG: + +## 16 aout 2019 +- nouveau système de TTS plus rapide par une simple requete http vers google translate +- petit son quand qqch est compris +- petit son quand qqch n'est compris + +## 15 aout 2019 +- s'arrete de parler quand on l'interrompt +- quand la voix est activée, ne répondre je n'ai pas compris que si la ou la requete précédente comprends le nom de l'ia +- dit des trucs inutiles automatiquement de temps en temps selon un certain niveau de verbosité +- raconter une intox +- faire de la philosophie +- jouer du pipo +- envoie balader les gens qui lui font des compliments d'amour + +## 14 aout 2019 +- le tts des phrases de bases sont enregistées en local pour plus de rapidité et pour que ce soit possible de parler à l'ia, sans internet + +## 13 aout 2019 +- speech_recognition module +- gtts module + +## Initial release (old stuff : 2016) - donne l'heure - donne la date complète - envoi un email complet (fonctionnalité compatible avec les boites mail : orange,gmail,yahoo,gmx,hotmail) @@ -32,13 +64,6 @@ Mon Jarvis pour windows et linux (peut-être un truc sur android aussi :°°) - montre l'emplacement d'un endroit sur google map ('ou est ', 'ou se situe ', 'ou se trouve ', 'est ou ') - peut switcher entre le mode clavier ou le mode voix(experimental) ('mode voix','mode clavier') - execute une application (experimental) -- nettoie la ram de l'ordinnateur - redémarre ou éteint le pc - donne la météo à un endroit choisi par l'utilisateur (ville pays) -- s'arrete de parler quand on l'interrompt -- quand la voix est activée, ne répondre je n'ai pas compris que si la ou la requete précédente comprends le nom de l'ia -- dit des trucs inutiles automatiquement de temps en temps selon un certain niveau de verbosité -- raconter une intox -- faire de la philosophie -- jouer du pipo -- envoie balader les gens qui lui font des compliment d'amour \ No newline at end of file + diff --git a/__pycache__/myimports.cpython-37.pyc b/__pycache__/myimports.cpython-37.pyc index 04ece3e75896a92a0942dcafedb63d951a23c07b..2d11510bc55cdd6488361ac531e913d766618e09 100644 Binary files a/__pycache__/myimports.cpython-37.pyc and b/__pycache__/myimports.cpython-37.pyc differ diff --git a/database.txt b/database.txt index 6eab395bfabc17a55435a1d0d73237f81de28b1c..0f075d1dd5b1d8ea0ecc4b561f5be7d60e6d78c6 100644 --- a/database.txt +++ b/database.txt @@ -21,4 +21,9 @@ Bonjour ! |J'avoue que je me suis déjà senti en meilleur forme. Que puis-je faire pour vous ? |je vais chercher : tomoa narasaki |Tomoa Narasaki, né le 22 juin 1996, est un grimpeur japonais spécialiste du bloc. +|t'inquiètes, je suis payé pour ça +|Une petite minute. +|Je vais très bien et vous ? +|J'avoue que je me suis déjà senti en meilleur forme. et vous ? +|je vais chercher : paris paris | \ No newline at end of file diff --git a/myimports.py b/myimports.py index 6d5992e8c7b3699413a25d76864987422936bfad..bc15bc15a5c1a421a504de8ba13f0bdc7a1bb519 100644 --- a/myimports.py +++ b/myimports.py @@ -17,12 +17,11 @@ import warnings import requests import mutagen.mp3 import useless # package de fonctions inutiles mais marrantes -import pyttsx3 -# import usefull # package de fonctions utiles +# import pyttsx3 +import usefull # package de fonctions utiles from googletrans import Translator translator = Translator() warnings.simplefilter('ignore', UserWarning) -wikipedia.set_lang("fr") reconnaissance = str(input("[!] activer la reconnaissance vocale ? (y,N)>")) @@ -51,14 +50,15 @@ else: pygame.init() pygame.mixer.init(frequency=24000) -engine = pyttsx3.init() -voice = engine.getProperty('voices')[26] # the french voice -engine.setProperty('voice', voice.id) - +# engine = pyttsx3.init() +# voice = engine.getProperty('voices')[26] # the french voice +# engine.setProperty('voice', voice.id) +url = "https://translate.google.com/translate_tts" +topics = [] r = sr.Recognizer() r.dynamic_energy_threshold = True -r.pause_threshold = 0.5 -mic = sr.Microphone(0) +r.pause_threshold = 0.3 +mic = sr.Microphone() jarvis = True # défini si jarvis commence vérouillé ou pas mdp = "oracle02" # défini le mdp de déverouillage de jarvis bot_name = "jarvis" # défini le nom auquel répondra l'ia @@ -91,4 +91,3 @@ fonctionnalités = [ class BreakoutException(Exception): pass - diff --git a/saved_voice/23.mp3 b/saved_voice/23.mp3 new file mode 100644 index 0000000000000000000000000000000000000000..432745db208803ba80c48f1e46ac97a479919112 Binary files /dev/null and b/saved_voice/23.mp3 differ diff --git a/saved_voice/24.mp3 b/saved_voice/24.mp3 new file mode 100644 index 0000000000000000000000000000000000000000..1ed3271d1a4ad668b02317ad88a98db29ff0c2b6 Binary files /dev/null and b/saved_voice/24.mp3 differ diff --git a/saved_voice/25.mp3 b/saved_voice/25.mp3 new file mode 100644 index 0000000000000000000000000000000000000000..84d6026961ba1e4b88b6a737976817aa5018041f Binary files /dev/null and b/saved_voice/25.mp3 differ diff --git a/saved_voice/26.mp3 b/saved_voice/26.mp3 new file mode 100644 index 0000000000000000000000000000000000000000..92d00ed59718b21096ddb4f251bdc9e92bf3d137 Binary files /dev/null and b/saved_voice/26.mp3 differ diff --git a/saved_voice/27.mp3 b/saved_voice/27.mp3 new file mode 100644 index 0000000000000000000000000000000000000000..ce3f217f94035524de3ebb007528261f914352e9 Binary files /dev/null and b/saved_voice/27.mp3 differ diff --git a/usefull/__init__.py b/usefull/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..8b556a262c2123d20593f95a80df0cf9edad9599 --- /dev/null +++ b/usefull/__init__.py @@ -0,0 +1,3 @@ +# __init__.py + +from .wiki import * \ No newline at end of file diff --git a/usefull/__pycache__/__init__.cpython-37.pyc b/usefull/__pycache__/__init__.cpython-37.pyc new file mode 100644 index 0000000000000000000000000000000000000000..251920414995ef2edc92307148ed559033c123c4 Binary files /dev/null and b/usefull/__pycache__/__init__.cpython-37.pyc differ diff --git a/usefull/__pycache__/wiki.cpython-37.pyc b/usefull/__pycache__/wiki.cpython-37.pyc new file mode 100644 index 0000000000000000000000000000000000000000..1e703e7f49fe6736cb0021841e19c319004935fd Binary files /dev/null and b/usefull/__pycache__/wiki.cpython-37.pyc differ diff --git a/usefull/maps.py b/usefull/maps.py new file mode 100644 index 0000000000000000000000000000000000000000..b06c35258f74b95aa88acf2eccc55eba9b1d9b9f --- /dev/null +++ b/usefull/maps.py @@ -0,0 +1,18 @@ +#!/usr/bin/python3 +''' +affiche une page maps avec un lieu rechercher + +TODO : affiche un itinéraire sur maps +''' + +import requests +import os + + +def maps(location, dest=None): + location = ("+").join(location.split(" ")) + os.system("firefox https://www.google.nl/maps/place/" + location + "/& >/dev/null") + + +if __name__ == '__main__': + lieu, dest = input('entrez un lieu/une destination>').split('/') diff --git a/usefull/wiki.py b/usefull/wiki.py new file mode 100755 index 0000000000000000000000000000000000000000..22f1d3d5faf72ca8f42c20349c8cbcb58ee20a71 --- /dev/null +++ b/usefull/wiki.py @@ -0,0 +1,22 @@ +#!/usr/bin/python3 +# wikipedia + +import wikipedia + + +def wiki(texte, lang='fr'): + global topics + wikipedia.set_lang(lang) + topics = [] + try: + page = wikipedia.page(texte) + texte1 = page.summary + return texte1.encode().decode('utf-8').encode('cp850', 'ignore').decode('cp850') + except: + topics = wikipedia.search(texte) + texte1 = "Vous voulez dire : " + ", ".join(topics) + return texte1.encode().decode('utf-8').encode('cp850', 'ignore').decode('cp850') + + +if __name__ == '__main__': + print(wiki(input('vas-y donne un truc a chercher sr le wiki ? : ')))