Cet article fait suite à l’article qui expliquant comment utiliser la librairie Python deskew pour redresser des images qui ne sont malheureusement pas droite. Je ne vais donc pas expliquer comment utiliser cette librarie mais plutôt vous montrer comment l’utiliser dans un automate Blue Prism afin d’automatiser ce type de tâche.
Pour ce faire nous allons :
- Créer un Web service (REST) qui expose la fonction de redressement d’image.
- Déclarer dans Blue Prism ce nouveau service
- Créer un objet (VBO) Blue Prism qui encapsulera cette fonction
Ces étapes réalisées, il sera très simple de créer autant de Processus Blue Prism que vous le voulez afin de pouvoir redresser des images.
Index
Création du Web Service
Avec Python et Flask nous allons créer en quelques lignes de code un web service REST qui expose une méthode deskew. Voici le code Python qui effectue le redressement:
import numpy as np from skimage import io from skimage.transform import rotate from skimage.color import rgb2gray from deskew import determine_skew import jsonpickle import cv2 from flask import Flask, request, Response app = Flask(__name__) # deskew image def deskew_image(image): trace("Deskew Image") #image = io.imread(_img) grayscale = rgb2gray(image) angle = determine_skew(grayscale) rotated = rotate(image, angle, resize=True) * 255 return rotated.astype(np.uint8) # Check @app.route('/check', methods=['GET']) def check(): output = {} output['status'] = "Service running" response_pickled = jsonpickle.encode(output) return Response(response=response_pickled, status=200, mimetype="application/json") @app.route('/deskew', methods=['POST']) def deskew(): output = {} # Get destination filename targetfile = request.args.get("targetfile") # Get binary file, convert string of image data to uint8 and decode image data = request.data nparr = np.frombuffer(data, np.uint8) image = cv2.imdecode(nparr, cv2.IMREAD_COLOR) image_out = deskew_image(image) cv2.imwrite(targetfile, image_out) output['status'] = "Saved" # Prepare response, encode JSON to return response_pickled = jsonpickle.encode(output) return Response(response=response_pickled, status=200, mimetype="application/json") if __name__ == '__main__': app.run(debug=True, host='127.0.0.1', port=8090)
Sauvegardez ce code dans un fichier xxx.py et lancer le en ligne de commande via :
$ python xxx.py
Normalement vous devriez avoir un résultat de ce type:

Celà signifie que le Web service est à l’écoute. Si ce n’est pas le cas c’est qu’il vous manque certainement des librairies Python. Reparcourez les articles mentionnés plus haut afin de vérifier qu’ils ont tous été importés avec pip ou conda.
Vous remarquerez que ce web service possède deux méthodes :
- /check qui permettra à l’Objet (VBO) Blue Prism de vérifier que le Web Service est bien à l’acoute et si ce n’est pas le cas de le lancer.
- /deskew qui permet de faire le redressement de l’image. Le code de ce service est à peu près celui décrit dans l’article sur le redressement d’image.
Déclaration du service dans Blue Prism
La déclaration ou le référencement de web service dans Blue Prism est extrêmement simple et se fait de manière totalement graphique. Pour cela ouvrez le client Blue Prism et allez dans System, puis cliquez sur Web API Services :
Ajoutez un service en cliquant sur le lien à droite : « Add Service ». Maintenant vous devez configurer les informations et interfaces de votre service avec l’assistant. Précisez tout d’abord le nom et l’URL du service (Cf. Flask ci dessus) :
Référencement de l’action /check
Ensuite, sélectionnez les actions (ou méthodes) et ajoutez la première qui permet de vérifier que le service est lancé (check) :
Ajoutez le nom de l’action et activez là (enabled) :
Cette action n’a pas de parametre. Cliquez sur Request pour préciser comment appeler cette méthode et entrez /check dans le champ « URL Path ».
Cliquez ensuite sur la réponse (response) du service pour préciser les éléments renvoyés par cette action. Remplissez comme suit :
Référencement de l’action /deskew
Maintenant nous allons référencer de la même manière l’action de redressement. Le principe est le même à ceci pret que ce service demande en entrée un fichier (binaire) et un paramètre (le nom du fichier dans lequel sera placé l’image redressée).
Créons tout d’abor une nouvelle action : deskew.
Dans la section Parametre nous allons préciser un seul parametre « targetfile » (le fichier binaire n’est pas considéré comme un parametre car il est envoyé via la méthode HTTP POST).
Dans la partie Request nous devons préciser plusieurs choses :
- La méthode HTTP : ici obligatoirement POST
- Comment le parametre est utilisé dans la requete http (sa syntaxe) : /deskew?targetfile=[targetfile]
- Préciser que le corps (body) du message contient un fichier unique (single file)
Il ne reste plus qu’à préciser les éléments renvoyés par le service :
Voilà c’est pas plus compliqué que ça, il reste maintenant à créer un objet qui utilisera ce service.
Création de l’Objet Blue Prism
Pour cela créez un Objet dans Blue Prism (ici je le nomme pyImageUtils :
Une fois créé, ajoutez simplement une action. Je l’appelerai ici deskew. Cette action Blue Prism a pour données en entrée :
- Le fichier au format binaire à redresser (Variable Image)
- Le nom du fichier qui contiendra l’image redressée.
Ce sont exactement les mêmes points d’entrées que le Web Service plus haut. En sortie nous renverrons un simple message précisant si tout s’est bien passé ou pas.
Voici à quoi ressemble l’action dans Blue Prism:
On retrouve dans la partie haute le début de l’action avec les deux paramètres (image et fichier de destination). Ensuite après avoir démarré le service (via la ligne de commande ci-dessus), on demande l’exécution de la méthode deskew du web service. Celà est fait via une simple configuration de l’action « deskew » ci-dessus :
Voilà le service est maintenant opérationnel et maintenu par un Objet réutilisable Blue Prism.
Essayons le !
En mode debug avec Blue Prism celà ne va prendre que quelques secondes. Pour faire l’essai tout d’abord on doit préciser les parametres d’entrée du service :
- Double Cliquez sur le « Data Item » Image et sélectionnez une image. Je vais prendre celle ci-dessous:
- Préciser ensuite un nom de fichier : par exemple C:\BP Assets\services\imageutils\test2.jpg
Lancez le processus.
Regardez le fichier de résultat …
Voilà vos Robots ou processus Blue Prism bénéficient maintenant d’une nouvelle compétence qui leur permet de redresser des images.
Vous pouvez télécharger tous les composants nécéssaires à cette compétence sur Github.
One Reply to “Automatiser le redressement d'image avec Blue Prism et Python”