android使用可信科技的人脸识别活体认证遇到的问题
由于项目需要实现身份的人脸识别活体认证功能,所以这里采用可信科技中的人脸识别功能,当然这是人家的劳动成果,认证的过程是需要钱的。实现监面android端并不难,很多东西人家的sdk中都已经封装好了,监面人脸识别的整体流程有:
1、android客户端需要下载相应的sdk,在官网上面有例子,官网的链接是:http://www.kexin.net/,下载android的studio例子或者eclipse的例子的时候,里面的所有资源文件一定要拷贝进去,否则就会报错。
2、android端拷贝完所有的资源后,只需要在需要使用的activity中继承 ActivityBase,填写用户名、密码、姓名、身份证以及后台服务器的地址,一般申请了监面开发者账号的,可信公司将提供请求接口时使用的账号(akey)和密码(skey),就是上诉所说的用户名和密码。 CameraActivity1类就是启动监面进行活体认证拍照的类,在需要调用活体认证处,添加如下代码:
sp = getSharedPreferences("mrsoft", MODE_PRIVATE);editor = sp.edit();editor.putString("ip", ip);editor.putString("editUid", username);editor.putString("editPwd", pwd);editor.putString("name", name);editor.putString("number", number);editor.commit();Intent it = getIntent();Bundle b = new Bundle();b.putString("ip", ip);b.putString("username", username);b.putString("password", pwd);b.putString("name", name);b.putString("number", number);it.putExtras(b);it.setClass(TourismLoanActivity.this, CameraActivity1.class);startActivityForResult(it, ResultCode);

上诉的代码,是将身份证、姓名、用户名、密码、ip传至 CameraActivity1中,交由其该类进行活体认证后,将图片上传至ip地址的服务器后台中,再通过回调,返回服务器那边接收到的认证结果,注意,这里的服务器指的是自己公司的服务器,而不是监面那边的服务器,监面是不提供直接客户端与监面服务器的直接的对接的,都是由客户端上传图片至自己公司的服务器上,再由公司的服务器上传至监面的服务器进行验证后将结果返回至公司服务器,再由公司服务器返回结果到客户端回调处,所以,在回调的地方的去处理相应的结果:

protected void onActivityResult(int requestCode, int resultCode, Intent data) {super.onActivityResult(requestCode, resultCode, data);//活体认证回调返回if(requestCode==ResultCode&&resultCode==ResultCode){// 刷新数据++++++++++++++++++++++++++++++++Bundle bundle = data.getExtras();String result = bundle.getString("result");try {JSONObject jsonObject = new JSONObject(result);int state =  jsonObject.getInt("state");if(state==0){//识别成功showCustomToast("采样成功");}else{showCustomToast("采样失败,请重新采样!");}} catch (JSONException e) {e.printStackTrace();}}

另外,在android4.4系统上,有可能会出现点击第一次活体认证是没有问题的,当重复再点击的时候程序就会崩溃,出现文件的路径为空的现象,这是由于以下代码导致的,只需要将其屏蔽掉即可:

File kexinface=  new File(FileUtil.getWaterPhotoPath());for (File file : kexinface.listFiles()) {if (file.isFile())file.delete(); // 删除所有文件}kexinface.delete();// 删除目录本身

其实究其原因,应该是由于android4.4中访问文件的路径的方式与其他android其他的不一样导致文件路径找不着,使用爆空指针的bug。

有的时候使用人脸识别可能不是直接一个按钮就启动的,还需要在webView中进行操作,甚至于webView中不仅仅只有人脸识别需要调用摄像机拍照,还可能需要另外拍证件照,那么此时就会有两个功能,一个是在webView中调用相机来进行证件照的拍摄,一个是需要调用人脸识别来进行图片的活体拍摄,那么在webView中是怎么实现的呢?首先通常布局文件中就是一个webView控件,

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_height="match_parent"><WebViewandroid:id="@+id/id_webView"android:layout_below="@id/id_rl_top"android:layout_width="match_parent"android:layout_height="match_parent"></WebView>
</RelativeLayout>

在activity中,则需要初始化webView控件,以及设置相应的属性

  /** 初始化WebView*/private void initWebView() {//从布局文件中扩展webViewthis.webView = (WebView) this.findViewById(R.id.id_webView);// 得到设置属性的对象WebSettings webSettings = webView.getSettings();// 使能JavaScriptwebSettings.setJavaScriptEnabled(true);//        webView.addJavascriptInterface(this, "test");//对应js中的test.xxx//设置可以访问文件webSettings.setAllowFileAccess(true);//设置支持缩放webSettings.setBuiltInZoomControls(true);webView.addJavascriptInterface(this, "test");//对应js中的test.xxxwebView.addJavascriptInterface(this, "takePhoto");//对应js中的test.xxx
//        this.webView.setWebChromeClient(new chromeClient());this.webView.loadUrl("链接地址");//设置Web视图webView.setWebViewClient(new webViewClient (){@Overridepublic void onPageFinished(WebView view, String url){super.onPageFinished(view, url);progressDialog.dismiss();//加载网页完成时,关闭提示}@Overridepublic void onPageStarted(WebView view, String url, Bitmap favicon){super.onPageStarted(view, url, favicon);progressDialog.show();<span style="font-family: 宋体;">//加载网页时,显示滚动条</span>}});}

在android中,上诉的js的调用的android中的方法:

/*** js调用android的活体验证身份的方法* @param username* @param ic_card*/@JavascriptInterfacepublic void startPeopleIdentify(String username, String ic_card) {//对应js中xxx.hello("")
//        Log.e("zqy", "startPeopleIdentify::::" + username + "," + ic_card);name = username;number = ic_card;start();}/*** js调用android的拍照方法* @param str*/@JavascriptInterfacepublic void takePhoto(String str) {//对应js中xxx.hello("")//调用摄像头Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);param = str;startActivityForResult(intent, ResultCodePhoto);}

在js中,js调用android的方法:

function <span style="font-family: 宋体;">startPeopleIdentify</span><span style="font-family: 宋体;">() {</span>
<span style="white-space:pre"> </span>window.<span style="font-family: 宋体;">test</span><span style="font-family: 宋体;">.</span><span style="font-family: 宋体;">startPeopleIdentify</span><span style="font-family: 宋体;">();//js调用android中的活体认证方法</span>
}
function <span style="font-family: 宋体;">takePhoto</span>() {window.<span style="font-family: 宋体;">takePhoto</span>.<span style="font-family: 宋体;">takePhoto</span><span style="font-family: 宋体;">();//js调用android中的拍照方法</span>
}

在activity中的回调:

//拍照回调返回if(requestCode==ResultCodePhoto&&resultCode == RESULT_OK) {String sdStatus = Environment.getExternalStorageState();if (!sdStatus.equals(Environment.MEDIA_MOUNTED)) { // 检测sd是否可用Log.i("TestFile","SD card is not avaiable/writeable right now.");return;}String name = new DateFormat().format("yyyyMMdd_hhmmss", Calendar.getInstance(Locale.CHINA)) + ".jpg";Bundle bundle = data.getExtras();Bitmap bitmap = (Bitmap) bundle.get("data");// 获取相机返回的数据,并转换为Bitmap图片格式if (bitmap != null) {final String result = bitmaptoString(bitmap);webView.post(new Runnable() {//此处是将拍照返回的bitmap转成字符串,传递给js,显示拍照后的图片@Overridepublic void run() {webView.loadUrl("javascript:callJS('" + param + "','" + result + "')");}});} else {Toast.makeText(this, "拍照不成功,请重新拍照..", Toast.LENGTH_SHORT).show();}}//活体认证回调返回if(requestCode==ResultCode&&resultCode==ResultCode){// 刷新数据++++++++++++++++++++++++++++++++Bundle bundle = data.getExtras();String result = bundle.getString("result");try {JSONObject jsonObject = new JSONObject(result);int state =  jsonObject.getInt("state");if(state==0){//识别成功showCustomToast("采样成功");}else{showCustomToast("采样失败,请重新采样!");}} catch (JSONException e) {e.printStackTrace();}}

以下是拍照后将bitmap转成字符串的方法:

 /*** 将Bitmap转换成字符串* @param bitmap* @return*/public String bitmaptoString(Bitmap bitmap) {String string = null;ByteArrayOutputStream bStream = new ByteArrayOutputStream();bitmap.compress(Bitmap.CompressFormat.PNG, 100, bStream);byte[] bytes = bStream.toByteArray();string = Base64.encodeToString(bytes, Base64.DEFAULT);return string;}

大致上的问题就到这里了,下面附赠活体认证的例子的链接,有需要的可以去下载,也可以去官网下载:

http://download.csdn.net/detail/qiuyin2015/9649284

官网地址:http://www.kexin.net/

使用可信科技的人脸识别活体认证遇到的问题相关推荐

  1. php活体检测,基于HTML5 的人脸识别活体认证的实现方法

    近几年,人脸识别技术在身份认证领域的应用已经有了较多应用,例如:支付宝.招行的取款.养老金领取等方面,但在杜绝假冒.认证安全性等方面,目前还是一个比较需要进一步解决的课题,特别是在移动端的活体认证技术 ...

  2. html clm标记,基于HTML5的人脸识别活体认证的实现方法

    近几年,人脸识别技术在身份认证领域的应用已经有了很多应用,例如:支付宝,招行的取款,养老金领取等方面,但在杜绝假冒,认证安全性等方面,目前还是一个比较需要进一步解决的课题,特别是在移动端的活体认证技术 ...

  3. 基于HTML5 的人脸识别活体认证

    近几年,人脸识别技术在身份认证领域的应用已经有了较多应用,例如:支付宝.招行的取款.养老金领取等方面,但在杜绝假冒.认证安全性等方面,目前还是一个比较需要进一步解决的课题,特别是在移动端的活体认证技术 ...

  4. css人脸识别的圆圈,基于HTML5 的人脸识别活体认证的实现方法

    html> #container { position : relative; } #canvas { position : absolute; left : 0; top : 0; } 你的浏 ...

  5. Python+OpenCv实现AI人脸识别身份认证系统(2)——人脸数据采集、存储

    原 Python+OpenCv实现AI人脸识别身份认证系统(2)--人脸数据采集.存储 2019年07月02日 08:47:52 不脱发的程序猿 阅读数 602更多 所属专栏: 人脸识别身份认证系统设 ...

  6. “刷脸回家黑科技”,人脸识别智能门禁D508重磅来袭!

    "刷脸取票"."刷脸支付" 想必大家见识过这些"黑科技"了 不过,今天小编要给大家介绍的是 "刷脸"回家! 没错!!! ...

  7. 人脸识别活体检测之张张嘴和眨眨眼

    暑 [这段时间有点忙,终于截止今天2018.06.22完成了人脸识别的最后一道程序--活体检测之眨眨眼和张张嘴] 关于人脸识别的内容我之前也写过好几篇博文,其中有:  {java实现人脸识别源码}  ...

  8. PyQt5 + Python3.7 + OpenCV人脸识别身份认证系统(附源码)

    基于PyQt5 + Python3.7 + OpenCV实现的人脸识别身份认证系统,附源码. 技术选型 PyQt5 + Python3.7 + OpenCV 功能概述 实现人员注册,信息修改,人脸识别 ...

  9. Python+OpenCv实现AI人脸识别身份认证系统(1)——人脸识别原理

    原 Python+OpenCv实现AI人脸识别身份认证系统(1)--人脸识别原理 置顶 2019年07月02日 08:47:40 不脱发的程序猿 阅读数 1255更多 所属专栏: 人脸识别身份认证系统 ...

最新文章

  1. 收到2013年51cto限量版精美台历
  2. jquery 绑定动态元素
  3. ubuntu16.04配置py-faster-rcnn
  4. 第二章:Java_基本语法_5 数组
  5. bzoj 1024 [ SCOI 2009 ] 生日快乐 —— 递归
  6. 【逆强化学习-1】学徒学习(Apprenticeship Learning)
  7. Linux——VIM开发C++自动补全(STL、括号)和开发环境配置
  8. 改变css名称,样式命名规则?css
  9. photoshop常用快捷键大全
  10. Mac安装双系统的那些坑
  11. 【资损】系统迭代过程中的兼容性设计
  12. Python读xml
  13. 解决eclipse neno在线下载安装缓慢及失败的问题
  14. RedHat安装yum和配置yum源
  15. 启明星 ZYNQ 开发板实验平台简介
  16. MATLAB STK构建卫星轨道姿态控制仿真演示系统
  17. 面料防静电测试方法指南
  18. K - Oulipo
  19. 微分-解卷绕-积分算法提升matlab unwrap函数解卷绕范围
  20. 达梦DM8数据库安装和创建实例

热门文章

  1. 2022第三届全国大学生网络安全精英赛练习题(8)
  2. Linux下pppoe开机自动连接,Linux 系统 PPPoE 宽带连接设置方法
  3. ceph学习(故障恢复)——mon全部故障,从osd中恢复集群
  4. Javascript之傻傻理不清的原型链、prototype、__proto__
  5. D. Complete Tripartite(三分图+枚举)
  6. 退格键变成^H的问题
  7. http指南单子版_了解单子。 困惑的指南
  8. 正则的应用--读取本地文件1--例如豆瓣-codecs
  9. 应用宝上架审核要求_APP开发好后如何上架应用宝?需要准备哪些资料?
  10. 中国人民公安大学网络对抗技术实验一