Python人脸检测及识别

054基于python的人脸识别检测 080python农业病虫害检测pyqt版本_含10多种模型包括alexnet、DenseNet、DLA、GoogleNet、Mobilenet、ResNet、ResNeXt、ShuffleNet、VGG。089基于深度学习的小样本数据检测_含10多种模型包括alexnet、DenseNet、DLA、GoogleNet、Mobilenet、ResNet、ResNeXt、ShuffleNet、VGG。001手写汉字识别-单个汉字识别-pyqt可视化交互界面-python代码') 阅读详情

Python人脸检测及识别

开发环境:

  1. Ubuntu16.04
  2. Python3.6 / Tensorflow1.8

项目目标:

  1. 实时识别检测人脸,并识别人物;

项目思路:

  • 使用mtcnn模型检测人脸,并提取人脸图像成对应数据集;
  • 使用facenet模型对数据集中每张人脸进行特征提取,构建每张图片对应128d维数据特征;
  • 建立人脸特征库;
  • 对待识别人脸,进行1、 2步骤,将提取的特征与人脸特征库进行相似度计算,找到相似性较高的对应人脸;

具体实施:

  1. opencv人像采集:
    使用opencv进行人像采集,其中使用ssd人脸检测器(快且准),详细代码如下get_face.py:

    import os
    import cv2
    import numpy as np
    from cv2_face_detector import FaceDetector
    
    # OpenCv 调用摄像头 use camera
    cap = cv2.VideoCapture(0)
    cnt_ss = 0
    # 存储人脸的文件夹
    current_face_dir = ""
    
    # 保存 faces images 的路径
    path_photos_from_camera = "./faces_from_camera/"
    # 新建保存人脸图像文件
    def pre_work_mkdir():
        if os.path.isdir(path_photos_from_camera):
            pass
        else:
            os.mkdir(path_photos_from_camera)
    pre_work_mkdir()
    
    # 如果有之前录入的人脸 
    # 在之前 person_x 的序号按照 person_x+1 开始录入
    if os.listdir("./faces_from_camera/"):
        # 获取已录入的最后一个人脸序号 / get the num of latest person
        person_list = os.listdir("./faces_from_camera/")
        person_num_list = []
        for person in person_list:
            person_num_list.append(int(person.split('_')[-1]))
        person_cnt = max(person_num_list)
    # 如果第一次存储或者没有之前录入的人脸, 按照 person_1 开始录入
    else:
        person_cnt = 0
    
    # 之后用来控制是否保存图像的 flag
    save_flag = 1
    # 之后用来检查是否先按 'n' 再按 's'
    press_n_flag = 0
    # 使用ssd 人脸检测器
    faceDetector = FaceDetector('ssd', 0.5)
    # 字体类型
    font = cv2.FONT_HERSHEY_COMPLEX
    while cap.isOpened():
        flag, img_rd = cap.read()
        kk = cv2.waitKey(1)
        frame = img_rd.copy()
        faces = faceDetector.detect(frame)
        # 固定截取窗口
        (x,y,w,h) = (150,100,250,250)
        cv2.rectangle(frame, (x, y),(x+w, y+h),
                        (0, 0, 255) , 2)
    
        # press 'n' to create the folders for saving faces
        if kk == ord('n'):
            person_cnt += 1
            current_face_dir = path_photos_from_camera + "person_" + str(person_cnt)
            os.makedirs(current_face_dir)
            print('\n')
            print("新建的人脸文件夹 / Create folders: ", current_face_dir)
            cnt_ss = 0              # clear the cnt of faces
            press_n_flag = 1        # have pressed 'n'
    
       # 检测到人脸
        if len(faces) != 0:
            print(len(faces))
            for rect in faces:
                (x, y, w, h) = rect
                cv2.rectangle(frame, (x, y),(x+w, y+h),
                                (0, 255, 0) , 2)
                if save_flag:
                    # press 's' to save faces into local images
                    if kk == ord('s'):
                        # check if you have pressed 'n'
                        if press_n_flag:
                            cnt_ss += 1
                            # 保存固定窗口截图
                            im_blank = img_rd[100:350,150:400,:]
                            cv2.imwrite(current_face_dir + '/' +str("%03d" % cnt_ss) + ".jpg", im_blank)
                            print("写入本地 / Save into:", str(current_face_dir)+ '/' + str("%03d" % cnt_ss) + ".jpg")
                        else:
                            print("Please press 'N' before 'S'")
    
        # # 添加说明 / add some statements
        cv2.putText(frame, "Face Register", (20, 40), font, 1, (0, 0, 0), 1, cv2.LINE_AA)
        cv2.putText(frame, "N: New face folder", (20, 350), font, 0.8, (0, 0, 0), 1, cv2.LINE_AA)
        cv2.putText(frame, "S: Save current face", (20, 400), font, 0.8, (0, 0, 0), 1, cv2.LINE_AA)
        cv2.putText(frame, "Q: Quit", (20, 450), font, 0.8, (0, 0, 0), 1, cv2.LINE_AA)
    
        # show the numbers of faces detected
        cv2.putText(img_rd, "Faces: " + str(len(faces)), (20, 100), font, 0.8, (0, 255, 0), 1, cv2.LINE_AA)
        # press 'q' to exit
        if kk == ord('q'):
            break
        # 如果需要摄像头窗口大小可调
        cv2.namedWindow("camera", 0)
        cv2.imshow("camera", frame)
    
    # 释放摄像头 / release camera
    cap.release()
    cv2.destroyAllWindows()
    

    人脸采集过程截图:在这里插入图片描述

  2. facenet提取人脸特征:

    • mtcnn检测人脸,剪裁有效人脸区域

    • facene提取人脸特征
      详细代码如下face_feature.py

      import cv2
      import csv
      from os.path import join as pjoin
      import skimage
      import tensorflow as tf
      import numpy as np
      import os
      import facenet
      import align.detect_face
      
      minsize = 20 # minimum size of face
      threshold = [ 0.6, 0.7, 0.7 ]  # three steps's threshold
      factor = 0.709 # scale factor
      
      # 创建mtcnn网络,并加载参数
      print('Creating networks and loading parameters')
      with tf.Graph().as_default():
          gpu_options = tf.GPUOptions(per_process_gpu_memory_fraction=0.5)
          sess = tf.Session(config=tf.ConfigProto(gpu_options=gpu_options, log_device_placement=False))
          with sess.as_default():
              pnet, rnet, onet = align.detect_face.create_mtcnn(sess, None)
      
      def load_and_align_data(image, image_size, margin, gpu_memory_fraction):
      
          # 读取图片 
          img = image
          # 获取图片的shape
          img_size = np.asarray(img.shape)[0:2]
          # 返回边界框数组 (参数分别是输入图片 脸部最小尺寸 三个网络 阈值 factor不清楚)
          bounding_boxes, _ = align.detect_face.detect_face(img, minsize, pnet, rnet, onet, threshold, factor)
      
          # 如果检测出图片中不存在人脸 则直接返回,return 0(表示不存在人脸,跳过此图)
          if len(bounding_boxes) < 1:
              return 0,0,0
          else:
              crop=[]
              det=bounding_boxes
              det[:,0]=np.maximum(det[:,0], 0)
              det[:,1]=np.maximum(det[:,1], 0)
              det[:,2]=np.minimum(det[:,2], img_size[1])
              det[:,3]=np.minimum(det[:,3], img_size[0])
              det=det.astype(int)
      
              for i in range(len(bounding_boxes)):
                  temp_crop=img[det[i,1]:det[i,3],det[i,0]:det[i,2],:]
                  aligned=skimage.transform.resize(temp_crop, (image_size, image_size))
                  prewhitened = facenet.prewhiten(aligned)
                  crop.append(prewhitened)
              crop_image=np.stack(crop)    
              return det,crop_image,1
      
      def to_rgb(img):
          w, h = img.shape
          ret = np.empty((w, h, 3), dtype=np.uint8)
          ret[:, :, 0] = ret[:, :, 1] = ret[:, :, 2] = img
          return ret
      
      def load_data(data_dir):
          # data为字典类型 key对应人物分类 value为读取的一个人的所有图片 类型为ndarray
          data = {}
          pics_ctr = 0
          for guy in os.listdir(data_dir):
              person_dir = pjoin(data_dir, guy)       
              curr_pics = [read_img(person_dir, f) for f in os.listdir(person_dir)]         
      
              # 存储每一类人的文件夹内所有图片
              data[guy] = curr_pics      
          return data
      
      def read_img(person_dir,f):
          img=cv2.imread(pjoin(person_dir, f))
          gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)      
          # 判断数组维度
          if gray.ndim == 2:
              img = to_rgb(gray)
          return img
      
      # 模型位置
      model_dir='./models/facenet/'
      with tf.Graph().as_default():
          with tf.Session() as sess:
              # 加载facenet模型
              facenet.load_model(model_dir)
              # 返回给定名称的tensor
              images_placeholder = tf.get_default_graph().get_tensor_by_name("input:0")
              embeddings = tf.get_default_graph().get_tensor_by_name("embeddings:0")
              phase_train_placeholder = tf.get_default_graph().get_tensor_by_name("phase_train:0")
              # 从训练数据文件夹中加载图片并剪裁,最后embding,data为dict
              data=load_data('./train_data/')	
              # keys列表存储图片文件夹类别(几个人)
              keys=[]
              for key in data:
                  keys.append(key)
                  print('folder:{},image numbers:{}'.format(key,len(data[key])))
              # 使用mtcnn模型获取每张图中face的数量以及位置,并将得到的embedding数据存储
              for n in range(len(keys)):
                  for x in data[keys[n]]:
                      _,images_me,i = load_and_align_data(x, 160, 44, 1.0)
                      if i:
                          feed_dict = { images_placeholder: images_me, phase_train_placeholder:False }
                          emb = sess.run(embeddings, feed_dict=feed_dict) 
                          for xx in range(len(emb)):
                              emb=list(emb[xx,:])
                              emb.append(keys[n])
                              with open('face_feature.csv', "a+", newline="") as csvfile:
                                  writer = csv.writer(csvfile)
                                  writer.writerow(emb)
      
      
    1. 人脸特征库建立
      上述步骤生成文件face_feature.csv即为已经采集的人脸特征库;

    2. 效果验证
      在数据集处理过程中,已经将数据集分为训练集和测试集,比例约为8:2,经过验证比对,平均准确率达到百分之95以上,具体每个类别识别准确率如下:

      name==  yin123
      acc: 1.0
      name==  liu123
      acc: 0.9855072463768116
      name==  yu123
      acc: 1.0
      name==  ma123
      acc: 0.9821428571428571
      name==  zhou123
      acc: 0.9912280701754386
      name==  wang123
      acc: 1.0
      name==  xu123
      acc: 1.0
      name==  taojinglong
      acc: 0.8529411764705882
      
    3. 实时检测
      设备描述:8g内存+i7+gtx960m+自带摄像头
      详细代码如face_recognition.py
      检测效果如图:
      在这里插入图片描述

    4. 备注

      • 文中使用模型,可至此下载
      • 经过实际效果测试:延迟尚能接受,准确度良好(采集设备比较差)。完整项目参见,有问题直接issuse.
python人脸照片分类_Python系列之三——人脸检测、人脸识别 这是关于人脸的又一篇原创!之前有利用C++和OpenCv写过人脸识别的系列文章,对于人脸识别的基本理解和步骤流程等基本知识不做反复叙述。比詹小白还要白的童鞋可以查看往期文章进行了解噢一、人脸检测python版人脸检测基本上可以参照C++版本的程序,根据语法不同进行改写即可。1.输入为包含人脸的图片时这种情况较为简单,只是直接使用了opencv库的训练好的人脸检测模型~其代码如下所示:(具体函数和方... 阅读详情

相关推荐

OpenCV+Python 人脸识别 | Haar级联(检测)& Eigenfaces算法(识别)

# -*- coding: utf-8 -*- import cv2 def detect(filename): face_cascade = cv2.CascadeClassifier( r'C:\AppInstall\Anaconda3\Lib\site-packages\cv2\data\haarcascade_frontalface_default.x...

机器学习 1万+

人脸识别(Face Recognition)入门

人脸识别是一项重要的计算机视觉技术,它在各种应用场景中得到了广泛应用。本文介绍了人脸识别的入门知识和常用实现方法。通过人脸检测、人脸特征提取和人脸识别三个步骤,我们可以实现一个简单的人脸识别系统。这只是人脸识别领域的冰山一角,希望本文能够帮助读者入门人脸识别领域,并激发更多的兴趣与思考。示例代码:机票查询系统# 创建机票查询系统对象# 添加几条航班信息# 查询从北京到广州的航班# 打印查询结果这个示例代码展示了一个简单的机票查询系统。首先创建一个​​类作为机票查询系统的主要功能。它有一个​。

牛肉胡辣汤 568

Python实现视频人脸检测识别功能

人脸检测是指从图像或视频中识别出人脸的位置和大小信息,而人脸识别则是指将人脸图像与已知的人脸图像进行比较,以确定其是否为同一人。人脸检测和识别技术是密不可分的,它们通常一起使用来实现人脸识别功能。在人脸检测识别领域,常用的算法包括基于特征提取的方法、基于深度学习的方法和混合方法等。其中,基于深度学习的方法具有较高的准确性和鲁棒性,已成为人脸检测识别领域的主流方法。在Python中,我们可以使用一些开源的人脸检测识别库来实现这些功能。

这家伙很懒,什么都没有留下 3162

python函数——os.path.join路径拼接(pjoin)

文章目录语法示例 python函数 系列目录:python函数——目录 os.path.join()是用来路径拼接的,和join 使用意思差不多 语法 os.path.join([PATH_1], [PATH_2], [PATH_3], ...) # ---------- # # return # [PATH_1]/[PATH_2]/[PATH_3] 示例 import os &gt;&gt...

Congying-Wang的博客 6542

计算机视觉:用Python+OpenCV实现人脸检测与识别

计算机视觉:用Python+OpenCV实现人脸检测与识别 在当今数字化时代,计算机视觉技术正以前所未有的速度发展,而人脸检测与识别作为其中的重要分支,广泛应用于安防监控、门禁系统、智能拍照、社交媒体等诸多领域。Python 凭借其简洁易读的语法和丰富的库支持,成为了计算机视觉领域的首选编程语言。OpenCV(Open Source Computer Vision Library)作为一个强大的开源计算机视觉库,提供了众多用于图像处理和计算机视觉任务的函数和工具,使得我们能够方便快捷地实现人脸检测与识别功能

不踩坑,不知道坑有多深;不总结,踩过的坑白踩。 5万+

【图像处理】使用Python进行实时人脸检测和识别

你有没有想过用Python构建一个面部识别系统?不要再看了!在本教程中,我们将使用 face_recognition 库来检测和识别视频流、图像甚至使用网络摄像头实时检测和识别人脸。

gongdiwudu的专栏 9563

基于Python_opencv人脸录入、识别系统(应用dlib机器学习库)

本项目基于python_opencv开发的人脸识别的开源项目,应用机器学习dlib库实现,开发设计UI界面用于录入人脸,姓名(中英文)信息。希望大家多多支持!!!!

weixin_51141489的博客 4346

Python人脸检测与识别实战教程

关键点定位是人脸识别中的一个重要步骤,它旨在识别出人脸图像中的一些特征点,例如眼睛、鼻子、嘴巴和脸颊等部位的中心点。这些关键点是后续识别过程的基准,对于提高识别的准确性和鲁棒性至关重要。从算法的角度来说,关键点定位通常依赖于机器学习和深度学习技术。早期的算法多使用传统的机器学习方法,比如支持向量机(SVM)和随机森林,来从人脸图像中识别出预定义的关键点。这些方法需要手动设计特征,依赖于专家知识来选择恰当的图像特征来训练分类器。

weixin_36001279的博客 1076

Python利用Dlib实现人脸检测和识别

引言 利用 Python 开发,借助 Dlib 库捕获摄像头中的人脸,提取人脸特征,通过计算特征值之间的欧氏距离,来和预存的人脸特征进行对比,判断是否匹配,达到人脸识别的目的; 可以从摄像头中抠取人脸图片存储到本地,然后提取构建预设人脸特征;根据抠取的已有的同一个人多张人脸图片提取 128D 特征值,然后计算该人的 128D 特征均值; 然后和摄像头中实时获取到的人脸提取出的特征值,计算欧氏距离,...

wolf1105的博客 4484

Python人脸检测与识别实战指南

人脸检测是计算机视觉领域的一个重要分支,它涉及定位图像或视频中的人脸位置。这项技术广泛应用于安全监控、智能安防系统、用户界面设计、互动媒体以及社会媒体平台中的人脸标记功能。Python由于其简洁性和丰富的库支持,已成为实现人脸检测应用的热门语言。人脸识别技术的起源可以追溯到1960年代,当时一些研究人员开始探索人类识别个体面部的能力,并尝试使用计算机模拟这一过程。最初的研究集中在面部特征的几何布局上,例如眼睛、鼻子和嘴巴的位置和距离。

weixin_36073714的博客 804

deepface:适用于Python的轻量级深脸识别和面部属性分析(年龄,性别,情感和种族)框架

深脸 Deepface是python的轻量级和面部属性分析(,,和)框架。 它是一个混合的人脸识别框架,其中包含了最先进的模型: , , , , , 和 。 该库主要基于Keras和TensorFlow。 安装 安装deepface的最简单方法是从下载。 pip install deepface 人脸识别 现代包括四个常见阶段: , ,和。 Deepface在后台处理所有这些常见阶段。 您只需使用一行代码即可在其界面中调用其验证,查找或分析功能。 人脸验证- deepface界面下的验证功能可验证同一个人或不同个人的面部对。 您应将面对作为数组传递,而不是为了最佳实践而在for循环中调用verify函数。 这将大大加快该功能,并减少分配的内存。 from deepface import DeepFace result = DeepFace . verify ( "img1.jpg" , "img2.jpg" ) #results = DeepFace.verify([['img1.jpg', 'img2.jpg'], ['img1.jpg', 'img3.jpg'

Python 3 利用 Dlib 实现摄像头实时人脸识别

0.引言   利用 Python 开发,借助 Dlib 库捕获摄像头中的人脸,提取人脸特征,通过计算特征值之间的欧氏距离,来和预存的人脸特征进行对比,判断是否匹配,达到人脸识别的目的;   可以从摄像头中抠取人脸图片存储到本地,然后提取构建预设人脸特征;   根据抠取的 / 已有的同一个人多张人脸图片提取 128D 特征值,然后计算该人的 128D 特征均值;   然后和摄像头中实时获取到...

ieeso的博客 1万+

面部分析:使用deepface python框架进行面部识别

使用Deepface框架进行人脸分析 这个项目是一个面部识别python脚本,我使用了一个称为的框架。 该脚本具有4个主要功能: 面部识别 面部验证 面部分析 实时面部分析 这是的 安装 我为此项目使用了。 也需要此脚本才能运行。 确保还安装了 。 要下载Tensorflow,请运行以下命令: $ pip install --upgrade tensorflow 要下载DeepFace: $ pip install deepface 用法 为了使用此脚本的功能,请确保在此目录的photos文件夹中具有要分析或比较的jpg格式的图片。 认出 如果要在拥有许多人的数据库时从他们的照片中识别某人,请使用此功能。 def faceRecognise(pic, database): 它有两个参数: 您要识别的目标图片的路径 您希望算法查找的照片数据库 此功能将返回与目标图片具有相同

人工智能-OpenCV+Python实现人脸识别(视频人脸检测)

上期文章我们分享了opencv识别图片中的人脸,OpenCV图片人脸检测,本期我们分享一下如何从视频中检测到人脸 视频人脸检测 OpenCV打开摄像头特别简单,只需要如下一句代码 capture = cv2.VideoCapture(0) # 打开摄像头 打开摄像头后,我们使用如下一句代码,来获取视频中的图片(每帧图片) ret, frame = capture.read() # 读...

huang714的专栏 2万+

python统计汉字个数

利用python语言统计一篇文档中汉字的个数

python统计字符串中中英文、空格、数字、标点个数

该程序用于统计一个字符串中中英文、空格、数字和标点符号的个数。

Python | 人脸识别系统 — 活体检测

人脸识别系统活体检测部分代码详解

鷾 7213

企业和个人 AI 编程工具怎么选?2025 年 12 款主流工具(Claude/Cursor 等)核心能力 + 收费对比

2025 年最火的 12 款 AI 编程工具,像 Claude、Cursor 这些热门款,我把它们的核心能力、收费标准全扒得明明白白,看完这篇你不用再瞎琢磨,直接就能挑到对的!再说说 Cursor,美国 Cursor Labs 做的,还拿过红杉资本投资,2022 年推出后,2024 年收入直接涨了 6400%,势头很猛。总之,不管你是企业技术管理者、程序员,还是刚入门的 AI 小白,按自己的需求(语言、合规、预算)挑,保准能找到最适合的 AI 编程工具!最后给大家划重点,不同需求直接对号入座:?

hundred98的博客 2801

利用Python实现人脸识别检测

人脸检测是计算机视觉中的一个重要的部分,下面就通过Python来实现一个简易的人脸识别的程序。 基本思想: 通过Python,采用识别人脸,然后标记出来,实现人脸检测的结果。 方法是调用opencv训练好的分类器和自带的检测函数检测人脸。 主要流程: 加载分类器。我这里用的是haarcascade_frontalface_default.xml。GitHub上的地址为https://...

frange zone 6804

STM32F407 步进电机S形曲线加减速

步进电机

smallerlang的博客 1592

80MHz~100MHz频谱分析仪设计

由理论分析可知,经过乘法器后输出的信号为频率为w1+w2的高频信号和w1-w2的低频信号,除了想要采样的直流信号外,最小的信号频率为100kHz。因此,经过一系列推导可以得到该滤波器的元件C1,C2,C3,R1,R2的近似值分别为:C1=2.36nF,C2=32.1nF,C3=1.07nF,R1=1.39k,R2=2.84k。AK,此时的频率w2即为被测信号的频率,待测信号源电压幅度为,因此为了能达到直流采样的设计,我们将本振源的频率输出范围做成80~110 MHz,提高了题目的频率要求。

qq_48771816的博客 5243
上一篇: Deepin手札
下一篇: Python使用过程中遇到的编码问题集合
奥特曼不秃头
博客等级 码龄10年 24粉丝 24原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

奥特曼不秃头

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值