[PYTHON] Créez une API REST à l'aide du modèle appris dans Lobe et TensorFlow Serving.

Dans l'article ci-dessous, j'ai expliqué comment apprendre avec Lobe et comment exporter le modèle appris et l'utiliser à partir de Python.

J'ai essayé "Lobe", qui facilite la formation des modèles d'apprentissage automatique publiés par Microsoft. Comment utiliser le modèle appris dans Lobe en Python

Cette fois, je souhaite créer une API REST en combinaison avec le service TensorFlow.

Préparation à l'utilisation de TensorFlow Serving

Voir l'article mentionné ci-dessus pour apprendre avec Lobe et exporter des modèles.

Après avoir essayé diverses choses, il semble que le nom du répertoire contenant le modèle doit être un nombre pour que TensorFlow Serving fonctionne. (Je n'ai pas encore saisi ce domaine, alors j'apprécierais que quelqu'un le sache.)

Par conséquent, créez un répertoire nommé avec un numéro dans le répertoire du modèle exporté depuis Lobe et copiez ou déplacez les fichiers nécessaires.

Lancer le service Tensor Flow avec Docker

Le moyen le plus simple d'utiliser le service TensorFlow est d'utiliser Docker. L'image officielle est téléchargée sur le hub docker, alors utilisez-la. tensorflow/serving

Le répertoire de modèle utilisé cette fois est le suivant. TensorFlow Serving utilise le modèle dans le répertoire 1.

── sample_model
    ├── 1 #Créer un nouvel échantillon_Copiez ou déplacez les fichiers nécessaires sous le modèle
    │   ├── saved_model.pb
    │   └── variables
    │       ├── variables.data-00000-of-00001
    │       └── variables.index
    ├── example
    │   ├── README.md
    │   ├── requirements.txt
    │   └── tf_example.py
    ├── saved_model.pb
    ├── signature.json
    └── variables
        ├── variables.data-00000-of-00001
        └── variables.index

Démarrez le docker comme suit.

# docker run -t --rm -p 8501:8501 -v "`pwd`/sample_model:/models/sample_model" -e MODEL_NAME=sample_model tensorflow/serving

Lorsque le modèle est chargé et que l'opération démarre normalement, le message suivant s'affiche.

2020-11-03 01:04:51.142942: I tensorflow_serving/model_servers/server.cc:387] Exporting HTTP/REST API at:localhost:8501 ...
[evhttp_server.cc : 238] NET_LOG: Entering the event loop ...

Si ce message s'affiche, le traitement TensorFlow a démarré.

Essayez la classification d'images avec REST

Avec les étapes jusqu'à ce point, vous êtes prêt à essayer la classification d'images avec REST. Envoyons une requête GET pour vérifier le fonctionnement de TensorFlow Serving.

import requests
import json

url = 'http://localhost:8501/v1/models/sample_model'
res = requests.get(url)
print(json.loads(res.text))

Si la réponse suivante est renvoyée, cela fonctionne sans aucun problème.

{'model_version_status': [{'version': '1', 'state': 'AVAILABLE', 'status': {'error_code': 'OK', 'error_message': ''}}]}

Les demandes de prédiction sont effectuées par POST.

import json

import cv2
import numpy as np
import requests

#URL de la demande de prédiction
url = 'http://localhost:8501/v1/models/sample_model:predict'

def predict(image_path):
    image = cv2.imread(image_path, cv2.IMREAD_COLOR)
    image = image.astype(np.float32) / 255
    image = image.tolist()

    headers = {"content-type": "application/json"}
    body = {"inputs": [image]}
    r = requests.post(url, data=json.dumps(body), headers=headers)
    r_json = json.loads(r.text)
    return r_json['outputs']['Prediction'][0]

Vous pouvez obtenir le résultat de la prédiction en donnant le fichier image comme argument à prédire.

predict_label = predict('Fichier d'image')
print(predict_label)

Jusqu'à ce point, vous pouvez créer un environnement qui fonctionne au minimum.

Recommended Posts

Créez une API REST à l'aide du modèle appris dans Lobe et TensorFlow Serving.
Créons une API REST en utilisant SpringBoot + MongoDB
Comment créer une API Rest dans Django
Créer un pseudo serveur d'API REST à l'aide de pages GitHub
Comment utiliser le modèle appris dans Lobe en Python
Enregistrez le modèle pystan et les résultats dans un fichier pickle
Créez un robot de réponse automatique en temps réel à l'aide de l'API Twitter Streaming
J'ai essayé d'héberger un modèle d'apprentissage en profondeur de TensorFlow à l'aide de TensorFlow Serving
J'ai fait un modèle VGG16 en utilisant TensorFlow (en chemin)
Analysez l'API Researchmap avec Python et créez automatiquement un fichier Word pour la liste des succès
Créer une API CRUD à l'aide de l'API rapide
Créer une API qui renvoie les données d'un modèle à l'aide de turicreate
Créez facilement un TalkBot en utilisant Discord.py et l'API Talk d'A3RT (pya3rt).
[Python] J'ai écrit une API REST en utilisant AWS API Gateway et Lambda.
Créer une API REST pour faire fonctionner dynamodb avec le Framework Django REST
Créez un modèle pour stocker les informations de l'API Google Livres pour une manipulation et des tests intuitifs
Essayez d'utiliser l'API Wunderlist en Python
Essayez d'utiliser l'API Kraken avec Python
Tweet à l'aide de l'API Twitter en Python
Créer un graphique à l'aide du module Sympy
Développement et déploiement de l'API REST en Python à l'aide de Falcon Web Framework
Créer une application à l'aide de l'API Spotify
Créer un enregistrement avec des pièces jointes dans KINTONE à l'aide du module de requêtes Python
Créez une application simple qui intègre l'API Fetch pour les requêtes Ajax dans Flask et expliquez-la rapidement.
Créer en Python sans fichier image factice dans Django et tester le téléchargement de l'image
Créez un pdf facile à lire des lois et ordonnances gouvernementales à l'aide de l'API Law
Créer un projet et une application Django dans un environnement virtuel Python et démarrer le serveur
Visualisation de l'état de tir de la couche cachée du modèle appris dans le tutoriel TensorFlow MNIST
Créez un filtre pour obtenir un jeton d'accès avec l'API Graph (Flask)
Créez une base de données propre pour les tests avec FastAPI et effectuez le test Unittest de l'API avec pytest
Essayez d'utiliser l'API BitFlyer Ligntning en Python
Créer une carte Web en utilisant Python et GDAL
Créer un modèle d'investissement dynamique simple en Python
Créez un fichier MIDI en Python en utilisant pretty_midi
Essayez d'utiliser l'API ChatWork et l'API Qiita en Python
Essayez d'utiliser l'API DropBox Core avec Python
Créez une interface graphique sur le terminal à l'aide de curses
J'ai fait une démo qui permet au modèle formé dans le didacticiel mnist de Tensorflow de distinguer les nombres manuscrits écrits sur la toile.
Automatisez la suppression de l'arrière-plan pour les derniers portraits dans un répertoire avec Python et API
J'ai essayé de notifier la mise à jour de "Devenir romancier" en utilisant "IFTTT" et "Devenir un romancier API"
Créer un bot de collecte de données en Python à l'aide de Selenium
Examiner la relation entre TensorFlow et Keras pendant la période de transition
Créez un capteur de couleur à l'aide d'une tarte à la râpe et d'une caméra
[CRUD] [Django] Créer un site CRUD en utilisant le framework Python Django ~ 1 ~
[API LINE Messaging] Créez un menu riche avec Python
Construire un modèle seq2seq en utilisant la vue d'ensemble de l'API fonctionnelle de Keras
Essayez de créer une application Todo avec le framework Django REST
Créez un graphique à l'aide du bouton et du curseur de l'intrigue
Obtenez des données LEAD à l'aide de l'API REST de Marketo en Python
Envoyez et recevez Gmail via l'API Gmail en utilisant Python
Sélectionnez les variables requises dans TensorFlow et enregistrez / restaurez
Créez une carte thermique de tweet avec l'API Google Maps
[CRUD] [Django] Créer un site CRUD en utilisant le framework Python Django ~ 2 ~
Créer une visionneuse de modèle 3D avec PyQt5 et PyQtGraph
Construire un modèle seq2seq à l'aide de l'inférence API fonctionnelle de Keras
Utiliser l'API de recherche de la Bibliothèque du Parlement national en Python
Créer un discriminateur Sato Yohei en utilisant OpenCV et TensorFlow
[CRUD] [Django] Créer un site CRUD en utilisant le framework Python Django ~ 3 ~
[CRUD] [Django] Créer un site CRUD en utilisant le framework Python Django ~ 4 ~