Reconnaissance vocale sur microcontrôleur

Résolu/Fermé
Dumard_01_38 Messages postés 3 Date d'inscription vendredi 12 septembre 2014 Statut Membre Dernière intervention 19 septembre 2014 - 12 sept. 2014 à 13:31
Dumard_01_38 Messages postés 3 Date d'inscription vendredi 12 septembre 2014 Statut Membre Dernière intervention 19 septembre 2014 - 19 sept. 2014 à 13:15
Bonjour,

Nous sommes étudiants en DUT GEII et nous sommes confrontés à un projet plutôt... complexe !

Le but est "simple" : réaliser un dispositif reconnaissant des mots simples, pour pouvoir
commander différents dispositifs ( éclairage, porte,...).


Voici le cahier des charges :

Avec ce dispositif, on doit pouvoir reconnaître des mots simples. Vous fixerez les mots que
vous devez reconnaître.
Le projet à pour vocation d'être peu cher, aussi ce système de reconnaissance devra fonctionner sur µControleur.

On doit pouvoir écrire soit sur un port série, soit sur un écran LCD le mot reconnu.

On tachera dans la mesure du possible de trouver une application domestique, ou industrielle
à ce projet, et de la réaliser en partie.

Vous devrez peut être trouver et intégrer des bibliothèques développées par des fabricants, le
coût de cette bibliothèque est a prendre en compte dans le projet.


Contraintes : voici une liste de microcontrôleur à utiliser :

­ Microchip : PIC10F, PIC12F, PIC16F, PIC18F, PIC24, DsPIC (30et 33 ), PIC32
­ Cypress : PSOC 1, PSOC 3, PSOC 4, PSOC 5
­ Texas Instrument : MSP430, TIVA C ( ou Stellaris )
­ Freescale : Kinetis
­ Atmel : AVR8 ou AVR32
­ STMicroelectronics :STM32




Nous venons donc chercher tout ce qui pourra nous aider, c'est-à-dire : indices, pistes de réflexions, morceaux de code, circuit électronique...


Merci d'avance à toutes et tous ceux qui viendront nous éclairer pour démarrer ce projet.

Cdlt,
Clément, Léo.
A voir également:

4 réponses

fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 842
12 sept. 2014 à 15:10
Bonjour,

Pour la reconnaissance des mots, il faut voir du côté de l'ASR (Automatic Speech Recognition). Il existe des bibliothèques open-source.

En faisant un peu de recherche, vous trouverez celle qui correspond le mieux à vos besoins. Après, il y aura un travail d'intégration (définition des mots en XML, ...).

Pour ce qui est hors "C" (ici ce n'est pas un forum d'électronique), je n'ai rien à ajouter :-).

Bon courage.

Cdlt,
1
Dumard_01_38 Messages postés 3 Date d'inscription vendredi 12 septembre 2014 Statut Membre Dernière intervention 19 septembre 2014
12 sept. 2014 à 15:15
Merci pour cette réponse précise et rapide.


Cordialement,
Léo, Clément.
0
sambia39 Messages postés 610 Date d'inscription vendredi 31 juillet 2009 Statut Membre Dernière intervention 9 février 2023 49
13 sept. 2014 à 00:26
Bonsoir
Je me permets de répondre parce que j'ai déjà travail sur des projets similaires.
Ce qui vous faut n'est pas une bibliothèque de reconnaissance de mots, d'ailleurs cela n'est pas adapté au projet de ce type, et de plus il y a bien plus simple a faire.

Vous avez une liste d'actionneurs ( équipement à commander) avec des options de ce fait, vous avez deux options qui se présentent à vous pour identifier vos actionneurs.
La première est celle de l'énoncer c'est-à-dire attribuer un mot ou autre à l'actionneur.
La deuxième est celle qui est la plus courante donner des ID aux actionneurs par ordre croissant.
Cela vous permet d'identifier très facilement l'actionneur à commander

Quant à là l'envoie de la trame (commandes) sur les réseaux / port série, il y a bien plus simple. Une chaîne de caractère formant un bloc de mots qui est votre trame ( trame de commande ) et, à la réception de cette chaîne de caractère, ils vous suffiras d'extraire les données de façon logique
(exemple formats de trame =>nomEquipement.idEquipement.etatEquipement).
Les premiers caractère de la trame seront extraite tant que l'on n'est pas sur un point (par exemple) la seconde commencera juste après le point précédent etc. jusqu'à l'instruction fin de chaîne.
Ainsi vous aurez au final dans un tableau ou autres les noms ou mot permettant de distinguer l'équipement, son id son état actuel etc.
où, vous fixez de la taille de mot à 4, pour l'identifions 1000 ou 100 (en s'est jamais :) ), pour l'état un seul caractère suffit ou 2 et enfin les autres options libre à vous. Déjà a ce stade, il est encore bien plus facile d'extraire les instructions pour l'actionneur en question.

Bref cela donnerait par exemple ceci

#include <stdio.h>
#include <stdlib.h>
#include <string.h>


/***
*	Structure de donnée 
*	d'un Equipement
****/
typedef struct s_Equip{
	
	char *pEquip;		//	Mot définission de l'equipement
	unsigned int id;	// Identifiant de l'Equipements
	unsigned int et;	// Variable Etat actionneurs
	/*** 
	*	Autres options
	*	Complementaire
	***/
}ts_Equip;


int main( void ){

	ts_Equip Equip;
	unsigned int i = 0;
	
	( &Equip )->pEquip = (char*)calloc( 10, sizeof( char ) );
	strcpy( ( &Equip )->pEquip, "Téleviseur" );
	Equip.id = i++;
	Equip.et = i;
	
	
	/***
	*	Affichage du statut d'un Equipement
	***/
	printf( "Equipement\t: %s\n", ( &Equip )->pEquip );
	printf( "Identifiant\t: %d\n", Equip.id );
	printf(	"Etat Equipement\t: ");
	
	switch( Equip.et ){
		
		case 1:
			printf( "Marche\n" );
			break;
		default:
			printf( "Arrêt\n" );
	}
	
	/***
	*	Exemple trame de donnée
	*	d'un actionneurs
	*	Exemple 1
	***/
	char *pTrame = (char*)calloc( 20, sizeof( char ) );
	char *pBuffr = (char*)calloc( 5, sizeof( char ) );
	
	strcat( pTrame, ( &Equip )->pEquip );
	sprintf( pBuffr, "%c%d%c%d", '.',Equip.id,'.',Equip.et );
	strcat( pTrame, pBuffr );
	memset( pBuffr, 0, strlen( pBuffr ) );
	printf("Trame Envoie\t: %s\n", pTrame );
	//Traitement récuperation de la tramme 
	// ou 
	// Seconde option un cast

	free( pBuffr );
	free( ( &Equip )->pEquip );

	return ( 0 );
}


à bientôt
0
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 842
13 sept. 2014 à 00:32
Salut sambia39,

Objectif du projet : Réaliser un dispositif reconnaissant des mots simples
Comment fais-tu la reconnaissance sans bibliothèque ?
0
sambia39 Messages postés 610 Date d'inscription vendredi 31 juillet 2009 Statut Membre Dernière intervention 9 février 2023 49
Modifié par sambia39 le 13/09/2014 à 01:07
Salut @fiddy :)

@Dumard_01_38 12 :Avec ce dispositif, on doit pouvoir reconnaître des mots simples. Vous fixerez les mots que vous devez reconnaître.

Donc s'ils ont le choix de définir préalablement les mots à extraire, il n'y a pas besoin d'une bibliothèque de reconnaissance de mots de plus chaque mot qu'ils auront défini seront attribués soit à des commandes ou des actionneurs de ce fait le traitement de la commande ce fait par une simple correspondance.
La reconnaissance des mots doit être utilisée dans des projets un peu plus poussé exemple IA à moins de ne pas saisir l'objectif demandé :) .
0
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 842
13 sept. 2014 à 01:24
Oui, mais par quel mécanisme le dispositif reconnaîtra les mots ?
Il faut un capteur pour entendre la parole, et ensuite tu fais comment pour savoir si tel ou tel mot a été dit sans ASR ?

Pour ma part, j'aurais plutôt utilisé une bibliothèque ASR. Ensuite, j'aurais fait le XML en suivant le standard édicté par le W3C : Speech Recognition Grammar Specification afin de préciser les mots reconnus.
Et basta :-).
0
sambia39 Messages postés 610 Date d'inscription vendredi 31 juillet 2009 Statut Membre Dernière intervention 9 février 2023 49
13 sept. 2014 à 02:06
(0_0)! Ha !! ,

Je ne savais pas qu'il y a un module de reconnaissance vocale qui permet de commander les équipements, vus la liste bref.

Pour répondre à ta question le mécanisme dont je parle est basé sur le cas ou l'utilisateur sélectionne ces équipements puis décide l'allumer éteindre l'équipement depuis un smartphone, tablette tactile, écran tactile ou site web. et pour ça une simple extraction de chaine de caractère suffis ( the dispositif :) ) de plus en utilisera que des trames dans la configuration sans commande vocale mais dans le cas contraire avec les capteur, là ils auront besoin de la reconnaissance vocale comme ta solution astucieuse mais qui ce limite a deux tâche qui sont :
savoir quels mots a été prononcer,
et si ce mot fait partie de la base mots définie et part conséquent on écrit la trame correspondant à l'équipement basta.

Mais il y'a un truc qui me chagrine, je trouve le projet est un peut lourd pour eux mais ceci dit il est très intéressant pédagogiquement et si je peut ajouté un mots , ils n'ont pas besoin d'autant d'équipement pour faire de la domotique enfin si c'est à eux de tout faire personnellement pour un projet de ce genre, un module GPIO fait très bien l'affaire pour le pilotage des équipements voir ARDUINO puis un raspberry qui gère le système et héberge la page web de contrôle l'écran tactile comme centre de commande, un type TFFT Itron suffit, et pour les téléphones juste le SDK androïde ou WINDEV mobile pour les looser et un peut de sauce C ou C++ et basta.
0
sambia39 Messages postés 610 Date d'inscription vendredi 31 juillet 2009 Statut Membre Dernière intervention 9 février 2023 49 > sambia39 Messages postés 610 Date d'inscription vendredi 31 juillet 2009 Statut Membre Dernière intervention 9 février 2023
13 sept. 2014 à 02:40
Lol le titre du poste -_- !
0
Dumard_01_38 Messages postés 3 Date d'inscription vendredi 12 septembre 2014 Statut Membre Dernière intervention 19 septembre 2014
19 sept. 2014 à 13:15
Bonjour,

Merci pour vos réponses et en effet, le projet est conséquent mais il nous faut trouver une solution. Nous avons déjà de bonnes pistes du côté des ASR.

Merci encore,
Cdlt,
Léo, Clément.
0