Note : les données associées à ce sujet sont accessibles en local sur le
serveur de l'UFR par le système de fichier : /home/Public/quenotg/HMUL8R6B/PROJET
Si vous travaillez sur les machines de l'UFR, il n'est donc pas nécessaire
(et pas recommandé) de recopier les données dans votre répertoire. Vous pouvez
ouvrir directement les fichiers à partir de /home/Public/quenotg/HMUL8R6B/PROJET/…
(à l'exception des images que vous pouvez récupérer dynamiquement à partir
de leur URL avec le programme fourni et qu'il n'est donc pas nécessaire de
recopier non plus).
Le but de ce projet est de réaliser un système de recherche dans une base d'image à partir d'une image requête. Les images sont recherchées dans la base selon la similarité de leurs distributions de couleur ou de mots visuels avec celles de l'image. Le distribution de couleurs sera représentée par un histogramme tridimensionnel de couleurs. Le distribution de mots visuels représentée par un histogramme de descripteurs locaux de type SIFT.
Bien que ce ne soit pas obligatoire, le système pourra fonctionnera sur le web (par la CGI). Une alternative plus simple est de seulement générer une page web puis de l'afficher avec un navigateur. Dans tous les cas, il faut pouvoir afficher l'image requête et une liste des images les plus proches au sens de la couleur et/ou des descripteurs SIFT.
Les images que allez utiliser sont issues du projet VOC 2010 sur la classification automatique d'images (pour information, vous n'avez pas besoin d'étudier ce site).
Vous travaillerez sur la sous collection de test : (test,
9637 images). Le répertoire test
contient:
list.txt
;urls.txt
.Vous pourrez utiliser les éléments de code : cgiu.h/cgiu.c, utilitaire pour la CGI, et proc.h/proc.c qui contient d'autres fonctions utiles pour la réalisation du projet. Un programme testproc.c vous permet de tester quelques fonctions de ce module et vous montre comment les utiliser. Il se compile avec :
cc cgiu.c proc.c testproc.c -o testproc
(tout n'est pas utile pour ces TPs).
Si vous voulez faire une interface par CGI, vous pouvez partir du formulaire et du programme suivants : form_post4.html et post4.c. Pour plus d'informations à propos de CGI, voir html-cgi.pdf et langageC.pdf.
Vous pouvez regarder le TP2 de l'ancien cours RICM4-RIM pour des informations relatives au placement du formulaire HTML et du programme CGI, ainsi qu'au lien entre les deux avec le serveur HTTP de goedel.
Nous vous fournissons aussi un module pour charger en mémoire des images au format JPEG : rdjpeg.h/rdjpeg.c et un programme exemple qui charge une image en mémoire et affiche les plans rouge, vert et bleu du premier bloc 8×8 ce cette image : read_image.c. Il se compile avec :
cc rdjpeg.c read_image.c -o read_image
Un executable Linux djpeg est fourni pour le cas où il ne serait pas disponible sur votre système. S'il ne fonctionne pas, vous pouvez l'installer sur ubuntu avec la commande :
sudo apt-get install libjpeg-progs
Ça installe tout ce qui concerne le JPEG, y compris djpeg qui doit
alors se retrouver dans /usr/bin
.
Il y a deux programmes à écrire (ou un seul avec deux options).
Étapes :
Attention : pour le calcul des historammes sur l'ensemble des images, si vous faites une boucle sur les lignes du fichier urls.txt, la procédure read_cimage() alloue de la mémoire pour stocker les plans RGB à chaque appel. Il faut la libérer par un appel à free_cimage() à la fin du corps de la boucle.
Pour charger les listes urls.txt et list.txt en mémoire sour la forme d'un tableau de chaînes de caractères, vous pouvez utiliser la fonction readList() de proc.c / proc.h. Utiliser éventuellement freeList() pour libérer ces tableaux.
Tri :
Affichage des résultats :
<IMG SRC=“…”>
et de rediriger la sortie du programme vers un fichier out.html qu'il n'y a plus qu'à charger dans un navigateur.Cette partie est supprimée. Elle sera remplacée par une autre petit projet en apprentissage profond (deep learning).
Vous devrez faire un compte rendu et fournir les codes sources de vos programmes et les différents scripts que vous utilisez pour les lancer. Vous enverrez le compte-rendu et les sources (pas les fichiers de données) dans une archive zip ou tgz pour le 21 avril au plus tard (Georges.Quenot@imag.fr). Vous montrerez ce qui tourne lors de la séance du 7 avril.
Le compte rendu doit comprendre une très courte introduction expliquant quel est le problème que votre système traite, l'organisation logicielle globale de votre système, comment vous avez implémenté les différents éléments (vous pouvez en choisir un en particulier que vous détaillez), et des exemples de résultats obtenus illustrant les capacités du système et en montrant des cas où il fonctionne de manière satisfaisante et d'autre où il fonctionne moins bien. Ne reproduisez pas le sujet et n'incluez pas le code et les scripts dans le compte rendu, à l'exception éventuelle d'extraits courts.
Pour la partie “deep learning”, vous devrez également fournir les scripts python correspondant à votre meilleur résultat sur le collection CIFAR-10 et expliquer les modification que vous avez effectuées et leurs effets sur la performance.