untiy 实时人像抠图
最近公司要求做一个抠图程序,作者想到接一个百度AI来实现抠图,做出来之后效果不是太好,然后领导说想要实时抠图,让用户现场体验更好些,没办法,只能推倒重来,然后在网上找个shader,然后自己改改,就实现了。
首先是shader代码
Shader "UniversalChromaKey" {Properties {_MainTex ("Base (RGB)", 2D) = "white" {}_Sens ("Sensibilidad", Range (0,.9)) = .3_Cutoff ("Recorte", Range (0,.9)) = .2_Color ("Chroma", Color) = (0, 1.0, 0)}SubShader {Tags { "Queue"="Transparent" "RenderType"="Transparent" }LOD 200CGPROGRAM#pragma surface surf Lambert alphasampler2D _MainTex;float _Cutoff;float _Sens;half3 _Color;struct Input {float2 uv_MainTex;};void surf (Input IN, inout SurfaceOutput o) {half4 c = tex2D (_MainTex, IN.uv_MainTex);o.Emission = c.rgb;float aR = abs(c.r - _Color.r) < _Sens ? abs(c.r - _Color.r) : 1;float aG = abs(c.g - _Color.g) < _Sens ? abs(c.g - _Color.g) : 1;float aB = abs(c.b - _Color.b) < _Sens ? abs(c.b - _Color.b) : 1; float a = (aR + aG + aB) / 3; if(a < _Cutoff){o.Alpha = 0;}else{o.Alpha = 1;}}ENDCG}FallBack "Diffuse"
}
控制shader脚本
using UnityEngine;
using System.Collections;
using UnityEngine.UI;public class ShaderControls : MonoBehaviour {float sensS, cutoffS;Color colS;// Use this for initializationvoid Start () {sensS = GetComponent<RawImage>().material.GetFloat("_Sens");cutoffS = GetComponent<RawImage>().material.GetFloat("_Cutoff");colS = GetComponent<RawImage>().material.GetColor("_Color");sens = sensS;cutoff = cutoffS; }// Update is called once per framevoid Update () {}public float sens, cutoff;public string r = "99", g = "205", b ="77";//void OnGUI()//{// sens = GUI.HorizontalSlider(new Rect(25, 25, 100, 30), sens, 0.0f, 1.0f);// cutoff = GUI.HorizontalSlider(new Rect(25, 70, 100, 30), cutoff, 0.0f, 1.0f);// r = GUI.TextField(new Rect(25, 120, 40, 20), r);// g = GUI.TextField(new Rect(70, 120, 40, 20), g);// b = GUI.TextField(new Rect(120, 120, 40, 20), b);// if (GUI.Button(new Rect(25, 160, 100, 30), "Reset"))// {// sens = sensS;// cutoff = cutoffS;// r = (colS.r * 255f).ToString();// g = (colS.g * 255f).ToString();// b = (colS.b * 255f).ToString();// }// GetComponent<RawImage>().material.SetFloat("_Sens", sens);// GetComponent<RawImage>().material.SetFloat("_Cutoff", cutoff);// try// {// Color col = new Color(int.Parse(r) / 255f, int.Parse(g) / 255f, int.Parse(b) / 255f);// //print (col);// GetComponent<RawImage>().material.color = col;// }// catch (UnityException e)// {// }//}
}
控制外部摄像机脚本
using UnityEngine;
using System.Collections;
using UnityEngine.Video;
using UnityEngine.UI;
using System.IO;public class CameraControl : MonoBehaviour {/// <summary>/// 外部摄像头/// </summary>private WebCamTexture webTex;/// <summary>/// UI父物体/// </summary>private Canvas canvas;/// <summary>/// 摄像头映射画面/// </summary>private RawImage Camera_image;private void Start(){canvas = GameObject.Find("Canvas").GetComponent<Canvas>();Camera_image = canvas.transform.Find("Camera_screen").GetComponent<RawImage>();StartCoroutine(CallCamera());}/// <summary>/// 打开摄像头/// </summary>/// <returns></returns>IEnumerator CallCamera(){//等待用户允许访问yield return Application.RequestUserAuthorization(UserAuthorization.WebCam);//如果用户允许访问,开始获取图像 if (Application.HasUserAuthorization(UserAuthorization.WebCam)){WebCamDevice[] devices = WebCamTexture.devices;string devicename = devices[0].name;webTex = new WebCamTexture(devicename, Screen.width, Screen.height);Camera_image.texture = webTex;webTex.Play();}}}
控制shader脚本和打开摄像头脚本挂载到一个RawImage上面,shader脚本放在材质球上,然后把材质球也放在RawImage上面,
最后效果
由于绿幕不平和有阴影导致的绿幕没有扣掉(测试用的绿幕),如果现场绿幕是平的,效果会更好,作者把项目工程源文件分享出来了,想要的可以下载,如果有不明白的地方可以加QQ群:636926481(互相交流)。
Demo:https://download.csdn.net/download/qq_39954479/12330999
untiy 实时人像抠图相关推荐
- 【Matting】MODNet:实时人像抠图模型-NCNN C++量化部署
相关链接: [Matting]MODNet:实时人像抠图模型-onnx python部署 [Matting]MODNet:实时人像抠图模型-笔记 [Matting]MODNet:实时人像抠图模型-on ...
- 【Matting】MODNet:实时人像抠图模型-笔记
paper:MODNet: Real-Time Trimap-Free Portrait Matting via Objective Decomposition (AAAI 2022) github: ...
- 超强实时人像抠图算法开源,随心所欲背景替换!
谈到人像抠图想必大家都不陌生.在影视剪辑.直播娱乐.线上教学.视频会议等场景中都有人像分割的身影,它可以帮助用户实时.精准地将人物和背景精准识别出来,实现更精细化的人物美颜.背景虚化替换.弹幕穿人等, ...
- RobustVideoMatting实时人像抠图实践
一.准备工作 Code地址:GitHub - PeterL1n/RobustVideoMatting: Robust Video Matting in PyTorch, TensorFlow, Ten ...
- android拍照自动裁剪_新功能上线!智能人像抠图、图片自由裁剪,PPT 还能这么玩?...
众所周知,不少人买平板都是买前「生产力」,买后某奇艺.其实,要打破这个魔咒,一个 WPS 可能就够了. 安卓平板 WPS 不仅能拥有电脑版般的体验,还针对触屏推出了众多实用且前沿的新功能,帮助你快速提 ...
- 一键抠图Portrait Matting人像抠图 (C++和Android源码)
一键抠图Portrait Matting人像抠图 (C++和Android源码) 目录 一键抠图Portrait Matting人像抠图 (C++和Android源码) 1. 项目介绍: 2. MOD ...
- openvino c++推理华盛顿大学BackgroundMattingV2模型人像抠图
使用openvino c++推理华盛顿大学BackgroundMattingV2模型人像抠图. 基本性能:仅使用CPU可以实现720P实时推理 开源项目:https://github.com/king ...
- 视频人像抠图论文阅读
视频人像抠图论文阅读 1.Prime Sample Attention in Object Detection 2.Mask RCNN 3.Background Matting: The World ...
- (十)老照片修复、图像超分、图片提高分辨率、图片高清化、图片清晰化、黑白图片上色、人脸祛斑、美颜、人体瘦身、图像去噪、人像抠图、批量处理、视频提高分辨率、视频逐帧修复
(十)老照片修复.图像超分.图片提高分辨率.图片高清化.图片清晰化.黑白图片上色.人脸祛斑.美颜.人体瘦身.图像去噪.人像抠图.批量处理.视频提高分辨率.视频逐帧修复 本文的代码的功能是:可以对图片文 ...
最新文章
- R语言do.call函数和call函数实战
- spring cloud中通过配置文件自定义Ribbon负载均衡策略
- linux-RPM安装
- git中的暂存区与工作区
- Fragment间的通信
- Java多线程--synchronized修饰普通方法和修饰静态方法的区别
- [翻译] UIImageView-Letters
- 与Win8之磁盘活动时间100%斗争心得
- 学习编程的条件是什么?
- 添加RPMfusion仓库
- Python Challenge 过关心得(0)
- 计算机软件图标不正常,电脑桌面软件图标显示异常
- 【C++】c++修改IE浏览器的Internet选项
- Photoshop调出田园照片唯美手绘油画效果
- AUTOSAR MCAL CAN Driver 接口函数
- python报错warning: install_lib: 'build\lib' does not exist -- no Python modules to install
- android 捕获按键,Android捕获home和recent app按键
- 【c++】保留两位小数
- C# + PHP RSA保密通讯
- 是一个新的开始,还是冥冥之中已经在路上。
热门文章
- CAD图形的缩放——鸟瞰
- js中15位及18位身份证号码的校验
- 教育培训app开发迅速成长的原因是?未来趋势如何?
- SPOJ 7258 SUBLEX 后缀数组_二分答案_前缀和
- 《影响力》第四章:社会认同
- 美国SigmasTek泰克蓄电池特点-VRLA蓄电池及其应用
- 知识点滴 - VRLA铅酸电池
- Skyline6.5系列覆盖三维地理信息产业上下游
- [JS]div根据其中内容自适应宽度和高度
- R语言临床预测模型:分层构建COX生存回归模型STRATIFIED COX MODEL、KM生存曲线、PH假设检验...