“人像抠图”案例源码详解 (Python)
seg_gui_meet.py用于人像抠图
- 导入基础包作用详解
- 构建程序图形化类
- 初始化处理函数(人体抠图应用启动时首先被调用)
- 程序入口
打开testpose人像姿态检测案例
在VScode中进入代码编辑状态。
导入相关库
'''seg_gui_meet.py用于examples中的人体抠图'''
'''
导入基础包作用详解
'''
#导入包介绍开始
#cvs包是Aid内置的代替cv2的包,基本上cv2支持的函数cvs一样支持,cvs包在X模式下和非X模式下一样执行
#cvs更多详细介绍查看官网文档OpenCVhttps://www.aidlearning.net/showdoc/web/#/5?page_id=45
from cvs import *
#NumPy(Numerical Python) 是 Python 语言的一个扩展程序库,
#支持大量的维度数组与矩阵运算,
#此外也针对数组运算提供大量的数学函数库。
#在机器学习算法中大部分都是调用Numpy库来完成基础数值计算的。
import numpy as np
# tflite_gpu,GPU加速代码由AID提供,TensorFlow Lite 支持多种硬件加速器。GPU 是设计用来完成高吞吐量的大规模并行工作的。
# 因此,它们非常适合用在包含大量运算符的神经网络上,一些输入张量可以容易的被划分为更小的工作负载且可以同时执行,通常这会导致更低的延迟。
# 在最佳情况下,用 GPU 在实时应用程序上做推理运算已经可以运行的足够快,而这在以前是不可能的
import tflite_gpu
#导入包介绍结束
##############################################################################
tflite=tflite_gpu.tflite()
back_img_path=('res/dock_vbig.jpeg','res/taj_vbig.jpg','res/sunset_vbig.jpg','res/test.jpg','res/bg1.jpg','res/bg2.jpg','res/bg3.jpg','res/bg4.jpg')
bgnd_mat=cv2.imread('res/dock_vbig.jpeg')
mod=0
构建程序图形化类
'''
MyApp类用于构建程序的图形化
'''
class MyApp(App):
#初始化函数,self表示创建实例本身, *args传递可变参数,__init__()的第一个参数永远是self
def __init__(self, *args):
#这是对继承自父类的属性进行初始化。而且是用父类的初始化方法来初始化继承的属性。
#也就是说,子类继承了父类的所有属性和方法,父类属性自然会用父类方法来进行初始化。
#super() 函数是用于调用父类(超类)的一个方法。
#super() 是用来解决多重继承问题的,直接用类名调用父类方法在使用单继承的时候没问题,
#但是如果使用多继承,会涉及到查找顺序(MRO)、重复调用(钻石继承)等种种问题。
#MRO 就是类的方法解析顺序表, 其实也就是继承父类方法时的顺序表
super(MyApp, self).__init__(*args)
def idle(self):
#在每次更新循环中idle函数都会被调用
self.aidcam.update()
def main(self):
#创建一个VBox容器,使用垂直方式(还有HBox水平盒子,以及widget)
#定义变量main_container,它是整个图形界面的主框架,用于包含其他APP中的控件,相当于容器
#gui.VBox这段代码是在手机上画出一个宽度为360px,高度为680px的程序主框架范围。
#style是它的样式,margin:0 auto;相当于margin:0 auto 0 auto;即上下是0,左右是自动。
#这时main_container中的元素会水平居中
main_container = VBox(width=360, height=680, style={
'margin':'0px auto'})
main_container.css_width = "98%"
#添加摄像头控件
#OpencvVideoWidget函数是在手机 画一个用于显示调用手机摄像头拍摄图像的框,宽度350px,高度400px,
#将它赋值给self.aidcam,aidcam表示摄像头控件。
self.aidcam = OpencvVideoWidget(self, width=350, height=400)
#设置main_container的宽度为手机屏幕的宽度的98%
self.aidcam.css_width = "98%"
self.aidcam.style['margin'] = '10px'
#给aidcam控件一个标记
self.aidcam.identifier="myimage_receiver"
main_container.append(self.aidcam)
self.lbl = Label('点击图片选择你喜欢的虚拟背景:')
main_container.append(self.lbl)
#创建一个HBox容器,使用水平方式
#定义变量m_container,用于包含图.宽度为360px,高度为130px
#style是它的样式,margin:0 auto;相当于margin:0 auto 0 auto;即上下是0,左右是自动。
#这时m_container中的元素会水平居中
m_container = HBox(width=360, height=130, style={
'margin':'0px auto'})
m_container.css_width = "98%"
self.img11 = Image('/res:'+os.getcwd()+'/'+back_img_path[4],