首页 > 编程知识 正文

AI视频人像分割(人像拍摄比例)

时间:2023-05-05 15:41:31 阅读:104829 作者:1263

在一些视频聊天软件中,我们可以看到很多人的背景特别漂亮,甚至我们怀疑他们是否真的来到了某个地方。本期我们将介绍Mediapipe人像分割(RVM人像分割)。

MediaPipe自拍分割分割场景中的突出角色。它可以在智能手机和笔记本电脑上实时运行。

模型

在这个解决方案中,MediaPipe提供了两种模型:通用模型和景观模型。这两款车型都是基于美孚ETV 3号,并已修改,以提高效率。通用模型在256x256x3 (HWC)张量上运行,并输出代表分区掩码的256x256x1张量。景观模型类似于一般模型,但运行在144x256x3 (HWC)张量上。它的FLOP比一般型号少,所以运行速度更快。请注意,在将输入图像输入到ML模型之前,媒体管道自分割会自动将输入图像的大小调整到所需的张量维度。

代码实现

导入cv2

将mediapipe作为mp导入

将numpy作为np导入

MP _ drawing=MP . solutions . drawing _ utils

mp _自拍_分段=mp.solutions .自拍_分段

#图片字符抠图:

IMAGE_FILES=[]

BG_COLOR=(0,255,0) #其他照片也可以作为背景色,要求与原照片大小相同。

#bg_image=cv2.imread('6.jpg ')

MASK_COLOR=(255,255,255) # mask图片颜色

文件='1.jpg '

带mp _自拍_分段。自拍分割(模型选择=0)为自拍分割:

image=cv2.imread(文件)

image_height,image_width,_=image.shape

#图片在处理前需要转换到RGB色彩空间。

image=cv2.cvtColor(image,cv2。颜色_BGR2RGB)

结果=自拍_分割.过程(图像)

#在背景图像上绘制分割图

#为了改善边界周围的分割,我们可以考虑在结果中进行双边滤波。

条件=NP . stack((results . segmentation _ mask),* 3,axis=-1) 0.1

#生成纯色图像和白色蒙版图。

#fg_image=np.zeros(image.shape,dtype=np.uint8)

#fg_image[:]=MASK_COLOR

fg_image=cv2.cvtColor(image,cv2。COLOR_RGB2BGR)

bg_image=np.zeros(image.shape,dtype=np.uint8)

bg_image[:]=BG_COLOR

output_image=np.where(条件,fg_image,bg_image)

cv2.imshow('output_image ',output_image)

cv2.waitKey(0)

# cv2.imwrite ('selfie0.png ',output _ image)首先加载所需的第三方库。

BG_COLOR是纯色背景的RGB值。

MASK_COLOR是人像抠图的蒙版值,一般设置为纯白。

模型选择=0模型选择,可选参数(0,1)

然后可以使用cv2.imread函数加载需要分段的图片,将色彩空间转换为RGB模式。预处理后的图片可以直接输入自拍_分割。处理(图像)功能来分割人像。

对于边缘分割,NP。stack((结果。segmentation _ mask,)* 3,axis=-1) 0.1如果最终参数更小,包含更多边,可以自己尝试。

Fg_image图片我们需要将图片绘制再次转换到BGR空间,使用np.where函数将人像区域与背景图片融合,最终呈现出抠图后的效果。

当然,有时候我们需要一个背景图来代替它。这里我们修改原始代码。

导入cv2

将mediapipe作为mp导入

将numpy作为np导入

mp_drawing=mp.sol

utions.drawing_utils mp_selfie_segmentation = mp.solutions.selfie_segmentation # 图片人物抠图: IMAGE_FILES = [] #BG_COLOR = (0, 255, 0) # 背景颜色也可以使用其他的照片,要求与原照片尺寸一致 bg_image = cv2.imread('6.jpg') MASK_COLOR = (255, 255, 255) # mask图片颜色 file = '1.jpg' with mp_selfie_segmentation.SelfieSegmentation(model_selection=0) as selfie_segmentation: image = cv2.imread(file) image_height, image_width, _ = image.shape # 在处理之前需要转换图片到RGB颜色空间 image = cv2.cvtColor(image, cv2.COLOR_BGR2RGB) results = selfie_segmentation.process(image) # 在背景图像上绘制分割图 #为了改善边界周围的分割,可以考虑在 results.segmentation_mask进行双边过滤 condition = np.stack((results.segmentation_mask,) * 3, axis=-1) > 0.1 #生成纯色图像,白色的mask图纸 #fg_image = np.zeros(image.shape, dtype=np.uint8) #fg_image[:] = MASK_COLOR fg_image = cv2.cvtColor(image, cv2.COLOR_RGB2BGR) #bg_image = np.zeros(image.shape, dtype=np.uint8) #bg_image[:] = BG_COLOR output_image = np.where(condition, fg_image, bg_image) cv2.imshow('output_image',output_image) cv2.waitKey(0) cv2.imwrite('selfie00.png', output_image)

运行代码的效果

实时视频分割

import cv2 import mediapipe as mp import numpy as np mp_drawing = mp.solutions.drawing_utils mp_selfie_segmentation = mp.solutions.selfie_segmentation BG_COLOR = (192, 192, 192) # gray cap = cv2.VideoCapture(0) cv2.waitKey(2000) bg_image = cv2.imread('6.jpg') with mp_selfie_segmentation.SelfieSegmentation(model_selection=1) as selfie_segmentation: while cap.isOpened(): success, image = cap.read() print(image.shape()) if not success: print("Ignoring empty camera frame.") continue image = cv2.cvtColor(cv2.flip(image, 1), cv2.COLOR_BGR2RGB) image.flags.writeable = False results = selfie_segmentation.process(image) image.flags.writeable = True image = cv2.cvtColor(image, cv2.COLOR_RGB2BGR) condition = np.stack((results.segmentation_mask,) * 3, axis=-1) > 0.1 if bg_image is None: bg_image = np.zeros(image.shape, dtype=np.uint8) bg_image[:] = BG_COLOR output_image = np.where(condition, image, bg_image) cv2.imshow('MediaPipe Selfie Segmentation', output_image) if cv2.waitKey(5) & 0xFF == 27: break cap.release()

视频实时分割的代码结构跟图片分割类似,主要需要注意的是打开摄像头后,会自动有一个cap的图纸尺寸,这里我们读取的背景图片尺寸需要与摄像头的尺寸一致

首先我们打开摄像头,并加载一张背景图片,从摄像头中获取视频帧图片,对图片进行翻转与颜色空间的转换操作后,使用selfie_segmentation.process(image)函数进行人像的分割,最后实时显示分割后的效果,当然也可把视频保存下来

视频加载中...

mediapipe系列文章:

颠覆2D对象检测模型,MediaPipe 3D对象检测还原真实的对象特征

MediaPipe Face Detection可运行在移动设备上的亚毫秒级人脸检测

MediaPipe虹膜检测:实时虹膜跟踪和深度估计

利用深度学习进行Web浏览器视频电话会议中的背景更换

利用机器学习,进行人体33个2D姿态检测与评估

利用机器学习,进行人手的21个3D手关节坐标检测

利用机器学习进行人脸468点的3D坐标检测,并生成3D模型

MediaPipe 集成人脸识别,人体姿态评估,人手检测模型

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。