脸鉴AI开放平台:轻松上手的人工智能算法

news2024/11/6 3:00:50

序言

一、提升开发效率工具

1.1封装view窗口

1.2封装常用功能接口

1.3提供基础接口代码块

二、使用介绍

2.1 注册&登录

2.2 新建应用

2.3 下载应用

2.4 安装包介绍

2.5 demo项目

2.6 配置demo

2.7 运行demo

三、使用结果

3.1 摄像头采集人脸添加模板

3.2 实时画面1:N人脸检测

3.3 照片测试

3.4 活体检测

四、总结&建议

4.1 总结

4.2体验地址


序言

最近在公司项目中遇到了人脸识别验证的需求,其中一个重要的功能是使用手机摄像头进行人脸实时显示和识别。由于我之前没有调用过摄像头的经验,一开始遇到了很多问题😔😔

按照网上的教程编写了相关的代码,并在模拟器中运行程序。然而,当点击启动按钮时,程序突然崩溃了😭😭

我有尝试重新编译代码、检查权限等方式,但问题依然存在。为了排查问题,决定在真机上调试程序。但是在真机上,依然发现程序根本无法启动,只是停留在一个黑屏界面上,没有任何反应。😰😰

通过添加调试语句并逐行排查,我发现问题可能出现在与摄像头资源释放和打开有关的代码段中。查阅了相关资料后,发现需要在onPause()方法中释放摄像头资源,并在onResume()方法中重新打开摄像头,以避免应用切换时的问题。系统可能会将摄像头资源分配给其他应用程序使用,如果不及时释放摄像头资源,用户再次回到应用时可能无法正常访问摄像头。🙂🙂

于是修改了代码,在onPause()和onResume()方法中加入了释放和打开摄像头资源的代码。这次运行程序时,它终于正常工作了!✌️✌️我成功看到了实时视频流。😎😎

通过这次经历,我意识到没有调用过摄像头的程序员,刚开始使用时几乎都会遇到这种类似的问题。

由于与硬件有关,写上层应用的软件工程师往往缺乏相关经验,有些问题根本想不到。并且查过资料过程中发现,视频处理隐藏的问题比较多,有些还与使用时长有关,简单测试测不出来。

因此,在开发过程中要保持警觉,并进行充分的测试,以确保软件的稳定性和可靠性💪

然而,项目进度紧迫,时间有限。最近得知一家名为👉暖果科技】的视觉算法公司18年来一直从事前沿算法的研究和应用,他们最近推出了一个👉【AI开放平台—脸鉴】。

在这个平台提供的脸识别SDK里直接封装了View窗口可以直接调用,而不需要重新制作UI上的人脸框。考虑到方便性,我去详细了解了一下,发现确实使用起来非常方便👍👍

接下来我会把使用经验分享给大家。

今天我们就来了解一下这个SDK吧,本文会从以下四个方面讲解👇👇

  1. 提升开发效率工具
  2. 使用介绍
  3. 使用结果
  4. 总结&建议

一、提升开发效率工具

1.1封装view窗口

SDK封装了view窗口,处理了摄像头数据的获取和渲染,开发者无需担心底层视频流处理和图像显示细节。

经过验证和测试,封装的view窗口可以保证一定的稳定性和可靠性。初次接触人脸识别SDK的开发者可以直接使用这个封装好的view窗口,无需担心底层摄像头处理问题,避免潜在错误和异常情况。这个对开发者真的很友好👍👍

以添加人脸模板功能为例,看一下添加布局后的效果:

可以看到添加布局后,能很方便的调用手机摄像头并显示人脸跟踪框,窗口的大小、跟踪框的颜色等都可以根据需要设置。我们不需要关注如何调用摄像头,也不需要从头开始做UI,只需要调用封装好的方法即可,真的做到了开箱即用。✌️✌️

1.2封装常用功能接口

SDK还提供了人脸采集、人脸比对和活体检测这些常见功能的整合接口。对于不熟悉人脸识别流程的开发者来说,只需要调用一个接口,就能自动完成整个流程中多个功能的调用,而无需在不同的基础功能接口(如摄像头遮挡检测、人脸检测、提取指定位置的人脸特征和特征值比对等)之间反复切换和调用。进一步简化了开发过程,提高效率。

例如人脸比对的使用流程如下:

人脸比对功能基础接口使用流程

封装后的代码示例

public void compareFeature(View view) {
        if (feature1 == null || feature2 == null){
            tv.setText("请先选择照片");
            return;
        }
        FaceController.getInstance().checkFeatrue(feature1, feature2, new CompareFeatureListener() {
            @Override
            public void checkFail(final int code, final String errorMsg) {
                runOnUiThread(new Runnable() {
                    @Override
                    public void run() {
                        tv.setText("比对失败, code:" + code + "  errorMsg:" + errorMsg);
                    }
                });
            }

            @Override
            public void checkSuccess(final float value) {
                runOnUiThread(new Runnable() {
                    @Override
                    public void run() {
                        tv.setText("比对完成, 相似度:" + value);
                    }
                });
            }
        });
    }


1.3提供基础接口代码块

如果需要自己进行功能整合开发,要反复调用基础接口的话,在帮助中心也可以找到SDK各个基础功能接口的demo代码块,我们可以在对应接口的代码块👉直接复制需要的代码,而不需要在整个示例demo中大海捞针式复制。

如常用的人脸检测功能接口代码:直接点击右上角的复制按钮就可以了。

二、使用介绍

2.1 注册&登录

打开链接,www.landaispace.com

会展示如下界面,填入对应的信息进行注册即可

注册成功之后,就可以选择登录啦,他支持两种方式登录:账号密码/手机号快捷登录

我选择的是手机号快捷登录

登录成功如图所示,初次登陆帐号为未认证状态,我们申请的每个应用仅有1个SDK授权(即新建的每个应用所下载的SDK仅能在1台设备激活使用)。

2.2 新建应用

下载SDK并使用脸鉴AI技术之前,需要先新建应用。因为应用是我们下载并使用SDK服务的基本操作单元,应用创建成功后,可获取激活码(AppID和SDK_KEY),并进行相关配置操作。

2.2.1 我的应用

点击我的应用--->新建应用,如图

2.2.2 填入对应的信息

2.2.3 应用列表

新建成功之后,在应用列表就会看到对应的应用,另外每个应用右侧都有“咨询产品”按钮,点击后就能直接发送当前应用信息与在线客服沟通

2.3 下载应用

下载应用有两种方式:1在列表中下载,2,在详情中下载

2.3.1下载成功

2.4 安装包介绍

下载成功之后,解压可以看到内容

分为2个包:

  • 安卓
  • IOS

2.4.1 安卓内容

2.4.2 IOS内容

2.5 demo项目

2.6 配置demo

2.6.1 配置包

修改build.gradle文件,修改applicationId,为你新建应用的包名,如下图所示

2.6.2 配置lib

把刚刚下载下来的lib包中的.arr 文件放到libs文件下,并修改对应的配置文件

具体代码

apply plugin: 'com.android.application'

android {
    compileSdkVersion 28
    defaultConfig {
        applicationId "com.warmnut.sface.demo.test"
        minSdkVersion 21
        targetSdkVersion 27
        versionCode 1
        versionName "1.2"
        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"

    }


    lintOptions {
        checkReleaseBuilds false
        // Or, if you prefer, you can continue to check for errors in release builds,
        // but continue the build even when errors are found:
        abortOnError false
    }


    repositories {
        flatDir {
            dirs 'libs'   // aar目录
        }
    }

}

dependencies {
    implementation 'androidx.constraintlayout:constraintlayout:1.1.2'
    implementation(name: 'sface_app_sdk_recognize_actionalive_2.0.2', ext: 'aar')
    implementation 'androidx.appcompat:appcompat:1.0.0-alpha1'
    implementation 'com.alibaba:fastjson:1.2.33'
}

2.6.3 初始化方法

修改SplashActivity.java中人脸识别引擎初始化initManage函数的参数,appid和sdkkey。

2.6.4 配置权限

在AndroidManifest.xml,如图所示

具体代码

    <!-- 访问网络权限 -->
    <uses-permission android:name="android.permission.INTERNET" />
    <!-- 麦克风权限 -->
    <uses-permission android:name="android.permission.RECORD_AUDIO" />
    <!-- 相机权限 -->
    <uses-feature
        android:name="android.hardware.camera"
        android:required="true" />
    <uses-permission android:name="android.permission.CAMERA" />
    <!-- 允许程序访问电话状态 -->
    <uses-permission android:name="android.permission.READ_PHONE_STATE" />
    <!-- 写入扩展存储权限 -->
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />

2.7 运行demo

配置好了之后,项目就可以正常运行了,运行结果如下,我们此时就可以进行一些人脸识别操作测试了。

使用结果

因为隐私原因,这里放的检测结果如下:

3.1 摄像头采集人脸添加模板

3.2 实时画面1:N人脸检测

3.3 照片测试

3.3.1  M:N 人脸比对

这里选择了比较喜欢的一个演员的照片

即便更换表情,M:N比对也会反馈比对成功,

如果事先没有添加模板,仅显示比对结束,而不返回人员和相似度

3.3.2 1:1 对比

SDK推荐的阈值是0.77,相似度高于阈值判定为是同一个人

人脸对比结果:相似度0.86正确识别为同一个人

3.3.2.1 换装对比

换装比对结果:相似度0.86正确识别为同一个人

3.3.2.2 换人对比

换人比对结果:相似度0.46低于0.77不是一个人

3.4 活体检测

活体检测有6种,分别是:

  • 眨眨眼
  • 左转头
  • 右转头
  • 低头
  • 抬头
  • 张张嘴

3.4.1 眨眨眼

可以看到眨眼睛已检测成功

3.4.2 左转头

四、总结&建议

4.1 总结

针对脸鉴人脸识别SDK功能方面,以下是我的一些感受👇👇

这个平台真的很贴心❤️❤️,特别是对开发者来说。首先,他们提供了一个免费试用期为期一年的SDK授权,完全没有应用数量的限制。这意味着我们有足够的时间来进行集成测试,而不必担心授权费用。

而且,他们的维护政策也很出色。平台提供了终身授权和免费升级,这意味着我们不必担心将来的升级费用或者需要再次购买新版本的SDK。随着时间的推移,如果他们对人脸识别SDK进行改进和优化,比如增加新功能、提高性能和算法准确率等,我们可以立刻在平台上获得这些更新,并将其应用到我们的应用程序中。这对于提供更好的用户体验和效果非常有帮助。

此外,这个平台还提供了其他私有化服务器部署的算法产品,包括人脸识别、人员属性、人员行为、安全生产(烟火、安全帽、行人等)和OCR识别等,这意味着他们可以满足不同场景的需求。

总之,这个平台为我们提供了非常便利的工具和支持,让我们可以更轻松地构建出色的应用程序。

 公测福利

平台还在开展公测活动,公测期间通过企业认证的用户,可获赠首单买一赠一券,一年内首次购买 SDK 买多少送多少。有需要的朋友们可以抓紧时间注册认证。

平台的其他信息,可以查看平台提供的【新手指南】写的很详细:🌹🌹🌹

脸鉴AI开放平台

4.2体验地址

总体使用下来,不管是视频检测还是照片检测效果不错,如果你在人脸识别这方面有需求,不妨试一下这个平台的产品。体验地址如下:

体验地址

五、投票

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

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

相关文章

出现 conda虚拟环境默认放在C盘 解决方法

目录 1. 问题所示2. 原理分析3. 解决方法3.1 方法一3.2 方法二1. 问题所示 通过conda配置虚拟环境的时候,由于安装在D盘下,但是配置的环境默认都给我放C盘 通过如下命令:conda env list,最后查看该环境的确在C盘下 2. 原理分析 究其根本原因,这是因为默认路径没有足够的…

c#用Gnuplot画图源码

直接调用这个类即可&#xff0c;需要下载个GnuPlot安装下。 // Author: Leonardo Tazziniusing System; using System.Diagnostics; using System.Drawing; using System.IO; using System.Windows.Forms;/// <summary> /// Tested with Gnuplot 5.2 /// </summary&g…

【Unity实战】从零手戳一个库存背包系统

文章目录 前言素材开始一、绘制背包UI二、背包开启关闭三、初始化背包网格四、 添加物品五、 拖拽交换功能物品六、 物品拆分七、 物品堆叠八、 拖拽还原九、 引入字典存储数据十、 拾取物品十一、 丢弃物品 最终效果源码完结 前言 库存背包系统是大多数游戏的关键部分&#x…

富金通管理U盾不轻松,用了USB Server如沐清风

富金通网络科技服务有限公司是一家专注于金融科技服务的公司&#xff0c;因为拥有多个银行账户&#xff0c;也就有了U盾数量过多、管理极为不便的问题&#xff0c;具体表现为易丢失、易损坏、操作繁琐、需要插拔、不便携带、威胁金融安全等。 近期&#xff0c;朝天椒USB Serve…

【TCP】确认应答 与 超时重传

确认应答 与 超时重传 一. 确认应答机制二. 超时重传机制 一. 确认应答机制 确认应答: 保障可靠传输的核心机制。 可靠传输: 不是指传输过去的数据不出错, 也不是指数据一定能传输过去&#xff0c;而是指发送方能够知道接收方是否接收到了数据。确认应答的关键就是接收方收到数…

java:asm实现ResultSet结果映射到实体类

java&#xff1a;asm实现ResultSet结果映射到实体类 1 前言 Spring-core包中提供了许多方便的工具类&#xff0c;其中org.springframework.cglib.beans下的BeanCopier工具类&#xff0c;主要用于bean之间的属性拷贝&#xff0c;性能上优于Spring-beans包下的org.springframew…

面试官:你了解Axios的原理吗?有看过它的源码吗?

&#x1f3ac; 岸边的风&#xff1a;个人主页 &#x1f525; 个人专栏 :《 VUE 》 《 javaScript 》 ⛺️ 生活的理想&#xff0c;就是为了理想的生活 ! 目录 一、axios的使用 二、实现一个简易版axios 三、源码分析 小结 一、axios的使用 关于axios的基本使用&#xff0…

暨南大学旅游管理《乡村振兴战略下传统村落文化旅游设计》校友许少辉—2023学生开学季辉少许

暨南大学旅游管理《乡村振兴战略下传统村落文化旅游设计》校友许少辉——2023学生开学季辉少许

软文发布是推动企业发展的无形动力 | 媒介启航

同样是销售产品&#xff0c;为什么以故事的形式呈现要比直接讲产品功效更易让消费者认同和销售呢&#xff1f;这就是软文的魅力&#xff0c;它极好的运用了人作为情感动物的喜好。因此&#xff0c;各大小企业纷纷做软文&#xff0c;比如溯源啊、初心啊、情怀啊、创业经历啊等等…

Java集成微信支付实现企业付款到零钱和商家转账到零钱的功能

Java集成微信支付实现企业付款到零钱和商家转账到零钱的功能 文章目录 [toc] 1.企业付款到零钱和商家转账到零钱的区别1.1 申请要求不同1.2 API接口不同1.3 用户收款限制1.4 商户付款额度1.5 派发方式不同1.6 打款方式不同 2.集成实现2.1 v2版本集成2.2 依赖2.3 配置2.3.1 naco…

java多线程学习笔记一

一、线程的概述 1.1 线程的相关概念 1.1.1 进程&#xff08;Process&#xff09; 进程&#xff08;Process&#xff09;是计算机的程序关于某数据集合上的一次运行活动&#xff0c;是操作系统进行资源分配与调度的基本单位。 可以把进程简单的理解为操作系统中正在有运行的一…

插入排序代码及时间空间复杂度

插入排序&#xff08;Insertion Sort&#xff09;是一种简单的排序算法&#xff0c;它将一个数组分成已排序和未排序两部分&#xff0c;然后逐步将未排序部分的元素插入已排序部分的正确位置。以下是插入排序的代码示例以及时间和空间复杂度分析&#xff0c;希望对大家有所帮助…

Markdown 文档标题序号重排版(WebUI Tool)

Markdown 标题重编号 1. 项目背景 在日常写 Markdown 时&#xff0c;我们可能会遇到这样的情况&#xff1a; 文档的迁移与整合&#xff1a;在迁移或整合文档时&#xff0c;可能会让原本的标题编号混乱文档的重构&#xff1a;在重构文档时&#xff0c;例如仅仅修改了一处标题&…

malloc与free

目录 前提须知&#xff1a; malloc&#xff1a; 大意&#xff1a; 头文件&#xff1a; 申请空间&#xff1a; 判断是否申请成功&#xff1a; 使用空间&#xff1a; 结果&#xff1a; 整体代码&#xff1a; malloc申请的空间怎么回收呢? 注意事项&#xff1a; free:…

uniapp级联菜单地点区域使用label值,web端el-cascader绑定的value

效果图 一、uniapp uniapp级联菜单地点区域使用label值 1.ui使用 <uni-forms-item label="地址" name="userArea" required><view class="" style="height: 100%;display: flex;align-items: center;">

神经网络 03(参数初始化)

一、参数初始化 对于某一个神经元来说&#xff0c;需要初始化的参数有两类&#xff1a;一类是权重W&#xff0c;还有一类是偏置b&#xff0c;偏置b初始化为0即可。而权重W的初始化比较重要&#xff0c;我们着重来介绍常见的初始化方式。 &#xff08;1&#xff09;随机初始化 …

zabbix监控告警邮箱提醒,钉钉提醒

一、注册网易邮箱及其配置邮箱 1、开启POP3/SMTP/IMAP 二、service端配置邮件服务 1.安装 mailx dos2unix yum install -y mailx dos2unix mailx&#xff1a;邮件服务 mos2unix&#xff1a;用于转换文本文件格式的实用工具 查看mailx版本 2.配置mailx配置文件 编辑&#xf…

控制理论::带零点的二阶系统时域响应分析

一、系统描述 二、系统分析(分类讨论分析) 1、类型一&#xff08;极点为实数&#xff08;阻尼比>1&#xff09;&#xff0c;零点为负实数&#xff08;τ-1/b<0&#xff09;&#xff09; 1.1 定性分析 1.2 定量分析 有零点二阶系统的动态性能分析 - 豆丁网 (docin.com)

Python WEB框架FastAPI (二)

Python WEB框架FastAPI &#xff08;二&#xff09; 最近一直在使用fastapi&#xff0c;随着使用的深入发现我对于它的了解还是太少了&#xff0c;以至于踩了一些坑。所以在这里记录一下&#xff0c;愿看到的小伙伴不迷路。 路径传参并发问题 一、路径传参 这是对上一个传参…

TTS | 利用Fastspeech训练LJSpeech语音数据集后英文文本生成语音及代码详解

FastSpeech 基于 Transformer 的前馈网络&#xff0c;用于并行生成 TTS 梅尔谱图。 FastSpeech 模型与自回归 Transformer TTS 相比&#xff0c;梅尔谱图生成速度加快了 270 倍&#xff0c;端到端语音合成速度加快了 38 倍。 项目实现 docker cp LJSpeech-1.1.tar.bz2 torch_…