基于OpenCV和pyqt5的人脸录入技术:简单高效的个人信息记录方式

有时候,不是因为你没有能力,也不是因为你缺少勇气,只是因为你付出的努力还太少,所以,成功便不会走向你。而你所需要做的,就是坚定你的梦想,你的目标,你的未来,然后以不达目的誓不罢休的那股劲,去付出你的努力,成功就会慢慢向你靠近。

导读:本篇文章讲解 基于OpenCV和pyqt5的人脸录入技术:简单高效的个人信息记录方式,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com,来源:原文

人脸识别技术在现代社会中得到了广泛的应用。它可以用于安全监控、人脸支付、人脸解锁等众多场合。在这些应用中,最关键的环节就是人脸录入。本文将介绍一种基于摄像头的人脸录入技术。

文章目录

大致分为两部分,一部分是业务逻辑,一部分是GUI界面。

GUI界面

使用PyQt5制作GUI界面。

# 录入窗口
from PyQt5.QtCore import Qt
from PyQt5.QtGui import *
from PyQt5.QtWidgets import *
import sys
# 窗口类
class UI_FaceRec(QWidget):
    def __init__(self):
        super(UI_FaceRec, self).__init__()
        self.resize(1000,600)
        leftw = QWidget()
        rightw= QWidget()
        # 布局
        layout=QHBoxLayout(self)
        layout.addWidget(leftw)
        layout.addWidget(rightw)
        # 左侧区域
        formlayout=QFormLayout(leftw)
        #学号 姓名
        self.account=QLineEdit()
        self.username=QLineEdit()
        formlayout.addRow("学号",self.account)
        formlayout.addRow("姓名", self.username)


        self.btnsave=QPushButton("保存")
        self.btnsave.clicked.connect(self.save)
        btnlay = QHBoxLayout()
        btnlay.addWidget(self.btnsave,alignment=Qt.AlignCenter)
        formlayout.addRow(btnlay)


        # 摄像头区域
        vied = QVBoxLayout(rightw)
        self.img = QLabel("头像")
        self.img.setStyleSheet("background-color:#00ff00")
        vied.addWidget(self.img)


if __name__=="__main__":
    app=QApplication(sys.argv)
    w=UI_FaceRec()
    w.show()
    sys.exit(app.exec_())

在这里插入图片描述

人脸识别

将录入的人脸信息保存到文件夹和数据库中。

# 录入业务逻辑
import sys

from threading import Thread

import face_recognition
from PyQt5.QtGui import QImage,QPixmap
import os



from day2.day23 import UI_FaceRec,QApplication
from PIL import Image,ImageDraw,ImageFont
import numpy as np
import cv2
# 录入业务类
from utils.DBHelper import Dbutil


class LuruApp(UI_FaceRec):
    def __init__(self):
        super().__init__()
        self.open()
        self.db = Dbutil()


    def open(self):
        # 全0三维数组
        frame = np.zeros((750,600,3),np.uint8)
        # 灰化
        img = Image.fromarray(cv2.cvtColor(frame,cv2.COLOR_BGR2RGB))
        draw = ImageDraw.Draw(img)
        font = ImageFont.truetype("simkai.ttf",40,encoding="utf-8")
        draw.text((200,200),"请正视摄像头",(200,0,0),font=font)
        frame = cv2.cvtColor(np.asarray(img),cv2.COLOR_BGR2RGB)
        frame = cv2.resize(frame,(self.img.width()-10,self.img.height()-10))
        h,w,d = frame.shape
        #从内存创建图像
        frame = QImage(frame.data,w,h,w*d,QImage.Format_RGB888)
        self.img.setPixmap(QPixmap.fromImage(frame))
        #开启子线程
        self.thread=Thread(target=self.doLuru)
        self.thread.start()

     #录入
    def doLuru(self):

        self.cap=cv2.VideoCapture(0,cv2.CAP_DSHOW)
        while True:
            ok,frame=self.cap.read()
            frame = cv2.flip(frame, 1)
            # 复制图像
            raw = frame.copy()
            # 人脸检测
            faces = face_recognition.face_locations(frame)
            if len(faces)==0:
                self.msg="没人录入"
            elif len(faces)>1:
                self.msg="一次只能录入一次"
            else:
                self.msg=""
                marks=face_recognition.face_landmarks(frame,faces)
                facecode=face_recognition.face_encodings(frame,faces)[0]
                top, right, bottom, left = faces[0]
                # 脸部图片
                self.face_img = cv2.resize(frame,(0,0),fx=0.25,fy=0.25)
                # 脸部图片编码
                self.face_img_code = facecode.tolist()
            img = Image.fromarray(cv2.cvtColor(raw,cv2.COLOR_BGR2RGB))
            draw=ImageDraw.Draw(img)
            for x1, y1, x2, y2 in faces:
                draw.rectangle([(y2, x1), (y1, x2)], outline=(200, 0, 0), width=2)
            font = ImageFont.truetype("simkai.ttf",40,encoding="utf-8")
            draw.text((200, 200),self.msg, (200, 0, 0), font=font)
            frame = cv2.cvtColor(np.asarray(img), cv2.COLOR_BGR2RGB)
            h, w, c= frame.shape
            frame = QImage(frame.data, w, h, w * c, QImage.Format_RGB888)
            self.img.setPixmap(QPixmap.fromImage(frame))

    def save(self):
        # 获取学号和姓名
        account=self.account.text()
        username=self.username.text()
        path=os.path.join("../faces",account)
        if not os.path.exists(path):
            # 创建目录
            os.mkdir(path)
        try:
            # 保存图像
            cv2.imencode(".jpg", self.face_img)[1].tofile(os.path.join(path, username + ".jpg"))
            sql = "insert into user values(%s,%s)"

            self.db.save(sql, [[account, username]])

        except Exception as ex:
            print(ex)








if __name__=="__main__":
    app = QApplication(sys.argv)
    w = LuruApp()
    w.show()
    sys.exit(app.exec_())

我们需要先准备好一个摄像头,然后启动人脸识别应用程序。进入录入人脸的页面后,程序会通过摄像头检测用户的人脸。如果检测到了人脸,则会在页面中显示出来。这一步需要用户将自己的脸对准摄像头,并确保只有一张人脸出现在摄像头前。这是录入成功的第一步。

接下来,用户需要输入自己的学号和姓名,并点击保存按钮。程序会将人脸和个人信息保存到数据库和文件夹中。这一步需要用户输入准确的个人信息。如果输入错误,将导致无法正确识别该用户。

录入成功后,程序会提示用户录入成功或者失败的信息。这一步需要用户仔细查看提示信息,以确保人脸录入成功。

以上就是基于摄像头的人脸录入技术的流程。它可以应用于各种场合,如考勤系统、门禁系统等。在实际应用中,我们还需要注意一些细节问题。例如,如何防止用户录入错误的信息或者使用他人的信息进行录入等。这些问题需要我们做好相应的技术和管理措施。

总之,基于摄像头的人脸录入技术是一种简单、高效的人脸识别技术。它可以方便地记录用户的个人信息,为后续的应用提供方便。随着技术的不断发展,相信它会在更多领域中得到应用。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/147385.html

(0)
飞熊的头像飞熊bm

相关推荐

发表回复

登录后才能评论
极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!