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人像分割内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Python中利用算法优化性能的技巧分享

    Python中利用算法优化性能的技巧分享

    这篇文章主要为大家详细介绍了Python中12个可以利用算法优化性能的技巧,文中的示例代码简洁易懂,具有一定的借鉴价值,有需要的小伙伴可以了解下
    2025-04-04
  • Python API len函数操作过程解析

    Python API len函数操作过程解析

    这篇文章主要介绍了Python API len函数操作过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-03-03
  • PaddleOCR 识别表情包文字示例详解

    PaddleOCR 识别表情包文字示例详解

    这篇文章主要为大家介绍了PaddleOCR 识别表情包文字示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-08-08
  • Tensorflow2.4从头训练Word Embedding实现文本分类

    Tensorflow2.4从头训练Word Embedding实现文本分类

    这篇文章主要为大家介绍了Tensorflow2.4从头训练Word Embedding实现文本分类,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-01-01
  • python 2.7.14安装图文教程

    python 2.7.14安装图文教程

    这篇文章主要为大家详细介绍了python 2.7.14安装图文教程,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-04-04
  • python reshape和transpose的区别小结

    python reshape和transpose的区别小结

    reshape() 和 transpose() 是用于改变数组或张量形状的两种不同方法,本文主要介绍了python reshape和transpose的区别小结,具有一定参考价值,感兴趣的可以了解一下
    2024-02-02
  • selenium执行js并绕过webdriver监测常见方法

    selenium执行js并绕过webdriver监测常见方法

    这篇文章主要为大家介绍了selenium执行js并绕过webdriver监测常见方法,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步早日升职加薪
    2022-04-04
  • 详解Selenium 元素定位和WebDriver常用方法

    详解Selenium 元素定位和WebDriver常用方法

    这篇文章主要介绍了详解Selenium 元素定位和WebDriver常用方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-12-12
  • 浅谈django三种缓存模式的使用及注意点

    浅谈django三种缓存模式的使用及注意点

    这篇文章主要介绍了浅谈django 三种缓存模式的使用及注意点,详细的介绍了三种缓存模式,非常具有实用价值,需要的朋友可以参考下
    2018-09-09
  • 利用Python实现图书超期提醒

    利用Python实现图书超期提醒

    很多人喜欢逛图书馆,时不时去借本书,但每本书可能只可以借两个月,一旦超期不还就会进行相应的处罚!为什么不写个脚本来通知自己图书超期呢?说了这么多废话,我们就进入主题吧!!!
    2016-08-08

最新评论