IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 移动开发 -> Android的虹软人脸识别和活体检测(附含10000个人脸图片和特征zip下载) -> 正文阅读

[移动开发]Android的虹软人脸识别和活体检测(附含10000个人脸图片和特征zip下载)

  • 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
Freesdk/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 faceImgRegisterInfoList;

//特征

private static List MyfaceFeatureRegisterInfoList;

//导入手机里的10000个人脸图片

public static List MyimportFaceImgRegisterInfo;

//导入手机里的10000个特征

public static List 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.HListView

android: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”/>

<TextView

android: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);

}

@Override

public int getCount() {

if (FaceServer.faceImgRegisterInfoList==null){

return 0;

}else {

facenum.setText(“注册的人脸数:” + FaceServer.faceImgRegisterInfoList.size() + “个”);

return FaceServer.faceImgRegisterInfoList.size();

}

}

@Override

public Object getItem(int position) {

return null;

}

@Override

public long getItemId(int position) {

return position;

}

@Override

public 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个图片和特征

====================================================================================

  移动开发 最新文章
Vue3装载axios和element-ui
android adb cmd
【xcode】Xcode常用快捷键与技巧
Android开发中的线程池使用
Java 和 Android 的 Base64
Android 测试文字编码格式
微信小程序支付
安卓权限记录
知乎之自动养号
【Android Jetpack】DataStore
上一篇文章      下一篇文章      查看所有文章
加:2022-01-28 12:02:03  更:2022-01-28 12:03:29 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 12:29:41-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码