Image Segmentation With 5 Lines 0f Code

原文链接

语义分割(Semantic Segmentation)与实例分割(Instance Segmentation)

在这里插入图片描述
在这里插入图片描述

PixelLib:是一个用于在现实生活中轻松实现图像分割的库。 PixelLib是一个灵活的库,可以集成到需要应用图像分割的软件解决方案中。

五行代码实现语义分割

  1. 安装PixelLib以及相关依赖
  • pip3 install tensorflow
  • pip3 install opencv-python
  • pip3 install scikit-image
  • pip3 install pillow
  • pip3 install pixellib
  1. PixelLib 实现语义分割(在pascal voc数据集上训练了使用deeplabv3 +模型实现语义分割的代码)
import pixellib
from pixellib.semantic import semantic_segmentation

segment_image = semantic_segmentation()
segment_image.load_pascalvoc_model("deeplabv3_xception_tf_dim_ordering_tf_kernels.h5") 
segment_image.segmentAsPascalvoc("path_to_image", output_image_name = "path_to_output_image")

代码解释

segment_image.load_pascalvoc_model(“deeplabv3_xception_tf_dim_ordering_tf_kernels.h5”)

在上面的代码中,我们加载了在pascal voc上训练的xception模型来分割对象。 可以从这里下载模型。

segment_image.segmentAsPascalvoc(“path_to_image”, output_image_name = “path_to_output_image)

对图像进行分割,其中
path_to_image :要分割的图像的路径
output_image_name:保存分割图像的路径

比如:

segment_image.segmentAsPascalvoc("sample1.jpg", output_image_name = "image_new.jpg")

在这里插入图片描述
在这里插入图片描述
将上面的图像应用segmentation overlay

segment_image.segmentAsPascalvoc("sample1.jpg", output_image_name = "image_new.jpg", overlay = True)

在这里插入图片描述

可以使用如下的代码来获得执行的时间

import pixellib
from pixellib.semantic import semantic_segmentation
import time

segment_image = semantic_segmentation()
segment_image.load_pascalvoc_model("pascal.h5")

start = time.time()
segment_image.segmentAsPascalvoc("sample1.jpg", output_image_name= "image_new.jpg")

end = time.time()
print(f"Inference Time: {end-start:.2f}seconds")

xception在pascal voc数据集上进行训练,该数据集包含20个类别,类别机器对应的元素图如下:
在这里插入图片描述

使用如下的代码获得分割输出的数组

output, segmap = segment_image.segmentAsPascalvoc()

可以通过修改下面的语义分割代码来测试用于获取数组的代码并打印输出的形状。

import pixellib
from pixellib.semantic import semantic_segmentation
import cv2

segment_image = semantic_segmentation()
segment_image.load_pascalvoc_model("pascal.h5")
output, segmap = segment_image.segmentAsPascalvoc("sample1.jpg")
cv2.imwrite("img.jpg", output)
print(output.shape)

使用此代码获取输出和segmentation overlay的数组

segmap, segoverlay = segment_image.segmentAsPascalvoc(overlay = True)
import pixellib
from pixellib.semantic import semantic_segmentation
import cv2

segment_image = semantic_segmentation()
segment_image.load_pascalvoc_model("pascal.h5")
segmap, segoverlay = segment_image.segmentAsPascalvoc("sample1.jpg", overlay= True)
cv2.imwrite("img.jpg", segoverlay)
print(segoverlay.shape)

使用pixellib进行实例分割(mask R-CNN 模型)

import pixellib
from pixellib.instance import instance_segmentation

segment_image = instance_segmentation()
segment_image.load_model("mask_rcnn_coco.h5") 
segment_image.segmentImage("path_to_image", output_image_name = "output_image_path")

此处下载mask_rcnn的模型
在这里插入图片描述
在这里插入图片描述
显示bounding_box

segment_image.segmentImage("path_to_image", output_image_name = "output_image_path", show_bboxes = True)

在这里插入图片描述

如下代码显示运行时间

import pixellib
from pixellib.instance import instance_segmentation
import time

segment_image = instance_segmentation()
segment_image.load_model("mask_rcnn_coco.h5")

start = time.time()
segment_image.segmentImage("former.jpg", output_image_name= "image_new.jpg")

end = time.time()
print(f"Inference Time: {end-start:.2f}seconds")

通过修改下面的实例细分代码来测试用于获取数组的代码并打印输出的形状。

import pixellib
from pixellib.instance import instance_segmentation
import cv2

instance_seg = instance_segmentation()
instance_seg.load_model("mask_rcnn_coco.h5")
segmask, output = instance_seg.segmentImage("sample2.jpg")
cv2.imwrite("img.jpg", output)
print(output.shape)

通过包含参数show_bboxes获得带有边界框的分割数组。

segmask, output = segment_image.segmentImage(show_bboxes = True)
import pixellib
from pixellib.instance import instance_segmentation
import cv2

instance_seg = instance_segmentation()
instance_seg.load_model("mask_rcnn_coco.h5")
segmask, output = instance_seg.segmentImage("sample2.jpg", show_bboxes= True)
cv2.imwrite("img.jpg", output)
print(output.shape)
Install PixelLib and test it with as many images you desire.

Visit the official github repository of PixelLib.
Visit the official documentation of PixelLib

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值