Cours:Classif : Différence entre versions
Ligne 51 : | Ligne 51 : | ||
==== Mise en place de la librairie Dlib ==== | ==== Mise en place de la librairie Dlib ==== | ||
− | La librairie CImg est constituée d'un unique ficher <code>CImg.h<code> | + | La librairie CImg est constituée d'un unique ficher <code>CImg.h</code> |
− | * Télécharger la librairie depuis https://cimg.eu/download.html, décompresser et copier le fichier <code>CImg.h<code>dans votre dossier de travail | + | * Télécharger la librairie depuis https://cimg.eu/download.html, décompresser et copier le fichier <code>CImg.h</code> dans votre dossier de travail |
− | * Faire un nouveau projet | + | * Faire un nouveau projet non Qt, avec le <code>main.cpp</code> suivant |
− | + | <source lang="c++"> | |
+ | #include <iostream> | ||
+ | |||
+ | #include "/home/nicoli01/tests/testcimg/CImg.h" // A REMPLACER DANS VOTRE CAS | ||
+ | |||
+ | using namespace cimg_library; | ||
+ | |||
+ | using namespace std; | ||
+ | |||
+ | int main() | ||
+ | { | ||
+ | cout << "Hello World!" << endl; | ||
+ | |||
+ | CImg<unsigned char> image("/root/im.png"); // A REMPLACER DANS VOTRE CAS | ||
+ | image.display("hello"); | ||
+ | return 0; | ||
+ | } | ||
+ | </source> | ||
==== Prise d'images en c++ ==== | ==== Prise d'images en c++ ==== | ||
Ligne 83 : | Ligne 100 : | ||
* En utilisant Dlib | * En utilisant Dlib | ||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− |
Version du 31 janvier 2024 à 15:54
TP Classification : détection d'objet en temps réel
Le travail de cette étape va consister à
- analyser des images acquise en "temps réel" afin de détecter et identifier des objets
- les objets seront
- dans un premier temps des jetons de nain jaune
- dans un second temps des briques lego.
Sommaire
Technos matérielles et logicielles
Vous utiliserez :
- Une Rpi 4 que vous programmerez depuis vos postes linux (en cross-compilation)
- Une camera PiCam Wide (grand angle)
- la librairie CImg pour des traitements bas niveaux et affichages : https://cimg.eu/
- la librairie Dlib pour des traitements simples et la reconnaissance : http://dlib.net/
Vous travaillerez dans un dossier dit "DE TRAVAIL", qui contiendra
- les dossiers de vos projets QtCreator
- le code des librairies Dlib et CImg téléchargées
(dans mes exemples, c'est /home/nicoli01/tests
)
Prise d'images en terminal
- Connecter (si cela n'est pas fait) la PiCam à la Rpi4
- Tester la PiCam avec
libcamera-hello
(la capture doit s'afficher sur l'écran de la Rpi) - Tester l'acquisition d'image avec l'éxecutable
libcamera-still
- Explorer les options de cette application (
libcamera-still -h
), en particulier-n
,--immediate
,--width
,--height
et-o
Mise en place de la librairie Dlib
Cette fonction exploite la librairie Dlib :
- Créer un projet dans QtCreator de type Non-Qt C++
- Télécharger la librairie depuis http://dlib.net, la décompresser et placer son dossier au même niveau que votre dossier de projet
- Modifier votre fichier
.pro
de la façon suivante :
`
QMAKE_CXXFLAGS += -DDLIB_JPEG_SUPPORT
INCLUDEPATH += /home/nicoli01/tests # A REMPLACER PAR LE CHEMIN VERS VOTRE DOSSIER DE TRAVAIL
SOURCES += \
/home/nicoli01/tests/dlib/all/source.cpp ## A REMPLACER DANS VOTRE CAS
LIBS += -ljpeg -lm -lX11 -lpthread
target.path = /root
INSTALLS = target
- Pour le contenu de votre
main.cpp
, vous pourrez utiliser l'exemple suivant http://dlib.net/image_ex.cpp.html (en remplaçant éventuellement la ligneload_image(img, argv[1]);
paroad_image("image.png");
pour lire une image que vous aurez acquis aveclibcamera
).
Mise en place de la librairie Dlib
La librairie CImg est constituée d'un unique ficher CImg.h
- Télécharger la librairie depuis https://cimg.eu/download.html, décompresser et copier le fichier
CImg.h
dans votre dossier de travail - Faire un nouveau projet non Qt, avec le
main.cpp
suivant
#include <iostream>
#include "/home/nicoli01/tests/testcimg/CImg.h" // A REMPLACER DANS VOTRE CAS
using namespace cimg_library;
using namespace std;
int main()
{
cout << "Hello World!" << endl;
CImg<unsigned char> image("/root/im.png"); // A REMPLACER DANS VOTRE CAS
image.display("hello");
return 0;
}
Prise d'images en c++
Voici une fonction imcapture
que vous pourrez utiliser pour réaliser une acquisition d'image en c++
array2d<rgb_pixel> imcapture() {
array2d<rgb_pixel> image;
int pb = system("rm im.png 2>/dev/null; libcamera-still -n 1 --immediate --width 640 --height 480 -o im.png 2> /dev/null ");
if (pb) {
cout << "ERROR: no image acquisition" << endl;
exit(1);
} else {
image = load("im.png");
}
return image;
}
Prétraitements et mesure de descripteurs
Identification par KNN
- A coder
Identification par SVM
- En utilisant Dlib