一个有趣的需求实现过程:人脸表情包制作

需求

产品有个需求是使用用户上传的照片,自动生成目前比较火的表情包,如下图:

技术点

  1. 人脸识别,这是购买别人的SDK实现的啦 。
  2. 图像的处理,抠图、图像变换、裁剪、叠加到背景等。

实现过程

简单分析了下,要实现这个效果,也有几个关键点要处理好:

  • 图像灰度、亮度、对比度的调整
  • 脸部区域扣取和边缘模糊

当然,如果要进一步优化下去,也有很多的细节了:

  • 人脸方向和背景不一致,则需要调整
  • 人脸背景色和表情背景色不一致的情况,要调整;
  • 人脸图像大小和位置也需要调整
    。。。
    先从基础的这几个点介绍下吧。

图像效果处理

这里我使用了GPUImage的滤镜,可以很方便的对原图进行处理。
GPUImageGrayscaleFilter GPUImageContrastFilter GPUImageBrightnessFilter 组合使用这三个滤镜,完成灰度、对比度、亮度的调整即可。

脸部区域扣取和边缘模糊

  1. 计算脸部区域合适的Path
    根据识别SDK给出的人脸五官部位的特征点,来构造一个脸部五官区域的Path。这个Path的计算也经历了几个尝试,主要以两眉和嘴的坐标点来计算,最后的方案是 左眉最左边A,嘴唇下部B,右眉最右边C,从A出发,AB、BC、CA 顺序画了三条贝塞尔曲线,来达到有弧度的边缘效果。

  2. 扣取该Path区域
    一开始用了canvas.clipPath 来抠图,但发现边缘有锯齿,上网查资料得知,clipPath不能添加抗锯齿效果了,需要采用Paint 配置PorterDuffXfermode 的方式来实现。原理就是,先drawPath画一张Path区域大小的图A,然后再drawBitmap把A画到原图上去,采用PorterDuff.Mode.DST_IN 的模式即可仅保留住path的像素,去掉其余像素。关于PorterDuff模式的使用,也是有点小坑,可以参考下 这篇blog。

  3. 边缘模糊效果
    如果clip的边缘没有模糊效果,那么融合到背景上去是很生硬的,所以需要添加模糊处理。在扣取这步drawPath的时候采用

    1
    paint.setMaskFilter(new BlurMaskFilter(EDGE_BLUR, BlurMaskFilter.Blur.NORMAL));

即可在path路径上增加模糊效果了。

裁剪合适的大小

经过上述步骤后,已经得到了一个仅保留面部区域像素的bitmap(其他区域为透明),此时需要进行一次裁剪,得到一个仅面部大小的图片。在一番尝试后,最后基于path的bounds Rect,再向周围扩大一圈,来计算剪切的rect。这样可以保留住path周围的模糊边缘,才能达到更好的融合效果。

后续优化

就这个功能来说,目前的效果也只是demo程度了。后续持续优化的话,可能就需要考虑人脸角度,原片亮度,背景

  • Post author: kmfish
  • Post link: http://kmfish.github.io/2017/02/25/faceclipper/
  • Copyright Notice: All articles in this blog are licensed under BY-NC-SA unless stating additionally.
通过flatmap组合多个SqlBrite的QueryObservable 使用的问题
LifyCycle 的思考

玻璃钢生产厂家北京玻璃钢造型雕塑抽象玻璃钢雕塑厂保山市玻璃钢雕塑生产商湛江铜绿色玻璃钢花盆淮安商场大厅美陈济源商店玻璃钢雕塑德宏玻璃钢雕塑订购宜宾玻璃钢广场雕塑定制高端玻璃钢雕塑服务至上孝感公园玻璃钢雕塑公司白山玻璃钢雕塑设计合肥玻璃钢雕塑设计厂家宁德玻璃钢景观雕塑通城玻璃钢造型雕塑玻璃钢金属雕塑厂家绥化玻璃钢雕塑定制温州卡通雕塑玻璃钢呈贡玻璃钢雕塑设计多少钱特色的玻璃钢花盆花器信宜玻璃钢影视道具雕塑制作拉萨电镀玻璃钢雕塑定做四川主题商场美陈厂家供应无锡玻璃钢广场雕塑定制玻璃钢雕塑低价甩卖衢州大型玻璃钢雕塑批发淮阴定制玻璃钢花盆金昌广场玻璃钢雕塑价格中山玻璃钢卡通雕塑哪里有定做玻璃钢雕塑厂家博物馆玻璃钢雕塑施工香港通过《维护国家安全条例》两大学生合买彩票中奖一人不认账让美丽中国“从细节出发”19岁小伙救下5人后溺亡 多方发声单亲妈妈陷入热恋 14岁儿子报警汪小菲曝离婚始末遭遇山火的松茸之乡雅江山火三名扑火人员牺牲系谣言何赛飞追着代拍打萧美琴窜访捷克 外交部回应卫健委通报少年有偿捐血浆16次猝死手机成瘾是影响睡眠质量重要因素高校汽车撞人致3死16伤 司机系学生315晚会后胖东来又人满为患了小米汽车超级工厂正式揭幕中国拥有亿元资产的家庭达13.3万户周杰伦一审败诉网易男孩8年未见母亲被告知被遗忘许家印被限制高消费饲养员用铁锨驱打大熊猫被辞退男子被猫抓伤后确诊“猫抓病”特朗普无法缴纳4.54亿美元罚金倪萍分享减重40斤方法联合利华开始重组张家界的山上“长”满了韩国人?张立群任西安交通大学校长杨倩无缘巴黎奥运“重生之我在北大当嫡校长”黑马情侣提车了专访95后高颜值猪保姆考生莫言也上北大硕士复试名单了网友洛杉矶偶遇贾玲专家建议不必谈骨泥色变沉迷短剧的人就像掉进了杀猪盘奥巴马现身唐宁街 黑色着装引猜测七年后宇文玥被薅头发捞上岸事业单位女子向同事水杯投不明物质凯特王妃现身!外出购物视频曝光河南驻马店通报西平中学跳楼事件王树国卸任西安交大校长 师生送别恒大被罚41.75亿到底怎么缴男子被流浪猫绊倒 投喂者赔24万房客欠租失踪 房东直发愁西双版纳热带植物园回应蜉蝣大爆发钱人豪晒法院裁定实锤抄袭外国人感慨凌晨的中国很安全胖东来员工每周单休无小长假白宫:哈马斯三号人物被杀测试车高速逃费 小米:已补缴老人退休金被冒领16年 金额超20万

玻璃钢生产厂家 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化