Python调用百度AI实现人像分割详解

 更新时间:2021年12月21日 08:54:47   作者:学术菜鸟小晨  
本文主要介绍了如何通过Python调用百度AI从而实现人像的分割与合成,文中的示例代码对我们的工作或学习有一定的帮助,需要的朋友可以参考一下

一、原始视频截图

import cv2
cap=cv2.VideoCapture(r"【小仙若】shake it !冬日也要活力满满! (P1. shake it).mp4")
ret,frame=cap.read()
i =0
timeF=3
j=0
num=0
while 1:
  i=i+1
  if (i%timeF==0):
    j=j+1
    cv2.imwrite("./pictures/"+str(num)+".jpg",frame)
    num+=1
    print("save image:",i)
  ret,frame=cap.read()
 
  

二、提取人像

# -*- coding:utf-8 -*-
import cv2
import base64
import numpy as np
import os
from aip import AipBodyAnalysis
import time
import random
 
APP_ID = '25365416'
API_KEY = 'pS5cVzzw2iBfLY6MKRhUE4cw'
SECRET_KEY = '×××××××××××××××××××××××××'
 
client = AipBodyAnalysis(APP_ID, API_KEY, SECRET_KEY)
# 保存图像分割后的路径
path = './mask_img/'
# os.listdir  列出保存到图片名称
pics = os.listdir('./pictures')
print(pics)
for im in pics:
    # 按顺序构造出图片路径
    img = os.path.join("./pictures",im)
    img1 = cv2.imread(img)
    height, width, _ = img1.shape
    # print(height, width)
    # 二进制方式读取图片
    with open(img, 'rb') as fp:
        img_info = fp.read()
 
 
    # 设置只返回前景   也就是分割出来的人像
    res = client.bodySeg(img_info)
    seg_res = client.bodySeg(img_info)
    labelmap = base64.b64decode(seg_res['foreground'])
    file = open('./he/'+im.split(".")[0]+'.png','wb')
    file.write(labelmap)
    file.close()
 
    print('======== 图像分割完成 ========')

三、和背景图合并

import cv2
import os
from PIL import Image
import numpy as np
 
 
background='1.jpg'
def blend_images(fore_image, base_image):
    """
    将抠出的人物图像换背景
    fore_image: 前景图片,抠出的人物图片
    base_image: 背景图片
    """
    # 读入图片
    base_image = Image.open(base_image).convert('RGB')
    fore_image = Image.open(fore_image).resize(base_image.size)
 
    # 图片加权合成
    scope_map = np.array(fore_image)[:,:,-1] / 255
    scope_map = scope_map[:,:,np.newaxis]
    scope_map = np.repeat(scope_map, repeats=3, axis=2)
    res_image = np.multiply(scope_map, np.array(fore_image)[:,:,:3]) + np.multiply((1-scope_map), np.array(base_image))
    
    #保存图片
    res_image = Image.fromarray(np.uint8(res_image))
    res_image.save(os.path.join('./he/',im))
    #cv2.imwrite(os.path.join(path1,im), result)
# os.listdir  列出保存到图片名称
 
pics = os.listdir('./he1/')
print(pics)
for im in pics:
    img='./he1/'+im
    blend_images(img, background)

四、合成视频

我的背景图尺寸是3840×2160

# 图片合成视频
import cv2
import os
pics = os.listdir('./he/')
fourcc = cv2.VideoWriter_fourcc('X','V','I','D')
# 保存格式,参数分别为filename,编码器,帧率,尺寸
out=cv2.VideoWriter("2.avi",fourcc,10,(3840,2160))
print(pics)
for im in pics:
    # 按顺序构造出图片路径
    img = os.path.join("./he/",im)
    img1 = cv2.imread(img)
# 指定编码器
    print(img1)
 
# 写入视频
    out.write(img1)
    cv2.imshow("detections", img1)
# 注意:尺寸一定要和图像保持一致,否则看不了视频
# 如果想改变保存视频尺寸,应该先把读入的图像的尺寸改变
out.release()
cv2.destoryAllWindows()

到此这篇关于Python调用百度AI实现人像分割详解的文章就介绍到这了,更多相关Python人像分割内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Matplotlib绘图基础之配置参数详解

    Matplotlib绘图基础之配置参数详解

    Matplotlib 提供了大量配置参数,这些参数可以但不限于让我们从整体上调整通过 Matplotlib 绘制的图形样式,下面我们就来看看如何巧妙的运用这些参数吧
    2023-08-08
  • Python实现的径向基(RBF)神经网络示例

    Python实现的径向基(RBF)神经网络示例

    这篇文章主要介绍了Python实现的径向基(RBF)神经网络,结合完整实例形式分析了Python径向基(RBF)神经网络定义与实现技巧,需要的朋友可以参考下
    2018-02-02
  • Python decimal模块使用方法详解

    Python decimal模块使用方法详解

    这篇文章主要介绍了Python decimal模块使用方法详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-06-06
  • python中tqdm使用,对于for和while下的两种不同情况问题

    python中tqdm使用,对于for和while下的两种不同情况问题

    这篇文章主要介绍了python中tqdm使用,对于for和while下的两种不同情况问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-08-08
  • 基于python3 类的属性、方法、封装、继承实例讲解

    基于python3 类的属性、方法、封装、继承实例讲解

    下面小编就为大家带来一篇基于python3 类的属性、方法、封装、继承实例讲解。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-09-09
  • Python flask 框架使用flask-login 模块的详细过程

    Python flask 框架使用flask-login 模块的详细过程

    Flask-Login 是一个 Flask 模块,可以为 Flask 应用程序提供用户登录功能,这篇文章主要介绍了Python flask 框架使用 flask-login 模块,需要的朋友可以参考下
    2023-01-01
  • python3连接MySQL8.0的两种方式

    python3连接MySQL8.0的两种方式

    这篇文章主要介绍了python3连接MySQL8.0的两种方式,本文通过多种方式给大家介绍的非常详细,代码附有文字注释,需要的朋友可以参考下
    2020-02-02
  • Python文本预处理学习指南

    Python文本预处理学习指南

    文本预处理是指在进行自然语言处理(NLP)任务之前,对原始文本数据进行清洗、转换和标准化的过程,本文主要为大家介绍了文本预处理的使用,需要的可以参考下
    2023-07-07
  • Python魔术方法详解

    Python魔术方法详解

    这篇文章主要介绍了Python魔术方法详解,本文讲解了构造和初始化、用于比较的魔术方法、数值处理的魔术方法、普通算数操作符等内容,需要的朋友可以参考下
    2015-02-02
  • Python创建二维数组与初始化的实践举例

    Python创建二维数组与初始化的实践举例

    二维数组使用简便可以有很多简洁的操作,实现多元的要求,下面这篇文章主要给大家介绍了关于Python创建二维数组与初始化的相关资料,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2022-12-12

最新评论