文章目录

  • 1.获取app_id和sdk_key和下载SDK的步骤
  • 2.填写app_id和sdk_key
  • 4.翻译
  • 5.人脸识别错误码
  • 6.人脸识别界面
  • 7.重要的理解
  • 8.自定义
  • 9.查看手机文件里的10000个图片和特征
  • 10.如何导入手机里的图片和特征到人脸库里
  • 11.人脸识别、活体检测和导入10000个人脸库zip下载
  • 12.419个人脸图片和特征zip下载
  • 13.即将下载`10000`个 好期待

1.获取app_id和sdk_key和下载SDK的步骤

获取app_idsdk_key的网址:
https://ai.arcsoft.com.cn/ucenter/resource/build/index.html#/addFreesdk/1002?from=index
第一步骤:先打开这网址再填写信息如下:

第二步骤:填写好了点击“创建新应用”后显示添加应用框如下:

第三步骤:填写好了点击“立即创建”,再点击“确认”,直接获取app_idsdk_key和下载sdk
https://ai.arcsoft.com.cn/ucenter/resource/build/index.html#/application/204190

FaceSearchResultAdapter.java中新增代码
又报错:

Glide.with(holder.imageView)

改为:

Glide.with(holder.imageView.getContext())

2.填写app_id和sdk_key

Constants.java

public static final String APP_ID = "官网获取的APP_ID";
public static final String SDK_KEY = "官网获取的SDK_KEY";

4.翻译

SDK:软件开发包
Arcface:人脸识别
soft:软的
sample:样品
regist:注册
register:注册
AFR:arcsoft(虹软) face(脸) recognition(识别)
FSDK:这只是一个命名,重要的只是FR
AFD: arcsoft(虹软) face(脸) detection(检测)
Engine:引擎
Version:版本
result:结果
Feature:特征
score:分数
Matching:匹配
Pair:一对
clone:一模一样
AFT:arcsoft(虹软) face(脸) tracking(跟踪)
Handler:处理
Runnable:可运行的
run:运行
Detection:检测
Still:还是
surface:表面
After:后
Render:渲染(一种画法)
Preview:预览
Error:错误
HIGHER : 更高
Creat:创造
Destroy:破坏
join:加入
Callback:回调
Extract:取
Feature:特征
Initial:初始的
Uninitial:未初始化的
Num:号码
Parameters:参数
Frame:框
回调函数就是一个通过函数指针调用的函数。如果你把函数的指针(地址)作为参数传递给另一个函数,当这个指针被用来调用其所指向的函数时,我们就说这是回调函数。
Changed:改变
Later:以后
Regist:注册
index:指数
result:结果
params:参数
YUV 表示三个分量, Y 表示 亮度(Luminance),即灰度值,UV表示色度
what: 什么
reg:注册
EVENT:事件
obtain:获取
Empty:空
loop:循环
Ratio : 比
Supported:支持
Application:应用
Permission:权限
Info:信息
over:结束
Canvas:画布
Paint:画
sleep : 休眠
part:一部分
reset:重新
body:身体
recognize:认出
jump:跳
choose:选择
function:功能
manage:管理
down:向下
number:数
suffix:后缀

5.人脸识别错误码

成功 = 0,
错误原因不明 = 1,
无效的参数 = 2,
引擎不支持 = 3,
内存不足 = 4,
状态错误 = 5,
用户取消相关操作 = 6,
操作时间过期 = 7,
用户暂停操作 = 8,
缓冲上溢 = 9,
缓冲下溢 = 10,
存贮空间不足 = 11,
组件不存在 = 12,
全局数据不存在 = 13,
无效的AppId = 28673,
无效的SDKKey = 28674,
AppId和SDKKey不匹配 = 28675,
SDKKey和使用的SDK不匹配 = 28676,
系统版本不被当前SDK所支持 = 28677,
SDK有效期过期_需要重新下载更新 = 28678,
无效的输入内存 = 73729,
无效的输入图像参数 = 73730,
无效的脸部信息1 = 73731,
当前设备无GPU可用 = 73732,
待比较的两个人脸特征的版本不一致 = 73733,
人脸特征检测错误未知 = 81921,
人脸特征检测内存错误 = 81922,
人脸特征检测格式错误 = 81923,
人脸特征检测参数错误 = 81924,
人脸特征检测结果置信度低 = 81925,
Engine不支持的检测属性 = 86017,
需要检测的属性未初始化 = 86018,
待获取的属性未在process中处理过 = 86019,
PROCESS不支持的检测属性 = 86020,
无效的输入图像 = 86021,
无效的脸部信息2 = 86022,
SDK激活失败_请打开读写权限 = 90113,
SDK已激活 = 90114,
SDK未激活 = 90115,
detectFaceScaleVal不支持 = 90116,
SDK版本不匹配 = 90117,
设备不匹配 = 90118,
唯一标识不匹配 = 90119,
参数为空 = 90120,
活体检测功能已过期 = 90121,
版本不支持 = 90122,
签名错误 = 90123,
数据库插入错误 = 90124,
唯一标识符校验失败 = 90125,
颜色空间不支持 = 90126,
图片宽度或高度不支持 = 90127,
READ_PHONE_STATE权限被拒绝 = 90128,
激活数据被破坏, 请删除激活文件_重新进行激活 = 90129,
无法解析主机地址 = 94209,
无法连接服务器 = 94210,
网络连接超时 = 94211,
网络未知错误 = 94212,
无法连接激活码服务器 = 98305,
服务器系统错误 = 98306,
请求参数错误 = 98307,
激活码正确_且未被使用_但和传入的APPID及APPKEY不匹配 = 98308,
传入的KEY值虽然正确_但此KEY已经被激活 = 98309,
KEY格式不对_一般来说是KEY错误或者未传入KEY值 = 98310

6.人脸识别界面


7.重要的理解

1.FaceServer.java

 ....../*** 用于预览时注册人脸** @param context  上下文对象* @param nv21     NV21数据* @param width    NV21宽度* @param height   NV21高度* @param faceInfo {@link FaceEngine#detectFaces(byte[], int, int, int, List)}获取的人脸信息* @param name     保存的名字,若为空则使用时间戳* @return 是否注册成功*/public boolean registerNv21(Context context, byte[] nv21, int width, int height, FaceInfo faceInfo, String name) {......}....../*** 用于注册照片人脸** @param context 上下文对象* @param bgr24   bgr24数据* @param width   bgr24宽度* @param height  bgr24高度* @param name    保存的名字,若为空则使用时间戳* @return 是否注册成功*/public boolean registerBgr24(Context context, byte[] bgr24, int width, int height, String name) {......}......

什么是Nv21

NV21 的存储格式是,以4 X 4 图片为例子
占用内存为 4 X 4 X 3 / 2 = 24 个字节
Y Y Y Y
Y Y Y Y
Y Y Y Y
Y Y Y Y
V U V U
V U V U

什么是Bgr24

Bgr24:Bgr24像素格式是一种采用24BPP的sRGB格式。每个颜色通道(蓝色blue, 绿色green, 红色red)各占8BPP(位/像素)。

8.自定义

1.appbuild.gradle中新增代码:

compile 'com.guo.android_extend:android-extend:1.0.5'

2.FaceServer.java中新增代码:

......
public static List<FaceImgRegisterInfo> faceImgRegisterInfoList;
......
//特征
private static List<FaceRegisterInfo> MyfaceFeatureRegisterInfoList;
//导入手机里的10000个人脸图片
public static List<FaceImgRegisterInfo> MyimportFaceImgRegisterInfo;
//导入手机里的10000个特征
public static List<FaceRegisterInfo> MyimportFaceFeatureRegisterInfo;
......
//获取图片和姓名的信息
public int getImgAndName(Context context){synchronized (this){if (ROOT_PATH == null) {ROOT_PATH = context.getFilesDir().getAbsolutePath();}File imgDir = new File(ROOT_PATH + File.separator + SAVE_IMG_DIR);if (!imgDir.exists() || !imgDir.isDirectory()) {return 0;}File[] imgFiles = imgDir.listFiles();if (imgFiles == null || imgFiles.length == 0) {return 0;}faceImgRegisterInfoList = new ArrayList<>();for (File imgFile : imgFiles) {faceImgRegisterInfoList.add(new FaceImgRegisterInfo(imgFile.getPath(), getName(imgFile.getName())));}return faceImgRegisterInfoList.size();}}private String getName(String path){int start= path.lastIndexOf(":");int end = path.lastIndexOf(".");return path.substring(start+1,end);}

3.activity_face_manage.xml中新增代码:

<com.guo.android_extend.widget.HListViewandroid:id="@+id/hlistView"android:layout_width="wrap_content"android:layout_height="100dp"android:layout_alignParentBottom="true"android:layout_centerHorizontal="true"android:scrollbars="none"app:dividerHeight="1dp"app:listSelector="@android:drawable/list_selector_background" android:layout_gravity="center_horizontal"/>
<TextViewandroid:id="@+id/tv_number"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_gravity="center_horizontal"android:textSize="30dp"android:textColor="#000000"/>

4.FaceManageActivity.java中新增代码:

......
private HListView mHListView;
public RegisterViewAdapter mRegisterViewAdapter;
......
mHListView = (HListView) findViewById(R.id.hlistView);
TextView facenum = (TextView) findViewById(R.id.tv_number);
downFile();
mRegisterViewAdapter = new RegisterViewAdapter(FaceManageActivity.this);
mHListView.setAdapter(mRegisterViewAdapter);
......
private void downFile(){int faceNum = FaceServer.getInstance().getFaceNumber(this);if (faceNum == 0) {showToast(getString(R.string.batch_process_no_face_need_to_delete));}else {FaceServer.getInstance().getImgAndName(this);}}
......
class Holder {ExtImageView siv;TextView tv;}class RegisterViewAdapter extends BaseAdapter {Context mContext;LayoutInflater mLInflater;public RegisterViewAdapter(Context c) {mContext = c;mLInflater = LayoutInflater.from(mContext);}@Overridepublic int getCount() {if (FaceServer.faceImgRegisterInfoList==null){return 0;}else {facenum.setText("注册的人脸数:" + FaceServer.faceImgRegisterInfoList.size() + "个");return FaceServer.faceImgRegisterInfoList.size();}}@Overridepublic Object getItem(int position) {return null;}@Overridepublic long getItemId(int position) {return position;}@Overridepublic View getView(int position, View convertView, ViewGroup parent) {Holder holder = null;if (convertView != null)holder = (Holder) convertView.getTag();else {convertView = mLInflater.inflate(R.layout.item_sample, null);holder = new Holder();holder.siv = (ExtImageView) convertView.findViewById(R.id.imageView1);holder.tv = (TextView) convertView.findViewById(R.id.textView1);convertView.setTag(holder);}if (!(FaceServer.faceImgRegisterInfoList == null)){if (!FaceServer.faceImgRegisterInfoList.isEmpty()){FaceImgRegisterInfo face = FaceServer.faceImgRegisterInfoList.get(position);holder.tv.setText(face.getName());String path = face.getImgpath();holder.siv.setImageBitmap(BitmapFactory.decodeFile(path));holder.siv.setScaleType(ImageView.ScaleType.CENTER_INSIDE);convertView.setWillNotDraw(false);}}return convertView;}}
......

9.查看手机文件里的10000个图片和特征

1.FaceManageActivity.java

private static final String ROOT_DIR = Environment.getExternalStorageDirectory().getAbsolutePath() + File.separator + "arcfacedemo";

可以发现Environment.getExternalStorageDirectory().getAbsolutePath(),这路经:/storage/emulated/0/,但是我想知道这路经到底在哪,去百度找了很多都找不到,看来是说无法查看
这路经可以如何改才能查看
怎么改 先看一下

FaceServer.java,先查看图片

public boolean registerNv21(Context context, byte[] nv21, int width, int height, FaceInfo faceInfo, String name) {synchronized (this) {......if (ROOT_PATH == null) {ROOT_PATH = context.getFilesDir().getAbsolutePath();}......//图片存储的文件夹File imgDir = new File(ROOT_PATH + File.separator + SAVE_IMG_DIR);if (!imgDir.exists() && !imgDir.mkdirs()) {Log.e(TAG, "registerNv21: can not create image directory");return false;}File file = new File(imgDir + File.separator + userName + IMG_SUFFIX);// 创建一个头像的Bitmap,存放旋转结果图Bitmap headBmp = getHeadImage(nv21, width, height, faceInfo.getOrient(), cropRect, ArcSoftImageFormat.NV21);FileOutputStream fosImage = new FileOutputStream(file);headBmp.compress(Bitmap.CompressFormat.JPEG, 100, fosImage);fosImage.close();......}
}

改的和FaceServer.java差不多

String path = Environment.getExternalStorageDirectory().getPath();//SAVE_IMG_DIR = "register" + File.separator + "imgs";File MyImgDir = new File(path + File.separator +SAVE_IMG_DIR);if (!MyImgDir.exists() && !MyImgDir.mkdirs()) {Log.e(TAG, "已新建文件夹");return;}for (FaceImgRegisterInfo Mypath : faceImgRegisterInfoList){File file = new File(MyImgDir + File.separator + Mypath.getName());Bitmap bitmap = BitmapFactory.decodeFile(Mypath.getImgpath());try {FileOutputStream fosImage = new FileOutputStream(file);bitmap.compress(Bitmap.CompressFormat.JPEG, 100, fosImage);fosImage.close();} catch (FileNotFoundException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();}}

查看手机里的路经/storage/emulated/0/register/imgs/如下图:

FaceServer.java中新增代码 就是图片和特征,完整的代码

//把一个隐藏的文件复制到另一个显示的文件(图片和特征)public void copy() {synchronized (this) {String path = Environment.getExternalStorageDirectory().getPath();//复制到另一个显示的图片文件File MyImgDir = new File(path + File.separator + SAVE_IMG_DIR);if (!MyImgDir.exists() && !MyImgDir.mkdirs()) {Log.e(TAG, "已新建文件夹");} else {for (FaceImgRegisterInfo Mypath : faceImgRegisterInfoList) {File file = new File(MyImgDir + File.separator + Mypath.getName());Bitmap bitmap = BitmapFactory.decodeFile(Mypath.getImgpath());try {FileOutputStream fosImage = new FileOutputStream(file);bitmap.compress(Bitmap.CompressFormat.JPEG, 100, fosImage);fosImage.close();} catch (FileNotFoundException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();}}}File featureDir = new File(ROOT_PATH + File.separator + SAVE_FEATURE_DIR);if (!featureDir.exists() || !featureDir.isDirectory()) {return;}File[] featureFiles = featureDir.listFiles();if (featureFiles == null || featureFiles.length == 0) {return;}MyfaceFeatureRegisterInfoList = new ArrayList<>();for (File featureFile : featureFiles) {try {FileInputStream fis = new FileInputStream(featureFile);byte[] feature = new byte[FaceFeature.FEATURE_SIZE];fis.read(feature);fis.close();MyfaceFeatureRegisterInfoList.add(new FaceRegisterInfo(feature, featureFile.getName()));} catch (IOException e) {e.printStackTrace();}}//复制到另一个显示的特征文件File MyfeatureDir = new File(path + File.separator + SAVE_FEATURE_DIR);if (!MyfeatureDir.exists() && !MyfeatureDir.mkdirs()) {Log.e(TAG, "已新建文件夹");return;}for (FaceRegisterInfo bytedata : MyfaceFeatureRegisterInfoList) {File file = new File(MyfeatureDir + File.separator + bytedata.getName());FileOutputStream fosFeature = null;try {fosFeature = new FileOutputStream(file);fosFeature.write(bytedata.getFeatureData());fosFeature.close();} catch (FileNotFoundException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();}}}}

查看手机里的路经/storage/emulated/0/register/Features/如下图:

10.如何导入手机里的图片和特征到人脸库里



1.FaceManageActivity.java中新增代码:

public void BtnImport(View view){FaceServer.getInstance().MyImport();FaceServer.getInstance().getImgAndName(this);mRegisterViewAdapter.notifyDataSetChanged();}

2.FaceServer.java中新增代码:

public void MyImport(){synchronized (this) {String path = Environment.getExternalStorageDirectory().getPath();String SAVE_IMG_DIR2 = "register2" + File.separator + "imgs2";String SAVE_FEATURE_DIR2 = "register2" + File.separator + "features2";File imgfile = new File(path + File.separator + SAVE_IMG_DIR2);if (!imgfile.exists() || !imgfile.isDirectory()) {return;}File[] imgFiles = imgfile.listFiles();if (imgFiles == null || imgFiles.length == 0) {return;}File featurefile = new File(path + File.separator + SAVE_FEATURE_DIR2);if (!featurefile.exists() || !featurefile.isDirectory()) {return;}File[] featureFiles = featurefile.listFiles();if (featurefile == null || featurefile.length() == 0) {return;}MyimportFaceImgRegisterInfo = new ArrayList<>();for (File imgFile : imgFiles) {MyimportFaceImgRegisterInfo.add(new FaceImgRegisterInfo(imgFile.getPath(), imgFile.getName()));}MyimportFaceFeatureRegisterInfo = new ArrayList<>();for (File featureFile : featureFiles) {FileInputStream fis = null;try {fis = new FileInputStream(featureFile);byte[] feature = new byte[FaceFeature.FEATURE_SIZE];fis.read(feature);fis.close();MyimportFaceFeatureRegisterInfo.add(new FaceRegisterInfo(feature, featureFile.getName()));} catch (FileNotFoundException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();}}//图片存储的文件夹File imgDir = new File(ROOT_PATH + File.separator + SAVE_IMG_DIR);if (!imgDir.exists() && !imgDir.mkdirs()) {Log.e(TAG, "registerNv21: can not create image directory");return;}for (FaceImgRegisterInfo img : MyimportFaceImgRegisterInfo) {File file = new File(imgDir + File.separator + img.getName());Bitmap bitmap = BitmapFactory.decodeFile(img.getImgpath());FileOutputStream fosImage = null;try {fosImage = new FileOutputStream(file);bitmap.compress(Bitmap.CompressFormat.JPEG, 100, fosImage);fosImage.close();} catch (FileNotFoundException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();}}//特征存储的文件夹File featureDir = new File(ROOT_PATH + File.separator + SAVE_FEATURE_DIR);if (!featureDir.exists() && !featureDir.mkdirs()) {Log.e(TAG, "已建文件夹");return;}for (FaceRegisterInfo feature : MyimportFaceFeatureRegisterInfo) {File file = new File(featureDir + File.separator + feature.getName());FileOutputStream fosFeature = null;try {fosFeature = new FileOutputStream(file);fosFeature.write(feature.getFeatureData());fosFeature.close();} catch (FileNotFoundException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();}}}}

3.FaceServer.java中

public void MyImport(){synchronized (this) {String path = Environment.getExternalStorageDirectory().getPath();String SAVE_IMG_DIR2 = "register" + File.separator + "imgs";String SAVE_FEATURE_DIR2 = "register" + File.separator + "features";

4.导入后如下图:

11.人脸识别、活体检测和导入10000个人脸库zip下载

https://download.csdn.net/download/qq_35091074/18839315

12.419个人脸图片和特征zip下载

https://download.csdn.net/download/qq_35091074/18751114

13.即将下载10000个 好期待

Android的虹软人脸识别和活体检测(附含10000个人脸图片和特征zip下载)相关推荐

  1. flutter 刷脸_GitHub - nnnggel/baidu_face_plugin: 百度人脸识别和活体检测 Flutter 插件(目前版本仅支持 Android)...

    baidu_face_plugin 百度人脸识别和活体检测 Flutter 插件(目前版本仅支持 Android) 使用方式 注册百度开发者账号 前往 百度开发者账号 进行注册. 申请并配置licen ...

  2. Python | 人脸识别系统(人脸识别、活体检测、背景模糊、关键点检测)

    本博客为人脸识别系统项目简介 项目GitHub完整源代码地址:Su-Face-Recognition: A face recognition for user logining 一.运行环境 本系统能 ...

  3. 基于matlab活体检测,人脸识别中活体检测算法综述.PDF

    人脸识别中的活体检测算法综述 SIGAI 2018.9.19 原创声明:本文为 SIGAI 原创文章,仅供个人学习使用,未经允许,不能用于商业目的. 1. 什么是活体检测? --> 判断捕捉到的 ...

  4. Python | 人脸识别系统 — 活体检测

    本博客为人脸识别系统的活体检测代码解释 人脸识别系统博客汇总:人脸识别系统-博客索引 项目GitHub地址:Su-Face-Recognition: A face recognition for us ...

  5. JAVA实现人脸识别,活体检测之百度API

    ---------------------------------------------------------------- GitHub:https://github.com/reamZMX/l ...

  6. android 活体检测方案,一种基于人脸识别认证的Android红外双目活体检测的制作方法...

    本发明涉及人脸识别领域,具体涉及一种基于人脸识别认证的Android红外双目活体检测. 背景技术: 在目前的利用红外线实现双目活体检测的技术中,普通红外双目,能够同时实时采集近红外和可见光两种图像,并 ...

  7. 基于C#开发人脸识别,人脸捕捉,活体检测,图像识别

    引用开源SeetaFace6人脸识别类库,进行二次开发实现,人脸识别,人脸捕捉,活体检测,图像识别,开箱即用 下载链接地址 https://download.csdn.net/download/qq_ ...

  8. 应用人脸活体检测技术,可避免人脸识别系统被攻击

    人脸识别技术是近年来出现的一种基于人的脸部特征信息进行身份识别的生物特征识别技术.与其他生物识别技术相比较,人脸识别具有友好.简便.准确.经济及可扩展性良好等众多优势,可广泛应用于安全验证.监控.出入 ...

  9. android 静态图片自动切换,Android静态图片人脸识别的完整demo(附完整源码)

    Android静态图片人脸识别的完整demo(附完整源码) 来源:互联网 作者:佚名 时间:2015-03-24 20:07 本文介绍了android静态识别人脸并进行标记人眼位置及人脸框的完整dem ...

最新文章

  1. 决策树算法原理(ID3,C4.5)
  2. 华为机试第11题python
  3. C#windows服务开发
  4. 剑指offer 包含min函数的栈
  5. 信号与线性系统分析_线性系统与采样定理
  6. am大学计算机科学,曹同学-综合大学排名80的TexasAMUniversity计算机科学硕士
  7. androidstudio jni开发_高考失利落榜,7年Android开发现已年薪60w,我的逆袭之路想说给你听...
  8. Git学习系列(三)版本回退和管理文件的修改及删除操作
  9. 阿里P8好友说,要想成为Java大佬,就得要多逛逛国外的这几个技术网站...
  10. 常用的计算机组装工具有,计算机组装维护与常用工具软件考试含答案
  11. 史上超全web渗透测试思维导图
  12. 国有数据要素市场的政策红利,你get 到了吗?
  13. Python 数据分析微专业课程--项目实战09 房价影响因素挖掘
  14. springcloud -netflix学习总结
  15. 冒泡排序 - 数据结构和算法88
  16. python订餐系统_用python编写的公司订餐系统的审核脚本
  17. 架构师说低代码:走出半生,归来仍是“毒瘤”!
  18. 标准员培训建筑八大员培训建筑标准员建筑工程施工标准化管理
  19. 【HJL-E6/A数字式交流电流继电器】
  20. 人力资源外包(HRO)服务市场现状研究分析-

热门文章

  1. 大数据风控,互联网有盾可依
  2. linux rar命令没找到,linux下rarlinux安装后找不到rar命令处理方法
  3. 建筑产业数字化进程提速 业内期盼国家战略出台
  4. php 程序重复执行命令,重复执行bat命令.bat
  5. android——SwipeRefreshLayout上拉加载、下拉刷新、SmartRefreshLayout
  6. Git 首次关联远程仓库(代码有冲突解决)
  7. 互联网医院App开发|医保系统对接
  8. hp惠普暗影精灵6在ubuntu 18.04下无法打开wifi的问题
  9. Python+adb之使用电脑解开手机密码锁
  10. 计算机主机箱安装,教你自己动手更换电脑主机箱,装机不求人!