Aide anti-gaspillage alimentaire : Différence entre versions
m (→Application Android) |
(→Librairie Cropper) |
||
Ligne 86 : | Ligne 86 : | ||
====Librairie Cropper==== | ====Librairie Cropper==== | ||
− | Pour ne séléctionner que la zone de texte qui nous interesse, l'idée première fût d'utiliser l'Action Android "Crop" | + | Pour ne séléctionner que la zone de texte qui nous interesse, l'idée première fût d'utiliser l'Action Android "Crop", |
− | + | actionnable depuis un Intent : | |
<pre> | <pre> |
Version du 9 mai 2016 à 15:37
Présentation générale
Contexte
Dans une époque où on estime à environ 1,3 milliards de tonnes de denrées alimentaires par an, soit un tiers des aliments produits pour la consommation humaine, perdues ou gaspillées, il apparaît nécessaire de mettre en place des outils permettant d'éviter de laisser un ingrédient acheté se périmer au fond du réfrigérateur.
Cahier des charges
Intitulé
L'objectif de ce projet est de proposer une application capable de scanner l'étiquette d'un produit et d'enregistrer plusieurs informations, comme la date de péremption, dans une base de données fixée au réfrigérateur. Cela permettra de prévenir l'utilisateur lorsque l'un de ses produits est proche de la date limite et qu'il doit être consommé. On pourra également proposer un moteur de recherche (marmiton.org par exemple) afin de suggérer des recettes en se basant sur les aliments dont l'utilisateur dispose.
Objectifs
Pour atteindre l'objectif du projet, les étapes suivantes sont nécessaires :
- Utilisation de la caméra d'un smartphone pour scanner l'étiquette par prise de photo, voire peut-être en flux continu.
- Traitement d'image afin de récupérer et trier les données de l'étiquette.
- Rapatriement des données sur un boitier électronique (serveur) fixé au réfrigérateur, via Bluetooth.
- Création d'application Android regroupant les différents services proposés.
Choix techniques : matériel et logiciel
Pour la réalisation du projet, peu de matériel est nécessaire mais de bonnes connaissance en traitement d'image et programmation Java/C/XML sont grandement requises.
Matériel nécessaire :
- Boitier électronique avec :
- Arduino ou Raspberry pour la communication et l'archivage des données
- Leds (état de fonctionnement/communication)
- Système de fixation sur réfrigérateur
- Système d'alimentation
- Un Smartphone / Tablette Android (client)
Pour la réalisation du prototype de ce projet, nous nous focaliserons sur la récupération d'information et sur la synchronisation/archivage des données entre Smartphone et Arduino. Le boitier, son esthétique/fonctionnalité et le système de fixation peuvent être réalisés plus tard.
Réalisation
Traitement de l'étiquette
Pour récupérer les informations nécessaires sur l'étiquette, nous devons utiliser un outil de traitement d'image capable de reconnaître et séparer les caractères. Nous avons donc choisi d'utiliser le moteur de reconnaissance de caractère tesseract. Nous allons ensuite l'adapter à la prise de photo via la caméra d'un Smartphone ou tablette.
A l'heure actuelle, nous nous occupons du programme qui triera et stockera les informations récupérées par tesseract dans une base de données sous la forme :
- Description du produit
- Date limite de consommation
Boitier électronique
Le meilleur outil nous permettant de communiquer via Bluetooth et de stocker les données est un RFduino.
Nous en avons donc récupéré un et commençons à étudier son fonctionnement pour l'adapter au programme et aux fonctions voulues. L'idéal serait de trouver le moyen de l'alimenter sans fil pour le fixer facilement au réfrigérateur. D'après nos recherches, ce genre de système d'alimentation pour RFduino existe ou est réalisable. En fonction de l'action demandé sur le téléphone (Ajout d'un nouveau produit ou bien un retrait), on édite un fichier "frigidee.txt" présent sur la carte SD du RFduino.
Application Android
Les applications Android utilisent essentiellement du Java et MySQL. N'ayant jamais fait de Java, nous nous familiarisons avec le langage afin de proposer une application complète.
Elle se présentera sous la forme :
- Un écran d'accueil avec 3 onglets :
- Connexion (pour connecter l'appareil avec le boîtier électronique fixé au réfrigérateur)
- Liste des ingrédients (afin de limiter les transferts d'information, le boîtier enverra à l'application seulement les 6 ingrédients ayant la plus proche DLC)
- Recettes (permettant de trouver des recettes via marmiton.org ou autre avec les ingrédients à disposition)
Librairie Tesseract
Afin de reconnaître une étiquette, nous avons utiliser un fork de la bibliotheque Tesseract. Developper pour être utiliser sur Android, grace au NDK de google, elle nous permet de de créer une chaîne de caractère à partir d'une image.
Malheureusement, à moins de ne prendre en photo que la zone de texte, le moteur Tesseract interprète des caractères non présents. Il est donc nécessaire de rajouter un cadre de sélection afin de redécouper l'image.
Librairie Cropper
Pour ne séléctionner que la zone de texte qui nous interesse, l'idée première fût d'utiliser l'Action Android "Crop", actionnable depuis un Intent :
// Appel l'intent crop action Intent cropIntent = new Intent("com.android.camera.action.CROP"); // Indique le type de fichier et son URI cropIntent.setDataAndType(picUri, "image/*"); // Ajoute la fonction crop à l'intent cropIntent.putExtra("crop", "true"); // Insique l'aspect du crop cropIntent.putExtra("aspectX", 1); cropIntent.putExtra("aspectY", 1); cropIntent.putExtra("outputX", 256); cropIntent.putExtra("outputY", 256); //Permet de récupere la data en sortie cropIntent.putExtra("return-data", true); //Demarre l'activité et on la récupère dans la fonction onActivityResult startActivityForResult(cropIntent, PIC_CROP);
Protocole d'échange BLE
RFduino nous permet d'utiliser des fonctions déjà présentes sur les librairies cela nous facilite le travail et nous permet de facilement transmettre des caractères entre les deux systèmes.
- 1. Le Smartphone enverra une première trame 'Action' qui aura 3 formes : 'Update', 'Retrait' et 'Ajout'.
- 2. Le fichier 'Frigidee.txt' sera ordonné chronologiquement, la date d'ajout est un paramètre transmit.
Une ligne se compose ainsi mmhhjjddyy#designation_max_30carac#jjddyy. Avec mmhhdd... la date d'ajout de l'élément sur le RFduino designation, la chaîne de caractère visible par l'utilisateur désignant le produit en question MAX = 30 caractères. jjddyy, la date de péremption du produit.
UPDATE
La consigne Update permet de mettre à jour le Smartphone avec la liste présente sur le module Bluetooth. On envoie une chaîne de caractères " X " sur le RFDuino, indiquant la date d'ajout du dernier élément de la liste. Le RFDuino répond ensuite avec la liste partiel depuis la date correspondant à X jusqu’à la fin de fichier.
RETRAIT
On envoie un désignation sur le RFduino, il parcours ensuite le fichier afin de repérer la ligne en question.
Nous ne savons pas encore, pour le retrait d'une ligne, si nous allons repérer la ligne en question est récrire par dessus avec le reste du fichier.
Ou réécrire dans un autre fichier en omettant la ligne en question.
N.B : Deux proposition s'offrent à nous, ou on réecrit la suite de la liste sur la ligne à supprimer, ou bien, on copie dans un autre fichier en omettant la ligne en question.
[EDIT n°1] La fonction recherche se décomposent en 2 programmes, le premier sert à repérer la ligne en question. La deuxième créer un fichier temporaire dans lequelle on copie les lignes précedants la ligne concerné, saute la ligne a supprimer et copie le reste du fichier. Le fichier temporaire est ensuite reparcouru pour recopier la liste dans le fichier original.
Avancement du projet
Semaine 01
- Recherche sur la reconnaissance visuelle => première piste OpenCV
- Documentation sur le langage Java et dérivé pour Android
Semaine 02
- Abandon d'OpenCV pour l'utilisation de la librairie Tesseract-OCR (Multi langage)
- Test du Paquet Tesseract-OCR sur une plate-forme Linux => Non concluant
Semaine 03
- Test avec résultat intéressant d'une image .jpg, le moteur retourne bien une chaîne de caractère
- La rotation de l'image est incluse dans le soft mais option à préciser
Semaine 04
- Initiation à l'IDE Android-Studio
- Import de la bibliothèque Tess-Two dérivé de Tesseract pour mobile
Semaine 05
- Rendez-vous de mi-parcours
- Cahier des charges revisité
- Documentation sur le RFduino
Semaine 06
- Réalisation des fonctions d'ajout, de parcours du fichiers en vu des commande update et retrait
- Conception d'un squelette d'application Android
Semaine 07
- La fonction de retrait pose problème, l'édition du fichier nécessite des fonctions plus précises.
Projet IMA4 réalisé par Pierre FITOUSSI et Florian GIOVANNANGELI - Promotion 2017 (vous êtes surs ?)