范文健康探索娱乐情感热点
投稿投诉
热点动态
科技财经
情感日志
励志美文
娱乐时尚
游戏搞笑
探索旅游
历史星座
健康养生
美丽育儿
范文作文
教案论文
国学影视

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

  大厂技术 坚持周更 精选好文
  本文为来自 字节教育-成人与创新前端团队成员的文章,已授权 ELab 发布。
  前言
  上周启动居家开会的时候,看到有人通过「虚拟形象」功能,给自己带上了口罩、眼镜之类,于是想到了是不是也可以搞一个简单的虚拟形象系统。
  大致想来,分为以下几个部分:
  卷积神经网络(CNN)
  下面讲解一下三层CNN网络模型:
  卷积层——提取特征
  卷积层的运算过程如下图,用一个卷积核扫完整张图片:
  通过动图能够更好的理解卷积过程,使用一个卷积核(过滤器)来过滤图像的各个小区域,从而得到这些小区域的特征值。
  在具体应用中,往往有多个卷积核,每个卷积核代表了一种图像模式(特征规则),如果某个图像块与此卷积核卷积出的值大,则认为此图像块十分接近于此卷积核。如果有N个卷积核,那么就认为图像中有N种底层纹理(特征),即用这N种基础纹理就能描绘出一副图像。
  总结:卷积层的通过卷积核的过滤提取出图片中局部的特征。
  疑问:上图卷积后,存在边缘数据特征提取减少,大家能想到什么方式处理呢?
  池化层(下采样)——数据降维,避免过拟合
  池化层通常也被叫做下采样,目的是降低数据的维度,减少数据处理量。其过程大致如下:
  上图输入时是20 20的,先进行卷积采样,卷积核为10 10,采用最大池化的方式,输出为一个2 2大小的特征图。这样可将数据维度减少了10倍,方便后续模块处理。
  总结:池化层相比卷积层可以更有效的降低数据维度,不仅可减少运算量,还可以避免过拟合。
  过拟合是指训练误差和测试误差之间的差距太大。换句换说,就是模型复杂度高于实际问题,模型在训练集上表现很好,但在测试集上却表现很差。模型对训练集"死记硬背"(记住了不适用于测试集的训练集性质或特点),没有理解数据背后的规律,泛化能力差。
  全连接层——输出结果
  全链接层是将我们最后一个池化层的输出连接到最终的输出节点上。假设,上述CNN的最后一个池化层的输出大小为 [5 5 4],即 5 5 4=100 个节点。对于当前任务(仅识别 、 、 ),我们的输出会是一个三维向量,输出层共 3 个节点,如输出[0.89, 0.1, 0.001],表示0.89的概率为猫。在实际应用中,通常全连接层的节点数会逐层递减,最终变为n维向量。
  举个例子
  假设我们有2个检测的特征为「水平边缘」和「垂直边缘」。「垂直边缘」卷积过程如下:
  最终结果如下:
  Q&A环节
  没错啦,前面的问题的答案就是边缘填充。
  face-api.js
  face-api.js 是基于 tensorflow.js 实现的,内置了一些训练好的模型,这些模型应该是这个方案的核心,通过这些预先训练好的模型,我们可以直接使用而不需要自己再去标注、训练,极大的降低了成本。
  主要提供的功能如下:
  人脸检测:获取一张或多张人脸的边界,可用于确认人脸的位置、数量和大小
  人脸特征检测:包含68个人脸特征点位,获取眉毛、眼睛、鼻子、嘴、嘴唇、下巴等的位置和形状
  人脸识别:返回人脸特征向量,可用于辨别人脸
  人脸表情识别:获取人脸表情特征
  性别和年龄检测:判断年龄和性别。其中"性别"是判断人脸的女性化或男性化偏向,与真实性别不一定挂钩
  人脸检测
  针对人脸检测,face-api 提供了 SSD Mobilenet V1 和 The Tiny Face Detector 两个人脸检测模型:
  SSD Mobilenet V1:能够计算图像中每个人脸的位置,并返回边界框以及每个框内包含人脸的概率,但是这个模型有 5.4M,加载需要比较长的时间,弱网环境下加载过于耗时。
  The Tiny Face Detector :这个模型性能非常好,可以做实时的人脸检测,且只有190kB,但是检测准确性上不如 SSD Mobilenet V1,且在检测比较小的人脸时不太可靠。相对而言,比较适合移动端或者设备资源优先的条件下。
  人脸特征检测
  针对人脸特征检测, 提供了 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详情参考 MediaTrackConstraints - Web APIs | MDN[1]。const constraints = { audio: true, video: { width: 1280, height: 720 } };
  const setLocalMediaStream = (mediaStream: MediaStream) => {
  videoRef.current.srcObject = mediaStream;
  }
  navigator
  .mediaDevices
  .getUserMedia(constraints)
  .then(setLocalMediaStream)
  获取人脸特征
  根据官方文档介绍,The Tiny Face Detector模型与人脸特征识别模型组合的效果更好,故本文使用的人脸检测模型是The Tiny Face Detector。
  这个模型有两个参数可以调整,包括 inputSize和scoreThreshold,默认值是 416 和 0.5。
  inputSize:表示检测范围(人脸边框),值越小检测越快,但是对小脸的检测准确不足,可能会检测不出,如果是针对视频的实时检测,可以设置比较小的值。
  scoreThreshold:是人脸检测得分的阈值,假如在照片中检测不到人脸,可以将这个值调低。
  首先我们要选择并加载模型(这里使用官网训练好的模型和权重参数)// 加载人脸检测模型
  await faceApi.nets.tinyFaceDetector.loadFromUri(
  "xxx/weights/",
  );
  // 加载特征检测模型
  await faceApi.nets.faceLandmark68Net.loadFromUri(
  "xxx/weights/",
  );
  转换人脸检测模型。face-api的人脸检测模型默认是 SSD Mobilenet v1,这里需要显式调整为The Tiny Face Detector模型。const options = new faceApi.TinyFaceDetectorOptions({
  inputSize,
  scoreThreshold,
  });
  // 人脸68点位特征集
  const result = await faceApi
  .detectSingleFace(videoEl, options) // 人脸检测
  .withFaceLandmarks; // 特征检测
  形象绘制
  经过上述计算,我们已经拿到了人脸68点位特征集。需要先计算点位相对坐标信息,然后进行形象绘制。const canvas = canvasRef.current;
  const canvasCtx = canvas.getContext("2d");
  const dims = faceApi.matchDimensions(canvas, videoEl, true);
  const resizedResult = faceApi.resizeResults(result, dims);
  本文使用的是一张256*256的口罩图片,选取1号和16号点位绘制口罩,根据两点位之间的距离缩放口罩大小。
  这里主要调研了两种方式,分别是canvas绘制和媒体流绘制。
  canvas绘制
  首先想到的一种方式,video和canvas大小和位置固定,定时抓取video媒体流中图片,进行识别人脸,然后绘制在canvas上。const { positions } = resizedResult.landmarks;
  const leftPoint = positions[0];
  const rightPoint = positions[16];
  const length = Math.sqrt(
  Math.pow(leftPoint.x - rightPoint.x, 2) +
  Math.pow(leftPoint.y - rightPoint.y, 2),
  );
  canvasCtx?.drawImage(
  mask,
  0,
  0,
  265,
  265,
  leftPoint.x,
  leftPoint.y,
  length,
  length,
  );
  媒体流绘制
  canvas提供了一个api叫做 captureStream[2],会返回一个继承MediaStream的实例,实时视频捕获画布上的内容(媒体流)。我们可以在canvas上以固定帧率进行图像绘制,获取视频轨道。
  这样我们仅需保证video和canvas大小一致,位置无需固定,甚至canvas可以离屏不渲染。const stream = canvasRef.current.captureStream!;
  mediaStream = res[0].clone;
  mediaStream.addTrack(stream.getVideoTracks[0]);
  videoRef.current!.srcObject = mediaStream;
  对比
  canvas绘制兼容性更好,但在实时通信场景下,需传递点位信息或端重复计算,容易受网络波动以及硬件设备影响,导致实际绘制出现偏差(依赖端能力)
  媒体流绘制兼容性较差,但是在直播等场景下效果会更好,在输出端做好已经做好媒体流融合,接收端依托媒体能力播放即可。同时内容也不易篡改
  实际效果
  因为这里仅使用了2个点位的信息,所以效果一般般。我们完全可以充分利用68个点位全面换肤,实现各种效果。
  延伸思考
  测评场景下:判断人脸数量、是否是用户本人,自动提醒用户,异常状态记录日志,监控人员可以后台查看
  学习场景下:判断用户是否离开屏幕等,提醒用户返回学习状态。
  弹幕场景下:检测人脸,解决弹幕遮挡问题
  ...(欢迎补充)
  谢谢支持
  以上便是本次分享的全部内容,希望对你有所帮助^_^
  喜欢的话别忘了 分享、点赞、收藏 三连哦~。
  欢迎关注公众号 ELab团队收货大厂一手好文章~字节跳动校/社招内推码: 5UJF23C
  投递链接: https://job.toutiao.com/s/YSqdt8q
  可凭内推码投递 字节教育-成人与创新前端团队相关岗位哦~
  参考资料
  [1]
  MediaTrackConstraints - Web APIs | MDN: https://developer.mozilla.org/en-US/docs/Web/API/MediaTrackConstraints
  [2]
  captureStream: https://developer.mozilla.org/zh-CN/docs/Web/API/HTMLCanvasElement/captureStream
  [3]
  一文看懂卷积神经网络-CNN(基本原理+独特价值+实际应用)- 产品经理的人工智能学习库: https://easyai.tech/ai-definition/cnn/
  [4]
  基于face-api.js实现人脸识别的实践和总结: https://zhuanlan.zhihu.com/p/330540757
  [5]
  face-api.js:在浏览器中进行人脸识别的JS接口: https://zhuanlan.zhihu.com/p/39918438
  [6]
  卷积神经网络: https://github.com/bighuang624/Andrew-Ng-Deep-Learning-notes/blob/master/docs/Convolutional_Neural_Networks/%E5%8D%B7%E7%A7%AF%E7%A5%9E%E7%BB%8F%E7%BD%91%E7%BB%9C.md
  [7]
  CNN Explainer: https://poloclub.github.io/cnn-explainer/
  [8]
  face-api.js: https://github.com/justadudewhohacks/face-api.js/
  [9]
  卷积神经网络 (Convolutional Neural Network, CNN) - Leo Van | 范叶亮: https://leovan.me/cn/2018/08/cnn/
  - END -

93?阿里达摩院传来好消息,网友这才是国内大企业该做的事情都知道,要想在国际上立足,就得靠科技实力。曾经,我们因为落后而挨打,如今,中国科技崛起了,才有了和西方企业正面硬刚的硬实力。但科技再先进,最终还是要追求平民化,能够改善普通老百姓生双面余承东吹牛与成事德林社按2022年,对于各个行业来说,既有挑战,也有机会。有这么一批人,他们迎难而上,在产业周期或是行业竞争中,展现企业家精神,带领企业爬坡过坎。悲观者正确,乐观者前行。中国的经济秦戈杂谈民国最牛的投资家宋耀如(宋嘉树)当今社会教人投资的专家书籍文章,甚至媒体方式软件等,数不胜数,不过有影响力的理论或者事实却是少之又少。吕不韦和他的父亲有过番载入史书的关于投资的讨论,大致是投资农业赚钱,投资珠宝更一张卡片能卖到上千万,球星卡到底是门怎样的生意?一张印着某个体育明星照片的卡片,能卖到多少钱?今年8月的巅峰数字是1000多万美元。如今球星卡在国内势头渐起,不仅是卡片的发行公司,就连诸如eBay等跨境电商都向中国卡友抛来橄榄枝董明珠坎坷的成长之路成功不是一步到位的1954年8月在江苏南京,一大学霸企业家董明珠出生了,她生于一个普通的家庭,却先后考入安徽芜湖干部教育学院中南财经政法大学中国社会科学院经济学系中欧国际工商学院,于1975年在南京后备箱酒吧月赚3万?这些副业没想得那样简单你是否想象过,在假期走出家门,和三五好友支棱起一个摊位,赚点零花钱?十一期间,有的人在外游玩,有的人在家陪伴家人,还有的人想办法搞钱。现在不少年轻人不再拘泥于自己的工作,在尝试不同10月起,房子或迎来贬值潮?3大信号出现,房价走势已清晰不知道大家注意到没有,今年的10月比以往来的更快一些,从过了春节到现在,楼市的关键词就是下行,什么金三银四,五一黄金周,金九银十好像都消失了。根据数据显示,今年19月份,前100名中国国少110大比分斩落北马!出线在望北京时间10月7日中午12点,U16亚少赛再次打响,中国队面对弱旅北马里亚纳群岛,兵不血刃地以110的大比分优势战胜对手,继上一场90战胜柬埔寨后,中国队再次气势如虹,展现了2届冠一钢企亏损超10亿濒临倒闭!被方大重组后跃居行业第三吨钢利润,从2012年的全国倒数跃居2022年17月份的行业第三,重组10年累计上缴税金超100亿元员工待遇,从2012的平均年收入4。3万元到2021年的平均年收入超过15万元,2022年10月07日国内油价最新消息国内油价本轮调价周期国庆节期间油价预期简报今日本轮国内成品油最高零售限价依然保持着预期下调130元每吨的降幅。但该数据在经历了一个完整的国庆假期后,很难在预期数据的基础上维持着趋势什么是GDP(国内生产总值)什么是GDP(国内生产总值)宏观经济学所有概念中,最重要的指标之一就是国内生产总值(GDP)。这个指标衡量的是一个国家生产的商品和服务的总价值。GDP是判断经济是紧缩还是扩张的依据
如何给新生宝宝配置保险?初为父母,总想要给宝宝最好的,无论是教育,还是衣食住行,都希望给宝宝安排上。一般来说,孩子出生一定要做这三件事起名字上户口买保险(宝宝出生满28天就可以购买保险)。现在的80后90育儿问答宝宝抱着就睡放下就醒怎么办?网友张奶奶您好!请问34天的宝宝最近这几天睡眠不安,白天不睡,要抱在手上或者趴在肩上才睡,明明已经睡的很香了一放到摇篮立马醒了,一抱起来就睡着了。晚上也不到两个小时就醒来闹,晚上睡全球最美超模吉赛尔邦辰也经历丧偶式婚姻?独自一人在迈阿密前段时间就有外媒爆料超模吉赛尔邦辰何老公大吵一架以后两人已经分居一段时间了。原因自然是因为老公汤姆原本承诺今年退役但丝毫没把心思放在家庭上。周末,这位超模吉赛尔邦辰被发现在迈阿密散渊博雅正,令人难忘的男宝宝名字精选每个家长都希望自己的孩子在享受宁静和喜悦的同时,成为同学中最耀眼最优秀的一个。如何让自己的孩子在人群中脱颖而出?除了把孩子培养成知识渊博行为端正优秀的人,给他们起一个吸引眼球琅琅上感受大草原风光,体验蒙古族风情游览内蒙古有感每次听大草原的歌曲,那一望无际,无边寥廓的草天一色的意境就浮现在脑海中蓝蓝的天空绿绿的草地清清的湖水洁白的羊群引发无边遐想,特想去大草原看看走走。2022年7月中旬有机会参加内蒙古吃鸡攻略2022电竞季想必很多特种兵都曾经跟小编一样,一到了决赛圈就紧张万分,连人都没看到就变成了盒子。不慌,今天带来的这篇王牌决赛圈攻略能帮你解决问题!本期攻略看点深入海岛,将理论与实际羊了个羊最强通关攻略1。本攻略适用于羊了个羊所有关卡2。有攻略也不是百分之百可以过关,运气很重要3。本攻略为您指明了一条过关的方向4。想要过关需要攻略运气一定的游戏次数好了,网上看了很多羊了个羊攻略,走心!为你准备了假期宅家攻略国庆假期来啦继国庆在京遛娃攻略(点击蓝字查看)我们又总结了假期宅家攻略家长朋友们在这个假期不仅能带孩子感受秋高气爽也要给予他们温馨的陪伴哦目录您将看到以下精彩内容1hr居家运动的那合肥荐玩丨不出市就能爬的十座山峰(附详细攻略)十一小长假到了,爬山去呗合肥虽然是平原城市,但地处江淮丘陵,位于大别山边缘,还是有些小山可爬的君君特地整理了这篇合肥十座小山徒步攻略,可以考虑选12个去爬喔按距离远近排名(以天鹅湖海南机场天降20亿元大红包最近,昔日曾属于海航两大板块的航空板块海南航空,机场板块海航基础(已改名海南机场)纷纷传来利好消息。海南航空摘掉了ST的帽子,方大还将增资109亿元。海南机场也有望摘帽,另外一个好黑色就是秋日里的万能色,跟这6种颜色搭配,高级简约又大气黑色作为基础色,在搭配当中也被当做万能色,亮色系单品和暗淡的黑色单品搭配在一起,穿搭瞬间变得低调含蓄起来,没有那么俗气。除了亮色之外,黑白色黑灰色黑棕色搭配都比较常见,适合在秋季穿患了糖尿病,想要延长寿命,这类食物最好不要吃点击关注不迷路普及科学知识,传播科学精神国际糖尿病联合会(IDF)指出,全球糖尿病正在失控。2079岁成人中,约有5。37亿人患糖尿病(超过90是2型糖尿病),占该年龄段人口的10长出白头发建议不要染,不妨多吃这三样食物,早知道早受益相信很多朋友,随着自身年龄的增长,或者经常熬夜,发现自己头上的白发人也越来越多。这个时候,基本上大家都会选择去染发,但是大家不知道的是,染发不仅会损坏我的头皮,而且根本治标不治本。海天酱油事件我们想要一个说法,没想到它来跟我们说法我们想要一个说法,没想到它来跟我们说法!私底下竟然还是酱油标准起草人!最近海天味业酱油事件成为一个热点话题,因为有网友爆出海天旗下的生抽,老抽,味极鲜等调料国内和国外的标准不一样,面条不要直接煮了,加一把芹菜,这样做太香了,营养开胃又解馋生活没有彩排,美食没有美颜。大家好,今天用芹菜搭配面条给大家分享一道美食。芹菜,日常生活中经常可以见到的一种最为普通的食材,可以用来做成各种各样的好吃的。今天我们就用芹菜搭配面条给曝光可降低事故发生率?小米汽车新专利可预测乘员开门动机文懂车帝原创彩丽美懂车帝原创行业日前,懂车帝在查阅天眼查后获悉,小米汽车科技有限公司公开了一项名为开车门动机识别方法装置及车辆的专利。该专利号为CN115123127A,专利申请日梅西2019年曾劝内马尔回巴萨2年后我会离开,你来接我的位置直播吧10月4日讯据队报透露,梅西19年曾劝内马尔回归巴萨效力。2017年夏,内马尔以2。2亿欧的创纪录转会费从巴萨加盟巴黎。但是,巴黎尽管拥有内马尔和姆巴佩,却还是连续第3年止步建议上了年纪的人若是不缺钱,3种白酒能不喝就不喝,喝点好的酒,能够释放人最内心的情绪,激发人的欲望,酒过三巡之后,人也变得狂妄起来,暂且忘掉琐事烦恼,跟随思绪游离在魂牵梦萦之间,很多人爱酒,甚至恋酒贪杯,究其一生都在与酒打交道,原因估计就我去见认识9年且患了绝症的网友,临走前拥抱了一下,心碎了一地作者纳兰唐儿村上春树说所谓人生,无非是一个不断丧失的过程。很宝贵的东西会一个接着一个,像梳子豁了齿一样从你手中滑落。你所爱的人,一人接着一人从你身旁悄然消逝。2005年起,我在红袖美国制裁印度,基辛格反对乌克兰加入北约,拜登想削弱中国地位印度经济时报印度时报等媒体30日晚报道,美国对总部位于孟买的蒂巴拉吉彼得罗赫姆石化贸易公司实施了制裁,这是美国首次对与伊朗进行能源交易的印度公司采取制裁措施。美国财政部表示,该公司印度继续冻结216亿资产小米回应感到失望仍会保护商业利益小米集团今年4月底遭到印度执法单位扣押了555。1亿卢比(约合48亿元人民币)资产。印度上诉机构日前确认印度执法单位有权冻结小米该笔资产。对于印度上诉机构裁决,小米表示感到失望,称失眠耳鸣手足心热,药效不明显,欲速则不达,得让疗效等一会儿作者简介郭炜,山东中医药大学中医学博士,山东新中鲁中医医院副主任医师。患者,女,31岁,山东济南人,因家庭琐事,情绪烦躁郁闷,出现睡眠质量差,且伴有搏动性耳鸣,遂来就诊。患者面色晦