L’extraction de texte à partir d’images est depuis longtemps un problème populaire dans le domaine du génie logiciel. La reconnaissance optique de caractères (Optical Caracter Recongintion ou OCR) est une technologie pionnière largement utilisée pour résoudre ce problème. Grâce à sa capacité à transformer des images contenant du texte en données lisibles par une machine, l’OCR a révolutionné divers secteurs, de l’automatisation du traitement des documents à la traduction linguistique.

Bien qu’il existe des solutions commerciales d’OCR, la création de votre propre API d’OCR en Python, un langage de programmation polyvalent et puissant, offre plusieurs avantages, notamment la personnalisation, le contrôle de la confidentialité des données et la possibilité de réaliser des économies.

Ce guide vous guidera dans la création de votre propre API OCR à l’aide de Python. Il explore les bibliothèques, les techniques et les considérations nécessaires au développement d’une API OCR efficace, vous permettant ainsi d’exploiter la puissance de l’OCR pour vos applications.

Pré-requis

Pour suivre ce cours, vous devez avoir une compréhension de base de Python et de Flask et une copie locale de Python installée sur votre système.

Création de l’API OCR

Dans ce guide, vous apprendrez à construire une application Flask qui permet aux utilisateurs de téléverser des images par le biais d’un point de terminaison POST, qui est ensuite chargé à l’aide de Pillow et traité à l’aide du wrapper PyTesseract (pour le moteur d’OCR Tesseract ). Enfin, elle renvoie le texte extrait en tant que réponse à la requête.

Vous pouvez personnaliser davantage cette API pour fournir des options telles que la classification basée sur des modèles (extraire des lignes de factures, des entrées dans des formulaires fiscaux, etc.) ou des choix de moteurs OCR (vous pouvez trouver plus de moteurs OCR ici).

Pour commencer, créez un nouveau répertoire pour votre projet. Ensuite, configurez un nouvel environnement virtuel dans le dossier en exécutant les commandes suivantes :

python3 -m venv env
source env/bin/activate

Ensuite, installez Flask, PyTesseract, Gunicorn et Pillow en exécutant la commande suivante :

pip3 install pytesseract flask pillow gunicorn

Une fois ces éléments installés, vous devez installer le moteur d’OCR Tesseract sur votre machine hôte. Les instructions d’installation de Tesseract varient en fonction de votre système d’exploitation hôte. Vous pouvez trouver les instructions appropriées ici.

Par exemple, sur MacOS, vous pouvez installer Tesseract à l’aide de Homebrew en exécutant la commande suivante :

brew install tesseract

Une fois cette opération effectuée, le wrapper PyTesseract sera en mesure de communiquer avec le moteur OCR et de traiter les demandes d’OCR.

Vous êtes maintenant prêt à écrire l’application Flask. Créez un nouveau répertoire nommé ocrapi et un nouveau fichier dans ce répertoire avec le nom main.py . Enregistrez-y le contenu suivant :

from flask import Flask, request, jsonify
from PIL import Image
import pytesseract

app = Flask(__name__)

@app.route('/ocr', methods=['POST'])
def ocr_process():
    if request.method == 'POST':
        image_file = request.files['image']
        image_data = Image.open(image_file)

        # Perform OCR using PyTesseract
        text = pytesseract.image_to_string(image_data)

        response = {
            'status': 'success',
            'text': text
        }

        return jsonify(response)

Le code ci-dessus crée une application Flask de base qui a un point final –/ocr. Lorsque vous envoyez une requête POST à ce point de terminaison avec un fichier image, il extrait le fichier, utilise le wrapper pytesseract pour effectuer l’OCR à l’aide de sa méthode code_to_string(), et renvoie le texte extrait dans le cadre de la réponse.

Créez un fichier wsgi.py dans le même répertoire ocrapi et enregistrez-y le contenu suivant :

from ocrapi.main import app as application

if __name__ == "__main__":
    application.run()

Vous pouvez maintenant exécuter l’application à l’aide de la commande suivante :

gunicorn ocrapi.wsgi

Votre API OCR de base est prête, il est temps de la tester !

Tester l’API OCR localement

Vous pouvez utiliser le CLI cURL intégré pour envoyer des requêtes à votre API ou passer à un outil de test d’API détaillé tel que Postman. Pour tester l’API, vous devrez télécharger un exemple d’image contenant du texte. Vous pouvez utiliser cette image simple ou cette image griffonnée pour l’instant.

Téléchargez l’une ou l’autre de ces images dans le répertoire du projet et donnez-lui un nom simple, tel que simple-image.png ou scribbled-image.png, en fonction de l’image que vous avez choisie.

Ensuite, ouvrez votre terminal et naviguez jusqu’au répertoire de votre projet. Exécutez la commande suivante pour tester l’API :

curl -X POST -F “[email protected]” localhost:5000/ocr

Cette commande envoie une requête à votre API OCR et renvoie une réponse similaire :

{
  "status": "success",
  "text": "This looks like it was written in a hucrynn"
}

Cela confirme que votre API OCR a été correctement configurée. Vous pouvez également essayer avec l’image simple, et voici à quoi devrait ressembler la réponse :

{
  "status": "success",
  "text": "This looks like it was written with a steady handnn"
}

Cela démontre également la précision du moteur OCR de Tesseract. Vous pouvez maintenant procéder à l’hébergement de votre API OCR sur l’hébergement d’application Kinsta afin qu’elle soit accessible en ligne.

Déployer votre API OCR

Pour déployer votre application sur Kinsta, vous devez d’abord pousser le code de votre projet vers un fournisseur Git(Bitbucket, GitHub ou GitLab).

Avant de pousser votre code, vous devez configurer Tesseract séparément sur votre système hôte afin de pouvoir utiliser le wrapper PyTesseract. Pour pouvoir utiliser le wrapper sur la plateforme d’application Kinsta (ou tout autre environnement, en général), vous devrez également le configurer.

Si vous travaillez avec des instances de calcul distantes (comme AWS EC2), vous pouvez vous connecter en SSH à l’instance de calcul et exécuter la commande appropriée pour installer le paquet sur celle-ci.

Cependant, les plateformes d’application ne vous offrent pas d’accès direct à l’hôte. Vous devrez utiliser une solution telle que Nixpacks, Buildpacks ou Dockerfiles pour configurer les exigences initiales des environnements de votre application (ce qui inclura la configuration du paquet Tesseract localement) et ensuite installer l’application.

Ajoutez un fichier nixpacks.toml dans le répertoire de votre projet avec le contenu suivant :

# nixpacks.toml

providers = ["python"]

[phases.setup]
nixPkgs = ["...", "tesseract"]

[phases.build]
cmds = ["echo building!", "pip install -r requirements.txt", "..."]

[start]
cmd = "gunicorn ocrapi.wsgi"

Cela demandera à la plateforme de construction de

  1. D’utiliser le moteur d’exécution Python pour construire et exécuter votre application
  2. Installer le paquet Tesseract dans le conteneur de votre application.
  3. Démarrer l’application à l’aide de gunicorn.

Exécutez également la commande suivante pour générer un fichier requirements.txt que la plate-forme d’application peut utiliser pour installer les paquets Python requis pendant la construction :

pip3 freeze > requirements.txt

Une fois que votre dépôt Git est prêt, suivez ces étapes pour déployer votre API OCR sur Kinsta :

  1. Connectez-vous ou créez un compte pour afficher votre tableau de bord MyKinsta.
  2. Autorisez Kinsta avec votre fournisseur Git.
  3. Dans la colonne latérale de gauche, cliquez sur Applications, puis sur Ajouter une application.
  4. Sélectionnez le dépôt et la branche à partir desquels vous souhaitez effectuer le déploiement.
  5. Sélectionnez l’un des 37 centres de données disponibles dans la liste des options. Kinsta détecte automatiquement les réglages de construction de vos applications par le biais de votre fichier Nixpack – laissez donc le champ de commande de démarrage vide.
  6. Choisissez les ressources de votre application, telles que la mémoire vive et l’espace disque.
  7. Cliquez sur Créer une application.

Une fois le déploiement terminé, copiez le lien de l’application déployée et exécutez la commande suivante sur votre CLI :

curl -x POST -F “[email protected]” <your-deployed-app-link>/ocr

Vous devriez obtenir la même réponse que celle que vous avez reçue localement :

{"status":"success","text":"This looks like it was written with a steady handnn"}

Vous pouvez également utiliser Postman pour tester l’API.

Essai de l'application dans Postman
Essai de l’application dans Postman

Ceci termine le développement d’une API OCR de base. Vous pouvez accéder au code complet de ce projet sur GitHub.

Résumé

Vous disposez maintenant d’une API OCR auto-hébergée fonctionnelle que vous pouvez personnaliser à votre guise ! Cette API peut extraire du texte à partir d’images, fournissant un outil précieux pour l’extraction de données, la numérisation de documents et d’autres applications.

En continuant à développer et à affiner votre API OCR, envisagez d’explorer des fonctionnalités avancées telles que la prise en charge de plusieurs langues, les techniques de prétraitement des images et l’intégration avec des services de stockage dans le cloud pour le stockage et l’accès aux images.

Quelle est, selon vous, la fonctionnalité indispensable à une API d’OCR auto-hébergée ? Faites-le nous savoir dans les commentaires ci-dessous !

Kumar Harsh

Kumar is a software developer and a technical author based in India. He specializes in JavaScript and DevOps. You can learn more about his work on his website.