如何在AidLearning中快速开发人脸识别APP

双击Examples进入案例中心,点击FaceID进入人脸识别代码编辑状态。
- 提示:案例中的代码不要随意改动,因为AID默认运行前会保存代码文件,如果修改测试,可以先复制一下代码文件。

接下来我们详细介绍下AID Learning中的人脸识别代码是如何实现的。

#导入cvs图形控件的库
from cvs import *
#导入人脸识别的库
import facerecognition
#导入开源的数值科学计算库,别名为np
import numpy as np#定义一个名为MyApp的类,用于构建程序的图形化APP
class MyApp(App):#初始化函数,self表示创建实例本身,*args传递可变参数,__init__()的第一个参数永远是self.def __init__(self, *args):super(MyApp, self).__init__(*args)def main(self):#creating a container VBox type, vertical (you can use also HBox or Widget)#定义变量main_container,它的作用是整个APP的主框架,用于包含其他APP中的控件,相当于容器#在手机上画出一个宽度为360px,高度为680px的程序主框架范围,style是它的样式。main_container = gui.VBox(width=360, height=680, style={'margin':'0px auto'})'''OpencvVideoWidget函数是在手机中画一个用于显示调用手机摄像头拍摄图像的框,宽度340px,高度480px,将它赋值给self.aidcam,aidcam是摄像头控件。'''self.aidcam = OpencvVideoWidget(self, width=340, height=480)#摄像头框架的边界和主框架相隔10px。self.aidcam.style['margin'] = '10px'#给aidcam设置一个别名self.aidcam.set_identifier("myimage_receiver")#将设置好的摄像头显示框添加到APP主框架中。main_container.append(self.aidcam)#设置一个宽度200px,高度30px,边界为10px的文本框,将它赋值给 self.txt, self.txt是文本框控件self.txt = gui.TextInput(width=200, height=30, margin='10px')#文本框初始化值为“usename”self.txt.set_text('usename')#用于监听文本框中的内容是否改变self.txt.onchange.do(self.on_text_area_change)'''设置一个宽度为200px,高度为30px,边界为10px的按钮控件,按钮上的文字为“Add Person!”,将它赋值给 self.bt按钮控件'''self.bt = gui.Button('Add Person!', width=200, height=30, margin='10px')#用于监听按钮是否被点击self.bt.onclick.do(self.on_button_pressed)#将设置好的文本框添加到APP主框架中main_container.append(self.txt)#将设置好的按钮添加到APP主框架中main_container.append(self.bt)# returning the root widget,返回APP主框架return main_container'''    如果监听到文本框中的内容发生改变,我们用print函数将这段'Text Area value changed!'这段文字写入日志文件   '''def on_text_area_change(self, widget, newValue):print('Text Area value changed!')    #如果监听到按钮被点击则触发事件def on_button_pressed(self, widget):#将文本框的内容存储到userId中userId = self.txt.get_text()#将文本框内容存储到cvs下面的一个全局变量中cvs.setLbs(userId)#将按钮的文字内容改为'success!'self.bt.set_text('success!')#读取摄像头图像,并且进行人脸识别
def process():#1是调用手机前置摄像头,如果是cvs.VideoCapture(0)就是调用手机后置摄像头cap=cvs.VideoCapture(1)'''加载人脸识别的学习模型,第一个参数路径,第二个是阈值,0.73是默认值,阈值的范围是0-1,阈值约高,识别越严格,通过率约低,例如如果一个人的头发乱了,或者脸上有一些遮挡等,一般建议不要设定太高'''facerecog = facerecognition.FaceRecognition("./models", 0.73)#定义了一个while循环,作用是将人脸图像添加到数据库while True:#是让程序休眠30毫秒,避免卡死sleep(30)#读取当前摄像头下拍摄的图像img =cap.read()#如果图像为空,则重复该循环if img is None :continue#将图像转为unint8的格式再转化为一组字符串格式image_char = img.astype(np.uint8).tostring()#获得刚刚的全局变量cvs.setLbs的值,也就是文本框中输入的文字userId=cvs.getLbs()if userId!='':'''#当文本框不为空的时候,将文本框中的值,img.shape[0]是图像的宽,img.shape[1]是图像的高,image_char是图像转化成的字符串数据,添加到人脸数据库feature.db中'''ret=facerecog.add_person(userId, img.shape[0], img.shape[1], image_char)#如果返回的值是0,表示添加成功,否则添加失败,并用print函数写入一段文字到日志文件if ret==0:print ('you add_person is success!')# cvs.setMsg_status(1)else :print ('you add_person is failed!')#编程的一个必要动作,将全局变量重新设置为空,避免后面出现不必要的错误userId=''cvs.setLbs(userId)continue            #是将当前摄像头中的人脸数据和数据库feature.db中的数据进行对比rets = facerecog.recognize(img.shape[0], img.shape[1], image_char)#print 'rets:',rets#如果数据库中的人脸图像和当前摄像头中的人脸一致,则用print将一段文字写入日志文件for ret  in  rets:#for ret in each:print ('draw bounding box for the face')#提取人脸绿色框的位置rect = ret['rect']#左上角x坐标,rect[1]左上角y坐标。p1 = (int(rect[0]), int(rect[1]))#人脸范围的宽度,p2则是右下角坐标p2 = (int(rect[0]+rect[2]), int(rect[1]+rect[2]))'''#draw rect,names of faces#img是图像,p1左上角,p2右上角,(0, 255, 0)外框的颜色,3是指线的宽度,1是指线的类型,可以改变使线更平滑,作用是在摄像头中的人脸图像上画框'''cv2.rectangle(img, p1,p2, (0, 255, 0) , 3, 1)'''#img是图像, ret['name']是该人脸对应的名字,(int(rect[0]), int(rect[1])-30)是文字的位置,cv2.FONT_ITALIC是字体,2是字体的大小,(77, 255, 9)文字的颜色,最后的2是线的类型。作用是在绿色框上面写出该人脸的名字'''cv2.putText(img, ret['name'], (int(rect[0]), int(rect[1])-30),cv2.FONT_ITALIC, 2, (77, 255, 9), 2)#将画好的框和名字显示出来cvs.imshow(img)if __name__ == '__main__':#设置线程启动initcv(process)#启动APPstartcv(MyApp)

重点提示

- rets = facerecog.recognize(img.shape[0], img.shape[1],
image_char),返回了多个值,是因为摄像头中可能有两个以上的头像,所以分别与数据库中的人脸特征值对比。
- 同一个人脸显示多个名字是因为每个人脸特征赋是一个单独元素。而却录入了不同的名字,可以给同一个人赋值同一个名字,问题解决。
- 另外文本框中只能录入英文,facerecog.add_person的第一个参数只能接受英文字符

可视化控件

AID OS中的Wizard可以可视化拖动这些控件。
这里面有之前用到的Textarea,Button,Webcam,还有Label,ListView等大量控件。
使用拖拽的方式就可以来快速的布局你的APP程序,减少大量重复性的代码工作。

文中用到的控件含义

总结:

如何在AidLearning中快速开发人脸识别APP相关推荐

  1. 如何在 Keras 中使用 FaceNet 开发人脸识别系统

    https://www.infoq.cn/article/4wT4mNvKlVvEQZR-JXmp Keras 是一个用 Python 编写的高级神经网络 API,能够以 TensorFlow.CNT ...

  2. 免费直播!用Python开发人脸识别程序,零基础也能学(附源码)

    在当今社会人脸识别技术应用的范围越来越广泛,全球很多商业活动都已经从中获益:人脸自动对焦和笑脸快门技术,人脸识别门禁,人脸识别支付等许多方面. 人脸识别技术的使用在接下来的几年内还会继续增长,还没掌握 ...

  3. 还有王法吗?美国联邦调查局开发人脸识别系统,数据源涉及公民隐私

    美国政府问责局(GAO)今日发布了一份报告,该报告称:美国联邦调查局(FBI)开发了一个庞大的人脸识别系统,该系统包含了面部分析.比较和评价的功能. 政府部门表示,FBI开发的的人脸识别系统可以获得大 ...

  4. 用Python-opencv快速实现人脸识别功能(从零开始教你)(复制粘贴即可用)

    用Python快速实现人脸识别功能 首先: 一.开发环境: 1.你需要个Python,下载好后设置环境变量(CSDN上面有很多这里不做过多介绍)可以参考 Python下载教程 2.下载pip-参考博主 ...

  5. 人脸识别APP技术开发是如何实现的?

    人脸识别技术目前已经非常成熟,识别率也越来越高.人脸识别技术与其他生物特征识别技术相吃比,在实际应用中具有天然独到的优势:通过摄像头直接获取,可以非接触的方式完成识别过程,方便快捷. 目前已应用在金融 ...

  6. 人脸识别APP技术开发

    人脸识别技术目前已经非常成熟,识别率也越来越高.人脸识别技术与其他生物特征识别技术相吃比,在实际应用中具有天然独到的优势:通过摄像头直接获取,可以非接触的方式完成识别过程,方便快捷. 目前已应用在金融 ...

  7. OpenCV+ Qt Designer 开发人脸识别考勤系统

    文章目录 1. 系统介绍 2. 系统架构 3. 开发步骤 3.1 安装必要的库 3.2 设计用户界面 3.3 编写代码 3.3.1 导入库 3.3.2 连接数据库 3.3.3 定义主窗口类 3.3.4 ...

  8. python人脸识别opencv_Python基于Opencv来快速实现人脸识别过程详解(完整版)

    前言 随着人工智能的日益火热,计算机视觉领域发展迅速,尤其在人脸识别或物体检测方向更为广泛,今天就为大家带来最基础的人脸识别基础,从一个个函数开始走进这个奥妙的世界. 首先看一下本实验需要的数据集,为 ...

  9. 用python画奔驰的标志_如何在CATIA中快速画一个奔驰车标

    原标题:如何在CATIA中快速画一个奔驰车标 咱们这个公众号呀,总是发一些二次开发啊,代码啊什么的,这观众看的啊,是云里雾里的!哎,内位说了:您能不能讲点儿我们听的懂的内容啊?那好,今儿咱们就来说说, ...

最新文章

  1. PostgreSQL 数据库多列复合索引的字段顺序选择原理
  2. 北大igem生物计算机,正在报名 | 2019国际基因工程机器大赛(iGEM)
  3. Kafka分布式环境搭建
  4. java虚拟机类加载机制浅谈_浅谈Java虚拟机(三)之类加载机制
  5. NLP(paper + code)
  6. FKGE:合格的知识图谱嵌入已经学会保护隐私啦!
  7. 正态分布的前世今生:正态分布的各种推导
  8. 我的Android进阶之旅------Android实现音乐示波器、均衡器、重低音和音场功能
  9. 3S基础知识:MapInfo MapX中如何保存专题地图
  10. 矩形窗、汉明窗、汉宁窗的频率响应图
  11. 单片机及开发板的介绍
  12. Vue项目 chrome页面崩溃:喔唷 崩溃了, 并出现警告Forced reflow while executing JavaScript took Nms
  13. 不懂Web基本原理怎么能学好爬虫。( 二、Web服务器工作原理)(爬虫、反爬虫、服务器、客户端、网络协议 )
  14. 省编码市编码区县编码_如何摆脱编码的束缚,走向事业
  15. Dubbo的介绍以及Dubbox的区别
  16. 开源项目推荐:OpenGL之gult/freeglut/glew/glfw/glad的联系与区别
  17. 风雨人生,自己撑伞=
  18. 剑门高级中学2021年高考成绩查询,剑门关高级中学2021年高中部入学条件是什么?...
  19. 如何进入bios界面
  20. 【Unity3D插件】Glow插件分享《边缘发光插件》

热门文章

  1. 我的世界修改等级上限服务器,我的世界:容易误导玩家的五个问题,满级之后将迎来新的开始?...
  2. 数仓建模—数据同步方案设计
  3. html边框上的小箭头,css简单实现带箭头的边框
  4. Servlet 生命周期概述
  5. Homograph Warping Pytorch实现
  6. 四月十七号中间件 nginx
  7. java实现仿QQ即时聊天
  8. 算法问题: 为啥idea的全局搜索这么快?idea的冗余代码检测怎么实现的?
  9. 初识express(简介,安装和基本使用),路由(express处理路由)
  10. android 如何生成表格,SmartTable:Android 自动生成表格框架