Une fois un tel service mis en place, il est de l'ordre de l'intérêt général de le mettre à disposition de tous.
Nous allons donc devoir coder une api minimaliste pour pouvoir rendre ce service accessible via le web.
C'est ce que nous allons nous atteler dans cette partie. Et pour ce faire et rester dans le Python nous allons utiliser le microframework flask.
Initialisation du projet
Organisation des fichiers
J'ai pour ma part choisi de développer mon micro serveur dans le même projet que celui de l'étape précedente, mais on peut choisir de mettre la racine où l'on souhaite.
Pour cette partie nous auront besoin que d'une arborescence très limitée. En effet nous aurons juste besoin d'un fichier .py qui décrit le fonctionnement du serveur et d'un dossiertemplates
qui contiendra le template de notre page d'accueil.
On penchera donc pour la structure suivante :/ server.py templates/ index.html
Installation de Flask
Flask s'installe très facilement avec pip :pip install flask
On aura aussi besoin du package flask-uploads tout à l'heure pour gérer les uploads d'images, donc il peut être pertinent de l'installer maintenant :pip install Flask-Uploads
Développement d'un serveur basique
Nous allons commencer par un serveur très minimaliste que nous complèterons ensuite. Pour cela nous aurons seulement besoin de créer un fichier index.html et un fichier server.py.
index.html
Nous aurons seulement besoin sur notre page web d'un formulaire pour pourvoir téléverser des images vers notre serveur. Un fichier html de ce type nous convient donc amplement :
<html>
<head>
<title>Détection visage</title>
</head>
<body>
Veuillez soumettre une image à la détection :
<form method=POST enctype=multipart/form-data action="">
<input type=file name=photo>
<input type="submit">
</form>
</body>
</html>
On remarquera que nous avons laissé le champ action vide car nous n'avons pas encore créé la route pour l'upload d'images
server.py
Pour l'instant nous avons seulement besoin d'une route qui permette de renvoyer notre page html à une requête GET sur notre url.
Rien de plus simple :
from flask import Flask, render_template
app = Flask(__name__)
@app.route('/')
def index():
return render_template('index.html')
if __name__ == '__main__':
app.run()
Notre serveur est prêt !
Pour le lancer :
export FLASK_APP=server.py
flask run
On retrouve notre page web sur localhost:5000
.
C'est très bien, mais il nous manque encore la fonctionnalité principale, à savoir renvoyer les résultats de notre run.py de l'étape précédente à notre utilisateur.
Ajout de la route d'upload pour la détection
Nous allons commencer par ajouter la route dans server.py. Les requêtes que nous attendrons seront des requêtes POST sur la route /upload.
@app.route('/upload', methods=['POST'])
def upload():
Pour gérer la récupération des images nous allons utiliser le package flask_upload. Nous allons donc créer un nouveau UploadSet et le configurer de manière à définir le dossier où seront téléversées les images envoyées par les utilisateurs.
photos = UploadSet('photos', IMAGES)
app.config['UPLOADED_PHOTOS_DEST'] = 'static/img'
configure_uploads(app, photos)
Une fois ceci fait nous pouvons facilement enregistrer les images envoyées grâce à la méthode save de notre UploadSet :
if 'photo' in request.files:
filename = photos.save(request.files['photo'])
Nous utiliserons le package subprocess pour exécuter la commande de l'étape 1 et il ne nous reste qu'à rajouter notre route comme action dans notre template html et le tour est joué !
/!\ Il faut penser à ajouter le dossier parent de notre package "detect_visage" au path python pour que subprocess sache où le chercher.
Pour lancer le serveur :
export PYTHONPATH=$PYTHONPATH:<path_vers_parent_detect_visage>"
export FLASK_APP=server.py
flask run
Code complet : https://github.com/ddonatien/detect_visage/releases/tag/v1
Congratulations @defy! You received a personal award!
You can view your badges on your Steem Board and compare to others on the Steem Ranking
Vote for @Steemitboard as a witness to get one more award and increased upvotes!
Downvoting a post can decrease pending rewards and make it less visible. Common reasons:
Submit