使用python实现刷脸登录


这段时间学习了一下opencv和pytorch,然后准备做一个小的项目练一下手。主要实现的功能是刷脸登录系统。
源代码在GITHUB上,链接 github源代码连接

前期准备

环境配置

如果想要运行这份代码,需要先下载以下包:
pytorch、opencv、numpy、torchvision
有关pytorch的下载,你可以参考我的这篇文章使用anaconda安装pytorch

硬件配置

只需要电脑有摄像头,然后电脑能跑深度学习的代码(我提供的模型里面只包含了我自己的数据集训练的参数,所以如果要能识别你自己,你需要跑一遍深度学习的代码)

代码部分

这次编写代码我采用的是模块化的方式,把很多函数、不同功能都分散开封装成包,然后需要导入。下面就按运行的顺序开始堆上代码。
代码结构如图:
代码结构

识别部分

#!/usr/bin/env python
# -*- coding:utf-8 -*-
#coder:UstarZzz
#date:2019/7/19

import cv2
from func import train_model

class Recognizer():
    def __init__(self,cam_id,address):
        self.id = cam_id
        self.classfier = cv2.CascadeClassifier(address)
        self.color = (0,255,0)


    """
    to get capture object
    :parameter:none
    :return:cap
    if you want to use camera to capture pictures,you just need to use
    get_cap()
    but if you want to capture pictures in your specific video files,you should use
    get_cap(from_camera=False,path='your own path')
    """
    def get_cap(self,from_camera=True,path='video.mp4'):
        cv2.namedWindow('recognition area')
        if(from_camera == True):
            cap = cv2.VideoCapture(self.id)
        if(from_camera == False):
            cap = cv2.VideoCapture(path)
        return cap


    """
    to get state,frame
    :parameter:cap
    :returns:state,frame
    """
    def get_video(self,cap):
        state,frame = cap.read()
        return state,frame


    """
    to frame the portrait in the picture
    :parameter:frame
    :return:none
    """
    def rect_face(self,frame,num,save=False,path='E:/code/control_system/pic/zyx_test'):
        #change RGB to GREY
        grey = cv2.cvtColor(frame,cv2.COLOR_BGR2GRAY)
        facerects = self.classfier.detectMultiScale(grey,scaleFactor=1.2,minNeighbors=3,minSize=(32,32))
        if len(facerects)>0:
            for facerect in facerects:
                x,y,w,h = facerect
                if(save == True):
                    img_name = '%s/%d.jpg' % (path, num)
                    image = frame[y - 10: y + h + 10, x - 10: x + w + 10]
                    cv2.imwrite(img_name, image)
                    cv2.rectangle(frame, (x - 10, y - 10), (x + w + 10, y + h + 10), self.color, 2)
                    font = cv2.FONT_HERSHEY_SIMPLEX
                    cv2.putText(frame, 'num:%d' % (num), (x + 30, y + 30), font, 1, (255, 0, 255), 4)
                if(save == False):
                    image = frame[y - 10: y + h + 10, x - 10: x + w + 10]
                    prediction,mark = train_model.test(all=False,from_camera=True,image=image)
                    font = cv2.FONT_HERSHEY_SIMPLEX
                    cv2.rectangle(frame,(x-10,y-10),(x+w+10,y+h+10),self.color,2)
                    if(mark > 600):
                        if(prediction == 0):
                            cv2.putText(frame, 'LiuDehua', (x + 30, y + 30), font, 1, (255, 0, 255), 4)
                        if(prediction == 1):
                            cv2.putText(frame, 'ZhengYuxing', (x + 30, y + 30), font, 1, (255, 0, 255), 4)
                    else:
                        pass


    """
    to show the picture
    :parameter:frame
    :return:keycode
    ""
  • 5
    点赞
  • 35
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
可部署到云主机(Heroku,AWS……)! 使用dlib最先进的面部识别功能构建而成,具有深度学习功能。该模型在Wild标记的Labeled Faces中具有99.38%的准确度 。 这提供了一个简单的命令行工具,允许从命令行对图像文件夹进行面部识别! 1、找到图片中出现的所有面孔 2、获取每个人的眼睛,鼻子,嘴巴和下巴的位置和轮廓。 3、应用数字化妆 4、识别每张照片中出现的人物。 5、可以将此库与其他Python库一起使用来进行实时人脸识别。 使用要求 Python 3.3+或Python 2.7 macOS或Linux(Windows未正式支持,但可能有效) 人脸检测 在照片中找到面孔 在照片中找到面孔(使用深度学习使用GPU(使用深度学习)批量查找图像中的面孔 使用网络摄像头模糊实时视频中的所有人脸(需要安装OpenCV) 面部特征 识别照片中的特定面部特征 应用(可怕的丑陋)数字化妆 面部识别 根据已知人物的照片查找并识别照片中的未知面部 识别并在照片中的每个人周围绘制框 通过数字面部距离比较面部而不仅仅是真/假匹配 使用网络摄像头识别实时视频中的人脸 - 简单/慢速版本(需要安装OpenCV) 使用网络摄像头识别实时视频中的人脸 - 更快的版本(需要安装OpenCV) 识别视频文件中的面部并写出新的视频文件(需要安装OpenCV) 用相机识别Raspberry Pi上的部 运行Web服务以通过HTTP识别面部(需要安装Flask) 使用K近邻分类器识别面部

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值