基于Pyqt5,Opencv,Keras获取人的特征参数

本文介绍了基于Pyqt5, OpenCV和Keras的人脸分析项目,涵盖了人脸比对识别登陆、性别表情识别、眼动跟踪、姿态识别以及心率获取等技术。通过使用预训练模型和解决TensorFlow在进程中的问题,实现了高精度的面部特征分析。" 101687743,4917335,Java大文件读取最佳实践:BufferedReader vs. Scanner vs. Commons-IO,"['Java', '文件操作', '性能优化', '内存管理', '输入输出']

读研期间对视频图像处理很感兴趣,从研一开始自学Python和AI相关的知识,到目前面临找工作时期,才发现做项目学习这么久的过程中一直在看别人的博客学习,然而没有好好写一次博客,于是把自己做的一个项目简单地介绍下相当于一个纪念吧。另外项目的传送门:https://github.com/junchou9463

1 概述

对人脸的研究一直是个很有意思的话题,从刚开始的人脸特征提取,如Hog特征,然后根据Hog特征进行人脸识别,行人检测等一系列的应用。这些都是很早的研究,后面我根据这些年对人脸的研究做了一系列的开发应用,包括:1.人脸比对识别登陆 2.人脸性别,表情识别 3.人脸眼动跟踪识别 4.人脸姿态识别 5.人脸运动单元的识别 6.人的心率呼吸速率血氧饱和度的获取 7.人脸的血流标注 8.程序打包等。接下来是相关的介绍。

2 人脸比对识别登陆

Dlib库有个方法是 face_recognition_model_v1.compute_face_descriptor,可以通过Cnn获取人脸128维的特征,所以我们可以将摄像头获取的人脸图像进行特征提取然后和数据库里的进行比对,找出偏差最小的那一项对应的姓名即是用户名,下面是相应的代码:

rects = detector(rgbImage, 0)
if len(rects)> 0:
  largest_face=max(rects, key=lambda rect: rect.width() * rect.height())
  shape = predictor(rgbImage, largest_face)
  face_rec = face_rec_model.compute_face_descriptor(rgbImage, shape)
  files = os.listdir(path)
  for file in files:  # 遍历文件夹
      video_folder = os.path.join(path, file)
      data1 = np.load(video_folder)
      diff = np.linalg.norm(data1 - data2)
      if (diff < 0.6):
         (name, format_name) = file.split('.')
         return name

 

3 人脸性别,表情识别

通过Keras训练IMDB和fer2013数据库可以得到性别和表情的分类模型,后面只需加载该训练模型,然后提取人脸区域进行识别分类即可,训练代码和调用方式如下:

# -*- coding:utf-8 -*-
# Author:Jun

from keras.callbacks import CSVLogger, ModelCheckpoint, EarlyStopping
from keras.callbacks import ReduceLROnPlateau
from keras.preprocessing.image import ImageDataGenerator

from models.cnn import mini_XCEPTION
from utils.datasets import DataManager
from utils.datasets import split_data
from utils.preprocessor import preprocess_input

# parameters
batch_size = 32
num_epochs = 10000
input_shape = (64, 64, 1)
validation_split = .2
verbose = 1
num_classes = 7
patience = 50
base_path = '../trained_models/emotion_models/'

# data generator
data_generator = ImageDataGenerator(
                        featurewise_center=False,
                        featurewise_std_normalization=False,
                        rotation_range=10,
                        width_shift_range=0.1,
                        height_shift_range=0.1,
                        zoom_range=.1,
                        horizontal_flip=True)

# model parameters/compilation
model = mini_XCEPTION(input_shape, num_classes)
model.compile(optimizer='adam', loss='categorical_crossentropy',
              metrics=['accuracy'])
model.summary()


datasets = ['fer2013']
for dataset_name in datasets:
    print('Training dataset:', dataset_name)

    # callbacks
 
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值