# 语义分割

# 简介

语义分割(Semantic Segmentation)是一种计算机视觉任务,它的目标是为图像中的每个像素分配一个类别标签,从而实现对场景的精细理解。例如,在一张街景图像中,将所有属于“道路”的像素标记为一类,“行人”的像素标记为另一类。

与其他任务的区别

  • 目标检测(Object Detection) 通过边界框(bounding box)定位并分类目标,但不能精确到像素级,只能大致框出目标区域。

  • 语义分割(Semantic Segmentation) 逐像素分类,能够精确划分目标形状,但无法区分同类别的不同个体。

  • 实例分割(Instance Segmentation) 结合了目标检测和语义分割的优势,既能像语义分割那样进行像素级划分,又能像目标检测那样区分不同个体。

# 安装

# Maven

在项目的 pom.xml 中添加以下依赖,详细引入方式参考 Maven 引入

如需引入全部功能,请使用 【不推荐 ❌】 all 模块。

<dependency>
    <groupId>cn.smartjavaai</groupId>
    <artifactId>vision</artifactId>
    <version>1.0.24</version>
</dependency>

# 获取语义分割模型

SemSegModelConfig config = new SemSegModelConfig();
config.setModelEnum(SemSegModelEnum.DEEPLABV3);
config.setModelPath("/Users/wenjie/Documents/develop/model/vision/semseg/deeplabv3/deeplabv3.pt");
SemSegModel semSegModel = SemSegModelFactory.getInstance().getModel(config);

# SemSegModelConfig参数说明

字段名称 字段类型 默认值 说明
modelEnum SemSegModelEnum 语义分割模型枚举
modelPath String 模型路径
allowedClasses List<String> 允许的分类列表
device DeviceEnum CPU 指定运行设备,支持 CPU/GPU
gpuId int 0 gpu设备ID 当device为GPU时生效
predictorPoolSize int 默认为cpu核心数 模型预测器线程池大小
customParams Map<String, Object> 个性化配置(按模型类型动态解析)

# 支持语义分割模型

模型名称 引擎 模型简介 模型开源网站
DeepLabv3 PyTorch DeepLabv3 是一种图像分割模型,可以把图片里的每个像素分类出来

⚠️ 注意
不同模型支持的类别可能不一样,具体可查看模型目录下的 synset.txt 文件,其中列出了该模型支持的全部物体名称。


# SemSegModel API 方法说明

# 语义分割

Image图片源请查看文档Image使用说明

R<CategoryMask> detect(Image image);

# CategoryMask说明

CategoryMask 用于表示语义分割或实例分割任务中的类别掩码(mask)。
它保存了类别列表 (classes) 和对应的像素级掩码 (mask),并提供了生成、可视化和序列化相关的方法。

获取数据

  • getClasses()
    返回类别名称列表。

  • getMask()
    返回二维数组形式的掩码数据,数组元素为类别 ID。

生成掩码图像

  • getMaskImage(Image image)
    根据完整掩码生成对应的掩码图像。

  • getMaskImage(Image image, int classId)
    根据指定类别 ID 生成该类别的掩码图像(其他区域为 0)。

  • getBackgroundImage(Image image)
    获取背景掩码图像(类别 ID = 0)。

绘制可视化

  • drawMask(Image image, int opacity)
    将整个掩码绘制到图像上,支持透明度设置。

  • drawMask(Image image, int opacity, int background)
    与上类似,但可指定背景颜色。

  • drawMask(Image image, int classId, int color, int opacity)
    将指定类别的掩码绘制到图像上,并自定义颜色与透明度。


# 检测并绘制结果

该接口支持对图像进行检测,并将检测结果绘制在图像上,同时返回检测结果信息。

  • 保存绘制后的图片到指定路径,检测结果通过 CategoryMask 返回。
R<CategoryMask> detectAndDraw(String imagePath, String outputPath);
Image detectAndDraw(Image image);

# 使用说明
  • imagePath:待检测图像的文件路径。
  • outputPath:绘制检测结果后图像的保存路径。
  • image:待检测的 Image 对象。

# 模型下载

百度网盘:https://pan.baidu.com/s/1gt02ctdmf8hnwfHp_KDwdw?pwd=1234 提取码: 1234

# 完整示例代码

示例代码 (opens new window)

# 离线使用

离线使用请看文档