android 人脸识别边框_android Arcface人脸识别框/人脸抓拍框/人脸追踪框

为什么要改?

先来看看sdk demo中提供的人脸框样式,这个框看上去并不是非常美观(个人觉得)

再看看下面这个框是不是就要顺眼一点

怎么换?

先来看看原始的画法:

@Override

public void onAfterRender(CameraFrameData data) {

mGLSurfaceView.getGLES2Render().draw_rect((Rect[]) data.getParams(), Color.GREEN, 2);

}

其实更换人脸识别框是非常简单的,因为虹软的人脸识别sdk已经将人脸的位置回调出来了,实时回调的是一个Rect(将回调出来的CameraFrameData强转一下即可),既然都知道人脸框的位置,那就是一个自定义View就解决的事了。

只需要在onDraw方法中画八条线即可

@Override

protected void onDraw(Canvas canvas) {

super.onDraw(canvas);

if (rect != null) {

/**

* 左上角的竖线

*/

canvas.drawLine(rect.left, rect.top, rect.left, rect.top + 20, mPaint);

/**

* 左上角的横线

*/

canvas.drawLine(rect.left, rect.top, rect.left + 20, rect.top, mPaint);

/**

* 右上角的竖线

*/

canvas.drawLine(rect.right, rect.top, rect.right - 20, rect.top, mPaint);

/**

* 右上角的横线

*/

canvas.drawLine(rect.right, rect.top, rect.right, rect.top + 20, mPaint);

/**

* 左下角的竖线

*/

canvas.drawLine(rect.left, rect.bottom, rect.left, rect.bottom - 20, mPaint);

/**

* 左下角的横线

*/

canvas.drawLine(rect.left, rect.bottom, rect.left + 20, rect.bottom, mPaint);

/**

* 右下角的竖线

*/

canvas.drawLine(rect.right, rect.bottom, rect.right, rect.bottom-20, mPaint);

/**

* 右下角的横线

*/

canvas.drawLine(rect.right, rect.bottom, rect.right-20, rect.bottom , mPaint);

}

}

这里其实还有一个坑,就是这个Rect是相对于相机分辨率的,但是如果摄像头的预览分辨率不等于画布的大小就会出现错位的情况,比如下面的情况:(绿框是虹软demo中的人脸框,蓝色框是自定义的框)

怎么解决呢?你应该想到了,将宽高等比例缩放一下即可,所以提供画人脸框的一个方法:

/**

* 开始画矩形框

*

* @param rect1

*/

public void drawFaceRect(Rect rect1) {

this.rect = rect1;

//将屏幕人脸框转换为视频区域的人脸框

rect.left = rect.left * getWidth() / screenHeight+20;

rect.right = rect.right * getWidth() / screenHeight+40;

rect.top = rect.top * getHeight() / screenHeight+30;

rect.bottom = rect.bottom * getHeight() / screenHeight+75;

//在主线程发起绘制请求

postInvalidate();

}

注意:此处的+20,+40,+30,+75都是经验值,都是相对于左上右下的位置,可根据自己的设备做微调。

此外我们还需要提供一个清除人脸框的方法(没有识别到人脸的时候框要消失):

public void clearRect() {

rect = null;

postInvalidate();

}

下面是本View完整的代码(只是demo,还有优化的地方,只是提供一种思路,思路理解了,还可以画很多炫酷的框):

/**

* 自定义虹软人脸识别框/人脸抓拍框/人脸追踪框

* Created by HDL on 2018/7/31.

*/

public class FaceRectView extends View {

private Rect rect;

private int screenWidth;

private int screenHeight;

public FaceRectView(Context context) {

this(context, null);

}

public FaceRectView(Context context, AttributeSet attrs) {

this(context, attrs, 0);

}

public FaceRectView(Context context, AttributeSet attrs, int defStyle) {

super(context, attrs, defStyle);

WindowManager wm = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE);

screenWidth = wm.getDefaultDisplay().getWidth();

screenHeight = wm.getDefaultDisplay().getHeight();

initPaint(context);

}

private void initPaint(Context context) {

mPaint = new Paint();

mPaint.setAntiAlias(true);

mPaint.setStrokeWidth(3);

mPaint.setColor(context.getResources().getColor(R.color.color_face_rect));

}

private Paint mPaint;

/**

* 开始画矩形框

*

* @param rect1

*/

public void drawFaceRect(Rect rect1) {

this.rect = rect1;

//将屏幕人脸框转换为视频区域的人脸框

rect.left = rect.left * getWidth() / screenHeight+20;

rect.right = rect.right * getWidth() / screenHeight+40;

rect.top = rect.top * getHeight() / screenHeight+30;

rect.bottom = rect.bottom * getHeight() / screenHeight+75;

//在主线程发起绘制请求

postInvalidate();

}

public void clearRect() {

rect = null;

postInvalidate();

}

@Override

protected void onDraw(Canvas canvas) {

super.onDraw(canvas);

if (rect != null) {

/**

* 左上角的竖线

*/

canvas.drawLine(rect.left, rect.top, rect.left, rect.top + 20, mPaint);

/**

* 左上角的横线

*/

canvas.drawLine(rect.left, rect.top, rect.left + 20, rect.top, mPaint);

/**

* 右上角的竖线

*/

canvas.drawLine(rect.right, rect.top, rect.right - 20, rect.top, mPaint);

/**

* 右上角的横线

*/

canvas.drawLine(rect.right, rect.top, rect.right, rect.top + 20, mPaint);

/**

* 左下角的竖线

*/

canvas.drawLine(rect.left, rect.bottom, rect.left, rect.bottom - 20, mPaint);

/**

* 左下角的横线

*/

canvas.drawLine(rect.left, rect.bottom, rect.left + 20, rect.bottom, mPaint);

/**

* 右下角的竖线

*/

canvas.drawLine(rect.right, rect.bottom, rect.right, rect.bottom-20, mPaint);

/**

* 右下角的横线

*/

canvas.drawLine(rect.right, rect.bottom, rect.right-20, rect.bottom , mPaint);

}

}

}

2018.9.27更新

有小伙伴不知道怎么使用,只需要在onAfterRender回调中使用即可

@Override

public void onAfterRender(CameraFrameData data) {

params = (Rect[]) data.getParams();

if (params.length > 0) {

param = params[0];

faceRectView.drawFaceRect(param);

} else {

faceRectView.clearRect();

}

}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/488098.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

html5 填表 表单 input output 与表单验证

1.<output> Js计算结果 <form οninput"res.value num1.valueAsNumber*num2.valueAsNumber"> <input type"number" id"num1"> X <!-- 没有闭合</input> --> <input type"number" id…

人工智能如何获得知识?

原发&#xff1a;人民论坛学术前沿 2019年21期转自&#xff1a;南京大学哲学系摘要&#xff1a;人构造概念以认识世界&#xff0c;人的认知与人的身体密切相关。计算机是人类心灵的延伸&#xff1b;而人类发明的各种认知用仪器&#xff08;机器&#xff09;是人类感官的延伸&am…

ajax官方api,yangguozhong

AjaxApi下面列出的接口基本都是可以直接使用的&#xff0c;如有问题记得告诉我哦1. 支持的请求方法GET(SELECT)&#xff1a;从服务器取出资源(一项或多项)。POST(CREATE)&#xff1a;在服务器新建一个资源。PUT(UPDATE)&#xff1a;在服务器更新资源(客户端提供改变后的完整资源…

改变网页标签图片(favicon)

<head>里添加如下标签&#xff1a; <link rel"shortcut icon" href"favicon.ico图片路径" type"images/x-icon" /> <link rel"icon" href"favicon.ico图片路径" type"images/x-icon" /> js动态…

报告:美国AI投资占全球56% 中国第二增长最快

来源&#xff1a;小小据外媒报道&#xff0c;由英国政府资助的科技企业家网络Tech Nation日前发布最新报告。报告显示了2015年至2019年各国企业在全球范围内获得的人工智能(AI)领域的投资情况。在这五年期间&#xff0c;美国吸引了全球56%的AI投资&#xff0c;紧随其后的是中国…

服务器图文消息发送规则,群发图文规则 - CurtainRight的个人空间 - OSCHINA - 中文开源技术交流社区...

2、上传图文接口内容信息对比&#xff1a;注意&#xff1a;除了群发图文之外&#xff0c;其余的图文消息都是没有Content&#xff0c;所以都是自己写页面&#xff0c;然后通过URL打开新的页面&#xff0c;那么你的图片就不能访问微信服务器上的图片。因为现在未经授权是不能访问…

rust怎么拆除墙壁指令_人类跌落梦境:城堡怎么过 不少玩家卡在了第六关城堡地图这里...

人类跌落梦境城堡怎么过&#xff1f;随着人类一败涂地手游上线&#xff0c;不少玩家卡在了第六关城堡地图这里。城堡怎么抓灯笼&#xff0c;这个图里风车要怎么用呢&#xff1f;这里就为大家带来人类跌落梦境第六关城堡攻略图解。人类跌落梦境城堡怎么过人类跌落梦境第六关城堡…

【工业智能】人工智能真的无所不能吗?

图1-1956年达特茅斯会议上的那些AI界大神们来源&#xff1a;产业智能官最近几年&#xff0c;随着AlphaGo逐渐干掉了人类的顶级棋手、波士顿“大狗”不断进化的能力使得人们对人工智能充满了期待&#xff0c;人工智能的热潮席卷了大学、企业&#xff0c;春风也吹进了工业这个一直…

Discuz网警过滤关键词库

积累近几年discuz关键词过滤 使用方法&#xff1a;1.进入后台/内容/词语过滤批量添加。2.打开CensorWords.txt&#xff0c;复制里面的文本信息到批量添加的输入框内&#xff0c;点击确定即可。如图&#xff1a; 关键词下载&#xff1a;Keywords.zip转载于:https://www.cnblogs.…

金蝶引出文件到服务器,金蝶K3标准凭证引出并引入

金蝶K3标准凭证引出并引入如下所示&#xff1a;一、首先登录需要引出的帐套&#xff0c;将凭证引出1、财务会计-总账-凭证处理-标准凭证引出2、进入到凭证引出向导界面&#xff0c;点击下一步3、选择引出标准凭证文件存放的位置&#xff0c;及填写名称&#xff0c;点击保存4、点…

中柏平板u盘启动_中柏电脑如何设置BIOS U盘启动

展开全部1、先将U盘插入到电脑中&#xff0c;然后在开机出e69da5e887aa3231313335323631343130323136353331333365666237现第一屏启动信息界面时按键盘上的DEL键&#xff0c;直接进入BIOS。2、进入后按键盘上的右方向键找到“Advanced”选项&#xff0c;最下面项是“USB Config…

AI解读医学影像能力超越人类?BMJ综述:此类研究大多存在偏差

图片来源&#xff1a;Pixabay来源&#xff1a;BMJ翻译&#xff1a;阿金审校&#xff1a;戚译引许多研究宣称&#xff0c;人工智能在解读医学影像方面具备和人类专家同等甚至更强的能力。但是&#xff0c;BMJ 近期发表的一篇综述指出&#xff0c;这些研究质量堪忧&#xff0c;有…

Effective C++ 条款12

复制对象时&#xff0c;勿忘其每个成分 作者在本节条款提醒我们&#xff0c;在多重继承的情况下进行copy或者copy assignment 的operator的编写时&#xff0c;一定要考虑base 类部分数据的初始化后者复制。 对照一下代码&#xff1a; class Cutsomer { …… private:string nam…

米家电磁炉显示e10_米家电磁炉e10故障怎么回事

大家好&#xff0c;我是时间财富网智能客服时间君&#xff0c;上述问题将由我为大家进行解答。米家电磁炉e10故障即底部传感器温度高造成的&#xff0c;建议把电磁炉冷却下来再打开尝试。米家电磁炉延续了小米设备一贯的简约时尚的清新风&#xff0c;它采用了圆润的纯白色机身&…

收藏!全国31个省市区重点产业布局!

图片&#xff1a;IC photo来源&#xff1a;世界科技创新论坛一、天津优势产业﹕航空航天、石油化工、装备制造、电子信息、生物医药、新能源新材料、轻工业、国防、现代物流、海洋经济。重点招商引资产业﹕现代服务业的高端商业和电子商务&#xff0c;研发、结算中心和企业总部…

高德sdk_联手HERE,高德进军地图海外市场 | CES 2020

升级为国民出行平台之后&#xff0c;高德地图宣布进军海外市场。1月8日&#xff0c;高德与HERE 地图共同宣布&#xff0c;基于海外地图及动态信息服务展开合作。HERE地图将为高德提供中国以外地区的地图数据及交通信息等&#xff0c;高德从而可实现为用户提供全球路径规划引导、…

养成一个新习惯,只需要这个大脑区域兴奋0.5秒

图片来源&#xff1a;Pixabay文章来源&#xff1a;达特茅斯学院翻译&#xff1a;毛千芊审校&#xff1a;张毛毛每天&#xff0c;人类和动物依靠习惯完成日常起居&#xff0c;如吃饭和睡觉。习惯使我们能不加思考地做事。当大脑开始养成一种新习惯时&#xff0c;只需半秒钟&…

android 瀑布流

最终效果图 1.item_demo5.xml <?xml version"1.0" encoding"utf-8"?> <LinearLayout xmlns:android"http://schemas.android.com/apk/res/android"android:layout_width"match_parent"android:layout_height"wrap_con…

$.ajax 加了headers报错_Springboot解决Ajax跨域的三种方式

这篇文章不华丽&#xff0c;但比较实用&#xff0c;能解决不少大家实际业务中的问题。大家可以收藏起来&#xff0c;以备用时之需&#xff01;1.同源策略 1.1 含义ajax出现请求跨域错误问题&#xff0c;主要原因就是因为浏览器的“同源策略”&#xff1b;1995年&#xff0c;同…

高精度惯性传感器如何实现全球自动化愿景?

来源&#xff1a;MEMS如果农场基于丰富的传感器内容来联合利用自动化地面车辆和航空器&#xff0c;那么地面作业将更加有效&#xff1b;如果手术室能够将经典的导引技术供精密制导机械臂使用&#xff0c;那么成功率将得到保障&#xff1b;如果救援行动中能够精准定位施救人员的…