美文网首页
How-old 刷脸神器 知识点学习总结

How-old 刷脸神器 知识点学习总结

作者: fc82bb084ee7 | 来源:发表于2017-12-18 12:24 被阅读8次
    实现的功能

    在照片中的人脸上方, 显示年龄, 性别, 人种信息.


    face_1.jpg
    原理分析

    分析人脸信息, 得出年龄等信息是通过机器学习来实现的, 例子中使用的就是face++提供的SDK来完成人脸信息识别功能的.
    https://www.faceplusplus.com.cn/
    对于上层App的开发来说, 本质上来说, 是通过把照片转换为bitmap对象, 然后把bitmap对象转化为字节数组, 以post的方式, 向服务器发送http请求. 服务器返回json字符串, 里面给出分析结论, json中描述的主要的信息包括: 人脸区域中心点在图片中的坐标(以百分比的形式给出), 人脸区域的宽高值(以百分比的形式给出), 人脸的年龄, 性别, 人种信息.

    既然是通过http post请求的方式来实现的, 为什么还要提供一个SDK呢?

    这样做的目的是为了方便上层App的使用, 这个SDK存在的目的实际上就是提供更方便的API给用户, 帮助用户去拼接http请求中的各个参数. 本质上来说, 最终还是通过http请求来完成人脸识别的.

    学习到的几个知识点
    1. 设计API的一个好经验
      我们设计API的时候经常碰到这样的场景. 例如 detect(Bitmap) API 获取图片的人脸信息. 当检测成功时, 返回一个json对象代表结果. 当检测失败时, 需要返回一个值代表获取失败. 如果把API设计成这样:
    public Json detect(Bitmap bitmap) 
    

    就不适合这种场景. 当然也可以凑合着约定当返回的Json对象为Null时代表监测失败的情况, 但这样的API设计的并不优雅. 要想优雅的实现这个API. 最好的方式是新写一个Callback interface来实现.


    face_2.jpg

    当检测成功时, 调用callback对象的success(Json json) 把json对象传给API的使用者. 当检测失败时, 调用callback对象的error把错误的原因告诉API的使用者.


    face_3.jpg
    1. 好的代码规范.
      xml中View的id以 "id_ " 开头.


      face_4.jpg
    1. Textview转化成Bitmap对象
      显示年龄的框是通过canvas.drawBitmap来实现的, 这样做的好处是可以方便的指定这个框的具体坐标. 而上面的框通过一个TextView来完成比较合适, 这就需要把一个TextView转换为一个Bitmap对象. 这就用到了setDrawingCacheEnabled(true) 这个API.
    TextView tv = (TextView) findViewById(R.id.textview);  
     tv.setText(string);  
     tv.setDrawingCacheEnabled(true);  
     tv.measure(View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED), View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED));  
     tv.layout(0, 0, tv.getMeasuredWidth(), tv.getMeasuredHeight());  
     Bitmap bitmap = Bitmap.createBitmap(tv.getDrawingCache());  
    //千万别忘最后一步  
     tv.destroyDrawingCache();
    

    ---DONE.---

    相关文章

      网友评论

          本文标题:How-old 刷脸神器 知识点学习总结

          本文链接:https://www.haomeiwen.com/subject/vwnpwxtx.html