Transcription
1. VUE D'ENSEMBLE: Bonjour. Dans ce cours, nous verrons
comment détecter des objets dans des
images et des vidéos à l'aide du
deep learning et d'un CV ouvert. Je m'appelle Yossi et je serai votre professeur
dans ce cours. Je programme
depuis 2019. Et je suis l'auteur du vlog. Ne répétez pas yourself.org,
où j'aide plus de 5 000 développeurs chaque mois à en savoir
plus sur Python, l'apprentissage
automatique
et la vision par ordinateur. Alors, qu'est-ce que la détection d'objets ? détection d'objets
est le processus qui consiste à
localiser
des objets à l'aide de cadres de sélection, d'une image ou d'une vidéo. C'est l'une des
tâches les plus importantes de la vision par ordinateur. Et il a de nombreuses applications
dans divers domaines, tels que la surveillance, les personnes, comptage, les
voitures autonomes, etc. Aujourd'hui, il existe une
différence entre détection d'
objets et la classification
d'images. Donc, en gros, la détection d'objets est le processus qui permet de localiser
des objets dans une image. Alors que la classification des images
est le processus qui attribue des étiquettes aux images
en fonction de leur contenu. Entrons donc dans la classe et commençons à construire notre projet.
2. Installation: La première chose
à faire est d'installer les packages nécessaires
pour le traitement des images. Nous allons donc installer
OpenCV et le non-pipe. Commençons par OpenCV, ouvrons une nouvelle
fenêtre de terminal et exécutons la commande pip,
Install OpenCV polygon. Dans mon cas, vous pouvez voir que j'
ai ouvert CV déjà installé. Exigence, déjà satisfaite. Mais je veux juste créer
un environnement virtuel. Ainsi, le trio peut voir ce que vous
obtenez lorsque vous l'avez installé. Créons donc l'environnement
virtuel. Nous vous envions. Parlons télé. Maintenant,
préinstallons Open CV. CV. Vous pouvez voir ici qu'OpenCV a été installé
avec succès avec un CV ouvert sans tube. Je n'ai donc pas besoin
d'installer NumPy. Ici, vous pouvez voir que j'
ai la version open CV 4.54.5 d'OpenCV et que la version de
non-pi air est 1.22 pour un.
3. Détection d'objets dans des images: Dans cette vidéo, nous allons utiliser le détecteur à coup
unique issu du travail combiné l'architecture MobileNet comme détecteur d'objets
basé sur le deep learning. La première chose à
faire est donc d'
importer nos bibliothèques. Nous allons donc dire importer CB2. Et nous pouvons également charger notre image. Nous allons donc dire Marine ici, le pot à notre image. Et nous pouvons également le
redimensionner. Donc, lorsque nous disons CV
pour redimensionner l'image, disons 644 en largeur. Et pour 84, la hauteur. Maintenant, nous allons obtenir la hauteur de
l'image et la largeur. Nous ne dirions donc pas
image point shape 0. Et pour la hauteur, on
dira la forme 1. Nous avons maintenant besoin des poids et du
fichier de configuration de notre modèle. Vous avez donc téléchargé ce phi à partir de la documentation OpenCV. Nous avons donc deux fichiers ici. Je vais mettre un lien
vers ces personnes dans la version texte de cette partie. Maintenant que nous avons tous
les fichiers dont nous avons besoin, nous pouvons charger notre modèle. Nous pouvons donc écrire
ici notre réseau. Nous ne verrons donc pas le point DNN
V2 lu sur une sorte de flux. Et dans l'en-tête,
nous fournirons les poids et le fichier
de configuration. Nous ne pouvons donc pas écrire ces
deux variables ici. Lorsque vous dites que le
poids est égal à et que nous indiquons le
chemin vers notre poids. Il s'agit donc du
fichier qui contient les poids du modèle. Tu peux dire modèle. Il s'agit de l'
architecture de notre modèle. Maintenant, ce que nous pouvons faire, c'est cela, donc nous avons le fichier des noms de
cacao. Lorsque vous le mettez ici
dans le projet. Donc, en gros, ce fichier contient les clauses que nous pouvons détecter. Nous pouvons donc ouvrir le
fichier et installer les étiquettes de classe dans la liste. Nous pouvons utiliser Context
Manager pour adultes, donc nous dirons avec open. Et ici, nous indiquons que le chemin
qui mène à notre nom de cacao est correct. Il suffit de le copier à partir d'ici. Ici, nous allons dire lire le fichier. Ici, nous allons stocker les étiquettes des
classes à
l'intérieur, dans la liste dans laquelle nous
allons nommer les noms. Nous allons donc dire ici que noms de
clusters sont égaux
à une liste vide. Ici, on peut écrire f, perdu, plu, dépouillé et points. Et nous allons nous séparer
en fonction de la nouvelle ligne. Nous devons maintenant prétraiter
notre image et nous avons une fonction qui fera tout
le prétraitement pour nous. Nous pouvons donc dire ici que blob est égal à c v2 point DNN. Et ici, nous allons utiliser l'image de l'enveloppe
fonctionnelle. Nous fournissons ici notre image. Et maintenant, nous avons quelques paramètres
définis par défaut. Ils sont fournis à partir de
la documentation. Donc, en gros, ici, le
premier est le facteur d'échelle. On peut mettre 1, on divise par 127,5. Et puis nous avons ici la
taille de l'image de sortie. On ne peut pas écrire 320. Et le dernier argument ici concerne les valeurs des moyens de production. Nous pouvons maintenant écrire
un à un vers 7.5. Même chose ici et
même chose ici. Ensuite, nous pouvons définir ce blob comme entrée pour le réseau et obtenir
la prédiction de sortie. Nous pouvons donc dire ici, pas grand-chose. Entrée. Et nous fournirons notre blob. Pour faire la prédiction. Nous dirons que la sortie
est égale à quatre. Nous avons maintenant
nos prévisions. Imprimons donc la
forme de cette variable. Nous dirons que la forme de sortie
sera d'écrire notre code. Donc, ici, comme vous pouvez le voir, nous avons une forme de 11107. Nous avons donc les
détections, les cheveux sept, les cases de délimitation, la confiance et
quelques autres informations. Maintenant, ce que nous pouvons faire, en boucle sur cette variable
pour obtenir les détections. Nous allons donc dire pour la
détection en sortie. Ici, nous allons dire 00. Et ici, on prend tout. Et ici aussi, nous
prenons tout. Nous allons maintenant obtenir
la confiance
du modèle pour la détection
actuelle. Nous pouvons donc dire que Pro
Really t est égal au deuxième argument du deuxième élément
issu de notre détection. Nous pouvons maintenant filtrer
les détections de bogues. Nous pouvons donc maintenant lier si notre probabilité ou la
confiance du modèle est,
disons, inférieure à 0,5, nous allons continuer à faire une boucle. Nous ne ferons donc rien. Et sinon, nous obtiendrons le cadre de délimitation à
partir de la détection. Les boîtes de délimitation sont donc localisées. Vous pouvez voir la détection
de trois à sept. Maintenant, ce cadre de délimitation, ou donné un relatif en ce qui
concerne la largeur et la
hauteur de l'image. Imprimons donc notre
boîte. Et les cheveux. Comme vous pouvez le voir, nous
avons 0.30.350,5. Nous devons donc
les multiplier par la largeur
et la hauteur de l'image pour obtenir les coordonnées x
et y réelles du cadre de sélection. Bonjour, Ce que nous pouvons faire, nous pouvons utiliser la fonction zip et nous n'écrirons pas
de liste de compréhension. Donc, ici, lorsque nous écrirons le ZIP, nous allons faire passer le nombre de détections
de trois à sept. Et le deuxième argument ici,
nous allons fournir la largeur, la hauteur, la largeur
et la hauteur. Et ici, nous allons dire Pour a, b dans cette fonction zip, nous allons prendre la multiplication
de ces deux éléments. Ici. La première coordonnée est le x du coin supérieur gauche
du cadre de sélection. Nous le multiplions par la largeur. Ensuite, nous avons le y. Nous le
multiplions par la hauteur. Et puis nous avons le
x en bas, juste fois la largeur. Et puis les coordonnées
y en bas, multipliées par la hauteur. Nous n'en avons donc plus besoin. Et nous devons également convertir
notre liste en tuple. Maintenant, nous pouvons dessiner les rectangles, donc nous allons dire un rectangle à points c
v2. Ici. Permettez-moi de dire image. Pour les coordonnées
du rectangle, nous utiliserons le cadre de délimitation. Prenez pour point de départ, nous allons prendre les deux
premiers éléments du cadre de sélection. Ensuite, nous allons dire ici
les deux derniers éléments. La raison de l'
appel à l'épaisseur. Extrayons maintenant
l'ID de cluster de l'objet détecté et
obtenons l'étiquette de classe. Donc, tout va bien, l'ID de
classe est égal à et ici l'ID du cluster. Nous pouvons y accéder de cette façon. Pour le nom de classe, on peut écrire ici l'étiquette. L'étiquette qui est le
point de texte que nous allons mettre dans l'image que nous allons
écrire est égale à une chaîne f. Le premier élément. Nous allons prendre l'étiquette de la classe. Nous avons donc les noms de nos classes. Et les noms de nos classes sont une liste. Cela commence à partir de 0. Nous devons donc en soustraire
un de l'identifiant du cluster. Nous allons donc écrire un identifiant d'
autorisation et en soustraire un. Maintenant, nous pouvons également entendre
la probabilité affichée ainsi que
les étiquettes des classes. Nous allons donc dire
probabilité multipliée par 100. Enfin, nous pouvons dessiner
notre texte sur l'image. Nous allons donc dire CV à adopter,
mettez du texte ici, image. Ici, pour le texte, nous aurons dit l'
étiquette de l'origine. Nous pouvons utiliser nos boîtes. Donc 0 ici et la case 1. Mais ici, nous allons ajouter quelques pixels pour nous assurer que le texte
se trouve à l'intérieur du cadre de sélection. Ajoutons 15 pixels. Maintenant, pour la police, nous pouvons utiliser la police. Cherche simplement la peau, disons 0,5 couleur verte. Et deux, pour l'épaisseur. Je pense que nous avons terminé pour
pouvoir afficher notre image. Ainsi, disons V2 point IM show
image et image. Et le poids du point CB2 0. Exécutons notre code. Et ici, le cadre de
sélection n'est pas affiché. Voilà, nous devons prendre les deux derniers éléments
du cadre de sélection. Donc, lorsque nous l'exécutons à nouveau,
maintenant, comme vous pouvez le voir, la personne a été détectée, mais ici le texte est un
peu bizarre. Nous pouvons changer. La police, diront,
les femmes disent ici. Au tertiaire, c'est simplement l'apparence. Donc, comme vous pouvez le voir, la personne a été
détectée correctement. Et nous avons ici la
confiance, qui est de 78 %
4. Détection d'objets dans des vidéos: Passons maintenant
à l'étape suivante, qui consiste à détecter
des objets dans une vidéo. Donc, ici, nous devons d'abord
initialiser la capture vidéo. Nous allons écrire v d u est égal à CV pour adopter la capture vidéo. Et voici une vidéo
que je vais
utiliser dans cet exemple. Nous allons donc écrire ici, nous disons redo one point mp4. Maintenant, ici, tout
reste pareil. Mais deuxièmement, il peut créer une liste de couleurs aléatoires pour
représenter chaque classe. Nous pouvons donc maintenant écrire ici. Nous devons d'abord
importer numpy. Et ici, nous n'avons pas réellement
besoin de ces deux packages. Nous allons donc écrire ici une graine aléatoire sans
point pi pour T2 et T4. Les couleurs, on dira
non pi, pas autour d'elles. Autour de. Pour la valeur faible, nous allons dire 0 et pour
la valeur élevée 255. Il va donc générer des valeurs
entre ces deux valeurs. La taille que nous utiliserons
est la longueur de nos noms de classe. Et ici, nous allons dire trois
pour générer les couleurs RGB. Ensuite, nous pouvons commencer à
traiter nos formulaires. Alors, bien que vrai. Et ici, nous allons
faire un up frames. Nous allons donc dire pourquoi c'est vrai ici. Quand la tasse et quand on la
met dans la boucle. Ici, nous sommes allés chercher la
hauteur de nos cadres. Donc pour lui, pas en forme de 0. Et aussi la largeur et les cheveux, tout reste pareil. Nous allons donc entendre dire cadre. La seule chose que nous
voulons faire est d' obtenir le forum des couleurs,
la détection actuelle. Nous dirons donc que les couleurs
sont égales à ce que nous appelons les nôtres Et ici, nous devons fournir
l'identifiant de la détection. Nous pouvons donc placer cette ligne
avant le parking. Et ici on peut dire classe. Nous devons maintenant convertir la
couleur en un entier. Nous dirons donc que r est égal à un entier de couleur,
la première couleur. Il en va de même pour le BGF. Et pour l'en-tête, nous pouvons
utiliser notre couleur personnalisée. Nous allons dire B, G et R. Et voici le
nom et le cadre. Et ici, nous devons en utiliser
un pendant une milliseconde pour le
poids k. Sinon, notre image sera gelée. Nous pouvons donc maintenant exécuter notre code. Alors on y va. Notre voiture est détectée
avec succès sur la vidéo. Vous pouvez maintenant utiliser différentes
vidéos pour voir si cela fonctionne, cela fonctionnera bien. Mais j'espère que vous avez compris l'
idée de la détection d'objets.