Premier pas dans l'IA avec l'OCR Online

Formation

En Ligne

Prix sur demande

Appeler le centre

Avez-vous besoin d'un coach de formation?

Il vous aidera à comparer différents cours et à trouver la solution la plus abordable.

Description

  • Typologie

    Formation

  • Méthodologie

    En ligne

Nous vous proposons des cours ouverts pour se former autrement, pour devenir acteur de votre vie. Nous vous aidons à prendre votre envol, mais ça ne s'arrête pas là. Notre volonté est de vous accompagner tout au long de votre vie, dans votre parcours professionnel.Grâce à cette formation vous pourrez acquérir les connaissances nécessaires qui vous permettrons d’ajouter des compétences à votre profil et obtenir de solides aptitude qui vous offriront de nombreuses opportunités professionnelles.

Questions / Réponses

Ajoutez votre question

Nos conseillers et autres utilisateurs pourront vous répondre

À qui souhaitez-vous addresser votre question?

Saisissez vos coordonnées pour recevoir une réponse

Nous ne publierons que votre nom et votre question

Les Avis

Le programme

Introduction du cours Introduction

Bonjour, bonsoir ; bienvenue ! Si vous avez cliqué sur le lien menant à ce cours, c'est que vous vous êtes un jour posé l'une des questions suivantes :

  • qu'est-ce que l'intelligence artificielle (IA), terme très sci-fi ?

  • qu'est-ce que l'OCR, ce terme très nerdy ?

  • à quoi ça sert, et comment ça marche ?

Je vais ici donc rapidement répondre à ces trois questions. Notez bien le mot "rapidement". Ce terme s'impose puisque chacune des question plus haut est une porte qui ouvre sur un monde gigantesque, et bien plus complexe que ce que je vais vous présenter. Néanmoins, j'espère réellement pouvoir présenter ces domaines de façon claire et simple, d'une manière qui va vous donner envie de vous y intéresser et de pousser les recherches au-delà de cette simple introduction. Si je parviens à réaliser cet objectif, j'en serais très heureux.

Quoi qu'il en soit, si vous suivez bien le tutoriel, vous finirez par avoir une première idée de comment fonctionne un des algorithmes utilisés par Word ou votre lecteur de PDF favori, par exemple, pour reconnaître les textes présents sur une image et, mieux encore, vous aurez un petit programme qui pourra reconnaître des caractères : un à la fois, certes, mais c'est déjà pas mal !

Ce programme sera écrit en C# et implémentera les idées présentées de la manière la plus simple possible, pour que vous puissiez le porter au langage de votre choix.

Comme nous allons ici coder en C#, il serait préférable de connaître quelques éléments du langage, comme les Forms et les concepts de base comme les classes.

Qu'est-ce que l'IA ?Grosso modo...

Dans ce tutoriel, nous allons nous intéresser au domaine de l'IA ; qu'est-ce que c'est ? Avant tout, il serait peut-être utile de savoir ce que ces lettres signifient.

Le sigle "IA" signie "intelligence artificielle". C'est un domaine dont vous avez sans doute entendu parler, au travers de récits (comme les œuvres de science-fiction, ou des films), ou encore dans le monde du gaming. Les premiers vous ont sans doute présenté la discipline comme un monde de recherche où l'on cherchait à créer un esprit humain, ou du moins conscient et intelligent. Ce n'est pas totalement faux, mais pas complètement vrai non plus.

En effet, le but de l'intelligence artificielle est de donner naissance à des machines plus intelligentes (vous voyez la boucle ?...), dans le sens où elles pourront comprendre ce que nous faisons et pourront, de fait, répondre de façon plus directe et plus efficace à nos besoins. Par exemple, imaginez que vous soyez un médecin et que vous analysiez le scanner d'un patient. Vous doutez sur ce qu'il a et demandez de l'aide à un programme médical. Ce programme doit être entraîné (éduqué) à reconnaître les symptômes et à diagnostiquer les maladies correctement. C'est déjà une première étape, et beaucoup de chercheurs en IA planchent uniquement sur cette partie de la reconnaissance et de l'entraînement des machines. On pourrait simplement résumer cela par la question "comment est-ce que je fais pour enseigner que ces pixels sont un chat à ce PC ?".

Une première étape. Maintenant, ne serait-il pas mieux pour tout le monde si ce logiciel médical pouvait directement converser avec le médecin pour lui présenter son avis concernant le patient ? Il pourrait parler avec une voix de synthèse et comprendre ce que le médecin lui dit à l'aide de la reconnaissance vocale. Encore une fois, c'est un problème de reconnaissance.

Vous l'aurez compris, l'IA tourne beaucoup autour de la reconnaissance d'objets, que ce soit des objets "standards" (au sens, communs), ou moins fréquents, tels que l'angle d'une route (qui fait tourner une voiture) ou une série de gestes  permettant d'accéder à votre base secrète. Dans le jargon, ces objets s'appellent des motifs (de l'anglais pattern).

Au cours du temps, les chercheurs se sont fabriqué un petit arsenal d'outils permettant de faire cette reconnaissance, de façon de plus en plus efficace (et impressionnante, regardez une IA dans un jeu, ou alors les logiciels de diagnostic médicaux, qui sont à la pointe de la technologie dans le domaine).

C'est une science assez libre, puisqu'elle se soucie uniquement d'atteindre ses objectifs. Elle se base souvent sur d'autres sciences pour se développer. Par exemple, elle s'est basée sur la biologie du cerveau humain pour concevoir ce qu'on appelle des réseaux de neurones artificiels. Ces réseaux ont pour but de reconnaître des motifs connus à l'avance, et de pouvoir en apprendre de nouveaux, à l'aide d'un entraînement (ou sans, pour certains modèles). Évidemment, l'IA ne reprend pas tout dans les plus stricts détails, mais elle reprend quelques éléments importants pour atteindre l'objectif. On pourrait dire qu'elle est pragmatique, de ce point de vue là.

L'intelligence artificielle au quotidien, cachée, mais bien présente.

Tout cela peut vous paraître plutôt loin, après toute cette lecture. Vous pourriez vous demander :

Tout ça est bien beau, mais qu'est-ce que l'IA fait pour moi, est-ce que je peux au moins la voir dans ma vie de tous les jours !?

La réponse à cette dernière question est évidemment un grand oui.

Vous pouvez voir l'IA en action partout autour de vous, si vous regardez bien. Par exemple : Google utilise des techniques d'IA pour faire ses recherches ; Facebook fait de même pour grouper ses utilisateurs entre eux ; les caméras de surveillance peuvent reconnaître des situations à problèmes (ou, du moins, anormales) automatiquement et donner l'alerte ; les robots (comme le gentil petit Nao) utilise plusieurs techniques d'IA de pointe (dont les réseaux neuronaux, cités au-dessus) pour, par exemple, reconnaître à qui il parle, ou comment répondre. Un autre exemple, moins high-tech cette fois, est celui de votre lave-vaisselle (ou lave-linge). Votre machine doit "penser" pour doser les produits nettoyants et l'eau, elle doit aussi "penser" au niveau de saleté qu'elle reçoit lors du calcul pour le dosage du produit. Par exemple, si les assiettes sont plutôt propres, elle n'utilisera pas beaucoup de produit, tandis que si c'est noir-charbon, alors elle ne va pas hésiter une seconde à vider la réserve ! (Sachez, entre nous, qu'un être humain ne résisterait pas à l'envie non plus).

Ah ! C'était une grosse introduction, n'est-ce pas ? Passons maintenant à ce qui nous intéresse vraiment pour ce tutoriel : l'OCR.

L'OCRQu'est-ce que c'est ?

On va d'abord s'intéresser à ce qu'est l'OCR, avant de penser à comment implémenter notre propre module.

Le terme "OCR" est un acronyme pour "Optical Character Recognition", ou Reconnaissance de caractère optique, en français. L'OCR est donc un domaine de l'IA qui a pour but de reconnaître un caractère (lettre, chiffre, symbole alphabétique) lorsqu'on lui en présente un. Évidemment, vous pourriez être en train de vous dire que c'est ce qu'un ordinateur fait automatiquement. Après tout, quand j'appuie sur la touche A, je vois un A apparaître. S'il le fait dans un sens, il le fait automatiquement dans l'autre, right ?

Eh bien, non. Reconnaître un caractère depuis une image est le but de l'OCR. En pratique, reconnaître un seul caractère ne va pas nous mener bien loin, et les logiciels professionnels sont bien entendu capables de reconnaître plusieurs lettres mises à côté. C'est par exemple le cas de OneNote, qui peut extraire le texte dans une image lorsqu'on le lui demande. Cependant, reconnaître plusieurs lettres est simplement extraire des pixels donnés d'une image qui pourraient être des lettres et les passer, un  à un, au module d'OCR pour faire la reconnaissance, pour ensuite mettre les lettres les unes à la suite des autres et reformer la phrase vue. Reconnaître plusieurs lettres est en fait plus un travail de traitement d'image que de reconnaissance, puisqu'on ne reconnait qu'une lettre à la fois. C'est sur cette dernière étape que l'on va se pencher ici.

Ce que nous allons faire

Dans ce tutoriel, nous allons construire notre propre module de reconnaissance. Il ne va pas pouvoir reconnaître qu'une lettre à la fois, cependant, comme nous l'avons vu plus haut.

Avant toute chose, réfléchissons à comment nous pourrions faire cela. On peut étudier ce qu'il se passe réellement sur le marché professionnel pour nous donner des idées.

Une rapide recherche nous permet de trouver que la plupart des solutions de reconnaissance professionnelles sont basées sur les réseaux de neurones artificiels, dont on a parlé plus haut. Ces réseaux sont capables d'apprendre d'exemples et peuvent reconnaître même des formes qu'ils n'avaient jamais vu auparavant, tant que la chose n'est pas totalement nouvelle. C'est cette flexibilité qui est attirante chez eux. Cependant, en conçevoir un est une tâche plutôt difficile, et il nous faudrait de quoi l'entraîner (des centaines d'images de chiffres et de lettres écrites à la main ou par un ordinateur pour les montrer au réseau de neurones), ce qui peut être chose difficile à trouver. On va donc oublier les réseaux de neurones ; trop compliqué.

Un autre algorithme, et bien plus simple, puisque c'est le plus simple de tous existe cependant. Cet algorithme est celui de la distance Euclidienne. Commençons par expliquer ce qu'est cette distance avant de voir l'algorithme en lui-même.

La distance euclidienne

En géométrie, un point a des coordonnées spatiales représentées par un vecteur position. La distance euclidienne est simplement la différence entre deux vecteurs, c'est-à-dire la distance qu'il existe entre deux points. Par exemple, la distance entre ma maison et mon lycée est d'environ 650 mètres.

Si vous ne savez pas ce qu'est un vecteur, n'ayez pas peur, c'est un concept très simple. Un vecteur peut être représenté comme un tableau de flottants (j'imagine que tout programmeur qui se respecte sait ce qu'est un flottant...), c'est-à-dire de nombres décimaux. Ces nombres représentent la position d'un point sur les différentes directions de l'espace (les trois fameux axes x, y, z en 3D).

En maths, on représente un vecteur comme ceci :

$$$$$\[\vec a \begin{pmatrix} x\\y\\z \end{pmatrix}\]$$$$$

Évidemment, un vecteur étant un tableau de décimaux, il n'est pas limité à 3 composantes, il peut en avoir autant qu'il en faut pour répondre au problème en main.

La propriété des vecteurs qui nous intéresse ici est qu'on peut soustraire des vecteurs entre eux. Pour cela, il suffit juste de soustraire les composantes des vecteurs une à une pour obtenir un nouveau vecteur. On écrit cette opération sous forme d'équation, comme ceci :

$$$$$\[\vec a-\vec b=\begin{pmatrix}a_x-b_x\\a_y-b_y\\a_z-b_z\end{pmatrix}\]$$$$$

Encore une fois, le vecteur n'a pas besoin d'être de dimension (=longueur) 3 pour que ça marche, même si, pour l'exemple, c'est ce que l'équation précédente montre. La soustraction tient pour n'importe quelle dimension du vecteur, on soustrait juste la première composante de l'un avec la première composante de l'autre, et ainsi de suite, après tout. Voici maintenant la formule de la distance euclidienne pour des vecteurs de dimension quelconque :

$$$$$\[d(a,b)=d(b,a)=\sqrt{\sum_{i=1}^d{(a_i-b_i)^2}}\]$$$$$

Si vous le savez pas, le grand signe en forme de E s'appelle "sigma", et, en mathématiques, il signifie simplement "prendre la somme sur un intervalle". L'intervalle est, dans notre cas, désigné par la lettre "i", qui va prendre toutes les valeurs de 1 à d, le nombre de dimensions du vecteur (le nombre de composantes qu'il a). Si vous n'avez pas bien compris l'opération, la voici sous forme de code :

float total = 0f; //en maths, on calcule sur des réels //donc, autant prendre des nombres réels dans le code for (int i = start; i <= end; i++) total += i;

La formule précédente dit juste que la distance entre les points A et B est la même que l'on parte de A vers B ou de B vers A (c'est logique, la distance entre moi et mon lycée est de 650m que je m'y rende ou que j'en rentre), d'où l'équation d(a,b) = d(b, a), et que cette distance équivaut à la somme de la différence, au carré, entre chaque composante des vecteurs représentant les points A et B. Finalement, il y a une racine carrée, parce que jusque là, il y avait des carrés que l'on ajoutait entre eux. Pour trouver la vraie valeur de distance, on prend la racine carré.

La formule ci-dessus est directement (ou presque) donnée par le théorème de Pythagore, donc remerciez ce gentil monsieur !

Qu'est-ce qu'on fait maintenant qu'on a la distance euclidienne ?

Maintenant qu'on sait comment la calculer, on va voir comment l'utiliser pour reconnaître un chiffre, évidemment !

Imaginez qu'on dispose d'une grille de pixels d'une taille, disons de 7x5, donc 7 pixels sur l'horizontale et 5 en verticale. On peut dessiner sur cette grille, mais uniquement en noir et blanc. Donc, à tout moment, un pixel peut ou être noir, ou être blanc, mais pas entre les deux, ni d'être d'une autre couleur. Disons qu'un pixel blanc vaut 0 et qu'un pixel noir vaut 1. On peut alors représenter chaque pixel comme étant une composante d'un vecteur, qui représentera la grille entière. Comme la grille a une taille de 7x5, il y aura 35 pixels, et donc 35 composantes dans le vecteur.

Une façon plus classe de dire cette dernière phrase est de dire que notre vecteur représente un point dans un espace en 35D, c'est-à-dire à 35 dimensions.
Suivant cette logique (et la phrase ci-dessous), un chiffre est en réalité représenté par un point en 35D.

On a donc un vecteur représentant une grille (image), elle-même représentant un chiffre : on a donc un vecteur représentant un chiffre.

Notre algorithme pour la reconnaissance d'un chiffre, à l'aide de la distance euclidienne est donc tout donné.

Notre algorithme de reconnaissance

Vous l'avez peut-être déjà deviné, et le voici :

  1. Préparer des images de référence (que l'on va tenter de reconnaître).
    Cette étape revient à construire les vecteurs de ces images.

  2. Obtenir l'image dessinée par l'utilisateur (ce que l'utilisateur a écrit). Cela revient encore à obtenir le vecteur de son image.

  3. Comparer ce vecteur à tous les vecteurs dans notre base de référence, c'est-à-dire prendre sa distance euclidienne à tous les autres vecteurs.

  4. Le vecteur avec la distance la plus petite au vecteur de l'utilisateur est le chiffre que l'on a reconnu.

Cet algorithme est le plus simple pour faire de l'OCR, mais il a l'avantage d'être rapide à implémenter et à comprendre. Les résultats finaux ne sont cependant pas les meilleurs dans le monde de l'IA, c'est sûr et certain...

Implémentation

Nous allons maintenant l'implémenter pour avoir notre propre module de reconnaissance. Je vais utiliser le C# pour le code, mais j'ai fait attention à écrire les classes de façon claire pour pouvoir rendre l'écriture dans votre langage favori la plus simple possible.

Voyons de quoi nous avons besoin :

  • une classe pour représenter un vecteur

  • une classe pour représenter une image (grille de pixels)

  • une classe pour faire la reconnaissance

  • une classe pour obtenir l'entrée et présenter les résultats à l'utilisateur

Ces quatre points sont le strict minimum, mais j'ai rajouté de quoi permettre de rajouter de nouveaux caractères à reconnaître, et de quoi charger et enregistrer les images de référence, pour ne pas avoir à les re-rentrer dans le programme à chaque fois.

Je vais vous présenter chacune des classes, dans l'ordre de leur utilisation. Je ne vais pas commenter, puisque le code l'est déjà, cela...

Appeler le centre

Avez-vous besoin d'un coach de formation?

Il vous aidera à comparer différents cours et à trouver la solution la plus abordable.

Premier pas dans l'IA avec l'OCR Online

Prix sur demande