Aide anti-gaspillage alimentaire : Différence entre versions

De Wiki de Projets IMA
(Semaine 05)
(Réalisation)
Ligne 57 : Ligne 57 :
 
Nous en avons donc récupéré un et commençons à étudier son fonctionnement pour l'adapter au programme et aux fonctions voulues.
 
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.
 
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.
 +
  
  
Ligne 68 : Ligne 70 :
 
Elle se présentera sous la forme :
 
Elle se présentera sous la forme :
 
*Un écran d'accueil avec 3 onglets :
 
*Un écran d'accueil avec 3 onglets :
**Connexion (pour connecter l'appareil avec le boitier électronique fixé au réfrigérateur)
+
**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 boitier enverra à l'application seulement les 6 ingrédients ayant la plus proche DLC)
+
**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)
 
**Recettes (permettant de trouver des recettes via ''marmiton.org'' ou autre avec les ingrédients à disposition)
 +
 +
 +
===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 2 formes : 'Update', 'Retrait'
 +
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.
 +
  jjddyy, la date de péremption du produit.
 +
 +
 +
'''UPDATE'''
 +
On envoie une chaîne de caractère correspondant à une ligne du fichier. L'ajout se fait en 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.
  
 
==Avancement du projet==
 
==Avancement du projet==

Version du 23 mars 2016 à 11:17

Cahier des charges

Présentation générale du projet

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.

Objectif du projet

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.

Description du projet

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 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


RFduino utilisé

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)


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 2 formes : 'Update', 'Retrait' 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.
  jjddyy, la date de péremption du produit.


UPDATE On envoie une chaîne de caractère correspondant à une ligne du fichier. L'ajout se fait en 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.

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


Projet IMA4 réalisé par Pierre FITOUSSI et Florian GIOVANNANGELI - Promotion 2017