基于Mindspore的人脸识别门禁系统——南京邮电大学张晨斌项目讲解

一、张晨斌简介

        张晨斌,男,南京邮电大学自动化学院、人工智能学院21级智能科学与技术专业本科生,现正在进行控制科学与工程的本硕博贯通研读,其陆续开源近百项科研实践项目,一度与Elon Reeve Musk相提并论,被称为“源神”。

技能证书英语证书(CET-4、CET-6)熟练掌握Python、C等语言,对ISE Design、嘉立创EDA等开发平台有相关经验。

工作职务:担任B210414班宣传委员、组织委员,熟练掌握PPT制作且具有丰富的文章撰写经验。

个人荣誉华为-教育部2022-2023年度智能基座“未来之星”、优秀青年志愿者、优秀共青团员、南京邮电大学2022-2023年度综合进步奖学金、南京邮电大学先进个人。

竞赛成果2024年美国大学生数学建模竞赛S奖、南京邮电大学2024年“挑战杯”竞赛铜奖、2023年(第十五届)数学建模竞赛三等奖、第二届智慧城市技术大赛三等奖、2023年大学生广告艺术大赛三等奖、第三届大学生财经素养大赛一等奖、2022中国青年大熊猫守护计划荣誉奖

二、张晨斌代表实践项目

1.基于MindSpore的人脸识别门禁系统

利用OpenCV处理库采集图像,构建人脸数据,基于华为昇腾开发的MindSpore平台,利用dlib算法设计相关人脸识别算法,实现图像实时采集以及人脸识别,制作一个简单的UI界面,利用树莓派4B和Arduino UNO开发板,控制MLX90614、舵机、无源蜂鸣器等元器件进行部署实现人脸门禁系统。

2.数控脉宽脉冲信号发生器设计

与南京邮电大学21级本科生鲁健合作,利用ISE Design开发设计制作一个脉冲信号发生器,脉冲宽度可调,通过按键控制,每次可以加减1%的占空比,数码管显示输出脉冲信号占空比,同时显示脉宽情况。

3.激光电子琴的设计与实现

设计和制作一款激光电子琴,通过编程工具下载程序到单片机中实现了用激光束控制不同音符的发声和LED灯的显示,并且可以播放多种音乐和调整音量。

三、张晨斌代表科研项目

主持一项校级重点STITP项目:基于图神经网络的气象预测研究。

设计并构建GCN图卷积模型,利用图卷积层捕捉局部和全局特征,通过优化模型,有效融合时空信息,实现对未来一段时间的气象指标的预测,提高气象预测的准确性。

四、基于MindSpore的人脸识别门禁系统详解

1. 图像采集与人脸数据构建

首先,使用OpenCV库进行图像采集。OpenCV提供了多种人脸检测算法,例如Haar级联分类器,可以用来从视频流中截取人脸图像。

import cv2

# 加载Haar级联分类器
face_cascade = cv2.CascadeClassifier(cv2.data.haarcascades + 'haarcascade_frontalface_default.xml')

# 打开摄像头
cap = cv2.VideoCapture(0)

while True:
    # 读取一帧
    ret, frame = cap.read()
    if not ret:
        break

    # 转换为灰度图像
    gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)

    # 检测人脸
    faces = face_cascade.detectMultiScale(gray, 1.1, 4)

    # 在图像中绘制人脸矩形框
    for (x, y, w, h) in faces:
        cv2.rectangle(frame, (x, y), (x+w, y+h), (0, 255, 0), 2)

    # 显示图像
    cv2.imshow('Face Detection', frame)

    # 按'q'退出循环
    if cv2.waitKey(1) & 0xFF == ord('q'):
        break

# 释放摄像头并关闭窗口
cap.release()
cv2.destroyAllWindows()

2. 人脸识别算法设计

基于华为昇腾开发的MindSpore平台,利用dlib算法设计人脸识别算法。dlib提供了强大的人脸识别功能,可以用来提取人脸特征并进行识别。

import dlib

# 初始化dlib的人脸检测器和人脸识别器
detector = dlib.get_frontal_face_detector()
sp = dlib.shape_predictor("shape_predictor_68_face_landmarks.dat")
facerec = dlib.face_recognition_model_v1("dlib_face_recognition_resnet_model_v1.dat")

# 加载已知人脸图像和编码
known_faces = dlib.load_image_file("known_face.jpg")
known_face_descriptor = facerec.compute_face_descriptor(known_faces, sp(known_faces))

# 对未知图像进行人脸识别
unknown_faces = dlib.load_image_file("unknown_face.jpg")
dets = detector(unknown_faces, 1)
for k, d in enumerate(dets):
    shape = sp(unknown_faces, d)
    face_descriptor = facerec.compute_face_descriptor(unknown_faces, shape)
    # 比较人脸特征
    distance = face_distance([known_face_descriptor], face_descriptor)
    if distance < 0.6:  # 设定阈值
        print("识别成功")
    else:
        print("识别失败")

3. UI界面设计

使用Python的GUI库,如PyQt5,设计一个简单的用户界面,用于显示摄像头实时画面、人脸识别结果等信息。

from PyQt5 import QtCore, QtWidgets
from PyQt5.QtCore import Qt
from PyQt5.QtGui import *

class UserMainUi(object):
    def setupUi(self, MainWindow):
        MainWindow.setObjectName("UserMainWindow")
        MainWindow.resize(1200, 800)
        self.main_widget = QtWidgets.QWidget(MainWindow)
        self.main_layout = QtWidgets.QGridLayout()
        self.main_widget.setLayout(self.main_layout)
        self.left_widget = QtWidgets.QWidget(MainWindow)
        self.left_widget.setObjectName('left_widget')
        self.left_layout = QtWidgets.QGridLayout()
        self.left_widget.setLayout(self.left_layout)
        self.right_widget = QtWidgets.QWidget(MainWindow)
        self.right_widget.setObjectName('right_widget')
        self.right_layout = QtWidgets.QGridLayout()
        self.right_widget.setLayout(self.right_layout)
        self.main_layout.addWidget(self.left_widget, 0, 0, 15, 2)
        self.main_layout.addWidget(self.right_widget, 0, 2, 15, 10)
        MainWindow.setCentralWidget(self.main_widget)
        # 添加按钮等控件
        # ...

4. 硬件控制

使用树莓派4B和Arduino UNO开发板,控制MLX90614温度传感器、舵机、无源蜂鸣器等元器件。

import Adafruit_MLX90614
import RPi.GPIO as GPIO

# 初始化温度传感器
mlx = Adafruit_MLX90614()

# 初始化舵机
servo_pin = 17
GPIO.setmode(GPIO.BCM)
GPIO.setup(servo_pin, GPIO.OUT)
pwm = GPIO.PWM(servo_pin, 50)
pwm.start(0)

# 初始化蜂鸣器
buzzer_pin = 27
GPIO.setup(buzzer_pin, GPIO.OUT)

# 读取温度
ambient_temp = mlx.readAmbientTempC()
object_temp = mlx.readObjectTempC()

# 控制舵机开门
pwm.ChangeDutyCycle(5)  # 0度
time.sleep(1)
pwm.ChangeDutyCycle(7.5)  # 90度
time.sleep(1)
pwm.ChangeDutyCycle(10)  # 180度
time.sleep(1)
pwm.ChangeDutyCycle(0)  # 停止

# 控制蜂鸣器
GPIO.output(buzzer_pin, GPIO.HIGH)
time.sleep(1)
GPIO.output(buzzer_pin, GPIO.LOW)

5. 部署实现人脸门禁系统

将上述软件和硬件整合,部署到实际的门禁系统中。当有人靠近门禁系统时,摄像头会采集图像,通过人脸识别算法判断是否为已知人员,如果是,则控制舵机开门并发出蜂鸣器提示。

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值