Cours:Classif : Différence entre versions
Ligne 49 : | Ligne 49 : | ||
* Pour le contenu de votre <code>main.cpp</code>, vous pourrez utiliser l'exemple suivant http://dlib.net/image_ex.cpp.html (en remplaçant éventuellement la ligne <code>load_image(img, argv[1]);</code> par <code>oad_image("image.png");</code> pour lire une image que vous aurez acquis avec <code>libcamera</code>). | * Pour le contenu de votre <code>main.cpp</code>, vous pourrez utiliser l'exemple suivant http://dlib.net/image_ex.cpp.html (en remplaçant éventuellement la ligne <code>load_image(img, argv[1]);</code> par <code>oad_image("image.png");</code> pour lire une image que vous aurez acquis avec <code>libcamera</code>). | ||
− | ==== Mise en place de la librairie | + | ==== Mise en place de la librairie CImg ==== |
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> | ||
Ligne 72 : | Ligne 72 : | ||
return 0; | return 0; | ||
} | } | ||
+ | </source> | ||
+ | |||
+ | * Votre fichier <code>.pro</code> est plus simple que pour Dlib, vous n'aurez qu'à rajouter la ligne suivante : | ||
+ | <source> | ||
+ | LIBS += -ljpeg -lm -lX11 -lpthread -pedantic -Dcimg_use_vt100 -Dcimg_display=1 | ||
</source> | </source> | ||
Version du 31 janvier 2024 à 15:55
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 CImg
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;
}
- Votre fichier
.pro
est plus simple que pour Dlib, vous n'aurez qu'à rajouter la ligne suivante :
LIBS += -ljpeg -lm -lX11 -lpthread -pedantic -Dcimg_use_vt100 -Dcimg_display=1
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