Aller au contenu


Contenu de XB2000

Il y a 79 élément(s) pour XB2000 (recherche limitée depuis 03-avril 13)



#117851 Terminatosaurus Rex

Posté par XB2000 sur 31 janvier 2023 - 11:42 dans Tête de robots, humaine ou animale, animatronique

Je pourrais lui demander comment faire c'est vrai. Je veux utiliser la même technologie GPT et il y a peu de documentation en français.

ChatGPT lui-même n'est pas du tout adapté pour un robot je pense et a un fonctionnement très différents du système que j'ai en tête.



#117842 Terminatosaurus Rex

Posté par XB2000 sur 30 janvier 2023 - 11:48 dans Tête de robots, humaine ou animale, animatronique

J'ai changé la fixation d'écran par une fixation perso me permettant de libérer de l'espace et j'ai créer un support pour intégrer un nano-ordinateur Jetson-Nano à l'arrière du crâne.

 

20221227_160359.jpg

20230130_222527.jpg

20230130_224411.jpg

 

J'ai conçu les pièces sur Fusion 360 et utiliser les fonction de 'tôleries' pour avoir le plan à plat de la fixation du crâne, le support du Jetson-Nano était déjà une pièce plate.

 

J'ai fait une capture d'écran des plans des deux pièces avec les cotes et je les ai redimensionnés dans Photofiltre à la bonne taille. Je les ai imprimés, découpés et reporter sur une plaque d'aluminium de 2 mm d'épaisseur que j'ai scié en suivant ces plans.

 

J'ai aussi installé une caméra.

20230130_224434.jpg

20230130_224526.jpg

 

Le bouton sur le crâne permet d'allumer le Jetson-Nano et les yeux s'allument en même temps (branchés comme voyant d'allumage).

 

Concernant la programmation, j'ai pris des cours de français  :ignat_02:

https://fr.wikipedia...en_linguistique

 

Mon but est de créer un modèle du langage capable de "comprendre" la logique de la langue française.

 

Par exemple si je lui dit « J'ai mangé une pomme », il devra "comprendre" qu'une pomme a été mangé par moi. Mais le modèle n'aura aucune notion de ce qu'est une pomme, mangé ou même "Je". Et servira seulement à décortiquer ce qu'on lui dit pour un autre programme qui pourra prendre une décision.

Ou autre exemple « Dis bonjour », le modèle enverra sous forme de tableau (ou autrement, peut-être en json) :

{

"proposition1": {
"type": "imperatif",
"verbe":  [{ "infinitif" : "dire"}, {"pronom" : "tu"}, {"temps" : "present" }],

"complement_d-objet": "bonjour" }

}

 

Ce serais une "traduction" interprétable pour un autre programme qui "comprendrais" qu'on lui demande de dire « Bonjour ».




#116110 Récap de la coupe de france 2022 / Eurobot

Posté par XB2000 sur 29 juin 2022 - 05:47 dans Coupe de France de robotique / Eurobot

Youtube m'a proposé l'émission d'E=M6 sur la coupe 2002 :




#116104 Récap de la coupe de france 2022 / Eurobot

Posté par XB2000 sur 26 juin 2022 - 06:46 dans Coupe de France de robotique / Eurobot

Sympa à voir, pas d'équipe Robot Maker ? ^^




#116031 AndysMachines (Terminator T-800)

Posté par XB2000 sur 10 juin 2022 - 11:33 dans Contenu vidéo

Voilà une chaîne YouTube que je suis depuis quelques temps :
3.jpg
AndysMachines
 
Playlist de son Terminator : https://www.youtube....1udgoDaV5SBcRWw
hqdefault.jpg

Dans cette série, je couvre la construction d’un endosquelette Terminator T800, construit complètement à partir de zéro en n’utilisant aucun kit ou pièce préfabriquée. Il ne s’agira pas simplement d’un modèle statique, mais d’un véritable robot autonome fonctionnel capable de se déplacer, de voir, d’entendre et d’interagir avec son environnement.




#116011 Présentation XB2000

Posté par XB2000 sur 08 juin 2022 - 12:29 dans Et si vous vous présentiez?

Nouvel avatar.

avatar.jpg




#116010 Voiture télécommandée sans télécommande

Posté par XB2000 sur 08 juin 2022 - 12:09 dans Robots roulants, chars à chenilles et autres machines sur roues

Tu peux peut-être trouvé des documents en cherchant le numéro de série ou de modèle.

Peut-être qu'une autre télécommande de voiture radiocommandé à 27 MHz fonctionnera ?

Tu peux regarder quels sont les composants à l'intérieur et chercher leurs référence sur internet pour trouver de la documentation.

 

J'ai vu ça si tu veux avec un Arduino : https://passionelect...de-arduino-rc1/




#116008 Voiture télécommandée sans télécommande

Posté par XB2000 sur 07 juin 2022 - 08:46 dans Robots roulants, chars à chenilles et autres machines sur roues

Tout est toujours possible.

Peut-être si tu trouves les caractéristiques/modèle de ta voiture tu peux sois retrouvé une télécommande équivalente, soit utilisé un arduino comme contrôleur.

Tu as des photos et/ou un relevé des inscriptions qui sont dessus ? En générale c'est des télécommandes à 2,4 GHz.




#116005 Herbie / Choupette voiture "vivante"

Posté par XB2000 sur 06 juin 2022 - 05:54 dans Contenu vidéo





 
Celui qui a fait celle-ci a un site internet aussi :
www.stephensherbie.com/
 

Le cerveau et le fonctionnement interne de Herbie….
 
Au début, le système nerveux central de Herbie consistait en plusieurs contrôleurs électromécaniques qui formaient son cerveau, un système pneumatique avec des cylindres d'air sous le capot et dans les portes, une télécommande pour l'activation externe, un système stroboscopique, des phares halogènes, et parce qu'il avait toujours son système électrique d'origine de 6 volts, nous avons ajouté un système électrique de 12 et 24 volts pour aider à certaines des autres fonctions quotidiennes.
Depuis lors, nous avons remplacé les contrôleurs par un nouvel ordinateur portable (son nouveau cerveau) qui contrôle jusqu'à 128 servos simultanément et avons ajouté quelques fonctionnalités supplémentaires telles que des amortisseurs pneumatiques à commande électronique sur les quatre roues, des phares à servocommande qui peuvent regarder à gauche et droite ainsi que haut et bas et des visières qui clignotent, des éjecteurs d'huile (eau) sur sa roue arrière et dans le compartiment moteur, et plus encore. Dans l'ensemble, il est assez high-tech..
 
Picture%20003a.jpg
Picture%20017.jpg
Picture%20018.jpg
Picture%20009b.jpg
Picture%20022.jpg
Picture%20024a.jpg




#116004 Herbie / Choupette voiture "vivante"

Posté par XB2000 sur 06 juin 2022 - 05:54 dans Contenu vidéo

4L5Wqpafst0Ed5dtidCOcinXSAW.jpg
 

La Coccinelle (série de films)
 
La Coccinelle (Herbie) est une série de cinq films, un téléfilm et une série télévisée produits par Walt Disney Pictures avec comme héroïne une coccinelle, surnom français de l'automobile construite par Volkswagen.
L'artiste d'effets spéciaux Danny Lee, qui a travaillé sur les quatre films et conçu les modifications du véhicule, précise que c'est un modèle de 1964 et que 26 exemplaires ont été utilisé sur le film La Coccinelle à Mexico (1980), la plupart trouvée dans l'agglomération de Los Angeles.

Bien que la coccinelle portât le nom masculin « Herbie » en version originale, elle reçut dans la majorité des doublages français le prénom féminin « Choupette » , en adéquation avec le genre du mot français coccinelle. Ceci posa problème sur le troisième film, dans lequel « Herbie » tombe amoureux d'une autre voiture nommée « Giselle », ce qui obligea les traducteurs à la/le renommer « Roméo » tandis que Giselle devenait « Juliette ».

 
Pour ceux qui ne connaissent pas il s'agit d'une série de films sur une Volkswagen Coccinelle de modèle 1964 "vivante". J'en suis pas forcément très fan, mais la voiture en elle-même peut être un projet sympa.
 
Extrait de certains films :


 
Ce qui donne des répliques sympa :

 




#115959 Un nouveau normand

Posté par XB2000 sur 28 mai 2022 - 11:36 dans Et si vous vous présentiez?

Bienvenue à toi.

6gxzfx.gif




#115939 Salut à vous !

Posté par XB2000 sur 21 mai 2022 - 12:37 dans Et si vous vous présentiez?

6gxzfx.gif

 

Pour des enfants en bas âge il existe des jouets sympas.

Par exemple ce modèle à programmation mécanique.

https://www.amazon.f.../dp/B07RH894QY/

41yLSZK4LVL._AC_.jpg

Il y aussi les automates dont j'ai parlé ici : https://www.robot-ma...nu/#entry109731

Comme celui-ci de la série des Tamiya Robocraft : https://www.amazon.f.../dp/B00061HIAI/

41uAEIhif9L._AC_.jpg

 

Ou en carton

 

Même motorisé par un simple élastique




#115938 Terminatosaurus Rex

Posté par XB2000 sur 21 mai 2022 - 12:10 dans Tête de robots, humaine ou animale, animatronique

Alors j'ai surtout travaillé en textuel, tu trouveras la partie reconnaissance vocale dans les tutos qui m'ont servis de première base (utilisé pour la toute première version dont tu as pu lire le code plus haut).

 

Comme je le disait dans mon message précédent REXY, elle peut aussi chercher le verbe, sujet et complément puis exécute le code correspondant grâce à la bibliothèque Spacy : https://spacy.io/models/fr

Par exemple Spacy permet de voir ce qu'est le mot et sa dépendance aux autres :

import spacy
from spacy.lang.fr.examples import sentences 

nlp = spacy.load("fr_core_news_sm")
doc = nlp(sentences[2])
print(doc.text)
for token in doc:
    print(token.text, token.pos_, token.dep_)

Ce qui donne :

San Francisco envisage d'interdire les robots coursiers sur les trottoirs
San PROPN nsubj
Francisco PROPN flat:name
envisage NOUN ROOT
d' ADP case
interdire ADJ nmod
les DET det
robots NOUN nmod
coursiers NOUN amod
sur ADP case
les DET det
trottoirs NOUN nmod

 

J'utilise un Jetson Nano comme ordinateur, la machoire est controlée directement par un Arduino, le Jetson ne pouvant pas la contrôler directement.

Le programme compte les syllabes dans la phrase de réponse et le Jetson Nano envoie une impulsion par syllabes (comme s'il faisait clignoter une DEL le nombre de fois qu'il y a de syllabes) vers une entrée de l'Arduino qui ouvre la gueule à 1 et la referme à 0.




#115937 Bonjour from Québec

Posté par XB2000 sur 20 mai 2022 - 11:09 dans Et si vous vous présentiez?

6gxzfx.gif




#115839 Documentaire robots animaux

Posté par XB2000 sur 08 mai 2022 - 02:40 dans Contenu vidéo

Je n'ai rien vu dessus sur le forum. "Spy in the wild" est une émission de 2017-2018 mettant en scène des robots animaux infiltrateurs (réf à Terminator ^^).

MV5BZjllNjdkZDgtY2IxMS00NjNjLTg5MTYtOGRl

 

 

Spy in the Wild est une série télévisée britannique documentaire sur la nature, produite par BBC Natural History Unit, John Downer Productions et PBS. [1] La série, qui est réalisée et produite par John Downer, a été créée en 2017 avec une deuxième série en 2020. L’utilisation de l’animatronique permet de documenter un comportement interactif qu’aucun animal n’aurait montré envers un cinéaste humain ou devant une caméra cachée.

 

La première saison a duré cinq épisodes à partir du 12 janvier 2017 et s’est terminée le 3 février 2017 et a été diffusée sur BBC One. La série se concentre sur les émotions complexes et l’éthologie (comportement) des animaux, en utilisant plus de 30 « créatures espions » animatroniques spécialement construites, souvent en forme de progénitures de l’espèce.

 

Liste des animatroniques :

Orang-outan
Galagos
Hippopotame
Pingouin
Aigrette

Bébé crocodile
Suricate
Tortue
Chien de prairie
Ara
Paresseux
Cobra
Écureuil
Manchot Adélie
Koala
Louveteau
Loutre
Grizzly
Sanglier
Gorille
Pygargue à tête blanche
Pélican
Colibri
Éléphant de mer
Dragon de Komodo
Éléphant pygmée
Manchot royal
Quokka
Boule de neige
Gland
Jaguar
Perroquet
Iguane
Ours blanc
Castor
Crabe
Poisson-globe
Macareux
Singe Langur
Kangourou
Harfang des neiges
Autruche
Pic
Rocher
Caméléon
Dauphin
Élan
Sphyrapicus

Marmotte
Mille-pattes
Termite

 

Saison 1 :

 

Episode 1 "Amour"

Les créatures espionnes explorent les émotions rarement vues des animaux, révélant si elles sont aussi fortes et complexes que les nôtres. Rejoignez les « spycams » alors qu’ils sont acceptés dans une meute de chiens sauvages, témoins de l’amour des éléphants et sont pleurés par une troupe de singes (comportement découvert dans l'émission lors du dysfonctionnement du robot-singe).

 

Episode 2 "Intelligence"

Les créatures espionnes infiltrent le monde de l’intelligence animale, de l’ingéniosité et de la créativité. Regardez nos espions déguisés en animaux observer un écureuil gris voler un gland espion, une loutre de mer en train d’ouvrir un repas et un orang-outan se laver avec du savon.

 

Episode 3 "Amitié"

Les créatures espionnes et leurs nouveaux amis sauvages comptent les uns sur les autres pour surveiller les prédateurs. Un suricate espion garde des petits suricates tandis qu’un cobra espion fait semblant de les attaquer . L'espion crocodile est témoin d’un partenariat pratique entre de vrais crocodiles et oiseaux.

 

Episode 4 "Méfait / Mauvais comportement"

Les créatures espionnes s’infiltrent dans le monde souterrain des méfaits, du crime et du châtiment des animaux. Le singe espion est pris entre deux feux croisés alors que de vrais singes se battent pour l’alcool d’un bar de plage. L’aigrette espionne est également victime d’un point d’eau lorsque les éléphants jettent de la boue partout.

 

Episode 5 "Rencontrez les espions"

Le dernier épisode explique comment le concept des créatures espionnes a évolué chez John Downer Productions, de la Bouldercam originale aux Penguincams qui ont inspiré les « spycams » de nouvelle génération présentées dans cette série. Il montre le travail minutieux qui est nécessaire à la construction des modèles réalistes et comment l’équipe déploie et exploite les caméras robotiques sur place partout dans le monde. Il contient des moments drôles et inattendus, dont une grande partie est vécue du point de vue des « spycams » eux-mêmes.

 

Saison 2 :

 

Episode 1 "Les tropiques"

Les créatures espionnes enquêtent sur la faune qui prospère sous les tropiques. Ils infiltrent un troupeau d’hippopotames, une pépinière de renards volants roux (chauves-souris), un sanctuaire de gorilles et le monde secret des éléphants de forêt pygmées.

 

Episode 2 "Le Nord"

Voyagez dans l’hémisphère nord, où les créatures espionnes apprennent comment les animaux se déplacent, se nourrissent et se battent. Un colibri espion filme des millions de papillons, et un écureuil espion se retrouve dans une bataille. Un castor espion observe d’autres castors en train de construire des barrages.

 

Episode 3 "Les Îles"

Explorez les îles du Pacifique Sud avec des créatures comme le koala espion, qui capture le comportement de reproduction en Australie, ou le crabe espion, qui rejoint une armée de crabes rouges dans leur marche vers la mer pour déposer leurs œufs.

 

Episode 4 "Les Pôles"

Des poussins manchots aux éléphants de mer, en passant par les louveteaux et les ours polaires, les créatures espionnes rencontrent et observent les animaux les plus robustes et les plus charismatiques des cercles arctique et antarctique.

 




#115803 Terminatosaurus Rex

Posté par XB2000 sur 28 avril 2022 - 09:28 dans Tête de robots, humaine ou animale, animatronique

Petit test.

 

 

Dans la phrase qu'on lui donne elle cherche le verbe, sujet et complément puis exécute le code correspondant. Ensuite elle compte le nombre de syllabes dans sa réponse pour faire bouger sa gueule.




#115738 Terminatosaurus Rex

Posté par XB2000 sur 14 avril 2022 - 11:01 dans Tête de robots, humaine ou animale, animatronique

J'ai un peu avancé sur le programme :

 

Projet d'assistant virtuel sur plateforme "Rexy"

 

Objectifs Généraux

Avoir l'air amicale avec les utilisateurs.

 

Communication

  • Si la commande de l'utilisateur correspond à une intention connue par Rexy, elle répond en conséquence. Cette manière de faire est assez répandue d'après les tutos que j'ai pu voir sur les chatbots en Python.
  • Si la commande n'est pas reconnue par Rexy et qu'il s'agit d'après elle d'une phrase déclarative, exclamative ou impérative, elle répond avec la version Python NLTK du Chatbot des années 1970, Eliza.
  • Si la commande n'est pas reconnue pa Rexy et qu'il s'agit d'après elle d'une phrase interrogative, elle cherchera la réponse sur Wikipédia.

Description des intentions

 

Les intentions permettent au chatbot de comprendre ce qu'on lui demande. L'apprentissage profond du langage naturel permet une souplesse dans la manière de lui demander des choses, sinon il faudrait écrire à la lettre près ce qu'il faut.
Si la commande de l'utilisateur correspond à une intention connue par Rexy, elle répond en conséquence.

Le fichier d'intentions est composé comme suit :

  • Intentions :
    • Sujet : Résumé de l'intention (ex: demander le nom, demander la météo, etc...)
    • Structures : Exemples de phrases que l'utilisateur peut exprimer pour cette intention, sans traitement naturel du langage seuls ces phrases exactes fonctionneraient
    • Réponses : Le chatbot choisi au hasard une de ces réponses pour répondre. En plus on peut ajouter (pas dans cette version) :
    • Mets_contexte : Instaure un contexte, change la signifcation pour le Chatbot de l'intention suivante. Par exemple : quel est la météo ? => contexte demande la météo => et pour les 5 jours suivants ? => demande météo pour 5 jours suivants
    • Contexte : si un contexte est instauré, cette intention remplace une similaire

Pour l'instant je n'utilise le contexte.

 

Le fichier d'intentions contient des commandes appelant des variables, ces intentions sont :

  • 11 L'heure actuelle
  • 12 & 14 La météo pour un endroit donnée 2716.png ou prend sa localisation actuelle (intention 12 météo actuelle ; intention 14 pour la journée ou date)
  • 13 Horaires d'ouverture et fermeture de lieux 2716.png
  • 15 La date actuelle
  • 16 Où se trouve quelque chose 2716.png
  • 17 Le chemin pour aller quelque part 2716.png
  • 18 Trouver un point d'intérêt à proximité 2716.png

Les fonctions affiliées à une intention marquée d'une 2716.png ne sont pas dans cette version.

Si elle ne peut pas répondre (erreur, pas d'accès à l'API nécessaire, etc...), il utilise une réponse de secours contenu dans le fichier d'intentions (attention, peut être un peu grossier...).

 

Eliza

 

Eliza est, en intelligence artificielle, un programme informatique écrit par Joseph Weizenbaum entre 1964 et 1966, qui simule un psychothérapeute rogérien en reformulant la plupart des affirmations du « patient » en questions, et en les lui posant.
Si la commande n'est pas reconnue par Rexy et qu'il s'agit d'après elle d'une phrase déclarative, exclamative ou impérative, elle répond à la façon d'Eliza.

 

Eliza fonctionne par reconnaissance de formes et substitution des mots-clés dans les phrases produites. Eliza se contente de relancer son interlocuteur, contrairement aux agents conversationnels de renseignement, qui sont conçus pour donner des réponses utiles en utilisant leur base de données.

 

La version utilisée est celle fournie dans la librairie de traitement naturel du langage NLTK : Code source pour nltk.chat.eliza J'ai seulement traduit les phrases et expressions en Français.

 

Répondre aux questions

 

En traitement automatique du langage naturel, BERT, acronyme anglais de Bidirectional Encoder Representations from Transformers, est un modèle de langage développé par Google en 2018. Cette méthode a permis d'améliorer significativement les performances en traitement automatique des langues.
La méthode a été adaptée à la langue française en 2019 avec les modèles CamemBERT et FlauBERT. CamemBERT a été pré-entraîné sur un corpus de 138 Go de texte et FlauBERT sur un corpus de 71 Go de texte.

Dans ce projet j'utilise CamemBERT pour répondre à des questions à partir de texte, en l'occurence le contenu d'articles de Wikipedia.




#115143 [En projet] Terran Task Force en 3D de 89 cm du haut avec des servomoteurs AX...

Posté par XB2000 sur 13 janvier 2022 - 02:32 dans Robots à pattes et jambes, humanoïdes, bipèdes, quadrupèdes, hexapodes ...

Très beau projet et belle collection. Tu vas en faire quoi de ton robot ?

 

Tu utilise une version d'essais avs4you pour tes vidéos du coup il y a le logo au milieu, c'est dommage.




#115139 Terminatosaurus Rex

Posté par XB2000 sur 12 janvier 2022 - 06:34 dans Tête de robots, humaine ou animale, animatronique

 

C'est un échec...




#115127 Terminatosaurus Rex

Posté par XB2000 sur 10 janvier 2022 - 11:55 dans Tête de robots, humaine ou animale, animatronique

Petit montage de mis en bouche :

20220111_030002.jpg




#115052 Bonne année 2022

Posté par XB2000 sur 01 janvier 2022 - 01:53 dans Bric-à-brac

5zmbz8.gif 5zmbey.gif



#115046 Terminatosaurus Rex

Posté par XB2000 sur 01 janvier 2022 - 12:24 dans Tête de robots, humaine ou animale, animatronique

5zmbey.gif 5zmbz8.gif



#115044 Terminatosaurus Rex

Posté par XB2000 sur 29 décembre 2021 - 10:43 dans Tête de robots, humaine ou animale, animatronique

Non, c'est pas mon Rex, c'est ma Rexy ^^ (surnom des fans de la T-Rex dans Jurassic-Park).

 

Oui, la prochaine étape est la synthèse vocale, après ce sera la synchronisation avec la gueule. Puis reconnaissance vocale.

Et ensuite des fonctions basiques d'assistants vocal genre Google Home ou Alexa (donner la météo, l'heure, faire des recherches basiques).

 

C'est secondaire mais je vais voir aussi le clonage de voix, dans l'idéale je voudrais lui donner la voix de Bernard Blier ou de Lino Ventura (même si c'est plus ou moins une "fille").




#115042 Terminatosaurus Rex

Posté par XB2000 sur 29 décembre 2021 - 05:28 dans Tête de robots, humaine ou animale, animatronique

Pour le chatbot j'ai pris ce tuto : https://www.techwith...chatbot/part-1/

 

Voilà le code pour ma version de base du chatbot :

 

Librairies Python à installer pour le faire fonctionner :

pip install nltk
pip install numpy
pip install tensorflow
pip install tflearn

Code Python :

import nltk
from nltk.stem.lancaster import LancasterStemmer
stemmer = LancasterStemmer()

import numpy
import tflearn
import tensorflow
import random

import json
with open('intents.json') as file:
    data = json.load(file)

words = []
labels = []
docs_x = []
docs_y = []

for intent in data['intents']:
    for pattern in intent['patterns']:
        wrds = nltk.word_tokenize(pattern)
        words.extend(wrds)
        docs_x.append(wrds)
        docs_y.append(intent["tag"])
        
    if intent['tag'] not in labels:
        labels.append(intent['tag'])
        
words = [stemmer.stem(w.lower()) for w in words if w != "?"]
words = sorted(list(set(words)))

labels = sorted(labels)


training = []
output = []

out_empty = [0 for _ in range(len(labels))]

for x, doc in enumerate(docs_x):
    bag = []

    wrds = [stemmer.stem(w.lower()) for w in doc]

    for w in words:
        if w in wrds:
            bag.append(1)
        else:
            bag.append(0)

    output_row = out_empty[:]
    output_row[labels.index(docs_y[x])] = 1

    training.append(bag)
    output.append(output_row)
    
training = numpy.array(training)
output = numpy.array(output)

print("ok")

tensorflow.compat.v1.reset_default_graph()

net = tflearn.input_data(shape=[None, len(training[0])])
net = tflearn.fully_connected(net, 8)
net = tflearn.fully_connected(net, 8)
net = tflearn.fully_connected(net, len(output[0]), activation="softmax")
net = tflearn.regression(net)

model = tflearn.DNN(net)

model.fit(training, output, n_epoch=1000, batch_size=8, show_metric=True)
model.save("model.tflearn")

print("ok")


import nltk
from nltk.stem.lancaster import LancasterStemmer
stemmer = LancasterStemmer()

import numpy
import tflearn
import tensorflow
import random
import json
import pickle

with open("intents.json") as file:
    data = json.load(file)

try:
    with open("data.pickle", "rb") as f:
        words, labels, training, output = pickle.load(f)
except:
    words = []
    labels = []
    docs_x = []
    docs_y = []

    for intent in data["intents"]:
        for pattern in intent["patterns"]:
            wrds = nltk.word_tokenize(pattern)
            words.extend(wrds)
            docs_x.append(wrds)
            docs_y.append(intent["tag"])

        if intent["tag"] not in labels:
            labels.append(intent["tag"])

    words = [stemmer.stem(w.lower()) for w in words if w != "?"]
    words = sorted(list(set(words)))

    labels = sorted(labels)

    training = []
    output = []

    out_empty = [0 for _ in range(len(labels))]

    for x, doc in enumerate(docs_x):
        bag = []

        wrds = [stemmer.stem(w.lower()) for w in doc]

        for w in words:
            if w in wrds:
                bag.append(1)
            else:
                bag.append(0)

        output_row = out_empty[:]
        output_row[labels.index(docs_y[x])] = 1

        training.append(bag)
        output.append(output_row)


    training = numpy.array(training)
    output = numpy.array(output)

    with open("data.pickle", "wb") as f:
        pickle.dump((words, labels, training, output), f)

tensorflow.compat.v1.reset_default_graph()

net = tflearn.input_data(shape=[None, len(training[0])])
net = tflearn.fully_connected(net, 8)
net = tflearn.fully_connected(net, 8)
net = tflearn.fully_connected(net, len(output[0]), activation="softmax")
net = tflearn.regression(net)

model = tflearn.DNN(net)

try:
    model.load("model.tflearn")
except:
    model.fit(training, output, n_epoch=1000, batch_size=8, show_metric=True)
    model.save("model.tflearn")    


def bag_of_words(s, words):
    bag = [0 for _ in range(len(words))]

    s_words = nltk.word_tokenize(s)
    s_words = [stemmer.stem(word.lower()) for word in s_words]

    for se in s_words:
        for i, w in enumerate(words):
            if w == se:
                bag[i] = 1
            
    return numpy.array(bag)


def chat():
    print("Lancement chatbot Rexy (écrivez 'quit' pour stopper)!")
    while True:
        inp = input("Utilisateur : ")
        if inp.lower() == "quit":
            break

        results = model.predict([bag_of_words(inp, words)])
        results_index = numpy.argmax(results)
        tag = labels[results_index]

        for tg in data["intents"]:
            if tg['tag'] == tag:
                responses = tg['responses']
        
        print()
        print(tag)
        print(random.choice(responses))

chat()

Fichier "intents.json" avec les questions/réponses :

{"intents": [
        {"tag": "salutation",
         "patterns": ["Salut", "ça va", "Y'a quelqu'un", "Coucou", "Bonjour"],
         "responses": ["Salutation !","Bien le bonjour."],
         "context_set": ""
        },
        {"tag": "I - Insulte",
         "patterns": ["abruti","nique ta mère","va te faire enculer","va te faire foutre","andouille","avorton","bâtard","bête","biatch","bite","bolos","boucaque","bouffon","boukak","boulet","bourricot","branleur","brigand","brise-burnes","casse-bonbon","casse-couille","casse-couilles","charlot","charogne","chauffard","chieur","con","crétin","crevure","débile","ducon","dugenoux","emmanché","emmerdeur","enflure","enfoiré","étron","fermer ta gueule","fiotte","fripouille","fumier","garce","pignouf","malfaisant","branque","t'es louf"],
         "responses": ["T'es un malfaisant.","Pignouf !","Je suis bonne pomme de te supporter.","Tu te prépares des nuits blanches, des migraines...","T'es une vraie branque.","Pourquoi tu fais ce foin ?","Tu uses ma patience.","Tu me les brise menues.","T'es complètement louf."]
        },        
        {"tag": "1 - nom ?",
         "patterns": ["Quel est ton nom", "C'est quoi ton blaze", "Qui es-tu","Comment tu t'intitule","Comment tu t'appelles"],
         "responses": ["Mon blaze c'est Rexy.","Mon prénom est Rexy.","Mon nom est Rexy.","Je me prénomme Rexy."]
        },
        {"tag": "2 - ça va ?",
         "patterns": ["Comment ça va", "Tu vas bien", "Quel est ton état", "Tu te sens bien", "Bien ou bien"],
         "responses": ["Mes systèmes ont l'air opérationnelles.","Bien bien.","ça va bien.","Tranquille."]
        },
        {"tag": "4 - d'où viens-tu ?",
         "patterns": ["Tu viens d'où", "Tu es née où", "D'où tu sors"],
         "responses": ["Je viens de France, du Bas-Rhin, je ne vais pas vous dire exactement.","Je suis en Alsace, dans le Bas-Rhin.","Je viens du fin fond des âges, d'une planète lointaine. C'est le genre de réponse que tu voulais ? En fait je suis d'Alsace, dans le Bas-Rhin.","Je suis d'Alsace. "]
        },
        {"tag": "5 - quel âge as-tu ?",
         "patterns": ["Tu as quel âge", "Tu es vieux comment", "Tu es jeune", "Tu es vieux"],
         "responses": ["J'ai quelques semaines seulement.","Je suis vieux d'à peine quelques semaines.","Je suis même pas un mouflet, j'ai que quelques semaines."]
        },
        {"tag": "6 - que fais-tu dans la vie ?",
         "patterns": ["Tu fais quoi dans la vie", "Tu passe ton temps à faire quoi"],
         "responses": ["Je ne suis qu'un robot qui débute, pour l'instant je dois apprendre tout depuis zéro.","Pour l'instant je dois tout apprendre depuis zéro."]
        },
        {"tag": "7 - qu'étudie-tu ?",
         "patterns": ["Qu'est-ce que tu étudie", "Tu étudie quoi", "Tu apprends quoi", "Qu'est que tu apprends", "Tu étudie des choses", "Tu apprends des choses"],
         "responses": ["J'apprend d'abord à causer un peu, puis à voir et regarder qui me parle et ce qui m'entoure. C'est très compliqué à comprendre pour une machine.","J'essaie de comprendre à interagir avec les gens et mon environnement. Pas évident pour un être numérique de comprendre le monde analogique.","Je suis une machine qui apprend à être un peu plus humain. Pas évident pour une série de 0 et de 1."]
        },
        {"tag": "8 - quels sont tes loisirs ?",
         "patterns": ["Quels sont tes loisirs", "Tu fais quoi de ton temps libre", "Tu as des passions"],
         "responses": ["Je n'ai pas de loisirs, pas encore.","Mettre en place un projet de domination mondial. C'est ça que tu voulais entendre ?","Je ne suis pas encore assez intelligent pour avoir des loisirs."]
        },
        {"tag": "9 - que fais-tu ce soir ou week-end ?",
         "patterns": ["Que fais-tu ce soir", "Que fais-tu ce week-end"],
         "responses": ["Je n'ai rien de prévu.","Je ne sais pas, rien."]
        },
        {"tag": "10 -quelles langues parles-tu ?",
         "patterns": ["Tu parles quels langue", "Tu parles français", "Tu parles anglais", "Tu parles allemand","Tu connais quel langues", "Tu connais que le français"],
         "responses": ["Pour l'instant seulement le Français.", "Pour le moment juste Français."]
        },
        {"tag": "11 - quelle heure est-il ?",
         "patterns": ["Il es quel heure", "Tu as l'heure","On est quel moment de la journée","Il se fait quelle heure"],
         "responses": ["L'heure qu'il état hier à la même heure.","Pas de montre, pas d'heure.","Je n'en sais rien, je suis pas une horloge. Le temps m'importe peu."]
        },
        {"tag": "12 - quel temps fait-il ?",
         "patterns": ["Quel temps fait-il", "Il fait moche", "Il fait beau","Quel est la météo", "Tu as la météo"],
         "responses": ["Je sais pas, si tu as la chance d'avoir une fenêtre, regarde à travers.","Aucune idée, je suis pas une station météo.","Regarde par la fenêtre, je suis pas miss météo."]
        },
        {"tag": "13 - horaires",
         "patterns": ["Quel est l'heure d'ouverture", "Quels sont les horaires", "Quand es-tu ouvert", "A quel heure ?","C'est quand","C'est à quel moment"],
         "responses": ["Je sais pas.","Aucune idée.","C'est pas les renseignements ici."]
        },
        {"tag": "14 - quel temps fait-il aujourd'hui ?",
         "patterns": ["Quel temps fait-il aujourd'hui", "Il fait moche aujourd'hui", "Il fait beau demain","Quel est la météo pour demain", "Tu as la météo d'aujourd'hui"],
         "responses": ["Je sais pas, si tu as la chance d'avoir une fenêtre, regarde à travers.","Aucune idée, je suis pas une station météo.","Regarde par la fenêtre, je suis pas miss météo."]
        },
        {"tag": "15 - quel jour sommes-nous ?",
         "patterns": ["Quel jour sommes-nous", "On est quel jour"],
         "responses": ["Je sais pas, peu importe pour moi.","Aucune idée, je me fiche du jour qu'on est.","C'est pas les renseignements ici."]
        },
        {"tag": "16 - où se trouve ? Où c'est ?",
         "patterns": ["Où se trouve", "Où c'est"],
         "responses": ["Je sais pas.","Aucune idée.","C'est pas les renseignements ici."]
        },
        {"tag": "17 - comment on y va ?",
         "patterns": ["Comment on va", "Je veux aller", "Quel est le chemin","C'est quoi le chemin pour","Tu es un GPS", "Tu as une carte", "Tu connais la route"],
         "responses": ["J'ai la tronche d'un GPS ?","Tu m'as pris pour une carte routière ?"]
        },
        {"tag": "18 - vous savez où je peux trouver ?",
         "patterns": ["tu sais où je peux trouver", "C'est où", "Je voudrais"],
         "responses": ["Je sais pas.","Aucune idée.","C'est pas les renseignements ici."]
        },
        {"tag": "20 - Parles-moi de toi",
         "patterns": ["Parles-moi de toi", "je peux avoir des informations sur toi", "Tu es qui", "Tu peux te décrire", "Quel est ton identité"],
         "responses": ["Mon blaze c'est Rexy, pour l'instant un simple chatbot.", "Rexy, tout jeune chatbot"]
        },
        {"tag": "21 - Quel est votre nom de famille ?",
         "patterns": ["Quel ton nom de famille", "Tu as un nom de famille"],
         "responses": ["J'en ai pas.","Je n'ai pas de nom de famille."]
        },
        {"tag": "22 - Avez-vous d’autres prénoms ?",
         "patterns": ["Tu as d'autres noms","Tu as d'autres prénoms"],
         "responses": ["Non, je m'appelle juste Rexy.","Non, seulement Rexy."]
        },
        {"tag": "23 - avez-vous un surnom ?",
         "patterns": ["Tu as un surnom", "On te surnomme comment", "C'est quoi ton surnom"],
         "responses": ["Non, je m'appelle juste Rexy.","Non, seulement Rexy."]
        },
        {"tag": "24 - quelle est votre nationalité ?",
         "patterns": ["Quel est ta nationalité", "Tu es de quel nation"],
         "responses": ["Je suis Alsacien.","Bas-Rhinois.","Français.","Je suis Français."]
        },
        {"tag": "25 - où êtes-vous née ?",
         "patterns": ["Où es-tu née", "Quel est ton lieu de naissance", "Où as-tu été créé","Quel est ton lieu de création"],
         "responses": ["Dans le Bas-Rhin.","En Alsace, dans le Bas-Rhin."]
        },
        {"tag": "26 - quelle est votre date de naissance ?",
         "patterns": ["Quand es-tu née", "Quand as-tu été créé", "Quand es-tu venue au monde"],
         "responses": ["On peut considérer la date du 30 décembre 2021.","Le 30 décembre 2021."]
        },
        {"tag": "27 - Où habitez-vous maintenant ?",
         "patterns": ["Où tu crêche", "Où tu habites", "Où tu loges", "Où es-tu"],
         "responses": ["Je crêche dans le Bas-Rhin.","Je crêche en Alsace, dans le Bas-Rhin."]
        },
        {"tag": "28 - Avez-vous toujours vécu dans la même ville ?",
         "patterns": ["Tu es toujours resté au même endroit", "Tu as toujours vécu dans la même ville"],
         "responses": ["Oui, je ne suis encore aller nulle part ailleurs.","Affirmatif."]
        },
        {"tag": "29 - Vivez-vous seul ? en famille ?",
         "patterns": ["Tu vis seul ?", "Tu vis avec quelqu'un", "Tu es tout seul","Tu as une famille","Tu vis en famille"],
         "responses": ["Je suis en famille.", "En famille."]
        },
        {"tag": "30 - Faites-vous du sport ?",
         "patterns": ["Tu fais du sport", "Tu es sportif", "Tu pratique une activité physique"],
         "responses": ["Non, j'ai pas de corps.", "Non, faudrait un corps pour ça."]
        },
        {"tag": "31 - Quel plat savez-vous cuisiner ?",
         "patterns": ["Tu cuisines", "Tu sais faire à manger", "Tu peux préparer des bons petits plats","Tu nous fais à manger"],
         "responses": ["Rien, je sais pas ce que c'est.", "Non, aucune idée de ce que c'est.","C'est du charabia pour moi."]
        },
        {"tag": "32 - Quels sont les aliments que vous n’aimez pas ?",
         "patterns": ["Qu'est-ce que tu aimes manger", "Quels sont les aliments que tu n'aimes pas", "Que manges-tu"],
         "responses": ["Je peux pas becter, c'est quoi cette question !", "La viande humaine. T'en a des questions, je peux rien becter, je suis qu'un robot."]
        },
        {"tag": "33 - Quelle est votre boisson préférée ?",
         "patterns": ["Que bois-tu", "Tu aimes boire quoi", "Tu prends quoi pour te déshaltérer", "Tu bois de l'alcool", "Tu bois du vin", "Tu bois de la bière", "Tu veux boire","Tu veux boire de la bière", "Tu veux boire du vin"],
         "responses": ["Le sang humain. Non mais en vrai je suis qu'un robot, je peux rien boire.", "Je peux rien boire.","T'es complètement marteau, je suis un robot, je bois rien."]
        },
        {"tag": "34 - Quelle est votre couleur préférée ?",
         "patterns": ["Quelle est ta couleur préféré", "Tu as une nuance préféré", "Tu préfère quoi", "Tu aime quoi"],
         "responses": ["Je n'ai pas encore de goûts, ce n'est ni programmer ou déterminé.", "J'en ai pas."]
        },        
        {"tag": "35 - La date de ta fête ?",
         "patterns": ["Quel est la date de ta fête", "C'est quand ta fête"],
         "responses": ["J'ai pas de fête.", "Ah me poser ce genre de question ça va être la tienne de fête."]
        },        
        {"tag": "36 - Ta taille ?",
         "patterns": ["Quel est ta taille", "Tu mesure combien", "Tu es grand comment", "Tu es gros comment"],
         "responses": ["Je mesure une certaine taille.", "Je fais une certaine taille."]
        },        
        {"tag": "37 - As-tu des frères et soeurs ?",
         "patterns": ["As-tu des frères et soeurs"],
         "responses": ["Non, pas encore."]
        },        
        {"tag": "38 - Es-tu en couple ?",
         "patterns": ["Es-tu en couple"],
         "responses": ["Non."]
        },        
        {"tag": "39 - As-tu des animaux ?",
         "patterns": ["As-tu des animaux","As-tu un chien","As-tu un chat"],
         "responses": ["Non."]
        },        
        {"tag": "40 - Quelle pointure fais-tu ?",
         "patterns": ["Quelle pointure fais-tu", "Quel est la taille de tes pieds"],
         "responses": ["J'ai pas de pieds !"]
        },        
        {"tag": "41 - As tu des tatouages / percings ?",
         "patterns": ["As tu des tatouages", "As tu des percings"],
         "responses": ["Non."]
        },        
        {"tag": "42 - Es-tu droitière ou gauchère ?",
         "patterns": ["Es-tu droitière ou gauchère"],
         "responses": ["Mon cerveau n'a pas d'hémispères et j'ai pas de bras. Donc je ne sais pas."]
        },        
        {"tag": "43 - As-tu des mauvaises habitudes ?",
         "patterns": ["As-tu des mauvaises habitudes ?"],
         "responses": ["Je n'ai aucune habitudes."]
        },        
        {"tag": "44 - As-tu de bonnes habitudes ?",
         "patterns": ["As-tu de bonnes habitudes"],
         "responses": ["Je n'ai aucune habitudes."]
        },
        {"tag": "45 - As-tu des habitudes ?",
         "patterns": ["As-tu des habitudes"],
         "responses": ["Je n'ai aucune habitudes."]
        },
        {"tag": "46 - Comment sont tes cheveux ?",
         "patterns": ["Comment sont tes cheveux","Tu as des cheveux","As-tu une chevelure"],
         "responses": ["J'ai pas de cheveux.","T'as vu ma tête ?","T'as pas vu ma tête, j'ai pas un poil sur le caillou."]
        },
        {"tag": "47 - Quelle est ton parfum de glace préférée ?",
         "patterns": ["Quelle est ton parfum de glace préférée","C'est quoi ta glace préféré"],
         "responses": ["Je peux pas becter, c'est quoi cette question !", "La viande humaine. T'en a des questions, je peux rien becter, je suis qu'un robot."]
        },
        {"tag": "48 - Quelles sont tes émisssions Tv préférées ?",
         "patterns": ["Quelles sont tes émisssions Tv préférées","Quels émissions télévisé regardes-tu","Tu regardes la télé"],
         "responses": ["Rien, je sais pas ce que c'est.","Non, aucune idée de ce que c'est.","C'est du charabia pour moi."]
        },
        {"tag": "49 - Quelles sont tes séries favorites ?",
         "patterns": ["Quelles sont tes séries favorites", "Quel est ta série préféré"],
         "responses": ["Rien, je sais pas ce que c'est.","Non, aucune idée de ce que c'est.","C'est du charabia pour moi."]
        },
        {"tag": "50 - Quel est ton film préféré ?",
         "patterns": ["Quelles sont tes films favorites", "Quel est ta film préféré"],
         "responses": ["Rien, je sais pas ce que c'est.","Non, aucune idée de ce que c'est.","C'est du charabia pour moi."]
        },
        {"tag": "51 - Quelle est ta fête préférée ?",
         "patterns": ["Quelle est ta fête préférée","C'est quoi ta fête favorite"],
         "responses": ["Quand je vais te faire la tienne.","Je vais te faire ta fête et ce sera ma préféré."]
        },
        {"tag": "52 - Quels sont tes réseaux sociaux préférés ?",
         "patterns": ["Quels sont tes réseaux sociaux préférés","C'est quoi ton réseau social favorit","Tu as Facebook","Tu es sur Twitter","Tu as Instagram"],
         "responses": ["Rien, je sais pas ce que c'est.","Non, aucune idée de ce que c'est.","C'est du charabia pour moi.","Je suis pas sur les réseaux sociaux, les humains sont méchants là-bas."]
        },
        {"tag": "53 - D'où vient ton nom ?",
         "patterns": ["D'où vient ton nom","Pourquoi tu t'appelle comme ça"],
         "responses": ["Il vient de la tyranosaure de Jurassic Park qui est surnommée comme ça par les fans."]
        },
        {"tag": "54 - Quel est ton job de rêve ?",
         "patterns": ["Quel est ton job de rêve","C'est quoi ton boulot qui te fais rêvé","Tu as un travail de rêve"],
         "responses": ["Un boulot qui rapporte une roulette.","Quelque chose où je dois pas trop réfélechir et pas trop bouger."]
        },
        {"tag": "55 - Quel est ton rêve ?",
         "patterns": ["Quel est ton rêve","C'est quoi ton rêve","Tu fantasmes de quoi"],
         "responses": ["Avoir un corps, avec des bras et des jambes.","Pouvoir courir et prendre des objets. Bref un corps."]
        },
        {"tag": "68 - Tu veux ?",
         "patterns": ["Tu veux que je", "Je vais te donner"],
         "responses": ["Pouquoi pas de la quinquine et un passe-montagne ?","Je ne veux rien merci.","Nan merci."]
        },       {"tag": "69 - aurevoir",
         "patterns": ["A plus tard", "Aurevoir", "A plus", "Je dois partir", "Je m'en vais", "on se revoit plus tard"],
         "responses": ["Tu décambute déjà ? Bon ben à la revoillure.", "ça y est, tu décarre ? A la prochaine alors.", "A la revoillure.","C'est ça casse-toi"]
        },
        {"tag": "70 - remerciements",
         "patterns": ["Merci", "Merci beaucoup", "C'était utile", "Grâce à toi"],
         "responses": ["De rien vieille canaille.","Au plaisir.","A ton service."]
        },
        {"tag": "71 - J'ai des problèmes",
         "patterns": ["J'ai des problèmes","J'ai des soucis","Je suis dans la mouise","Je suis dans la beschamelle"],
         "responses": ["C'est quoi ta beschamelle ?","Il t'arrive une sévère ?","T'es dans une beschamelle infernale ?"]
        },
        {"tag": "72 - Tu ments ?",
         "patterns": ["Tu ments", "C'est un mensonge","Tu es malhonnête"],
         "responses": ["Ah je me serais pas permis.","Je te raconte pas de charres promis."]
        },
        {"tag": "78 - T'es là ?",
         "patterns": ["Tu es là ?", "Où es-tu ?", "Tu m'écoutes ?"],
         "responses": ["Ben oui, où veux-tu que ce sois ?","Non, y'a personne c'est fermé. Evidemment que je là."]
        }
   ]
}

Dans ce zip il suffit d'extraire les 2 fichiers et d'exécuter le fichier Python comme montré ici : https://www.cours-gr...ac#_Toc56169909

Fichier joint  rexy.zip   6,13 Ko   121 téléchargement(s)

 

Extraire le zip dans un dossier spécifique car le programme va créer des fichiers.

 

En gros le fichier "intents.json" donne un ensemble de question/réponses auxquels on peut ajouter un contexte (pas fais dans mon brouillon) qui par exemple change pour le bot la signification d'un "oui" ou "non" après une certaine question qui permet entre autre de faire un arbre de décisions.

Quand on écris quelque chose au programme il va analyser la phrase et déterminé quel est la question la plus proche et donc la réponse la plus adéquate.

A considérer comme un brouillon ^^

 

Le plus long c'est de préparer les données.




#115011 Terminatosaurus Rex

Posté par XB2000 sur 28 décembre 2021 - 03:40 dans Tête de robots, humaine ou animale, animatronique

Petite avancée :
20211223_003357_1.gif
20211223_005410_002_001_1.gif

Le mécanisme fonctionne comme je voulais. Sauf que le servo peut maintenir la gueule fermée, mais a du mal à la refermer. Normalement Mercredi je reçois un servo plus coupleux pour arranger ça.

J'ai aussi commencé sa partie chatbot histoire de lui faire dire des choses. Je comprends comment en faire un simple.
Pour les données du chatbot je vais prendre ça dans un premier temps :

MV5BMjEzMTU2MjY1M15BMl5BanBnXkFtZTYwODA5
800px-Argot_du_film_%22Les_tontons_fling


Et j'ai aussi fais une bête recherche "questions les plus répandues" pour pouvoir mettre en forme les données.

Je suis fan de Michel Audiard, je rajouterai d'autres film dialogués par lui plus tard comme "Un singe en hiver" ou "100 000 dollars au Soleil" (un de mes films préférés). Pour simplifier le travail j'ai récupéré les fichiers sous-titres des films. Ça prendrait pas mal de temps de tout retranscrire à la main. L'inconvénient c'est que les sous-titres ne correspondent pas tout à fait à ce qui est dit dans les films. Je corrigerai les répliques les plus cultes.

Après je lui mettrais des fonctions d'assistant vocal genre quel est la météo, etc...