AI应用第一课:支付宝刷脸登录
- 项目应用场景
VIP学员小林入职的第一个项目:
支付宝刷脸支付:
- 项目演示
演示奇牛支付刷脸登录。
- 环境搭建
直接领取开发模板,直接开发。上完课后,再按照以下步骤自己搭建。
- 配置人脸识别SDK开发环境
注意,配置环境前,先把VS的平台调整为64位系统(也可以使用32位,但是人脸识别的SDK也要改位32位版本的)
补充:
商业开发,人脸识别相关的项目,千万不要自己开发人脸识别
应该选择合适的人脸识别SDK
选择人脸识别SDK: 百度,腾讯,阿里,虹软
所有的商业SDK,都有两个版本:(研发版本【免费的】,发行版【付费的】)
比如: UE4
下载虹软SDK(64位)
配置头文件目录和库文件目录
在项目目录下,创建face目录,再把人脸识别SDK的头文件和库文件复制到项目目录下的face目录下
头文件
配置附加依赖项
libarcsoft_face_engine.lib
复制DLL库文件到可执行文件目录
导入Rock自定义的接口文件
- 配置opencv开发环境
opencv是图像处理,应用最广的免费的开源框架
已经有人研发了,使用opencv配合激光炮打蚊子的系统(秒变军用,斩首行动)
opencv使用C/C++开发(其中有500个常用接口使用C语言,其他使用C++),跨平台
Qt是跨平台的应用框架
opencv是跨平台的图像处理框架
Qt + opencv
安装opencv
头文件包含目录:
D:\opencv\build\include
D:\opencv\build\include\opencv
D:\opencv\build\include\opencv2
库文件包含目录:
D:\opencv\build\x64\vc12\lib
使用的库(附加依赖性)
(以下是最常用的库文件,还有很多其他的库文件)
opencv_core249d.lib
opencv_highgui249d.lib
opencv_imgproc249d.lib
动态库
opencv_core249d.dll
opencv_highgui249d.dll
opencv_imgproc249d.dll
- 导入第3方类
CVvImage
补充:高薪就业最常见的面试问题:
你使用过哪些第三方框架?使用过哪些第三方的类、文件、库、工具?
比如:网络开发,libevent Qt开发中的表格图像处理:xxx
导入Rock 私有工具库
- 项目实现
- 设计系统界面
始于颜值,新手开发,从软件界面开始。
IT开发常识
界面的设计,由美工说了算!美工的设计由产品经理说了算,产品经理的决策,由甲方爸爸说了算!
美工出图:(同时提供素材)
程序员实现:
一个图片控件,两个按钮控件。
一分钟搞定。
拖放控件
一个图片控件,2个按钮控件
此时的界面,颜值丑陋,欲爱不能,不堪使用!
界面修饰
把欢迎界面的素材图片,加载到项目资源中。
- 拷贝素材图片到项目目录的res子目录
- 把图片添加到项目资源中
- 配置图片控件
类型,改为:Bitmap
图像,设置为:IDB_BITMAP1
- 调整界面布局
问题:界面调不动了!
技巧:因为图片控件的图片太大了,导致对话窗口不能操作
把图片控件的类型,再设置为frame,然后再把窗口拖放到更大,再把图片的类型调回到Bitmap
最后再把窗口缩小到合适程度。
- 修改按钮的文字
分别设置为“注册”、“登录”
设计效果:
为界面注入灵魂
此时的界面是一个没有灵魂的肉体。
- 给图片控件修改ID: IDC_STATIC_IMG
设置一个“成员变量”,变量名为: m_img
- 给两个按钮修改ID
IDC_BUTTON_REGIST
IDC_BUTTON_LOGIN
- ”添加“单击事件处理程序”
双击按钮,自动生成!
界面的灵魂测试
随意找两张图片,mm1.bmp, mm2.bmp
在两个按钮的事件处理程序中,分别添加:
HBITMAP pic = (HBITMAP)LoadImage(NULL, L"mm1.bmp", IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE);
m_img.SetBitmap(pic);
HBITMAP pic = (HBITMAP)LoadImage(NULL, L"mm2.bmp", IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE);
m_img.SetBitmap(pic);
测试效果。
- 使用摄像头
要使用刷脸认证,必须使用摄像头。
原理:
使用定时器,定时的捕获摄像头的图像数据,把捕获的图像帧,显示到图片控件即可。
- 添加工具库
tools.h tools.cpp CvvImage.h CvvImage.cpp
(tools.h 、tools.cpp是Rock写的,专门用于摄像头处理的函数,可作为自己的私有工具使用)
把这两个文件复制到项目目录下,并添加到项目中。
- 定时摄像头变量
#include <opencv2/opencv.hpp>
using namespace cv;// 定义一个摄像头变量
VideoCapture cap;
- 在注册按钮的事件处理程序中,打开摄像头,并创建定时器
// 1. 打开摄像头cap.open(0); //打开默认的摄像头// 2. 创建定时器SetTimer(1, //定时器的编号100, //每隔100ms提醒一次NULL); //时间到了之后,执行哪个函数,NULL表示执行默认的定时处理函数
1. 为对话框创建定时消息
先选择对话框,然后在对话框的属性窗口中的“消息”选项卡,添加“VM_TIMER”消息
添加图片注释,不超过 140 字(可选)
2. 在定时处理函数中,实现定时捕获
#include "tools.h"void COpenCVTmpDlg::OnTimer(UINT_PTR nIDEvent)
{// TODO: 在此添加消息处理程序代码和/或调用默认值if (nIDEvent == 1) {// 把摄像头cap捕获的图像帧,放到当前窗口m_hWnd的IDC_STATIC_IMG控件中显示refreshCamera(&cap, m_hWnd, IDC_STATIC_IMG);}CDialogEx::OnTimer(nIDEvent);
}
- 实现注册
方法:使用摄像头倒计时拍照,然后保存照片即可。
#include <mmsystem.h>
#pragma comment(lib, "winmm.lib")void COpenCVTmpDlg::OnTimer(UINT_PTR nIDEvent)
{// TODO: 在此添加消息处理程序代码和/或调用默认值static int count1 = 0;if (nIDEvent == 1) {// 把摄像头cap捕获的图像帧,放到当前窗口m_hWnd的IDC_STATIC_IMG控件中显示refreshCamera(&cap, m_hWnd, IDC_STATIC_IMG);count1++;if (count1 == 1) {mciSendString(_T("play res/zhuche.mp3"), 0, 0, 0); // 播放3秒倒计时的功能} else if (count1 == 30) {paiZhao(&cap, "Rock.jpg");count1 = 0;KillTimer(1); //关闭定时器cap.release(); // 关闭摄像头MessageBox(_T("注册成功!"));// 把画面切换到最开始的欢迎画面HBITMAP hbitmap = (HBITMAP)LoadImage(NULL, "res/start.bmp", IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE);m_img.SetBitmap(hbitmap);}}CDialogEx::OnTimer(nIDEvent);
}
- 人脸识别
人脸识别分析:
直接像素对比不合适,不能使用连连看辅助的方式。
解决方案:
使用人脸识别SDK
- 刷脸
和登录的方式类似.
void COpenCVTmpDlg::OnBnClickedButtonLogin()
{// TODO: 在此添加控件通知处理程序代码//HBITMAP pic = (HBITMAP)LoadImage(NULL, "mm2.bmp", IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE);//m_img.SetBitmap(pic);cap.open(0);SetTimer(2, 100, NULL);
}void COpenCVTmpDlg::OnTimer(UINT_PTR nIDEvent)
{// TODO: 在此添加消息处理程序代码和/或调用默认值static int count1 = 0;if (nIDEvent == 1) {......} else if (nIDEvent == 2) {refreshCamera(&cap, m_hWnd, IDC_STATIC_IMG);}CDialogEx::OnTimer(nIDEvent);
}
- 定义人脸识别接口
- 导入人脸识别工具库faceTool.h faceTool.cpp 到项目中。
- 添加头文件
#include "faceTool.h"
- 定义人脸识别模块变量
// 人脸识别的模块变量
MHandle handle;
- 对模块变量进行初始化
在对话框窗口的初始化函数中,添加:
faceInit(&handle);
- 定义人脸识别的接口faceCheck
BOOL faceCheck(const char* name1, const char* name2) {// 读取两个照片 // 数据类型的大小写是敏感的!IplImage* img1 = cvLoadImage(name1);IplImage* img2 = cvLoadImage(name2);if (!img1 || !img2) {return false; //FALSE}float ret = faceCompare(handle, img1, img2);// return ret >= 0.95if (ret < 0.95) {return false;}else {return true;
- 实现人脸识别登录
方法:
第1秒结束时,自动拍照、并进行人脸识别,
第2秒结束时,根据上一秒的识别结果刷新界面
代码实现
void COpenCVTmpDlg::OnTimer(UINT_PTR nIDEvent)
{// TODO: 在此添加消息处理程序代码和/或调用默认值static int count1 = 0;static int count2 = 0;static bool success = false; //表示识别结果是否成功if (nIDEvent == 1) {......}else if (nIDEvent == 2) {refreshCamera(&cap, m_hWnd, IDC_STATIC_IMG);count2++;if (count2 == 10) {paiZhao(&cap, "Rock2.jpg"); //拍照// 人脸识别if (faceCheck("Rock.jpg", "Rock2.jpg")) {success = true;// 播放一个登录成功的声音,持续1SmciSendString("play res/login.mp3", 0, 0, 0);}} else if (count2 == 20) {count2 = 0;KillTimer(2);cap.release();const char* fileName = success ? "res/bgInit.bmp" : "res/bgError.bmp";HBITMAP hbitmap = (HBITMAP)LoadImage(NULL, fileName, IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE);m_img.SetBitmap(hbitmap);success = false;}}CDialogEx::OnTimer(nIDEvent);
}
1. 项目完善
1. 活体检测
张张嘴,向左摇头,向右摇头,点点头, 眨眨眼(金融相关的!)
2. 多用户账户登录
使用数据库
3. 跨平台
使用Qt移植到其他手机平台
AI应用第一课:支付宝刷脸登录相关推荐
- AI应用第一课:C语言支付宝刷脸登录
项目应用场景 VIP学员小林入职的第一个项目: 支付宝刷脸支付: 项目演示 演示奇牛支付刷脸登录. 环境搭建 直接领取开发模板,直接开发.上完课后,再按照以下步骤自己搭建. 配置人脸识别SDK开发环境 ...
- java项目使用百度云AI完成刷脸登录
刷脸登录 理解刷脸登录的需求 理解刷脸登录的开发流程 实现刷脸登录功能 1 浅谈人工智能 1.1 人工智能的概述 人工智能(Artificial Intelligence),英文缩写为AI.它是研究. ...
- 使用百度云AI实现刷脸登录
前言 刷脸登录是基于人工智能.生物识别.3D传感.大数据风控技术,最新实现的登录形式.用户在无需输入用户名密码的前提下,凭借"刷脸"完成登录过程.实现刷脸登录的核心是人脸处理,在人 ...
- 【登录】刷脸登录(java语言-百度云ai)
刷脸登录(java语言-百度云ai) pdf文件 一. 浅谈人工智能 人工智能(Artificial Intelligence),英文缩写为AI.它是研究.开发用于模拟.延伸和扩展人的智能的理论.方法 ...
- 刷脸登录(人工智能)
刷脸登录 理解刷脸登录的需求 理解刷脸登录的开发流程实现刷脸登录功能 浅谈人工智能 人工智能的概述 人工智能(Artificial Intelligence),英文缩写为AI.它是研究.开发用于模拟.延 ...
- 人工智能-刷脸登录实现
4 刷脸登录实现 4.1 需求分析 为了用户登录的便捷,我们在系统中增加刷脸登录的功能,大致流程如下图: 4.1.2 触发流程 用户在登录页面触发刷脸登录功能 在该页面中弹出一个二维码,此二维码是后台 ...
- 人脸识别-Java实现刷脸登录
人脸识别 一.相关概念 人脸 人脸库 人脸特征标识(face_token) 并发 (QPS) API Key API Secret confidence thresholds 人脸比对/人脸搜索(控制 ...
- php刷脸登录,PHP实现微信小程序人脸识别刷脸登录功能
首先我们先确认我们的百度云人脸库里已经上传了我们的个人信息照片 关注cs代写,有帮助! 然后我们在后台写刷脸登陆的接口login我们要把拍照获取的照片存储到服务器 public function l ...
- 专家:刷脸登录有漏洞 互联网企业在玩噱头
凭借一张观众的自拍照,就成功"换脸"破解手机的人脸认证系统.近期,"刷脸登录"存在的安全漏洞,在315维权活动中备受关注.不过,相关信息安全专家认为,比起数据在 ...
最新文章
- 让机器“看见”:图像数据的特征提取方法
- 在公司中,如何提升自己的段位,脱颖而出
- 皮一皮:这年头,没看过火影还没法做医生了...
- 4.在master机器上配置环境变量
- shell中$*和$@ 两个都区别
- python pandas缺失值处理_Pandas之缺失值处理
- ubuntu的home目录下,Desktop等目录消失不见
- [css] CSS content属性特殊字符有哪些?
- 树莓派利用PuTTY进行远程登录
- mysql msql_MySQL数据库学习二 MSQL安装和配置
- Hexo Reload in new Mac
- 干货分享 | 详解特征工程与推荐系统及其实践(附PPT)
- Java import javax.servlet 出错
- 历法 —— 星期与“日月火水木金土”
- 信息学奥赛一本通1142:单词的长度
- 2018年马哥Linux
- 全局鼠标手势linux,Firefox通过用户脚本和热键进行的全局鼠标手势(Win7 / Linux + FF 68 esr)...
- Relay继电器和Swicth开关
- java cap 反编译_应用 JD-Eclipse 插件实现 RFT 中 .class 文件的反向编译
- C语言报错警告合集(转)
热门文章
- c#笔记--程序集(Assembly)、模块(Module)、类型(class)、命名空间、反射
- 体验Android:个人所得税计算器 含源码
- 管理人员巡店用表-主管每日工作流程
- Web前端学习笔记07:CSS_高级技巧_定位
- webview 禁止苹果自动下拉_苹果开发者账号申请必备:双重认证教程!
- EOS区块链开发的第一步
- Leetcode 006. Z 字形变换 | 每日一题
- Java课程设计——文本文件加密与解密软件设计与实现
- 成功需要培养独特的眼光,芸赞通天下沈杨
- 基于java的写字板的设计