.. _imagesegmentationrst: ================================= Segmenter une image pixel à pixel ================================= .. only:: html **Links:** :download:`notebook `, :downloadlink:`html `, :download:`PDF `, :download:`python `, :downloadlink:`slides `, :githublink:`GitHub|_doc/notebooks/ai/image_segmentation.ipynb|*` Il est aujourd’hui assez facile de construire une boîte englobante autour d’un visage dans une image. Le deep learning permet d’extraire précisément les pixels du visage. .. code:: from jyquickhelper import add_notebook_menu add_notebook_menu() .. contents:: :local: .. code:: %matplotlib inline Chargement du modèle -------------------- .. code:: from code_beatrix.ai import DLImageSegmentation model = DLImageSegmentation(fLOG=print) .. parsed-literal:: [DLImageSegmentation] download model 'FCN8s' [DLImageSegmentation] [C:\Users\xavie/data/models/chainer/fcn8s_from_caffe.npz] Checking md5 (256c2a8235c1c65e62e48d3284fbd384) [DLImageSegmentation] load_npz 'C:\Users\xavie/data/models/chainer/fcn8s_from_caffe.npz' [DLImageSegmentation] class_name '['background' 'aeroplane' 'bicycle' 'bird' 'boat' 'bottle' 'bus' 'car' 'cat' 'chair' 'cow' 'diningtable' 'dog' 'horse' 'motorbike' 'person' 'potted plant' 'sheep' 'sofa' 'train' 'tv/monitor']' [DLImageSegmentation] cpu Sur une petite image -------------------- .. code:: img = 'images/Tesla_circa_1890c.jpg' .. code:: feat, pred = model.predict(img) pred.shape .. parsed-literal:: (295, 220) .. code:: viz = model.plot(img, pred) # img ou feat .. parsed-literal:: c:\Python363_x64\lib\site-packages\skimage\transform\_warps.py:84: UserWarning: The default mode, 'constant', will be changed to 'reflect' in skimage 0.15. warn("The default mode, 'constant', will be changed to 'reflect' in " .. code:: import skimage.io as skio skio.imshow(viz) .. parsed-literal:: .. image:: image_segmentation_9_1.png Sur une image dont on change la taille -------------------------------------- .. code:: from PIL import Image img = 'images/Tesla_circa_1890c.jpg' pilimg = Image.open(img) .. code:: si = pilimg.size pilimg2 = pilimg.resize((si[0]//2, si[1]//2)) .. code:: from skimage.io._plugins.pil_plugin import pil_to_ndarray .. code:: skimg = pil_to_ndarray(pilimg2) skimg.shape .. parsed-literal:: (147, 110, 3) .. code:: feat, pred = model.predict(skimg) pred.shape .. parsed-literal:: (147, 110) .. code:: viz = model.plot(skimg, pred) .. parsed-literal:: c:\Python363_x64\lib\site-packages\skimage\transform\_warps.py:84: UserWarning: The default mode, 'constant', will be changed to 'reflect' in skimage 0.15. warn("The default mode, 'constant', will be changed to 'reflect' in " .. code:: skio.imshow(viz) .. parsed-literal:: .. image:: image_segmentation_17_1.png Sur une grande image -------------------- .. code:: img = 'images/h2015_2.jpg' .. code:: pilimg = Image.open(img) .. code:: si = pilimg.size pilimg2 = pilimg.resize((si[0]//2, si[1]//2)) .. code:: skimg = pil_to_ndarray(pilimg2) skimg.shape .. parsed-literal:: (456, 684, 3) .. code:: skio.imshow(skimg) .. parsed-literal:: .. image:: image_segmentation_23_1.png .. code:: feat, pred = model.predict(skimg) pred.shape .. parsed-literal:: (456, 684) .. code:: viz = model.plot(feat, pred) .. parsed-literal:: c:\Python363_x64\lib\site-packages\skimage\transform\_warps.py:84: UserWarning: The default mode, 'constant', will be changed to 'reflect' in skimage 0.15. warn("The default mode, 'constant', will be changed to 'reflect' in " .. code:: import matplotlib.pyplot as plt fig, ax = plt.subplots(1, 1, figsize=(14, 12)) ax.imshow(viz) .. parsed-literal:: .. image:: image_segmentation_26_1.png