[PYTHON] J'ai essayé d'appeler l'API de prédiction du modèle d'apprentissage automatique de WordPress

introduction

L'autre jour, j'ai écrit un article j'ai créé une API qui renvoie la valeur prédite du modèle d'apprentissage automatique avec Docker, mais je peux obtenir la valeur prédite avec l'API. Maintenant que je veux faire une prédiction à partir d'une page Web, je l'ai construite avec Docker. L'image à construire cette fois est celle illustrée ci-dessous.

D7DEB7E3-D41C-4632-9159-1681A1831A28.jpeg

Je souhaite configurer trois conteneurs sur Docker, accéder à WordPress à partir d'un navigateur local et vérifier le résultat de la prédiction avec WordPress.

environnement

L'environnement à utiliser est le suivant.

$sw_vers
ProductName:	Mac OS X
ProductVersion:	10.13.6
BuildVersion:	17G9016

$docker version
Client: Docker Engine - Community
 Version:           19.03.4
 API version:       1.40
(réduction)
Server: Docker Engine - Community
 Engine:
  Version:          19.03.4
  API version:      1.40 (minimum version 1.12)
(réduction)

Construire

Je pense qu'il y a plusieurs étapes, mais cette fois après la construction de WordPress, nous allons construire un conteneur pour la prédiction. Après avoir confirmé la connexion, nous créerons un article WordPress et vérifierons le fonctionnement.

Construire WordPress

Acquisition d'image

Obtient l'image du conteneur utilisée pour prédire les modèles WordPress et d'apprentissage automatique. Reportez-vous à cet article [^ 1] et exécutez les trois commandes suivantes pour obtenir l'image.

$ docker pull mysql:5.7.25
$ docker pull wordpress:4.9.1

Vérifiez les images obtenues avec la commande `` images docker ''.

$docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
mysql               5.7.25              98455b9624a9        7 months ago        372MB
wordpress           4.9.1               28084cde273b        22 months ago       408MB

Démarrage du conteneur

Démarrez les conteneurs WordPress et MySQL. Reportez-vous ici [^ 2] et construisez un réseau avec la commande docker network avant de commencer.

$docker network create test-network

Confirmez que le réseau a été créé avec la commande suivante.

$docker network ls
NETWORK ID          NAME                DRIVER              SCOPE
edbb6037a089        bridge              bridge              local
5f7c06763a14        host                host                local
1b7e419414a4        none                null                local
687f0232408b        test-network        bridge              local

Démarrez le conteneur sur le réseau créé.

$docker run --name mysql --network test-network -e MYSQL_ROOT_PASSWORD=test-pw -d mysql:5.7.25

$docker run --name wordpress --network test-network -e WORDPRESS_DB_PASSWORD=test-pw -v $(pwd)/vol:/mnt -p 8080:80 -d wordpress:4.9.1

Pour WordPress, l'option -v '' monte un répertoire local nommé vol dans / mnt à l'intérieur du conteneur. En effet, le script php à utiliser ultérieurement pour la communication POST avec l'API de prédiction est créé localement et stocké dans le conteneur. Nous avons également défini l'option -p '' pour définir le transfert de port pour transférer le port local 8080 au port 80 dans le conteneur.

Lorsque vous accédez à `` http: // localhost: 8080 '' avec votre navigateur local, l'écran des paramètres WordPress apparaîtra, alors définissez votre langue préférée.

wordpress01.png

Définissez le nom et le mot de passe de l'utilisateur administrateur. Vous devrez également entrer votre adresse e-mail, mais ce n'est pas grave si vous la saisissez correctement.

wordpress02.png

Cliquez sur le bouton "Installer WordPress" et un écran pour l'administrateur apparaîtra.

wordpress03.png

À ce stade, si vous accédez à nouveau à `` http: // localhost: 8080 / '' avec votre navigateur, une page élégante apparaîtra.

wordpress04.png

C'est la fin de la construction de WordPress. La partie qui atteint l'API de prédiction sera définie ultérieurement.

Construction d'un serveur API pour la prédiction

La construction est celle décrite dans J'ai créé une API qui renvoie la valeur prédite du modèle d'apprentissage automatique avec Docker, donc je l'omettrai, mais lors du démarrage du conteneur Assurez-vous de spécifier le réseau créé.

$docker run -it --name test-api --network test-network --rm -p 5000:5000 -v $(pwd)/vol:/home myflask/mlapi:1.0 /bin/bash
root@b9e8ac7cdb71:/# cd home/
root@b9e8ac7cdb71:/home# python3 api.py 
Server is running ...
 * Serving Flask app "api" (lazy loading)
 * Environment: production
   WARNING: This is a development server. Do not use it in a production deployment.
   Use a production WSGI server instead.
 * Debug mode: off
 * Running on http://0.0.0.0:5000/ (Press CTRL+C to quit)
 

Vous avez maintenant configuré un serveur API pour la prédiction.

Frappez l'API de prédiction de WordPress

Confirmation de connexion

Assurez-vous que trois conteneurs Docker sont en cours d'exécution jusqu'à présent.

$docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                    NAMES
b9e8ac7cdb71        myflask/mlapi:1.0   "/bin/bash"              8 seconds ago       Up 6 seconds        0.0.0.0:5000->5000/tcp   test-api
c6b2f713a6a5        wordpress:4.9.1     "docker-entrypoint.s…"   17 minutes ago      Up 17 minutes       0.0.0.0:8080->80/tcp     wordpress
290950f0f643        mysql:5.7.25        "docker-entrypoint.s…"   18 minutes ago      Up 18 minutes       3306/tcp, 33060/tcp      mysql

Une fois à partir du conteneur WordPress, utilisez la commande curl pour vérifier la connexion avec le serveur d'API de prédiction. Entrez dans le conteneur WordPress avec la commande `` docker exec '' et envoyez les données de prédiction avec la commande curl.

$docker exec -i -t c6b2f713a6a5 /bin/bash
root@c6b2f713a6a5:/var/www/html# curl http://test-api:5000/predict -X POST -H 'Content-Type:application/json' -d '{"feature":{"season":[1], "year":[0], "month":[1], "hour":[0], "holiday":[0], "weekday":[6], "workingday":[0], "weather":[1], "temp":[0.24], "feelslike":[0.3], "humidity":[0.8], "windspeed":[0.0]}}'
{"Content-Type":"application/json","prediction":[34.67747315059312],"success":true}

La valeur prévue est 34,67 ..., donc la connexion semble être correcte.

Création de page WordPress

Passons maintenant aux paramètres WordPress. Créez une nouvelle page fixe et remplissez le contenu suivant. De plus, les choix numériques pour chaque élément sont définis sur Texto.

<form action="/ml-submit.php" method="post">
season: <select name="season">
<option value=0>0</option>
<option value=1>1</option>
<option value=2>2</option>
</select>
year: <select name="year">
<option value=0>0</option>
<option value=1>1</option>
<option value=2>2</option>
</select>
month: <select name="month">
<option value=0>0</option>
<option value=1>1</option>
<option value=2>2</option>
</select>
hour: <select name="hour">
<option value=0>0</option>
<option value=1>1</option>
<option value=2>2</option>
</select>
holiday: <select name="holiday">
<option value=0>0</option>
<option value=1>1</option>
<option value=2>2</option>
</select>
weekday: <select name="weekday">
<option value=0>0</option>
<option value=1>1</option>
</select>
workingday: <select name="workingday">
<option value=0>0</option>
<option value=1>1</option>
</select>
weather: <select name="weather">
<option value=0>0</option>
<option value=1>1</option>
<option value=2>2</option>
</select>
temp(0-1): <input type="text" name="temp">
feelslike(0-1): <input type="text" name="feelslike">
humidity(0-1): <input type="text" name="humidity">
windspeed(0-1): <input type="text" name="windspeed">
<input class="submit" type="submit" value="Exécutez php" /></form>

wordpress05.png

Maintenant, lorsque vous cliquez sur Publier, vous pourrez voir la page que vous avez créée.

création de script php

Lorsque vous cliquez sur le bouton "Prédiction" sur la page créée, les données seront envoyées à l'API de prédiction et le résultat de la prédiction sera renvoyé et affiché sur la page. Créez un fichier php localement.

ml-submit.php


<?php

$data = array(
	'feature'=> array(
			  'season'=> array((int)$_POST['season']),
			  'year' => array((int)$_POST['year']),
			  'month' => array((int)$_POST['month']),
			  'hour' => array((int)$_POST['hour']),
			  'holiday' => array((int)$_POST['holiday']),
			  'weekday' => array((int)$_POST['weekday']),
			  'workingday' => array((int)$_POST['workingday']),
			  'weather' => array((int)$_POST['weather']),
			'temp' => array((float)$_POST['temp']),
			'feelslike' => array((float)$_POST['feelslike']),
			'humidity' => array((float)$_POST['humidity']),
			'windspeed' => array((float)$_POST['windspeed'])
	)
);
$data_json = json_encode($data);

$ch = curl_init();
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: application/json'));
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'POST');
curl_setopt($ch, CURLOPT_POSTFIELDS, $data_json);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_URL, 'http://test-api:5000/predict');
curl_setopt($ch, CURLOPT_PORT, 5000);
$result=curl_exec($ch);
$res_json = json_decode($result , true );
echo 'PREDICTION:'.$res_json['prediction'][0];
curl_close($ch);

echo "<br>mise à jour:".date("Y/m/d H:i:s");

?>

Les données saisies sur la page Web sont stockées au format tableau, converties au format json, puis envoyées au serveur API de prédiction. J'essaye d'afficher la valeur prévue de la valeur de retour. Pour créer php, reportez-vous ici [^ 3]. Stockez le fichier créé localement dans le conteneur WordPress. Stockez php dans le répertoire vol.

$ls vol/ml-submit.php 
vol/ml-submit.php

Puisque le répertoire vol est monté sur / mnt sur le conteneur, copiez le fichier dans le répertoire où php est stocké.

root@c6b2f713a6a5:/var/www/html# cp /mnt/ml-submit.php .
root@c6b2f713a6a5:/var/www/html# ls
index.php      readme.html	wp-blog-header.php    wp-config.php  wp-includes	wp-login.php	 wp-signup.php
license.txt    wp-activate.php	wp-comments-post.php  wp-content     wp-links-opml.php	wp-mail.php	 wp-trackback.php
ml-submit.php  wp-admin		wp-config-sample.php  wp-cron.php    wp-load.php	wp-settings.php  xmlrpc.php

La construction est terminée jusqu'à présent.

Contrôle de fonctionnement

Maintenant, saisissons la valeur appropriée sur la page créée par WordPress et appuyez sur le bouton "Prédire".

wordpress07.png

Lorsque vous appuyez sur le bouton "Prédire", la valeur prédite s'affiche. Yay.

wordpress08.png

Les valeurs prédites, etc. sont affichées sur une page vierge et cela semble mauvais, mais j'ai pu accéder à l'API de prédiction sur la page Web et l'afficher.

à la fin

J'ai pu prédire le modèle d'apprentissage automatique sur une page Web créée à l'aide de WordPress sur Docker. Il y a encore des domaines dans lesquels je n'ai pas suffisamment étudié, et cela semble mauvais, mais c'est un sujet pour l'avenir. À l'avenir, j'aimerais l'exécuter sur un cloud tel qu'AWS.

Recommended Posts

J'ai essayé d'appeler l'API de prédiction du modèle d'apprentissage automatique de WordPress
[Apprentissage automatique] J'ai essayé de résumer la théorie d'Adaboost
J'ai créé une API avec Docker qui renvoie la valeur prédite du modèle d'apprentissage automatique
J'ai essayé de visualiser le modèle avec la bibliothèque d'apprentissage automatique low-code "PyCaret"
Déterminez l'authenticité des articles publiés par machine learning (API Google Prediction).
J'ai essayé d'organiser les index d'évaluation utilisés en machine learning (modèle de régression)
J'ai essayé de prédire la présence ou l'absence de neige par apprentissage automatique.
J'ai essayé d'implémenter diverses méthodes d'apprentissage automatique (modèle de prédiction) en utilisant scicit-learn
J'ai essayé d'utiliser l'API de Sakenowa Data Project
J'ai essayé de compresser l'image en utilisant l'apprentissage automatique
[CodeIQ] J'ai écrit la distribution de probabilité des dés (du cours de mathématiques CodeIQ pour l'apprentissage automatique [Distribution de probabilités])
J'ai essayé "Lobe" qui peut facilement entraîner le modèle d'apprentissage automatique publié par Microsoft.
Essayez d'évaluer les performances du modèle d'apprentissage automatique / de régression
J'ai essayé de refactoriser le modèle CNN de TensorFlow en utilisant TF-Slim
Essayez d'évaluer les performances du modèle d'apprentissage automatique / de classification
[Python] J'ai essayé de collecter des données en utilisant l'API de wikipedia
J'ai essayé d'obtenir diverses informations de l'API codeforces
J'ai essayé le roman Naro API 2
J'ai essayé l'apprentissage automatique avec liblinear
J'ai essayé de comparer la précision des modèles d'apprentissage automatique en utilisant kaggle comme thème.
Application correspondante, j'ai essayé de prendre des statistiques de personnes fortes et j'ai essayé de créer un modèle d'apprentissage automatique
Un exemple de mécanisme qui renvoie une prédiction par HTTP à partir du résultat de l'apprentissage automatique
J'ai essayé de vérifier la classification yin et yang des membres hololive par apprentissage automatique
J'ai essayé l'API du roman Naruro
J'ai considéré la méthode d'apprentissage automatique et son langage d'implémentation à partir des informations de balise de Qiita
J'ai essayé d'utiliser l'API checkio
Évaluer la précision du modèle d'apprentissage par test croisé de scikit learn
J'ai essayé de créer Othello AI avec tensorflow sans comprendre la théorie de l'apprentissage automatique ~ Introduction ~
[API Qiita] [Statistiques • Apprentissage automatique] J'ai essayé de résumer et d'analyser les articles publiés jusqu'à présent.
J'ai essayé de créer Othello AI avec tensorflow sans comprendre la théorie de l'apprentissage automatique ~ Implémentation ~
J'ai essayé le serveur asynchrone de Django 3.0
Notes d'apprentissage depuis le début de Python 1
J'ai essayé d'utiliser l'API UnityCloudBuild de Python
J'ai essayé de toucher l'API COTOHA
Notes d'apprentissage depuis le début de Python 2
J'ai essayé d'utiliser l'API BigQuery Storage
API REST du modèle réalisé avec Python avec Watson Machine Learning (édition CP4D)
J'ai essayé d'obtenir le code d'authentification de l'API Qiita avec Python.
J'ai essayé d'obtenir les informations sur le film de l'API TMDb avec Python
J'ai essayé l'histoire courante de l'utilisation du Deep Learning pour prédire la moyenne Nikkei
J'ai essayé de prédire le comportement du nouveau virus corona avec le modèle SEIR.
J'ai essayé l'histoire courante de prédire la moyenne Nikkei à l'aide du Deep Learning (backtest)
J'ai essayé de créer Othello AI avec tensorflow sans comprendre la théorie de l'apprentissage automatique ~ Battle Edition ~
J'ai essayé la fonction de tableau croisé dynamique des pandas
J'ai essayé l'analyse par grappes de la carte météo
J'ai essayé d'utiliser l'API Google Cloud Vision
J'ai essayé de corriger la forme trapézoïdale de l'image
Un débutant en apprentissage automatique a essayé de créer un modèle de prédiction de courses de chevaux avec python
Vue d'ensemble des techniques d'apprentissage automatique apprises grâce à scikit-learn
À propos du contenu de développement de l'apprentissage automatique (exemple)
J'ai essayé de prédire l'évolution de la quantité de neige pendant 2 ans par apprentissage automatique
J'ai essayé de traiter et de transformer l'image et d'élargir les données pour l'apprentissage automatique
Mise en place d'un modèle de prédiction des taux de change (taux dollar-yen) par machine learning
J'ai essayé de comprendre attentivement la fonction d'apprentissage dans le réseau de neurones sans utiliser la bibliothèque d'apprentissage automatique (première moitié)
J'ai essayé d'utiliser le filtre d'image d'OpenCV
J'ai essayé de créer un modèle avec l'exemple d'Amazon SageMaker Autopilot
J'ai essayé de vectoriser les paroles de Hinatazaka 46!