前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >基于Java深度学习库Deep Java Library 的一键抠图功能

基于Java深度学习库Deep Java Library 的一键抠图功能

作者头像
九转成圣
发布于 2024-11-21 05:48:21
发布于 2024-11-21 05:48:21
10500
代码可运行
举报
文章被收录于专栏:csdncsdn
运行总次数:0
代码可运行

基于Java深度学习库Deep Java Library 的一键抠图功能

完整项目地址:https://download.csdn.net/download/weixin_41883161/89938027

一键抠图

一键抠图是一种图像处理技术,旨在自动将图像中的前景对象从背景中分离出来。它可以帮助用户快速、准确地实现抠图效果,无需手动绘制边界或进行复杂的图像编辑操作。 一键抠图的原理通常基于计算机视觉机器学习技术。它使用深度神经网络模型,通过训练大量的图像样本,学习如何识别和分离前景对象和背景。这些模型能够理解图像中的像素信息和上下文,并根据学习到的知识进行像素级别的分割。

动漫人物抠图

测试代码入口

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
public final class AnimeSegExample {

    private static final Logger logger = LoggerFactory.getLogger(AnimeSegExample.class);

    @SneakyThrows
    @Test
    public void test1() {
        Path imageFile = Paths.get("src/test/resources/anime-girl.jpg");
        Image img = BufferedImageFactory.getInstance().fromFile(imageFile);
        try (IsNetModel isNetModel = new IsNetModel("models/", "anime.onnx", 1, false, false, Device.cpu())) {
            Image segImg = isNetModel.predict(img);
            BufferedImage bufferedImage = OpenCVUtils.mat2Image((Mat) segImg.getWrappedImage());
            bufferedImage = ImageUtils.removeBg(bufferedImage);
            ImageUtils.saveBufferedImage(bufferedImage, "anime-girl.png", "src/test/output");
        }
    }
}

人物抠图

测试代码入口

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
public final class HumanSegExample {

    @SneakyThrows
    @Test
    public void test1() {
        Path imageFile = Paths.get("src/test/resources/fullbody2.jpg");
        Image img = OpenCVImageFactory.getInstance().fromFile(imageFile);

        try (UNetHumanSegModel detector = new UNetHumanSegModel("models/", "human.onnx", 1, false, false, Device.cpu())) {
            Image segImg = detector.predict(img);
            BufferedImage bufferedImage = OpenCVUtils.mat2Image((Mat) segImg.getWrappedImage());
            bufferedImage = ImageUtils.removeBg(bufferedImage);
            ImageUtils.saveBufferedImage(bufferedImage, "fullbody2.jpg", "src/test/output/");
        }
    }
}

从人像上扣衣服

类位置top.aias.seg.ClothSegExample

扣上半身

代码入口

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
@SneakyThrows
@Test
public void test1() {
    Path imageFile = Paths.get("src/test/resources/full_body.jpg");
    Image img = OpenCVImageFactory.getInstance().fromFile(imageFile);
    // clothCategory 4个值: 1,2,3,4  (1 上半身, 2 下半身, 3 连体衣, 4 所有)
    try (UNetClothSegModel detector = new UNetClothSegModel("models/", "cloth.onnx", 1, 1, false, Device.cpu())) {
        Image segImg = detector.predict(img);
        BufferedImage bufferedImage = OpenCVUtils.mat2Image((Mat) segImg.getWrappedImage());
        bufferedImage = ImageUtils.removeBg(bufferedImage);
        ImageUtils.saveBufferedImage(bufferedImage, "full_body_cloth_category_1.jpg", "src/test/output");
    }
}

扣下半身

代码入口

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
@SneakyThrows
@Test
public void test2() {
    Path imageFile = Paths.get("src/test/resources/full_body.jpg");
    Image img = OpenCVImageFactory.getInstance().fromFile(imageFile);
    // clothCategory 4个值: 1,2,3,4  (1 上半身, 2 下半身, 3 连体衣, 4 所有)
    try (UNetClothSegModel detector = new UNetClothSegModel("models/", "cloth.onnx", 2, 1, false, Device.cpu())) {
        Image segImg = detector.predict(img);
        BufferedImage bufferedImage = OpenCVUtils.mat2Image((Mat) segImg.getWrappedImage());
        bufferedImage = ImageUtils.removeBg(bufferedImage);
        ImageUtils.saveBufferedImage(bufferedImage, "full_body_cloth_category_2.jpg", "src/test/output");
    }
}

扣全身

代码入口
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
@SneakyThrows
@Test
public void test4() {
    Path imageFile = Paths.get("src/test/resources/full_body.jpg");
    Image img = OpenCVImageFactory.getInstance().fromFile(imageFile);
    // clothCategory 4个值: 1,2,3,4  (1 上半身, 2 下半身, 3 连体衣, 4 所有)
    try (UNetClothSegModel detector = new UNetClothSegModel("models/", "cloth.onnx", 4, 1, false, Device.cpu())) {
        Image segImg = detector.predict(img);
        BufferedImage bufferedImage = OpenCVUtils.mat2Image((Mat) segImg.getWrappedImage());
        bufferedImage = ImageUtils.removeBg(bufferedImage);
        ImageUtils.saveBufferedImage(bufferedImage, "full_body_cloth_category_4.jpg", "src/test/output");
    }
}

扣连衣裙

代码入口

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
@SneakyThrows
@Test
public void test3() {
    Path imageFile = Paths.get("src/test/resources/fullbody3.jpg");
    Image img = OpenCVImageFactory.getInstance().fromFile(imageFile);
    // clothCategory 4个值: 1,2,3,4  (1 上半身, 2 下半身, 3 连体衣, 4 所有)
    try (UNetClothSegModel detector = new UNetClothSegModel("models/", "cloth.onnx", 3, 1, false, Device.cpu())) {
        Image segImg = detector.predict(img);
        BufferedImage bufferedImage = OpenCVUtils.mat2Image((Mat) segImg.getWrappedImage());
        bufferedImage = ImageUtils.removeBg(bufferedImage);
        ImageUtils.saveBufferedImage(bufferedImage, "fullbody3.jpg", "src/test/output");
    }
}

通用抠图

测试代码入口

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
@SneakyThrows
@Test
public void test1() {
    Path imageFile = Paths.get("src/test/resources/beauty.jpg");
    Image img = OpenCVImageFactory.getInstance().fromFile(imageFile);

    // u2net.onnx
    // u2netp.onnx
    // silueta.onnx
    try (UNetModel model = new UNetModel("models/", "u2net.onnx", 1, false, true, Device.cpu())) {
        Image segImg = model.predict(img);
        BufferedImage bufferedImage = OpenCVUtils.mat2Image((Mat) segImg.getWrappedImage());
        BufferedImage bImg = ImageUtils.removeBg(bufferedImage);
        ImageUtils.saveBufferedImage(bImg, "beauty.jpg", "src/test/output");
    }
}

完整项目地址:https://download.csdn.net/download/weixin_41883161/89938027

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2024-10-31,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 基于Java深度学习库Deep Java Library 的一键抠图功能
  • 一键抠图
  • 动漫人物抠图
  • 人物抠图
  • 从人像上扣衣服
    • 扣上半身
    • 扣下半身
    • 扣全身
    • 扣连衣裙
  • 通用抠图
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档