安庆大理运城常德铜陵江西
投稿投诉
江西南阳
嘉兴昆明
铜陵滨州
广东西昌
常德梅州
兰州阳江
运城金华
广西萍乡
大理重庆
诸暨泉州
安庆南充
武汉辽宁

简单实现一个虚拟形象系统

8月20日 程染筱投稿
  大厂技术坚持周更精选好文
  本文为来自字节教育成人与创新前端团队成员的文章,已授权ELab发布。
  前言
  上周启动居家开会的时候,看到有人通过虚拟形象功能,给自己带上了口罩、眼镜之类,于是想到了是不是也可以搞一个简单的虚拟形象系统。
  大致想来,分为以下几个部分:
  卷积神经网络(CNN)
  下面讲解一下三层CNN网络模型:
  卷积层提取特征
  卷积层的运算过程如下图,用一个卷积核扫完整张图片:
  通过动图能够更好的理解卷积过程,使用一个卷积核(过滤器)来过滤图像的各个小区域,从而得到这些小区域的特征值。
  在具体应用中,往往有多个卷积核,每个卷积核代表了一种图像模式(特征规则),如果某个图像块与此卷积核卷积出的值大,则认为此图像块十分接近于此卷积核。如果有N个卷积核,那么就认为图像中有N种底层纹理(特征),即用这N种基础纹理就能描绘出一副图像。
  总结:卷积层的通过卷积核的过滤提取出图片中局部的特征。
  疑问:上图卷积后,存在边缘数据特征提取减少,大家能想到什么方式处理呢?
  池化层(下采样)数据降维,避免过拟合
  池化层通常也被叫做下采样,目的是降低数据的维度,减少数据处理量。其过程大致如下:
  上图输入时是2020的,先进行卷积采样,卷积核为1010,采用最大池化的方式,输出为一个22大小的特征图。这样可将数据维度减少了10倍,方便后续模块处理。
  总结:池化层相比卷积层可以更有效的降低数据维度,不仅可减少运算量,还可以避免过拟合。
  过拟合是指训练误差和测试误差之间的差距太大。换句换说,就是模型复杂度高于实际问题,模型在训练集上表现很好,但在测试集上却表现很差。模型对训练集死记硬背(记住了不适用于测试集的训练集性质或特点),没有理解数据背后的规律,泛化能力差。
  全连接层输出结果
  全链接层是将我们最后一个池化层的输出连接到最终的输出节点上。假设,上述CNN的最后一个池化层的输出大小为〔554〕,即554100个节点。对于当前任务(仅识别、、),我们的输出会是一个三维向量,输出层共3个节点,如输出〔0。89,0。1,0。001〕,表示0。89的概率为猫。在实际应用中,通常全连接层的节点数会逐层递减,最终变为n维向量。
  举个例子
  假设我们有2个检测的特征为水平边缘和垂直边缘。垂直边缘卷积过程如下:
  最终结果如下:
  QA环节
  没错啦,前面的问题的答案就是边缘填充。
  faceapi。js
  faceapi。js是基于tensorflow。js实现的,内置了一些训练好的模型,这些模型应该是这个方案的核心,通过这些预先训练好的模型,我们可以直接使用而不需要自己再去标注、训练,极大的降低了成本。
  主要提供的功能如下:
  人脸检测:获取一张或多张人脸的边界,可用于确认人脸的位置、数量和大小
  人脸特征检测:包含68个人脸特征点位,获取眉毛、眼睛、鼻子、嘴、嘴唇、下巴等的位置和形状
  人脸识别:返回人脸特征向量,可用于辨别人脸
  人脸表情识别:获取人脸表情特征
  性别和年龄检测:判断年龄和性别。其中性别是判断人脸的女性化或男性化偏向,与真实性别不一定挂钩
  人脸检测
  针对人脸检测,faceapi提供了SSDMobilenetV1和TheTinyFaceDetector两个人脸检测模型:
  SSDMobilenetV1:能够计算图像中每个人脸的位置,并返回边界框以及每个框内包含人脸的概率,但是这个模型有5。4M,加载需要比较长的时间,弱网环境下加载过于耗时。
  TheTinyFaceDetector:这个模型性能非常好,可以做实时的人脸检测,且只有190kB,但是检测准确性上不如SSDMobilenetV1,且在检测比较小的人脸时不太可靠。相对而言,比较适合移动端或者设备资源优先的条件下。
  人脸特征检测
  针对人脸特征检测,提供了68点人脸特征检测模型,检测这68个点的作用是为了后续的人脸对齐,为后续人脸识别做准备,这里提供了两个大小的模型供选择:350kb和80kb,大的模型肯定是更准确,小的模型适合对精确度要求不高,对资源要求占用不高的场景。其输出的区域特征点区间固定如下:区域区间下巴〔1,16〕左眉〔18,22〕右眉〔23,27〕鼻梁〔28,31〕鼻子〔32,26〕左眼〔37,42〕右眼〔43,48〕外嘴唇〔49,60〕内嘴唇〔61,68〕
  人脸识别
  经过人脸检测以及人脸对齐以后,将检测到的人脸输入到人脸识别网络进行识别,从而获得一个128维的人脸特征向量。通过计算两个向量之间的距离(余弦值),就可以判断相似度。
  虚拟形象系统获取人脸图像
  目前主流浏览器提供了WebRTC能力,我们可以调用getUserMedia方法指定设备采集音视频数据。其中constrains详情参考MediaTrackConstraintsWebAPIsMDN〔1〕。constconstraints{audio:true,video:{width:1280,height:720}};
  constsetLocalMediaStream(mediaStream:MediaStream){
  videoRef。current。srcObjectmediaS
  }
  navigator
  。mediaDevices
  。getUserMedia(constraints)
  。then(setLocalMediaStream)
  获取人脸特征
  根据官方文档介绍,TheTinyFaceDetector模型与人脸特征识别模型组合的效果更好,故本文使用的人脸检测模型是TheTinyFaceDetector。
  这个模型有两个参数可以调整,包括inputSize和scoreThreshold,默认值是416和0。5。
  inputSize:表示检测范围(人脸边框),值越小检测越快,但是对小脸的检测准确不足,可能会检测不出,如果是针对视频的实时检测,可以设置比较小的值。
  scoreThreshold:是人脸检测得分的阈值,假如在照片中检测不到人脸,可以将这个值调低。
  首先我们要选择并加载模型(这里使用官网训练好的模型和权重参数)加载人脸检测模型
  awaitfaceApi。nets。tinyFaceDetector。loadFromUri(
  xxxweights,
  );
  加载特征检测模型
  awaitfaceApi。nets。faceLandmark68Net。loadFromUri(
  xxxweights,
  );
  转换人脸检测模型。faceapi的人脸检测模型默认是SSDMobilenetv1,这里需要显式调整为TheTinyFaceDetector模型。constoptionsnewfaceApi。TinyFaceDetectorOptions({
  inputSize,
  scoreThreshold,
  });
  人脸68点位特征集
  constresultawaitfaceApi
  。detectSingleFace(videoEl,options)人脸检测
  。withFaceL特征检测
  形象绘制
  经过上述计算,我们已经拿到了人脸68点位特征集。需要先计算点位相对坐标信息,然后进行形象绘制。constcanvascanvasRef。
  constcanvasCtxcanvas。getContext(2d);
  constdimsfaceApi。matchDimensions(canvas,videoEl,true);
  constresizedResultfaceApi。resizeResults(result,dims);
  本文使用的是一张256256的口罩图片,选取1号和16号点位绘制口罩,根据两点位之间的距离缩放口罩大小。
  这里主要调研了两种方式,分别是canvas绘制和媒体流绘制。
  canvas绘制
  首先想到的一种方式,video和canvas大小和位置固定,定时抓取video媒体流中图片,进行识别人脸,然后绘制在canvas上。const{positions}resizedResult。
  constleftPointpositions〔0〕;
  constrightPointpositions〔16〕;
  constlengthMath。sqrt(
  Math。pow(leftPoint。xrightPoint。x,2)
  Math。pow(leftPoint。yrightPoint。y,2),
  );
  canvasCtx?。drawImage(
  mask,
  0,
  0,
  265,
  265,
  leftPoint。x,
  leftPoint。y,
  length,
  length,
  );
  媒体流绘制
  canvas提供了一个api叫做captureStream〔2〕,会返回一个继承MediaStream的实例,实时视频捕获画布上的内容(媒体流)。我们可以在canvas上以固定帧率进行图像绘制,获取视频轨道。
  这样我们仅需保证video和canvas大小一致,位置无需固定,甚至canvas可以离屏不渲染。conststreamcanvasRef。current。captureStream!;
  mediaStreamres〔0〕。
  mediaStream。addTrack(stream。getVideoTracks〔0〕);
  videoRef。current!。srcObjectmediaS
  对比
  canvas绘制兼容性更好,但在实时通信场景下,需传递点位信息或端重复计算,容易受网络波动以及硬件设备影响,导致实际绘制出现偏差(依赖端能力)
  媒体流绘制兼容性较差,但是在直播等场景下效果会更好,在输出端做好已经做好媒体流融合,接收端依托媒体能力播放即可。同时内容也不易篡改
  实际效果
  因为这里仅使用了2个点位的信息,所以效果一般般。我们完全可以充分利用68个点位全面换肤,实现各种效果。
  延伸思考
  测评场景下:判断人脸数量、是否是用户本人,自动提醒用户,异常状态记录日志,监控人员可以后台查看
  学习场景下:判断用户是否离开屏幕等,提醒用户返回学习状态。
  弹幕场景下:检测人脸,解决弹幕遮挡问题
  。。。(欢迎补充)
  谢谢支持
  以上便是本次分享的全部内容,希望对你有所帮助
  喜欢的话别忘了分享、点赞、收藏三连哦。
  欢迎关注公众号ELab团队收货大厂一手好文章字节跳动校社招内推码:5UJF23C
  投递链接:https:job。toutiao。comsYSqdt8q
  可凭内推码投递字节教育成人与创新前端团队相关岗位哦
  参考资料
  〔1〕
  MediaTrackConstraintsWebAPIsMDN:https:developer。mozilla。orgenUSdocsWebAPIMediaTrackConstraints
  〔2〕
  captureStream:https:developer。mozilla。orgzhCNdocsWebAPIHTMLCanvasElementcaptureStream
  〔3〕
  一文看懂卷积神经网络CNN(基本原理独特价值实际应用)产品经理的人工智能学习库:https:easyai。techaidefinitioncnn
  〔4〕
  基于faceapi。js实现人脸识别的实践和总结:https:zhuanlan。zhihu。comp330540757
  〔5〕
  faceapi。js:在浏览器中进行人脸识别的JS接口:https:zhuanlan。zhihu。comp39918438
  〔6〕
  卷积神经网络:https:github。combighuang624AndrewNgDeepLearningnotesblobmasterdocsConvolutionalNeuralNetworksE58DB7E7A7AFE7A59EE7BB8FE7BD91E7BB9C。md
  〔7〕
  CNNExplainer:https:poloclub。github。iocnnexplainer
  〔8〕
  faceapi。js:https:github。comjustadudewhohacksfaceapi。js
  〔9〕
  卷积神经网络(ConvolutionalNeuralNetwork,CNN)LeoVan范叶亮:https:leovan。mecn201808cnn
  END
投诉 评论 转载

长期喝黄芪水好处多,但这3种人喝是没病找病生活中很多人都对于养生关注度很高,在日常会选择用一些中药来泡水饮用,其中黄芪就是很多人的泡水选择,因为它是个补气佳品,素来有小人参的称号。那么,到底黄芪和人参之间有什么区别呢?……郭碧婷ins取关向佐!曝郭碧婷回港办离婚手续,向太态度似有深郭碧婷与向佐通过综艺结缘,在向太的撮合下向佐成功追到郭碧婷,两人不管是恋爱还是结婚都是在网友的见证下完成,也是荧屏恩爱夫妻之一。直到郭碧婷二胎坐月子期间,媒体拍到向佐深夜与一位……中国网坛迎喜讯!19岁小将郑钦文再创奇迹,获61万奖金乐开花近日法国网球公开赛吸引了很多球迷的关注,这是一项经典的赛事,位于法国巴黎举办,每一年都会得到许多媒体的报道。目前来看,参加法网的中国选手寥寥无几,并且她们在资格赛中没有发挥出最……简单实现一个虚拟形象系统大厂技术坚持周更精选好文本文为来自字节教育成人与创新前端团队成员的文章,已授权ELab发布。前言上周启动居家开会的时候,看到有人通过虚拟形象功能,给自己带上了……留给华为的时间不多了!年底将有10亿人连接到5G,如何破局成2019年6月6日,工信部正式向中国电信、中国移动、中国联通、中国广电发放5G商用牌照,中国正式进入5G商用元年;2020年,包括华为、小米在内的行业领军企业推出5G手机,中国……过分了!1。2亿巨星6场3球沦为替补,巴萨再出损招,马竞无动新赛季开始后的巴萨状态出色,除了首轮战平巴列卡诺外,随后直接一波5连胜反超皇马成为西甲领头羊,欧冠小组赛首轮面对比尔森胜利也是拿到一场5:1的大胜,今夏加盟的莱万大放异彩,6场……电商巨头,争夺中东土豪的钱包深燃(shenrancaijing)原创作者唐亚华编辑黎明头顶一块布,全球我最富的中东人,这段时间因为世界杯成了全球的焦点。其实,中国的互联网创业者们,……跨越时空的文明对话中埃卢克索孟图神庙联合考古的故事来源:人民日报孟图神庙遗址群出土的宝石饰品及残件。孟图神庙遗址群出土的小型人偶乌沙不提。孟图神庙遗址群出土的青铜奥西里斯雕像。经过中埃考古学家4年来的携……基于低代码的工作流自循环节点设计工作流场景中,循环节点随处可见场景也比较多,比如多任务执行、多人审批、多API交互以及各种条件、参数设置最近在设计工作流后端引擎,把其中涉及到的两个特殊功能点分享出来,希……13mini凉了之后,下一个居然是iPhone14Plus,头条创作挑战赛苹果各个机型的销量真是让人捉摸不透,iPhone12mini、13mini两代mini销量十分惨淡,iPhone13系列的四款手机中,iPhone13min……食物变质,加热就能重新吃?看完你就明白了很多人喜欢囤积食物,尽管有些过了保质期,甚至发霉,还是不舍得扔。有时为避免浪费还会把过期变质的食品加热后食用。那么,变质后的食物经过高温煮沸还能不能吃呢?下面我们就来一起……六方云获亿元C1轮融资客户体验平台Emplifi收购Pixl文宋思杭11月2日,据牛透社不完全统计,全球SaaS领域共发生7起融资,其中,国内4起,国外3起,涉及医学、物联网、安全、教育、云计算等领域。在国内,网络安全公司六……
有什么办法可以解决草莓鼻?它是湿气最怕的一道菜,营养美味又好吃,2元一斤,湿气跑光你可以永远相信杨洋的硬照!光着脚丫穿西装,大背头造型太迷人凡人故事化妆师梁佳在人间贩卖美丽字母哥三双雄鹿客场胜绿军10领先,双探花合计31中10李铁为什么被查?足坛反腐风暴来了?大爆冷!雷霆残阵打崩联盟第1,单场轰150分杜兰特威少当年没金匮肾气丸补阳上火?分享3种搭配方案,补阳气清火气刘琳与名导同居3年不结婚,分手后转身嫁给穷小子,如今她怎样了0分2分3分!76人新援比湖人还差火箭帮被打爆,哈登降薪白费猜一下?谁进新加坡大满贯男单四强周线底部放出巨量的个股名单《2016年度中国慈善捐助报告》在京发布捐赠总额上涨25远方女儿写给父亲的一封信卡地亚蓝气球怎么样?卡地亚蓝气球值得买吗?新婚姻法结婚彩礼退还的条件是什么?蚂蚁庄园今日问题土豆发芽后还能吃吗支付宝蚂蚁庄园小鸡问答9月中学作文我眼中的妈妈场地租赁合同批驳造句用批驳造句大全鲸教学反思名字里带羽的寓意窗外的风景作文四篇感情中,真正喜欢一个人的10种感觉

友情链接:中准网聚热点快百科快传网快生活快软网快好知文好找七猫云易事利