Détection d'objets avec Deep Learning et OpenCV | Yacine Rouizi | Skillshare

Vitesse de lecture


1.0x


  • 0.5x
  • 0.75x
  • 1 x (normale)
  • 1.25x
  • 1.5x
  • 1.75x
  • 2x

Détection d'objets avec Deep Learning et OpenCV

teacher avatar Yacine Rouizi

Regardez ce cours et des milliers d'autres

Bénéficiez d'un accès illimité à tous les cours
Suivez des cours enseignés par des leaders de l'industrie et des professionnels
Explorez divers sujets comme l'illustration, le graphisme, la photographie et bien d'autres

Regardez ce cours et des milliers d'autres

Bénéficiez d'un accès illimité à tous les cours
Suivez des cours enseignés par des leaders de l'industrie et des professionnels
Explorez divers sujets comme l'illustration, le graphisme, la photographie et bien d'autres

Leçons de ce cours

    • 1.

      VUE D'ENSEMBLE

      1:22

    • 2.

      Installation

      1:40

    • 3.

      Détection d'objets dans les images

      14:10

    • 4.

      Détection d'objets dans les vidéos

      4:41

  • --
  • Niveau débutant
  • Niveau intermédiaire
  • Niveau avancé
  • Tous niveaux

Généré par la communauté

Le niveau est déterminé par l'opinion majoritaire des apprenants qui ont évalué ce cours. La recommandation de l'enseignant est affichée jusqu'à ce qu'au moins 5 réponses d'apprenants soient collectées.

63

apprenants

--

projet

À propos de ce cours

Dans ce cours, nous allons voir comment détecter les objets dans les images et les vidéos à l'aide de l'apprentissage en profondeur et d'OpenCV.

Nous utiliserons le cadre de détection de tir unique combiné à l'architecture MobileNet comme notre détecteur d'objets basé sur l'apprentissage profond.

Rencontrez votre enseignant·e

Teacher Profile Image

Yacine Rouizi

Enseignant·e

Hi! My name is Yacine Rouizi. I have a Master's level in physics of materials and components and I am a passionate self-taught programmer. I've been programming since 2019 and I teach on my blog about programming, machine learning, and computer vision.

My goal is to make learning accessible to everyone and simplify complex topics, such as computer vision and deep learning, by following a hands-on approach.

Voir le profil complet

Level: Beginner

Notes attribuées au cours

Les attentes sont-elles satisfaites ?
    Dépassées !
  • 0%
  • Oui
  • 0%
  • En partie
  • 0%
  • Pas vraiment
  • 0%

Pourquoi s'inscrire à Skillshare ?

Suivez des cours Skillshare Original primés

Chaque cours comprend de courtes leçons et des travaux pratiques

Votre abonnement soutient les enseignants Skillshare

Apprenez, où que vous soyez

Suivez des cours où que vous soyez avec l'application Skillshare. Suivez-les en streaming ou téléchargez-les pour les regarder dans l'avion, dans le métro ou tout autre endroit où vous aimez apprendre.

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.