Installer DeepDetect (cpu version), par exemple sur une machine virtuelle avec Docker (l'OS qui sert de référence ici est Ubuntu Server 16.04LTS) :
apt-get install ssh docker docker.io
docker pull beniz/deepdetect_cpu
docker run -d -h 10.1.1.230 -p 8080:8080 beniz/deepdetect_cpu
Remplacer 10.1.1.230 par l'adresse à laquelle on veut rendre disponible le service DeepDetect sur le réseau.
Note : les images sont disponibles sur https://hub.docker.com/r/beniz/deepdetect_cpu/
Vérifier que le serveur dede fonctionne correctement :
curl http://10.1.1.230:8080/info
Si nécessaire, installer Elasticsearch sur la même machine :
docker pull docker.elastic.co/elasticsearch/elasticsearch:6.6.1
docker run -h 10.1.1.230 -p 9200:9200 -p 9300:9300
-e "discovery.type=single-node"
docker.elastic.co/elasticsearch/elasticsearch:6.6.1
Une fois les services elasticsearch et dede lancés,
—créer le service de classification d'images et de prédiction avec :
curl -X PUT "http://10.1.1.230:8080/services/imageserv" -d "{"mllib":"caffe","description":"image classification service","type":"supervised","parameters":{"input":{"connector":"image"},"mllib":{"nclasses":1000}},
"model":{"repository":"/opt/models/ggnet/"}}"
Attention ! Le JSON doit être correctement échappé (ajouter un antislash devant tous les guillemets de l'exemple founi sauf les trois premiers et le dernier)
Tester le service avec :
curl -X POST "http://localhost:8080/predict" -d "{"service":"imageserv","parameters":{"input":{"width":224,"height":224},"output":{"best":3},"mllib":{"gpu":false}},"data":["http://i.ytimg.com/vi/0vxOhd4qlnA/maxresdefault.jpg"]}"
Attention ! Le JSON doit être correctement échappé (ajouter un antislash devant tous les guillemets de l'exemple founi sauf les trois premiers et le dernier)
La réponse doit être similaire à :
{"status":{"code":200,"msg":"OK"},"head":{"method":"/predict","time":852.0,"service":"imageserv"},"body":{"predictions":{"uri":"http://i.ytimg.com/vi/0vxOhd4qlnA/maxresdefault.jpg","classes":[{"prob":0.2255125343799591,
"cat":"n03868863 oxygen mask"},{"prob":0.20917612314224244,"cat":"n03127747 crash helmet"},
{"last":true,"prob":0.07399296760559082,"cat":"n03379051 football helmet"}]}}}
Ici, on constate que l'image fournie (un astronaute) a été reconnue avec une probabilité de 0,225... comme montrant un masque à oxygène.
Pour classer et indexer on utilisera :
curl
-XPOST "http://10.1.1.230:8080/predict" -d '{"service":"imageserv","parameters":{"mllib":{"gpu":true},
"input":{"width":224,"height":224}, "output":{"best":3,"template":"{ {{#body}}{{#predictions}} "uri":"{{uri}}",
"categories": [ {{#classes}} { "category":"{{cat}}","score":{{prob}} } {{^last}},{{/last}}{{/classes}} ] {{/predictions}}
{{/body}} }","network":{"url":"http://localhost:9200/images/img","http_method":"POST"}}},"data":["http://i.ytimg.com
/vi/0vxOhd4qlnA/maxresdefault.jpg"]}'
Attention ! Le JSON doit être correctement échappé (ajouter un antislash devant tous les guillemets de l'exemple founi sauf les trois premiers et le dernier)
Dans tous ces exemples :
http://i.ytimg.com/vi/0vxOhd4qlnA/maxresdefault.jpg :
URL de l'image à catégoriser
http://10.1.1.230:9200/images/img
: adresse de l'index Elasticsearch à mettre à jour.
root@leng:~# docker ps
CONTAINER ID IMAGE COMMAND CREATED
STATUS PORTS NAMES
d3a5a474fefa docker.elastic.co/elasticsearch/elasticsearch:6.6.1 "/usr/local/bin/dock…" 4 minutes ago
Up 4 minutes 0.0.0.0:9200->9200/tcp, 0.0.0.0:9300->9300/tcp hopeful_mcclintock
32b89a19dd6c beniz/deepdetect_cpu "/bin/sh -c './dede …" 39 minutes ago Up 39 minutes 0.0.0.0:8080->8080/tcp elastic_tereshkova
Puis :
root@leng:~# docker logs 32b89a19dd6c
DeepDetect [ commit b2dc3f963fbeadff19949c3d2cd974d0a2ad3587 ]
[2019-02-21 14:00:01.561] [api] [info] Running DeepDetect HTTP server on 0.0.0.0:8080
[2019-02-21 14:00:57.699] [api] [info] 10.1.1.230 "GET /info" 200 0
[2019-02-21 14:35:28.923] [api] [info] 10.1.1.230 "GET /info" 200 0
Article de référence : https://www.elastic.co/blog/categorizing-images-with-deep-learning-into-elasticsearch
Ce document a été publié le 2019-02-21 14:52:22. (Dernière mise à jour : 2020-07-26 06:46:16.)
(Sujet) Sujets » Documentation technique