当赛博朋克碰上小鸡舞 segment anything

news2024/12/29 8:36:35

Segment Anything能给我们做什么

  • 前言
  • 内容
  • 具体实现
  • 成果

前言

最近,大模型的热度确实是非常非常的高,从chatgpt到segment anything,这些东西整的我这刚入门的小白确实有点懵逼。最近实在是不知道干啥, 想想能不能用大模型整点花活。

这时候突然想起来了去年的极乐净土,确实做的有点粗糙,去年就是提取了下边缘加个rgb就完事了,这让我有点不大尽兴,直到我看到了小鸡舞。
在这里插入图片描述
segment anything是干啥的,不就是图像分割吗,那我是不是可以把这位舞者分割出来,然后换到其他背景里,说干就干。
在这里插入图片描述

内容

大致的思路其实就是我们用segment anything把图像分割出来,然后把人的掩码单独拿出来,然后再随便整个背景,把我们提取的人物放进去就完事了,整个过程看着还是蛮简单的哈,我们具体看看咋做。

首先第一步就是要配置下segment anything的环境,这里我们不使用segment anything官方提供的服务跑了,因为确实要跑好多张,所以我们自己配一下。其实很简单就是安装一下pytorch gpu版本(显卡稍微差点的话可以用cpu的),然后把项目从github拉下来,在安装下他要求的库就ok了,网上有很多配置segment anything 的博客,这里我就不展开说了。

这时候我们把视频转换成图片,就直接用opencv转换就可以,详细代码在下一节。然后我们使用segment anything对其进行分割,就可以拿到这样的掩码
在这里插入图片描述
我们可以看到,分割的效果非常nice,但是有一个问题,我怎么把人的掩码单独提出来呢???

博主找了一下,好像是已经有人在segment anything的基础上进行分类了,但确实有点麻烦,博主本着能坐着就不能站着,能躺着就不坐着的心态思考了下,发现还真有个个省事。

要知道,我们可是有yolo的呀,这目标检测能力嘎嘎的
在这里插入图片描述
那我们就可以直接提取检测框里的最大掩码就可以了,这样我们就拿到了人物的掩码
在这里插入图片描述
到此为止,人物就提取出来了,接下来我们就是随便找个背景拼接下就完事了,看看具体实现吧。

具体实现

因为segment anything和yolov5都有现成的代码,我们就不介绍了,我们只介绍这个拼接的部分

拼接代码

# -*- codeing = utf-8 -*-
# @Time : 2023/7/5 19:30
# @Author : xiaow
# @File : test.py
# @Software : PyCharm
import os

import cv2

import numpy as np


def mix():
    # 背景图片存放的位置
    backs = os.listdir('../video2img2')
    # 人物掩码的位置
    masks = os.listdir('mask')
    # 0 1 掩码的位置
    mask2s = os.listdir('mask2')
    # 设置输出视频的帧数
    fps = 15
    videopath = 'test10.avi'  # 图片保存地址及格式
    size = (1000, 666)
    out1 = cv2.VideoWriter(videopath, cv2.VideoWriter_fourcc(*'DIVX'), fps, size)

    for i in range(len(backs)):
        print(masks[i])

        back = cv2.imread('../video2img2/' + backs[i])
        # 修改背景尺寸大小
        back = cv2.resize(back, size, interpolation=cv2.INTER_AREA)
        human = cv2.imread('mask/' + masks[i])
        mask2 = cv2.imread('mask2/' + mask2s[i], 0)


        # 设置mask,human大小和背景相同大小  start
        width = back.shape[0]
        height = back.shape[1]
        width_diff = width - human.shape[0]
        height_diff = height - human.shape[1]
        human = np.pad(human, ((width_diff // 2, width_diff // 2), (height_diff // 2, height_diff // 2), (0, 0)))
        mask2 = np.pad(mask2, ((width_diff // 2, width_diff // 2), (height_diff // 2, height_diff // 2)))
        # 设置mask,human大小和背景相同大小  end

        mask2 = np.expand_dims(mask2, 2)
        out1.write((1 - mask2) * back + human)


if __name__ == '__main__':
    mix()

成果

在这里插入图片描述
这里以gif的形式展示一部分内容,全部视频可以在b站搂一眼

segment anything 碰上小鸡舞

就到这了 溜了溜了

如有侵害您的权益请联系我们,侵权必删

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/725795.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Spring后置处理器BeanFactoryPostProcessor与BeanPostProcessor源码解析

文章目录 一、简介1、BeanFactoryPostProcessor2、BeanPostProcessor 二、BeanFactoryPostProcessor 源码解析1、BeanDefinitionRegistryPostProcessor 接口实现类的处理流程2、BeanFactoryPostProcessor 接口实现类的处理流程3、总结 三、BeanPostProcessor 源码解析 一、简介…

uniapp 之 多端实现图片压缩(含H5实现)

compressImage 说明 文档平台差异说明已标出:官网提供的api uni.compressImage除了H5平台,其余平台都支持,所以我们利用条件编译,然后单独处理一下H5的图片压缩即可。 utils.js 里面封装一下该方法,方便调用 /*** 图…

-Xloggc:d:/gc.log

-Xloggc:d:/gc.log把信息记录成 log文件参数-Xmx20m -Xms20m -XX:NewRatio4 -XX:SurvivorRatio2 -Xss1m -XX:PrintGCDetails -XX:UseSerialGC -XX:PrintCommandLineFlags -Xloggc:d:/gc.log结果[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-y3PpljS…

【PyTorch API】 nn.RNN 和 nn.LSTM 介绍和代码详解

文章目录 1. nn.RNN 构建单向 RNN2. nn.LSTM 构建单向 LSTM3. 推荐参考资料 1. nn.RNN 构建单向 RNN torch.nn.RNN 的 PyTorch 链接:torch.nn.RNN(*args, **kwargs) nn.RNN 的用法和输入输出参数的介绍直接看代码: import torch import torch.nn as n…

商业模式画布

商业模式画布给了创业者一个思考的框架,在行动之前充分思考和演练。 文章目录 认识商业模式画布九个组成部分(以Zoom为例拆解)收入成本 九个组成部分的关系总结 认识商业模式画布 九个组成部分(以Zoom为例拆解) 收入 成…

七月创作之星挑战赛开始咯~

活动火热进行中! 欢迎各位大佬积极参与~ 大家请加入卡奥斯开源社区官方社群哦,最新活动实时更新! 还有专属群内福利(蛋糕券、购物卡、周边礼品)等你来拿~ 礼品详情

高效管理工作任务,推荐优秀任务管理软件助力工作效率提升

任务管理软件是一种用于组织任务、将任务分配给个人并监控其进展的软件。该软件可以帮助确保任务在预算内按时完成。它在协同工作环境中特别有用,在这种环境中,多人在处理需要跟踪和监视的任务。 任务管理软件可以帮助简化分配任务和监控任务进度的过程。…

ModaHub魔搭社区:基于阿里云 ACK 搭建开源向量数据库 Milvus

目录 一、准备资源 二、集群创建: 本集群基于Terway网络构建 二、连接刚刚创建的ACK集群 三、部署Milvus数据库 四、优化Milvus配置 简介: 生成式 AI(Generative AI)引爆了向量数据库(Vector Database&#xff0…

STM8低门槛快速入门,类似Arduino封装库模式开发介绍

STM8低门槛快速入门,类似Arduino封装库模式开发介绍 📌STM8外设封装库原项目开源地址:https://github.com/gicking/STM8_templates📍个人整理过的项目地址:https://github.com/perseverance51/STM8-Templates &#x1…

前端开发常用Nginx设置说明

前端部署常用到Nginx,作为前端开发常用的配置不多,担也需要掌握 常见配置说明,这里只列表server模块的核心代码 server {listen 9015; # 端口号server_name 172.16.101.191; # 浏览器访问域名,不配置默认为本服务器地址index in…

redhat6安装mysql8.0.33

1、下载mysql 官网地址:https://downloads.mysql.com/archives/community/ 下载步骤: 过滤操作系统版本 下载后,上传到服务器Downloads目录 2、安装mysql8 解压压缩包 tar -xvf mysql-8.0.31-1.el9.x86_64.rpm-bundle.tar [rootrhel64 …

node搭建一个简单的脚手架

一、什么是脚手架 脚手架(Scaffold)是指在软件开发过程中为提高开发效率而提供的一套基础代码结构、组织规范、开发工具和工程化配置的工具。脚手架可以帮助开发团队快速搭建项目的基础框架,规范项目的开发流程,并提供一些常用的…

指针函数与函数指针

指针函数 指针函数&#xff1a;指针函数是一个函数&#xff0c;返回值是一个指针。 int *fun; //fun是指针变量 int *fun(x,y); //fun是指针函数; #include<iostream> using namespace std;char* day_name() {return("Monday"); //返回地址 }int main() {char…

堆排序选择排序

选择排序 选择排序&#xff08;Selection sort&#xff09;是一种简单直观的排序算法。它的工作原理如下。首先在未排序序列中找到最小&#xff08;大&#xff09;元素&#xff0c;存放到排序序列的起始位置&#xff0c;然后&#xff0c;再从剩余未排序元素中继续寻找最小&…

Linux系统下 - [linux命令]查找包含指定内容的文件

格式1&#xff1a;grep -r “指定内容” 目录 eg:输出包含"指定内容"的文件列表以及简要信息 查找当前目录下的 CONFIG_ESP_SMARTCONFIG_TYPE grep -r "CONFIG_ESP_SMARTCONFIG_TYPE" .格式2&#xff1a;grep -r -l “指定内容” 目录 eg:仅输出包含&q…

模拟Toast 自定义提示框

模拟Toast 自定义提示框 前言 为满足产品需求&#xff0c;发现现在的ToastUtils不是太重就是不太满足需求&#xff0c;这边写个简单易用的工具&#xff0c;几十行代码解决的问题,还要啥轮子。 功能如下&#xff1a; 自动消失相对锚点位置 可配置&#xff0c;正中间&#x…

刷题日记06《回溯算法》

问题描述 力扣https://leetcode.cn/problems/Ygoe9J/ 给定一个无重复元素的正整数数组 candidates 和一个正整数 target &#xff0c;找出 candidates 中所有可以使数字和为目标数 target 的唯一组合。 candidates 中的数字可以无限制重复被选取。如果至少一个所选数字数量不同…

计算机体系结构基础知识介绍之缓存性能的十大进阶优化之非阻塞缓存(四)

优化四&#xff1a;非阻塞缓存&#xff0c;提高缓存带宽 对于允许乱序执行的流水线计算机&#xff0c;处理器不需要因数据高速缓存未命中而停止。 例如&#xff0c;处理器可以继续从指令高速缓存获取指令&#xff0c;同时等待数据高速缓存返回丢失的数据。 非阻塞高速缓存或无…

23家企业推出昇腾AI系列新品 覆盖云、边、端智能硬件

[中国&#xff0c;上海&#xff0c;2023年7月6日] 昇腾人工智能产业高峰论坛在上海举办。论坛现场&#xff0c;大模型联合创新启动&#xff0c;26家行业领军企业、科研院所与华为将共同基于昇腾AI进行基础大模型与行业大模型应用创新。同时&#xff0c;华为携手伙伴联合发布昇腾…

Java虚拟机(JVM)、垃圾回收器

一、Java简介 1、Java开发及运行版本 JRE(Java Runtime Environment&#xff0c;运行环境) 所有的程序都要在JRE下才能够运行。包括JVM和Java核心类库和支持文件。JDK(Java Development Kit&#xff0c;开发工具包) 用来编译、调试Java程序的开发工具包。包括Java工具(javac/…