[PYTHON] Peut être fait en 5 minutes!? Créez une API de détection de visage avec Fast API et OpenCV et publiez-la sur Heroku

introduction

Bonjour. Cet article est une copie de celui de mon site (https://flat-kids.net/), mais je pensais qu'il serait largement utilisé, j'ai donc osé le poster sur Qiita. J'ai fait.

Maintenant, j'étudie la vision par ordinateur et j'explore comment utiliser cette technologie concrètement. Je pense que la méthode de création d'une API est l'une des bonnes idées qui peut être utilisée comme module commun dans divers environnements et langages. Bien sûr, il y a quelques inconvénients. Quand je cherchais un framework Python qui pourrait facilement créer une API, j'ai trouvé quelque chose appelé FastAPI, donc j'ai créé une API de détection de visage en utilisant FastAPI, et comme c'est un gros problème, j'aimerais sortir immédiatement sur Heroku.

Au fait, peut-on le faire en 5 minutes (rires) Timer start!

Qu'est-ce que FastAPI

FastAPI est un framework Web moderne et rapide (hautes performances) pour la création d'API en Python 3.6+ basées sur des indices de type Python standard. C'est un framework très facile à utiliser, donc j'espère que beaucoup de gens l'utiliseront. Le site web officiel est https://fastapi.tiangolo.com/.

Qu'est-ce que l'API de détection de visage?

Après avoir téléchargé l'image dont vous souhaitez détecter le visage, créez une API qui renvoie le nombre détecté par JSON et les coordonnées rectangulaires. En utilisant le résultat, si vous essayez d'ajouter un cadre de manière courante, il ressemblera à ceci. screenshot.181.png

Image: http://gahag.net/

supposition

Veuillez faire ce qui suit à l'avance.

Je pense que vous devriez faire ce qui suit, mais cette fois ce n'est pas obligatoire.

procédure

  1. Créez un référentiel distant GitHub
  2. Déployer sur Heroku
  3. API terminée!?

① Créer un référentiel distant GitHub

Je souhaiterais écrire les détails du code source sur mon site plus tard. Le code source utilisé cette fois-ci se trouve sur Github. Créez votre propre référentiel distant Github et mettez-y la source.

La configuration est la suivante.

.
├── cascades
│   └── haarcascade_frontalface_default.xml
├── detect
│   └── detect_face.py
├── .gitignore
├── Aptfile
├── Procfile
├── const.py
├── main.py
├── requirements.txt
└── women.jpg

"Cascades / haarcascade_frontalface_default.xml" est un fichier entraîné du classificateur en cascade capable de détecter les visages. La logique de détection de visage est écrite dans "detect / detect_face.py". ".Gitignore" est ce que vous ne voulez pas gérer avec git. "Aptfile" est un fichier requis pour utiliser OpenCV avec Heroku. Les détails seront décrits plus tard. «Procfile» est un fichier requis pour exécuter FastAPI sur Heroku. "Const.py" est utilisé car il est facile d'utiliser CONST. "Main.py" est le fichier exécuté par uvicorn. "Requirements.txt" est un fichier qui gère les bibliothèques dépendantes. Requis pour se déployer avec Heruku. "Women.jpg " est un exemple d'image.

② Déployer sur Heroku

Maintenant que la source est prête, nous sommes prêts à publier l'API sur Heroku. Tout d'abord, créez une nouvelle application. screenshot.173.png

Donnez-lui un nom d'application. screenshot.174_.png

Sélectionnez l'onglet Déployer, connectez-vous avec votre compte Github, puis sélectionnez le référentiel que vous souhaitez déployer. screenshot.182_.png

OpenCV a le package "opencv-contrib-python" installé, mais avec cela seul, j'obtiens une erreur d'importation. "ImportError: libSM.so.6: impossible d'ouvrir le fichier objet partagé: aucun fichier ou répertoire de ce type" Par conséquent, "Ajouter des buildpacks" et "Créer un fichier Aptfile" sont requis. Puisque l'Aptfile est préparé dans l'ensemble des sources, ajoutez uniquement des buildpacks avec Heroku. Ajoutez «https://github.com/heroku/heroku-buildpack-apt» dans Buildpacks sur l'onglet Paramètres.

screenshot.179.png

Revenez à l'onglet Déployer et Déployer. Cette fois, sélectionnez Déploiement manuel. screenshot.177.png

③ API terminée!?

Si le déploiement est chanceux et réussi, appuyez sur "Ouvrir l'application" en haut à droite de l'écran Heroku. {“detail”:”Not Found”} Avez-vous eu un affichage comme celui-ci? C'est une erreur! !! Je suis désolé pour ceux qui disent.

Pour appeler l'API que vous avez créée, il est facile d'ajouter / docs après l'URL. screenshot.182.png

Vous pouvez réellement l'essayer en appuyant sur "Try it Out". screenshot.183.png

Sélectionnez l'image dont vous souhaitez détecter le visage et exécutez. Le résultat est-il revenu comme ça? screenshot.184.png

** (Remarque) À propos de la taille de l'image ** La taille de l'image est de 0,2 Mo ou moins. Il ne peut pas être détecté correctement lorsque la taille est grande. Il semble que divers ajustements soient nécessaires.

en conclusion

C'est tout. Arrêt de la minuterie! Était-ce dans les 5 minutes? (Lol) Si cela n'a pas fonctionné, je suis vraiment désolé: sweat_smile: Je suis désolé, je viens de m'excuser et je ne l'ai pas résolu: sweat_smile :: sweat_smile: Je ne savais pas comment déployer FastAPI avec Heroku, j'ai donc créé un article. J'espère que cela aide quelqu'un: rougissez:

Recommended Posts

Peut être fait en 5 minutes!? Créez une API de détection de visage avec Fast API et OpenCV et publiez-la sur Heroku
Si vous les gars dans la cuisine de portée pouvez le faire avec une marge ~ ♪
Prise en compte du moment où vous pouvez faire du bon travail en 10 ans avec Python3 et Scala3.
Vous pouvez le faire en 3 minutes! Comment créer un code QR (GIF) fonctionnel!
Jusqu'à ce que vous créiez un environnement d'apprentissage automatique avec Python sur Windows 7 et que vous l'exécutiez
Dessinez une illusion d'aquarelle avec détection des contours en Python3 et openCV3
Ce que vous pouvez faire avec l'API vol.1
[Peut être fait en 10 minutes] Créez rapidement un site Web local avec Django
Jusqu'à ce que l'application Web créée avec Bottle soit publiée (déployée) sur Heroku
Créez une base de données propre pour les tests avec FastAPI et effectuez le test Unittest de l'API avec pytest
Hello World et détection de visage avec OpenCV 4.3 + Python
Vous pouvez facilement créer une interface graphique même avec Python
[Pour les débutants] Vous pouvez le faire à partir de zéro! Création d'API avec AWS SAM et sortie de documents Open API en Python
Étapes pour créer rapidement un environnement d'apprentissage en profondeur sur Mac avec TensorFlow et OpenCV
Ce que vous pouvez et ne pouvez pas faire avec Tensorflow 2.x
Créez une caméra de surveillance WEB avec Raspberry Pi et OpenCV
Si vous écrivez TinderBot en Python, elle peut le faire
Une note quand j'ai touché l'API de reconnaissance faciale de Microsoft avec Python
Créer un graphique SVG avec matplotlib avec heroku (affiché en japonais)
Créez un script de déploiement avec fabric et cuisine et réutilisez-le
Créez une API Web capable de fournir des images avec Django
Détection de visage avec Python + OpenCV
Détection de visage d'anime avec OpenCV
Comment installer OpenCV sur Cloud9 et l'exécuter en Python
Créez un fichier temporaire avec django sous forme de zip et renvoyez-le
Créez une illusion rayée avec correction gamma pour Python3 et openCV3
Je veux créer un fichier pip et le refléter dans le menu fixe
Comment déployer une application Django sur heroku en seulement 5 minutes
ZOOM en remplaçant votre visage par une icône Twitter avec la reconnaissance faciale openCV
J'ai créé un script POST pour créer un problème sur Github et l'enregistrer dans le projet
Comment mettre OpenCV dans Raspberry Pi et collecter facilement des images des résultats de détection de visage avec Python
Étapes pour créer un utilisateur général dans CentOs et pouvoir exécuter la commande sudo (Remarque)