基于Django与百度AI的人脸识别Web应用系统设计

2024-05-18 17:19何晓辉包希日莫
电脑知识与技术 2024年8期
关键词:人脸识别

何晓辉 包希日莫

摘要:人脸识别是计算机视觉领域内的重要研究方向,在人脸考勤、支付和安保等应用环境中发挥着关键作用。本文旨在Browser/Server架构下,使用Django框架和百度AI开发一种高效准确的人脸识别Web应用系统。通过以视频流的形式采集人脸图像,使用Ajax、ORM和MySQL等技术传输和存储图像数据,实现人脸检测、匹配和特征分析等功能。提供一种可用于应用的人脸识别Web系统解决方案。实验表明,该系统具有一定的人脸识别准确性和可行性。

关键词:人脸识别;Django;百度AI;Web应用;ORM

中图分类号:TP311        文献标识码:A

文章编号:1009-3044(2024)08-0008-03

开放科学(资源服务)标识码(OSID)

0 引言

随着人工智能技术的高速发展和普及,其在社会各界得到了广泛的应用。其中,在计算机视觉领域,人脸识别的应用起到至关重要的作用。传统的人脸识别系统主要包含以下几个部分:人脸检测、录入、匹配和特征分析[1-2]。从传统开发效率和难度的角度上考虑,效率低,涉及很多深层次的人脸识别算法和模型[3],开发门槛高。在这个生活节奏快,追求效率的年代,用户格外注重应用的开发效率和使用感受。因此,对于开发者而言,高效率开发一种人机交互的人脸识别Web应用系统变得尤为重要[4]。

Django是一个开源、功能强大的Python web开发框架,遵循MVT(Model-View-Template) 设计模式,可以帮助开发者轻松添加和修改功能,为高效开发Web应用提供了保障和服务[5]。此外,提供了对象关系映射(ORM) 工具,用于简化数据库操作的过程。

百度AI中的人脸识别API接口,具有良好的性能和稳定性,同时支持多种编程语言、开发环境以及SDK文档。据LFW测评,其人脸1:1验证准确度高达99.77%,处于业界领先水平,单张图片的特征提取速度达200 ms[6]。

因此,本文主要结合使用Django框架和百度AI中的人脸识别API接口进行人脸识别应用系统开发,实现人脸检测、录入、匹配和特征分析等系统功能。

1 需求分析

在企业、学校等工作和学习环境中,常常需要进行人脸考勤打卡和出入口扫脸认证等过程。常规情况下,用户需下载企业和学校的应用软件,在完成用户信息填写后,上传一张用户的人脸照片,完成人脸录入、图像采集、人脸匹配和检测等流程。此过程烦琐不便,容易产生因操作不当导致的信息偏差错误,造成麻烦。另外,进行人脸检测时,相关人脸特征的信息提取率低,识别速度缓慢,用于服务用户的人脸特征信息量过少,无法满足当今社会对信息量的需求。

考虑到上述内容存在的问题,系统要在提升用户使用感受、减少用户操作难度和步骤、满足特征信息量的社会需求和提高Web应用系统的开发效率的前提下,实现人脸录入、匹配、检测和特征分析等系统功能,解决人脸特征的信息提取率低、人脸识别速度缓慢等问题,提高Web应用系统的交互性和人脸图像数据的传输响应速度,满足异步编程的需求。同时,在提升系统开发效率的同时,选择安全稳定的架构模式、开发工具、框架和技术。

2 Web应用系统设计

2.1 架构设计

系统采用Browser/Server架构模式,使用PyCharm进行系统开发。前端采用了BookStrap框架、HTML、CSS和JavaScript等技术。后端使用了遵循MVT设计模式的Django web开发框架。系统以视频流的形式采集人脸图像,利用AJAX(Asynchronous JavaScript and XML) 异步交互技术和JSON数据交换格式[7],对图像数据进行前后端交互和数据传输。在图像数据存储方面,系统使用了Django开发框架下的对象关系映射(ORM) 和MySQL数据库。系统架构图如图1所示。

2.2 流程设计

系统首先考虑用户进行常规的登录/注册流程,以补充用户信息。在Browser/Server架构模式下,用户登录成功后,可以直接进行人脸录入,启动摄像头,采集人脸图像数据。录入完成后,用户可以完成扫脸访问等操作任务。

在人脸识别访问时,系统首先检测是否存在人脸:若摄像头前没有可识别的对象,则检测失败;否则检测成功。进行人脸匹配时,系统查询和匹配数据库中的信息:若置信评分>95分,则视为匹配成功,并将特征信息等内容反馈给用户;反之,匹配失败,认为此人员为非系统用户。系统流程图如图2所示。

2.3 初始化AipFace對象

将百度AI中获取到的App ID,API Key,Secret Key依次写入到变量当中。图像数据格式为BASE64,初始化AipFace对象client。

appId = "百度AI中的appId"

apiKey = "百度AI中的apiKey"

secretKey = "百度AI中的secretKey"

imageType = "BASE64"

client = AipFace(appId, apiKey, secretKey)

2.4 人脸录入

初始化操作完成后,使用Django框架下的对象关系映射(ORM) 对数据库中的数据进行操作具有以下优势:减少了SQL语句的编程量,提高了开发效率,实现了数据模型与数据库的解耦[8],提升了应用系统的性能[9]。

其中,objects是Django模型中的一个管理器,用于对数据库进行查询。all()、last()、create()和count()是此管理器的方法。下面通过使用ORM中的方法,对数据进行获取,并调用Face表和User表内的属性信息。Face表用于存储进行人脸录入、检测等相关功能的人脸信息,User表则用于存储相关的用户信息。

通过使用`all()`方法,可以查询Face表和User表中的所有记录。使用`last()`方法,可以查询User表中最新的一条记录。同时,获取用户信息(用户名和密码)。

reg_message=models.Face.objects.all()

all_message=models.User.objects.all()

user_message=models.User.objects.last()

username=user_message.username

password=user_message.password

Face表中设计1个group_id字段信息包含4个user_id字段信息的多对多关系。通过调用`count()`方法统计Face和User表中的所有实例数量,可以生成新的group_id和user_id。

group_id=str(reg_message.count()//4)

user_id=str(all_message.count())

之后获取前端传输的imageData,调用addUser()方法完成用户信息添加。

imageData=request.POST.get("imageData")

reg=client.addUser(imageData,imageType,group_id,user_id)

最后,使用create()方法将新创建的人脸user_id、username、password、group_id、count和userFace(录入的人脸图像数据)信息存储到Face表中,同时更新count值。

models.Face.objects.create(user_id=user_id,username=username,password=password,group_id=group_id,count=reg_message.count()+1,userFace=imageData)

2.5 人脸检测与特征分析

检测时,需使用detect()人脸检测函数。函数参数分别是前端获取到的imageData、BASE64编码的imageType以及options。

result = client.detect(imageData, imageType, options)

在detect()人脸检测函数调用成功的前提下,函数返回包含人脸检测结果的JSON数据。其中键face_list包含了很多面部特征信息值。本文主要针对年龄、颜值、性别、情绪四类值进行特征分析。因此,需在请求参数options中,添加一个键名为face_field,值为age,beauty,gender,emotion的键值对。

options = {"face_field": 'age,beauty,gender,emotion'}

添加后,得以提取出名为face_field的键和相关值,如表1所示是系统所需的用户面部特征信息。由表可知,可识别对象的年龄是22岁,颜值评分为30.72,性别为男性,情绪稳定。

2.6 人脸匹配

匹配时,系统依然使用Django提供的数据库管理器objects和all()方法,all()方法获取数据库Face表中的所有实例。

mr = models.Face.objects.all()

通過遍历实例,访问人脸录入过程中存储到`Face`表中的每行人脸图像数据。

for i in range(models.Face.objects.count()):

user_obj = mr[i]

face_list = user_obj.userFace

之后使用match()人脸匹配函数进行比对匹配,参数为数组类型。因此,需将mr1(face_list)和mr2(imageData)作为数组faceList的值使用。mr2是进行前端人脸匹配时,系统采集到的人脸图像数据,用于比对数据库中已经录入好的人脸图像数据mr1。

mr1 = {'image': face_list, 'image_type': imageType}

mr2 = {'image': imageData, 'image_type': imageType}

faceList = [mr1, mr2]

matchResult = client.match(faceList)

match()函数调用成功后,将以JSON格式返回`matchResult`结果,部分内容如表2所示。

表2  matchResult结果

[key value 'error_code' 0 'error_msg' 'SUCCESS' 'result' 'score' 'face_list' ]

error_code=0和error_msg=SUCCESS表示函数调用成功,其中键result包含score值。系统通过获取score,来作为系统匹配人脸的评分依据。在函数调用成功的前提下,score达到95分以上视为匹配成功;反之则失败。

3 系统实验

在系统实验前,针对特征信息,本文只涉及年龄、颜值、性别和情绪4个人脸特征值。针对实验集,实验选取了年龄范围为中年、青年、幼年、老年,性别比例1:1,情绪涉及开心、伤心和愤怒的用户群体对象。本文用于实验的人脸图像实验集如图3所示。按照从左到右的顺序依次命名为face_1、face_2、face_3和face_4。

此外,实验还需考虑系统在特殊情况下的运行效果,内容包括在摄像头前没有出现可识别对象的情况和人脸识别匹配失败的情况。

3.1 录入实验

完成常规用户登录/注册操作后,系统以视频流的形式,依次录入上述实验集中的人脸图像,以模拟真实用户的人脸录入情况。录入完成后,系统通过Django框架下的对象关系映射(ORM) ,将用户ID、用户信息(用户名和密码)、用户组ID、图像数量和图像数据信息,存储到Face表中,内容如表3所示。其中字段userFace中的图像数据以Base64编码的格式存储,由于内容过多,只展示前几位。

3.2 检测和匹配实验

检测时,依次完成实验集对象face_1、face_2、face_3和face_4的人脸检测访问。如果检测到可识别对象,并且匹配成功,系统则反馈可识别对象的用户特征信息。反之,则提示匹配失败。表4是通过检测和匹配人脸图像实验集,经前端页面提取到的人脸特征结果。

从表4中的结果来看,系统提取到了准确、详细的用户特征信息。而面对除实验集之外的可识别对象时,系统则会提示匹配失败和没有检测到人脸。效果如图4所示。

4 结束语

综上所述,基于Django与百度AI的人脸识别Web应用系统,在Browser/Server架构模式下,使用Ajax和MySQL等技术,实现了人脸录入、匹配、检测和特征分析等系统功能。通过对人脸图像实验集进行功能实验,结合最终的实验结果和运行效果来看,系统能够稳定有效地达到预定目标和效果。基于Django与百度AI的人脸识别Web应用系统具有一定的准确性和可行性,为人脸识别应用领域提供了一种解决方案。

参考文献:

[1] 周激流,张晔.人脸识别理论研究进展[J].计算机辅助设计与图形学学报,1999,11(2):180-184.

[2] 罗佳伟,孙雪峰,李琳.基于百度AI平台的Web人臉注册和登录系统的设计[J].中国新通信,2018,20(11):73.

[3] 林维训,潘纲,吴朝晖,等.脸部特征定位方法[J].中国图象图形学报,2003,8(8):849-859.

[4] 陈晓倩,许孜奕,陆丽,等.基于脸部特征的性别识别[J].数据采集与处理,2010,25(5):595-599.

[5] 杨洪涛.基于Django的MVC框架设计与实现[J].电脑知识与技术,2023,19(4):62-65.

[6] 叶阳,顾国民.基于百度API的实时人脸检测[J].信息记录材料,2020,21(5):226-227.

[7] 屈展,李婵.JSON在Ajax数据交换中的应用研究[J].西安石油大学学报(自然科学版),2011,26(1):95-98,122.

[8] 郭显娥.Django实现ORM模型数据查询优化[J].山西大同大学学报(自然科学版),2019,35(3):27-31,36.

[9] 贺宗平,贺曦冉,秦新国.一种Python ORM框架性能测试分析方法研究[J].现代信息科技,2021,5(6):83-86.

【通联编辑:唐一东】

猜你喜欢
人脸识别
人脸识别 等
揭开人脸识别的神秘面纱
人脸识别技术的基本原理与应用
人脸识别技术在高速公路打逃中的应用探讨
基于(2D)2PCA-LBP 的人脸识别方法的研究
浅谈人脸识别技术
人脸识别在高校安全防范中的应用
巡演完美收官 英飞拓引领人脸识别新潮流
人脸识别在Android平台下的研究与实现
基于Metaface字典学习与核稀疏表示的人脸识别方法