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针对不定分隔符切割提取字符串的方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-10-10
  • 解决python2.7 查询mysql时出现中文乱码

    解决python2.7 查询mysql时出现中文乱码

    这篇文章主要介绍了python操作mysql中文显示乱码的解决方法,是Python数据库程序设计中经常会遇到的问题,非常具有实用价值,需要的朋友可以参考下
    2016-10-10
  • 基于python中pygame模块的Linux下安装过程(详解)

    基于python中pygame模块的Linux下安装过程(详解)

    下面小编就为大家带来一篇基于python中pygame模块的Linux下安装过程(详解)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-11-11
  • Python爬虫之Selenium鼠标事件的实现

    Python爬虫之Selenium鼠标事件的实现

    这篇文章主要介绍了Python爬虫之Selenium鼠标事件的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-12-12
  • Python常用标准库之os模块功能

    Python常用标准库之os模块功能

    这篇文章主要介绍了Python常用标准库之os模块功能,os模块的主要功能有系统相关、目录及文件操作、执行命令和管理进程,其中的进程管理功能主要是Linux相关的,此处不做讨论,对Python标准库os相关知识感兴趣的朋友跟随小编一起看看吧
    2022-11-11
  • python转换wrf输出的数据为网页可视化json格式

    python转换wrf输出的数据为网页可视化json格式

    这篇文章主要介绍了python转换wrf输出的数据为网页可视化json格式,文章围绕主题展开详细的内容介绍,具有一定的参考价值,需要的小伙伴可以参考一下
    2022-09-09
  • Python面向对象基础入门之设置对象属性

    Python面向对象基础入门之设置对象属性

    这篇文章主要给大家介绍了关于Python面向对象基础入门之设置对象属性的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2018-12-12
  • python使用锁访问共享变量实例解析

    python使用锁访问共享变量实例解析

    这篇文章主要介绍了python使用锁访问共享变量实例解析,分享了相关代码示例,小编觉得还是挺不错的,具有一定借鉴价值,需要的朋友可以参考下
    2018-02-02
  • Python多元非线性回归及绘图的实现

    Python多元非线性回归及绘图的实现

    本文主要介绍了Python多元非线性回归及绘图的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2024-04-04
  • 新版Pycharm中Matplotlib不会弹出独立的显示窗口的问题

    新版Pycharm中Matplotlib不会弹出独立的显示窗口的问题

    这篇文章主要介绍了解决新版Pycharm中Matplotlib不会弹出独立的显示窗口的问题,本文通过图文并茂的形式给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-06-06

最新评论