ZKHB虹膜识别

最近添加了该款虹膜的识别,要实现该功能,提前是你要有这款虹膜产品。
今天只是说一下虹膜识别中的一些方法,怎么识别的,具体的工作都在各厂商自己封装的库中。首先,我们要添加该厂商提供的库,主要是虹膜识别的算法的库,大大小小的大约有快十个库。实现虹膜识别,我们需要虹膜专用设别的摄像头。
在OnCreate()中,我们需要设置好摄像头、初始化识别界面、语音、初始化虹膜。这里设置摄像头是因为,该模块不支持双摄像头工作。
1、 EnumDeviceType.getCurrentDevice().setCameraId(1);由于我们自己的设备原本就有一个摄像头,所以这里必须先给他设置好要用的摄像头,摄像头都是用Id去设置的,默认的都是0。
2、设置好两眼的距离,以及初始化界面布局,这里用的是ProgressBar来显示进度:

private void screenUiAdjust() {
    DisplayMetrics metrics = new DisplayMetrics();
    getWindowManager().getDefaultDisplay().getMetrics(metrics);
    
    int screenWidth = metrics.widthPixels; // 获取屏幕的宽
    Configuration mConfiguration = this.getResources().getConfiguration();
    int ori = mConfiguration.orientation;// 获取屏幕方向
    if (ori == Configuration.ORIENTATION_LANDSCAPE) {   // 如果是横屏,预览区域的  宽为当前屏幕宽的80%,根据设备的不同可以动态再进行适配
        setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
        hor_scale = 0.6f;
        eyeViewWidth = (int) (screenWidth * hor_scale);
        // 由于图像是16:9的图像
        eyeViewHeight = (int) (eyeViewWidth / 1.777f);
        // 在480*270的分辨率下,双眼相对于左上角的坐标点为(140,110),(340,110) ps:固定坐标点,修改需要咨询虹霸开发人员
        float x = (float) eyeViewWidth / IKALGConstant.IK_DISPLAY_IMG_WIDTH;
        float y = (float) eyeViewHeight / IKALGConstant.IK_DISPLAY_IMG_HEIGHT;
        DecimalFormat df = new DecimalFormat("0.00");
        int transWid = (screenWidth - eyeViewWidth)/2;
        eyeX1 = Float.parseFloat(df.format(x)) * EnumDeviceType.getCurrentDevice().getDefaultLeftIrisCol()+ transWid;
        eyeX2 = Float.parseFloat(df.format(x)) * EnumDeviceType.getCurrentDevice().getDefaultRightIrisCol()+ transWid;
        eyeHeight = Float.parseFloat(df.format(y)) * EnumDeviceType.getCurrentDevice().getDefaultLeftIrisRow();
    } else if (ori == Configuration.ORIENTATION_PORTRAIT) { // 竖屏
        setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
        hor_scale = 1.0f;
        eyeViewWidth = screenWidth;// 如果是竖屏,预览区域的宽为屏幕的宽
        // 由于图像是16:9的图像
        eyeViewHeight = (int) (eyeViewWidth / 1.777f);
        // 在480*270的分辨率下,双眼的坐标点为(140,110),(340,110) ps:固定坐标点,修改需要咨询虹霸开发人员
        float x = (float) eyeViewWidth / IKALGConstant.IK_DISPLAY_IMG_WIDTH;
        float y = (float) eyeViewHeight / IKALGConstant.IK_DISPLAY_IMG_HEIGHT;
        DecimalFormat df = new DecimalFormat("0.00");
        eyeX1 = Float.parseFloat(df.format(x)) * EnumDeviceType.getCurrentDevice().getDefaultLeftIrisCol();
        eyeX2 = Float.parseFloat(df.format(x)) * EnumDeviceType.getCurrentDevice().getDefaultRightIrisCol();
        eyeHeight = Float.parseFloat(df.format(y)) * EnumDeviceType.getCurrentDevice().getDefaultLeftIrisRow();
    }
    
    requestWindowFeature(Window.FEATURE_NO_TITLE); // 全屏,不出现图标
    getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);
    getWindow().setFormat(PixelFormat.TRANSLUCENT);
}

以上就是设置两眼在屏幕中的位置。

    private void initUI() {
    svCamera = (SurfaceView) findViewById(R.id.iv_camera);
    LayoutParams svParams = svCamera.getLayoutParams();
    svParams.width = eyeViewWidth;
    svParams.height = eyeViewHeight;
    svCamera.setLayoutParams(svParams);
    holder = svCamera.getHolder();
    holder.addCallback(surfaceCallback);
    matrix = new Matrix();

    progressBar = (RoundProgressBar) findViewById(R.id.roundProgress);
    progressBar.setXAndY(eyeX1, eyeX2, eyeHeight);// 设置双眼progressbar的位置
    progressBar.setHorScale(hor_scale);
    // Init button
    mIrisRegisterBtn = (Button) findViewById(R.id.btn_register);
    mIrisRegisterBtn.setOnClickListener(this);
    mIrisIdenBtn = (Button) findViewById(R.id.btn_scan);
    mIrisIdenBtn.setOnClickListener(this);
    mIrisCaptureBtn = (Button) findViewById(R.id.btn_capture);
    mIrisCaptureBtn.setOnClickListener(this);

    mResultTextViewEnrRecFinal = (TextView) findViewById(R.id.ie_final_result);
    et_userName = (EditText) findViewById(R.id.et_userName);
    previewParaUpdated = false;
}‘

这里还是使用SurfaceView来展示摄像画面,并生成SurfaceHolder。
3、接下来就是最重要的一步了,初始化虹膜模块

  private void initIrisData() {
    irisLeftData = new FeatureList(maxFeatureCount, "L");
    irisRightData = new FeatureList(maxFeatureCount, "R");

    // 2017.09.05 10:25修改,从数据库查询所有特征文件
    leftEyeList = (ArrayList<IrisUserInfo>) sqliteDataBase.queryLeftFeature();

    rightEyeList = (ArrayList<IrisUserInfo>) sqliteDataBase.queryRightFeature();

    if (leftEyeList.size() == 0 || leftEyeList == null
        && rightEyeList.size() == 0 || rightEyeList == null) {
        return;
    }

    for (int i = 0; i < leftEyeList.size(); i++) {
        irisLeftData.irisput(new Person(leftEyeList.get(i).m_UserName), EnumEyeType.LEFT,
                new Portrait(1), leftEyeList.get(i).m_LeftTemplate);
    }

    for (int i = 0; i < rightEyeList.size(); i++) {
        irisRightData.irisput(new Person(rightEyeList.get(i).m_UserName), EnumEyeType.RIGHT,
                new Portrait(1), rightEyeList.get(i).m_RightTemplate);
    }

    mIrisPresenter.setIrisData(irisLeftData, irisRightData, faceData);//需要把特征传入jar包,以便识别
}

后面的将人的虹膜特征传入Jar包是为了后续的识别。

接下来就是注册识别的工作了,这些工作各厂商都会给出相应的接口或者DEMO,主要是注册成功后和识别成功后多数据的处理。这些数据基本都是byte数组,如果需要上传至服务器,建议最好使用Base64对其进行编码,不然传输过程中,有些特殊字符会出现问题。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 199,636评论 5 468
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 83,890评论 2 376
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 146,680评论 0 330
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 53,766评论 1 271
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 62,665评论 5 359
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,045评论 1 276
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,515评论 3 390
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,182评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,334评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,274评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,319评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,002评论 3 315
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,599评论 3 303
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,675评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,917评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,309评论 2 345
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 41,885评论 2 341

推荐阅读更多精彩内容

  • 五、人脸识别(FR)的产品落地 1、FR技术产品的优势 1)非接触: 人脸图像的采集不同于指纹、掌纹需要接触指掌纹...
    城市中迷途小书童阅读 1,161评论 1 5
  • 这篇文章本来上个月就要写的,后来一直没写,正好在新年写下,对之前的工作进行总结。 之前工作中需要自定义相机,网上看...
    zero_sr阅读 4,769评论 0 11
  • 一、文章说明 上周开始写直播相关的文章,写了一篇手机直播总览的文章,没想到得到大家很多赞和关注,在此感谢大家支持。...
    风从影阅读 19,754评论 33 133
  • Tutorial - 1 (a) 为什么e时代需要生物特征识别我们在信息时代面临诸多问题,如病毒、黑客、计算机盗窃...
    ShellyWhen阅读 2,178评论 0 4
  • 哎呀汪老的《水蛇腰》那本书我太喜欢了! 是我目前最喜欢的一本书,而且暂时还没有第二第三喜欢的排名出现。 好喜欢里面...
    秋凉柠檬阅读 453评论 0 0