知道的越多,不知道的就越多,业余的像一棵小草!

编辑:业余草
来源:https://www.xttblog.com/?p=5019

B站:业余草

人脸融合正在流行,毕竟这个社会一直都是看脸的时代!

今天周六,抽个时间给大家闲聊一下人脸融合技术。

说到这个技术,很多人可能很陌生,但是当提到 AI 人脸识别,AI 换脸,AI 算命,人脸美化等技术,相信都不陌生了。

况且这个技术目前 BAT 等巨头都有涉猎,国内的人工智能巨头新秀也不例外。可以说谁先占领了 AI,谁就在下一代浪潮中立身于不败之地。

说回技术本身,我也只是略懂皮毛。下面说一下,具体的实现思路。

如上图所示,在图片上的人脸中,找出这些特征点(一般,找 68、72 个就可以了)。

如果脸型相同或相近,那么就可以换脸,进行融合了。

说起来简单,但是实现起来就涉及到很多算法了。

目前市面上多数的 APP 都是借助 Face++,BAT 等提供的 sdk api 实现的。这方面的 API 调用费用还挺贵的!

我的实现也很简单,借助开源类库,加上巨头提供的 API,基于 Java 实现人脸融合。

首先,利用 opencv 获得关键特征点。

public static void main(String[] args) throws FileNotFoundException {String path1 = ResourceUtils.getFile("classpath:img/3m.jpg").getAbsolutePath();String path2 = ResourceUtils.getFile("classpath:img/2m.jpg").getAbsolutePath();String savePath = "/User/业余草/face";//图片存放位置// 参数说明// type :opencv和baidu 两种获取人脸标记的位置点// true 使用全部点位进行分割,false使用外部轮廓的点位进行融合OpenCVFaceSwap.faceMerge(path1,path2,savePath,"opencv",true);
}

然后,进行第三方 API 调用。

//人脸检测
ImageInfo imageInfo = getRGBData(path1);
List<FaceInfo> faceInfoList = new ArrayList<FaceInfo>();
errorCode = faceEngine.detectFaces(imageInfo.getImageData(), imageInfo.getWidth(), imageInfo.getHeight(), imageInfo.getImageFormat(), faceInfoList);
System.out.println(faceInfoList);
//特征提取
FaceFeature faceFeature = new FaceFeature();
errorCode = faceEngine.extractFaceFeature(imageInfo.getImageData(), imageInfo.getWidth(), imageInfo.getHeight(), imageInfo.getImageFormat(), faceInfoList.get(0), faceFeature);
System.out.println("特征值大小:" + faceFeature.getFeatureData().length);
//人脸检测2
ImageInfo imageInfo2 = getRGBData(path2);
List<FaceInfo> faceInfoList2 = new ArrayList<FaceInfo>();
errorCode = faceEngine.detectFaces(imageInfo2.getImageData(), imageInfo2.getWidth(), imageInfo2.getHeight(),imageInfo.getImageFormat(), faceInfoList2);
System.out.println(faceInfoList);
//特征提取2
FaceFeature faceFeature2 = new FaceFeature();
errorCode = faceEngine.extractFaceFeature(imageInfo2.getImageData(), imageInfo2.getWidth(), imageInfo2.getHeight(), imageInfo.getImageFormat(), faceInfoList2.get(0), faceFeature2);
System.out.println("特征值大小:" + faceFeature.getFeatureData().length);
//特征比对
FaceFeature targetFaceFeature = new FaceFeature();
targetFaceFeature.setFeatureData(faceFeature.getFeatureData());
FaceFeature sourceFaceFeature = new FaceFeature();
sourceFaceFeature.setFeatureData(faceFeature2.getFeatureData());
FaceSimilar faceSimilar = new FaceSimilar();
errorCode = faceEngine.compareFaceFeature(targetFaceFeature, sourceFaceFeature, faceSimilar);
System.out.println("相似度:" + faceSimilar.getScore());
//引擎卸载
errorCode = faceEngine.unInit();

上面就是比较核心的代码。

public static Mat flow(Mat mat) {// 灰度mat = OpencvUtil.gray(mat); // 二值化 此处绝定图片的清晰度mat = OpencvUtil.binary(mat);  // 腐蚀  去除背景图片mat = OpencvUtil.erode(mat, 1);   return mat;
}
/*** 灰化处理** @return*/
public static Mat gray(Mat mat) {Mat gray = new Mat();opencv_imgproc.cvtColor(mat, gray, opencv_imgproc.COLOR_BGR2GRAY, 1);return gray;
}
/*** 增强对比* @param mat* @return*/
public static Mat splitBGR(Mat mat) { MatVector splitBGR = new MatVector();opencv_core.split(mat, splitBGR);for (int i = 0; i<mat.channels(); i++){opencv_imgproc.equalizeHist(splitBGR.get(i), splitBGR.get(i));}  opencv_core.merge(splitBGR, mat);  return mat;
}

另外还涉及到一些图片的特殊处理,利用的也是 Opencv。

说白了,我不具有核心技术,我就是一个 API 调用工程师。核心算法我一概不懂,专业造轮子。

做的牛逼一点的,可以从视频中提取图片,再进行融合。

感兴趣的,可以尝试自己查查资料,借助各云服务厂商的免费 API 调用额度,做一款让自己“吃到饱”的应用!

本文中的源码,只是一个简单的 demo,有兴趣的可以加我 WX:codedq,拿去接着研究研究!

使用 Java 实现人脸融合!相关推荐

  1. 使用Java开发人脸融合(换军装等)并接入微信小程序

    先看一个演示图片(图片不是静止哦只是慢) 如何接入人脸融合功能到小程序 创建一个AI应用 https://ai.qq.com/cgi-bin/console_overview 登录腾讯AI,创建并勾选 ...

  2. python h5游戏_从零开始制作H5人脸融合小游戏

    去年的建军节,一个展示军装照的H5人脸融合游戏火遍朋友圈,带来很好的传播效果.最近欧冠决赛要来了,公司决定做一个寻找和你最像的欧冠球星的H5游戏,那么该怎么做呢?认真分析了一下,这个游戏其实用到的技术 ...

  3. 腾讯AI 人脸融合接口

    目录 一官方文档链接 二官方java sdk 三本地调用 前端ajax跨域请求 后端java请求腾讯接口 注意事项 官方sdk包截图 一.官方文档链接 http://open.youtu.qq.com ...

  4. 人脸融合java_java人脸融合

    java人脸融合 时间:2020-06-04 11:22:43  来源:  作者: JAVA人脸融合,基于javacv技术,将两张人脸进行深度融合,使用javacv识别人脸和获取人脸68个关键点. 介 ...

  5. 「云毕业照」刷爆朋友圈!AI人脸融合技术谁家强?

    点击上方"3D视觉工坊",选择"星标" 干货第一时间送达 2020,特殊的毕业季,需要特殊的纪念. 之前看过日本东京的BBT大学使用的「Newme」机器人代替学 ...

  6. java实现人脸识别(使用百度云V3版本)

    2017年,开发了第一个版本的人脸识别,当时费时有5天之久终于写出来了,但是只适用于火狐浏览器,别的浏览器都打不开摄像头. 2018年,将人脸识别重新完善,可以支持360.火狐.谷歌等主流浏览器,版本 ...

  7. java实现人脸识别V3版本开发

    有段时间没有写更新公众号了,也许好多人都忘记了自己还关注了这么个公众号. 因为这段时间确实是有其他的事比较忙,还有一个原因就是自己在技术方面没有学习新的东西,所以没有可更新的(包括博客) 今天,我决定 ...

  8. 换发型算法_GitHub - fredliu168/yry: yry(颜如玉)—— 一个实现人脸融合的算法,可以接近腾讯天天P图疯狂变脸功能的效果...

    颜如玉 颜如玉 -- python 人脸融合程序,可实现类似天天P图疯狂换脸.face++人脸融合效果 项目描述 最近随着各种技术的发展,图像方面的人脸处理技术越来越广泛.各大相机软件都有美颜.贴图. ...

  9. 想知道未来孩子长相?Python人脸融合告诉你

    和换脸算法的简单粗暴相比,人脸融合算法就要弹性的多.顾名思义,人脸融合是对两张人脸进行融合处理,生成的人脸同时具备两张人脸的外貌特征.人脸融合有什么实际意义呢?一个简单的应用就是用父母双方的脸部图片融 ...

最新文章

  1. php 缓存模块,PHP缓存之模块缓存(APC)_PHP教程
  2. Struts2环境下Tomcat启动异常:Exception starting filter struts2,报了一个java.lang.ClassNotFoundException
  3. RCNN (Regions with CNN) 目标物检测 Fast RCNN的基础
  4. Rsync和Sersync(企业实时同步方案)
  5. 数据结构课程设计----基数排序
  6. python中ix用法_Python中使用ix的数据帧子集
  7. Android P 消息
  8. 两种语言“争霸赛”,PHP速度领先C#
  9. Linux平台OpenGL之helloworld(十)
  10. DropDownList操作;ListBox操作;动态创建控件;Response.Write(欢迎学习ASP.NET''!);
  11. PLSQL导入.txt文件
  12. windows7/windows server 2008 r2升级至sp1
  13. 人工智能与大数据时代-2019
  14. 有这么一种东西,员工深恶痛绝,老板们却喜爱有加
  15. rhel配置DNS分析+实验
  16. Fabric 1.0源代码分析(22)Ledger #blkstorage(block文件存储)
  17. onRef在react中的使用
  18. colorkey唇釉是否安全_所谓的colorkey真假对比
  19. 分布式事务——seata简单使用
  20. 联发科 AI 智能核心板 - XY6877ZA(MT6877 天玑 900)

热门文章

  1. 21个MongoDB经典面试题
  2. 如何通过经纬度获取地址信息?
  3. iMovie教程:如何给视频添加效果?
  4. Jetpack Compose自定义view 画月亮
  5. AD 2020中添加LOGO的方法
  6. ILRuntime使用
  7. 微信小程序 仿抖音视频--整屏上下切换功能
  8. vue仿抖音视频列表(兼容微信内置X5浏览器)
  9. Python+Selenium安装及环境配置手把手教会你
  10. 河南省小学计算机教室配备目录,河南省教育厅关于印发《河南省中小学2021年春季电教教材推荐目录》的通知...