Python+Keras+opencv实现人脸识别

Keras对人工智能来说,是一款比较好的入门框架。它是一个高级的Python神经网络框架,已经被添加到TensorFlow中,成为其默认的框架,为TensorFlow提供更高级的API。如果将TensorFlow比喻为编程界的Java或者C++,那么Keras就是编程界的Python,它作为TensorFlow的高层封装,可以与TensorFlow联合使用,用它可以快速搭建模型。并且Keras是TensorFlow官方支持的。当机器上有可用的GPU时,代码会自动调用GPU进行并行计算。

OpenCV的全称,是Open source Computer Vision Library,开放源代码计算机视觉库。也就是说,它是一套关于计算机视觉的开放源代码的API函数库。这也就意味着,(1)不管是科学研究,还是商业应用,都可以利用它来作开发;(2)所有API函数的源代码都是公开的,你可以看到其内部实现的程序步骤;(3)你可以修改OpenCV的源代码,编译生成你需要的特定API函数。但是,作为一个库,它所提供的,仅仅是一些常用的,经典的,大众化的算法的API。一个典型的计算机视觉算法,应该包含以下一些步骤:(1)数据获取(对OpenCV来说,就是图片);(2)预处理;(3)特征提取;(4)特征选择;(5)分类器设计与训练;(6)分类判别;而OpenCV对这六个部分,分别提供了API。

介绍完了Keras与opencv,先看一下模型最终效果:(马赛克打的有点糙,见谅)

源码下载地址:https://download.csdn.net/download/gf19960103/20814025

训练数据大概用了几百张包括自己和朋友,主要测了一下效果,如下图,me为博主本人,others为朋友。实现了人脸识别的功能。自己也是对计算机视觉感兴趣,想尝试一下。(代码只是实现了功能,仍需向做深度学习的大佬不断学习~)

实现步骤

第一步:人脸检测

这一步需要用到opencv包下面的haarcascade_frontalface_alt2.xml分类器,该分类器的可以用来探测人脸,然后我们自己编写代码圈出人脸,实现人脸识别的第一步,人脸检测。

新建face_recognition_file工程,在该工程下新建data_preparation.py文件准备人脸数据

def detect_face():
    # 调用分类器
    face_cascade = cv2.CascadeClassifier('/anaconda3/share/OpenCV/haarcascades/haarcascade_frontalface_default.xml')
    # 打开摄像头
    camera = cv2.VideoCapture(0)
    # while循环,一帧一帧将读取视频流数据
    while True:
        ret, frame = camera.read()
        # 将图片灰度化
        gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
        # 检测人脸
        faces = face_cascade.detectMultiScale(gray, 1.1, 5)
        #x,y为矩形的对角线顶点的坐标,w为宽度,h为高度
        for (x, y, w, h) in faces:
            img = cv2.rectangle(frame, (x, y), (x + w, y + h), (255, 0, 0), 2)

        cv2.imshow('camera', frame)
        if cv2.waitKey(1) & 0xff == ord("q"):
            break
    camera.release()
    cv2.destroyAllWindows()

效果如下:

第二步:数据准备

此步骤只需将第一步的代码稍作调整,将视频流中的图片进行保存即可

修改data_preparation.py代码:

#!/usr/bin/env python
# -*- coding: utf-8 -*-
__author__ = 'Seven'
import cv2


def CatchPICFromVideo(catch_num, path_name):
    face_cascade = cv2.CascadeClassifier('/anaconda3/share/OpenCV/haarcascades/haarcascade_frontalface_alt2.xml') # haarcascade_frontalface_alt2
    camera = cv2.VideoCapture(0)
    num = 0
    while True:
        ret, frame = camera.read()
        gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
        faces = face_cascade.detectMultiScale(gray, 1.1, 5)
        for (x, y, w, h) in faces:
            img_name = f'{path_name}/{str(num)}.jpg'
            image = frame[y:y + h, x:x + w]
            print(img_name)
            cv2.imwrite(img_name, image)
            num += 1
            if num > catch_num:
                break

            # 画出矩形框圈出人脸
            cv2.rectangle(frame, (x, y), (x + w, y + h), (255, 0, 0), 2)
            # 显示捕捉了多少张人脸
            font = cv2.FONT_HERSHEY_SIMPLEX
            cv2.putText(frame, f'num:{str(num)}', (x + 30, y + 30), font, 1, (255, 0, 255), 4)
        if num > catch_num:
            break
        # 显示图像
        cv2.imshow('camera', frame)
        if cv2.waitKey(1) & 0xFF == ord('q'):
            break
    camera.release()
    cv2.destroyAllWindows()


if __name__ == '__main__':
    CatchPICFromVideo(100, './data/me')

在当前工作目录下新建data文件夹,并在data文件夹下新建me文件夹保存自己的图片,新建others保存其他人的图片

第三步:图片数据预处理

输入到卷积神经网络中的图片需要有固定的尺寸,我们要用OpenCV统一图片尺寸大小以便输入到卷积神经网络中,我们在工作目录下建立一个face_dataset.py文件,定义一个resize_image函数来调整图片尺寸,然后将图片读取到Python列表中以便用Python对其进一步处理,并对数据进行标注,“”标注为0,其他人标注为“1”。在face_dataset.py里接着定义一个read_path函数从指定路径中读取图片到Python list,然后再定义一个load_dataset函数调用read_path函数读取图片并转化为更适用于机器学习的numpy多维数组,然后通过判断图片路径名的区别将图片数据标注为0和1
 

#!/usr/bin/env python
# -*- coding: utf-8 -*-
__author__ = 'Seven'
import os
import numpy as np
import cv2

# 定义图片尺寸
IMAGE_SIZE = 64


# 按照定义图像大小进行尺度调整
def resize_image(image, height=IMAGE_SIZE, width=IMAGE_SIZE):
    top, bottom, left, right = 0, 0, 0, 0
    # 获取图像尺寸
    h, w, _ = image.shape
    # 找到图片最长的一边
    longest_edge = max(h, w)
    # 计算短边需要填充多少使其与长边等长
    if h < longest_edge:
        d = longest_edge - h
        top = d // 2
        bottom = d // 2
    elif w < longest_edge:
        d = longest_edge - w
        left = d // 2
        right = d // 2
    else:
        pass

    # 设置填充颜色
    BLACK = [0, 0, 0]
    # 对原始图片进行填充操作
    constant = cv2.copyMakeBorder(image, top, bottom, left, right, cv2.BORDER_CONSTANT, value=BLACK)
    # 调整图像大小并返回
    return cv2.resize(constant, (height, width))

images, labels = list(), list()
# 读取训练数据
def read_path(path_name):
    for dir_item in os.listdir(path_name):
        # 合并成可识别的操作路径
        full_path = os.path.abspath(os.path.join(path_name, dir_item))
        # 如果是文件夹,则继续递归调用
        if os.path.isdir(full_path):
            read_path(full_path)
        else:
            if dir_item.endswith('.jpg'):
                # print(dir_item)
                image = cv2.imread(full_path)
                image = resize_image(image, IMAGE_SIZE, IMAGE_SIZE)
                images.append(image)
                labels.append(path_name)
    print(labels)
    return images, labels


# 从指定路径读取训练数据
def load_dataset(path_name):
    images, labels = read_path(path_name)
    # 由于图片是基于矩阵计算的, 将其转为矩阵
    images = np.array(images)
    print(images.shape)
    labels = np.array([0 if label.endswith('me') else 1 for label in labels])
    return images, labels


if __name__ == '__main__':
    images, labels = load_dataset(os.getcwd()+'/data')
    print('load over')

第四步:利用Keras搭建卷积神经网络

在工作目录下建立一个face_train.py文件,代码如下:

#!/usr/bin/env python
# -*- coding: utf-8 -*-
__author__ = 'Seven'
import random
import numpy as np
from sklearn.model_selection import train_test_split
from keras.preprocessing.image import ImageDataGenerator
from keras.models import Sequential
from keras.layers import Dense, Activation, Flatten, Dropout
from keras.layers import Conv2D, MaxPool2D
from keras.optimizers import SGD
from keras.utils import np_utils
from keras.models import load_model
from keras import backend as K
from face_dataset import load_dataset, resize_image, IMAGE_SIZE
import warnings
warnings.filterwarnings('ignore')


class Dataset:
    def __init__(self, path_name):
        # 训练集
        self.train_images = None
        self.train_labels = None
        # 验证集
        # self.valid_images = None
        # self.valid_labels = None
        # 测试集
        self.test_images = None
        self.test_labels = None
        # 数据加载路径
        self.path_name = path_name
        # 当前库采用的维度顺序
        self.input_shape = None

    def load(self, img_rows=IMAGE_SIZE, img_cols=IMAGE_SIZE, img_channels=3, nb_classes=2):
        # 加载数据集至内存
        images, labels = load_dataset(self.path_name)
        train_images, test_images, train_labels, test_labels = train_test_split(images, labels, test_size=0.3,
                                                                                random_state=random.randint(0, 10))
        if K.image_dim_ordering() == 'th':
            train_images = train_images.reshape(train_images.shape[0], img_channels, img_rows, img_cols)
            test_images = test_images.reshape(test_images.shape[0], img_channels, img_rows, img_cols)
            self.input_shape = (img_channels, img_rows, img_cols)
        else:
            train_images = train_images.reshape(train_images.shape[0], img_rows, img_cols, img_channels)
            test_images = test_images.reshape(test_images.shape[0], img_rows, img_cols, img_channels)
            self.input_shape = (img_rows, img_cols, img_channels)

            # 输出训练集、测试集的数量
            print(train_images.shape[0], 'train samples')
            print(test_images.shape[0], 'test samples')
            # 我们的模型使用categorical_crossentropy作为损失函数,因此需要根据类别数量nb_classes将
            # 类别标签进行one-hot编码使其向量化,在这里我们的类别只有两种,经过转化后标签数据变为二维
            train_labels = np_utils.to_categorical(train_labels, nb_classes)
            test_labels = np_utils.to_categorical(test_labels, nb_classes)
            # 像素数据浮点化以便归一化
            train_images = train_images.astype('float32')
            test_images = test_images.astype('float32')
            # 将其归一化,图像的各像素值归一化到0~1区间
            train_images /= 255.0
            test_images /= 255.0
            self.train_images = train_images
            self.test_images = test_images
            self.train_labels = train_labels
            self.test_labels = test_labels


# CNN网络模型类
class Model:
    def __init__(self):
        self.model = None

    # 建立模型
    def build_model(self, dataset, nb_classes=2):
        # 构建一个空的网络模型,它是一个线性堆叠模型,各神经网络层会被顺序添加,专业名称为序贯模型或线性堆叠模型
        self.model = Sequential()

        # 以下代码将顺序添加CNN网络需要的各层,一个add就是一个网络层
        self.model.add(Conv2D(32, 3, 3, border_mode='same',
                                     input_shape=dataset.input_shape))  # 1 2维卷积层
        self.model.add(Activation('relu'))  # 2 激活函数层

        self.model.add(Conv2D(32, 3, 3))  # 3 2维卷积层
        self.model.add(Activation('relu'))  # 4 激活函数层

        self.model.add(MaxPool2D(pool_size=(2, 2)))  # 5 池化层
        self.model.add(Dropout(0.25))  # 6 Dropout层

        self.model.add(Conv2D(64, 3, 3, border_mode='same'))  # 7  2维卷积层
        self.model.add(Activation('relu'))  # 8  激活函数层

        self.model.add(Conv2D(64, 3, 3))  # 9  2维卷积层
        self.model.add(Activation('relu'))  # 10 激活函数层

        self.model.add(MaxPool2D(pool_size=(2, 2)))  # 11 池化层
        self.model.add(Dropout(0.25))  # 12 Dropout层

        self.model.add(Flatten())  # 13 Flatten层
        self.model.add(Dense(512))  # 14 Dense层,又被称作全连接层
        self.model.add(Activation('relu'))  # 15 激活函数层
        self.model.add(Dropout(0.5))  # 16 Dropout层
        self.model.add(Dense(nb_classes))  # 17 Dense层
        self.model.add(Activation('softmax'))  # 18 分类层,输出最终结果

        # 输出模型概况
        self.model.summary()

    # 训练模型
    def train(self, dataset, batch_size=20, nb_epoch=100, data_augmentation=True):
        sgd = SGD(lr=0.01, decay=1e-6,
                  momentum=0.9, nesterov=True)  # 采用SGD+momentum的优化器进行训练,首先生成一个优化器对象
        self.model.compile(loss='categorical_crossentropy',
                           optimizer=sgd,
                           metrics=['accuracy'])  # 完成实际的模型配置工作

        # 不使用数据提升,所谓的提升就是从我们提供的训练数据中利用旋转、翻转、加噪声等方法创造新的
        # 训练数据,有意识的提升训练数据规模,增加模型训练量
        if not data_augmentation:
            self.model.fit(dataset.train_images,
                           dataset.train_labels,
                           batch_size=batch_size,
                           nb_epoch=nb_epoch,
                           validation_data=(dataset.test_images, dataset.test_labels),
                           shuffle=True)
        # 使用实时数据提升
        else:
            # 定义数据生成器用于数据提升,其返回一个生成器对象datagen,datagen每被调用一
            # 次其生成一组数据(顺序生成),节省内存,其实就是python的数据生成器
            datagen = ImageDataGenerator(
                featurewise_center=False,  # 是否使输入数据去中心化(均值为0),
                samplewise_center=False,  # 是否使输入数据的每个样本均值为0
                featurewise_std_normalization=False,  # 是否数据标准化(输入数据除以数据集的标准差)
                samplewise_std_normalization=False,  # 是否将每个样本数据除以自身的标准差
                zca_whitening=False,  # 是否对输入数据施以ZCA白化
                rotation_range=20,  # 数据提升时图片随机转动的角度(范围为0~180)
                width_shift_range=0.2,  # 数据提升时图片水平偏移的幅度(单位为图片宽度的占比,0~1之间的浮点数)
                height_shift_range=0.2,  # 同上,只不过这里是垂直
                horizontal_flip=True,  # 是否进行随机水平翻转
                vertical_flip=False)  # 是否进行随机垂直翻转

            # 计算整个训练样本集的数量以用于特征值归一化、ZCA白化等处理
            datagen.fit(dataset.train_images)

            # 利用生成器开始训练模型
            self.model.fit_generator(datagen.flow(dataset.train_images, dataset.train_labels,
                                                  batch_size=batch_size),
                                     samples_per_epoch=dataset.train_images.shape[0],
                                     nb_epoch=nb_epoch,
                                     validation_data=(dataset.test_images, dataset.test_labels))

    MODEL_PATH = './face.model.h5'

    def save_model(self, file_path=MODEL_PATH):
        self.model.save(file_path)

    def load_model(self, file_path=MODEL_PATH):
        self.model = load_model(file_path)

    def evaluate(self, dataset):
        score = self.model.evaluate(dataset.test_images, dataset.test_labels, verbose=1)
        # print("%s: %.2f%%" % (self.model.metrics_names[1], score[1] * 100))
        print(f'{self.model.metrics_names[1]}:{score[1] * 100}%')

    # 识别人脸
    def face_predict(self, image):
        # 依然是根据后端系统确定维度顺序
        if K.image_dim_ordering() == 'th' and image.shape != (1, 3, IMAGE_SIZE, IMAGE_SIZE):
            image = resize_image(image)  # 尺寸必须与训练集一致都应该是IMAGE_SIZE x IMAGE_SIZE
            image = image.reshape((1, 3, IMAGE_SIZE, IMAGE_SIZE))  # 与模型训练不同,这次只是针对1张图片进行预测
        elif K.image_dim_ordering() == 'tf' and image.shape != (1, IMAGE_SIZE, IMAGE_SIZE, 3):
            image = resize_image(image)
            image = image.reshape((1, IMAGE_SIZE, IMAGE_SIZE, 3))

            # 浮点并归一化
        image = image.astype('float32')
        image /= 255.0

        # 给出输入属于各个类别的概率,我们是二值类别,则该函数会给出输入图像属于0和1的概率各为多少
        result = self.model.predict_proba(image)
        print('result:', result)

        # 给出类别预测:0或者1
        result = self.model.predict_classes(image)

        # 返回类别预测结果
        return result[0]


if __name__ == '__main__':
    dataset = Dataset('./data/')
    dataset.load()

    # 训练模型,这段代码不用,注释掉
    model = Model()
    model.build_model(dataset)
    # 测试训练函数的代码
    model.train(dataset)
    model.save_model(file_path='./model/me.face.model.h5')
    # 评估模型
    # model = Model()
    # model.load_model(file_path='./model/me.face.model.h5')
    # model.evaluate(dataset)




在上面的一段代码里,加载完数据后我首先是用scikit-learn将数据集划分为训练集(用于训练模型)和测试集(用于评估训练好的模型的效果),scikit-learn是一个基于Python的传统机器学习库,能和Numpy交互使用,这里用其中的train_test_split函数,把数据集按70%/30%的比例划分为训练集和测试集,需要注意的是这个函数默认会把数据集随机打散,这样训练集和测试集的数据分布就更加相近。划分好数据集以后还要考虑一个Keras后端所遵循的图片数据格式的问题,当Keras后端引擎是Tensorflow时,后端的image_data_format属性是channel_last,也就是说图片数据的维度格式是(rows, cols, channels),如果后端引擎是Theano的话,image_data_format属性是channel_first,图片数据的维度格式是(channels, rows, cols),因此,为了使程序更健壮,我们要通过判断image_data_format属性的值来调整图片数据集的维度顺序。

第五步:测试

新建findme.py对此工程的功能进行测试

#!/usr/bin/env python
# -*- coding: utf-8 -*-
__author__ = 'Seven'

import cv2
from face_train import Model

if __name__ == '__main__':
    # 加载模型
    model = Model()
    model.load_model(file_path='./model/me.face.model.h5')

    # 框住人脸的矩形边框颜色
    color = (0, 255, 0)

    # 捕获指定摄像头的实时视频流
    camera = cv2.VideoCapture(0)

    # 人脸识别分类器本地存储路径
    cascade_path = "/anaconda3/share/OpenCV/haarcascades/haarcascade_frontalface_alt2.xml"

    # 循环检测识别人脸
    while True:
        ret, frame = camera.read()  # 读取一帧视频

        # 图像灰化,降低计算复杂度
        gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)

        # 使用人脸识别分类器,读入分类器
        cascade = cv2.CascadeClassifier(cascade_path)

        # 利用分类器识别出哪个区域为人脸
        faces = cascade.detectMultiScale(gray, 1.1, 5)
        if len(faces) > 0:
            for (x, y, w, h) in faces:
                # 截取脸部图像提交给模型识别这是谁
                image = frame[y: y + h, x: x + w]
                faceID = model.face_predict(image)

                # 如果是“我”
                if faceID == 0:
                    cv2.rectangle(frame, (x, y), (x + w, y + h), color, thickness=2)

                    # 文字提示是谁
                    cv2.putText(frame, 'me',
                                (x + 30, y + 30),  # 坐标
                                cv2.FONT_HERSHEY_SIMPLEX,  # 字体
                                1,  # 字号
                                (255, 0, 255),  # 颜色
                                2)  # 字的线宽
                else:
                    cv2.rectangle(frame, (x, y), (x + w, y + h), color, thickness=2)

                    # 文字提示是谁
                    cv2.putText(frame, 'others',
                                (x + 30, y + 30),  # 坐标
                                cv2.FONT_HERSHEY_SIMPLEX,  # 字体
                                1,  # 字号
                                (255, 0, 255),  # 颜色
                                2)

        cv2.imshow("camera", frame)

        # 等待1毫秒看是否有按键输入
        k = cv2.waitKey(1)
        # 如果输入q则退出循环
        if k & 0xFF == ord('q'):
            break

    # 释放摄像头并销毁所有窗口
    camera.release()
    cv2.destroyAllWindows()

源码下载地址:Python+Opencv+Keras实现人脸识别_keras人脸识别,keras人脸识别-深度学习文档类资源-CSDN下载

  • 23
    点赞
  • 174
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 88
    评论
### 回答1: 实时人脸表情识别是一种基于人工智能和计算机视觉的技术,结合Python编程语言进行毕业设计的主题。该项目旨在实现人脸表情的实时识别和分类,通过分析和判断人脸表情的变化,进而实现情感识别和情感分析。 首先,为了实现实时人脸表情识别,我们需要采集一组包含不同表情的人脸图像数据集。此数据集可以通过网络资源、开源数据集或自己采集得到。接下来,我们使用Python中的图像处理库OpenCV来获取实时视频流,并使用面部检测算法定位和提取视频流中的人脸。 然后,我们需要使用深度学习方法来训练一个人脸表情分类器。可以使用所采集到的人脸图像数据集,使用Python中的深度学习框架如TensorFlow或PyTorch来构建一个卷积神经网络(CNN)模型。该模型将接受人脸图像作为输入,经过多个卷积层和池化层进行特征提取,并使用全连接层进行分类预测。 在训练好的模型基础上,我们可以将其应用于实时人脸表情识别。通过将每一帧的人脸图像传入该模型,可以获取到实时的人脸表情分类结果。可以根据分类结果,判断人脸表情是开心、生气、惊讶等不同的情绪。 最后,为了更好地展示实时人脸表情识别的效果,我们可以将识别结果通过图像或视频的方式展示出来,比如将分类结果添加在人脸图像上方,或者在视频中不同表情时变换特定符号或贴图。 总结来说,实时人脸表情识别的毕业设计将采用Python编程语言,结合图像处理库和深度学习框架,通过建立和训练卷积神经网络模型,实现对实时人脸表情的识别和分类,并将识别结果进行展示。该项目对于理解和实践人工智能、计算机视觉和深度学习等相关领域的知识具有重要意义。 ### 回答2: 实时人脸表情识别是一种使用计算机视觉技术来检测和识别人脸表情的方法。而使用Python语言进行实时人脸表情识别的毕业设计,可以通过以下步骤来完成: 1. 数据集准备:首先需要准备一个包含多种表情的人脸图像数据集。可以使用公开的人脸表情数据集,如FER2013、CK+等,或者自己构建数据集。 2. 数据预处理:对数据集进行预处理,包括将图像进行裁剪和缩放,使其符合模型输入的要求。还可以使用数据增强技术来扩充数据集,以提高模型的泛化能力。 3. 特征提取:利用深度学习模型,如卷积神经网络(CNN),来提取人脸图像的特征。可以使用已经预训练好的CNN模型,如VGGNet、ResNet等,也可以根据具体需求自己搭建模型。 4. 模型训练:使用提取到的特征作为输入,利用训练集进行模型的训练。可以使用Python的深度学习库,如Tensorflow、Keras等,来搭建和训练模型。在训练过程中,可以使用交叉验证等技术来评估模型的性能。 5. 模型验证:使用测试集对训练好的模型进行验证,评估其在实时人脸表情识别任务上的性能。可以计算模型的准确率、召回率等评价指标,或者通过混淆矩阵来分析不同表情类别的识别结果。 6. 实时表情识别:将训练好的模型应用到实时视频流中,进行人脸表情的实时识别。可以使用Python的图像处理和视频处理库来实现这一步骤,如OpenCV、Dlib等。通过实时检测人脸区域,并对每个人脸区域进行表情分类。 7. 界面设计和优化:将实时人脸表情识别算法与用户界面结合,可以使用Python的GUI库,如Tkinter等,设计一个友好的界面,使用户可以方便地进行实时人脸表情的测试和观察。 通过以上步骤的实现,我们可以完成一个基于Python的实时人脸表情识别系统。该系统可以用于情感分析、人机交互等领域,具有一定的实际应用价值。 ### 回答3: 实时人脸表情识别是一种通过使用Python编程语言开发的技术,用于实时检测和识别人脸表情。它可以分析人脸上的特征,并根据这些特征识别出人脸表情的种类,例如开心、悲伤、惊讶等。 实时人脸表情识别的毕业设计主要包括以下几个步骤: 1. 数据集准备:首先,需要准备一份包含人脸表情样本的数据集。可以通过收集照片、视频或者使用现有的数据集来构建。 2. 数据预处理:对数据进行预处理是非常重要的一步。可以使用Python图像处理库如OpenCV对图像进行裁剪、缩放和灰度化等处理,以提升后续的算法准确度。 3. 特征提取:接下来,使用Python中常用的机器学习库,如Scikit-learn或Tensorflow等,进行特征提取。可以使用基于人脸的特征提取算法,例如局部二值模式(Local Binary Patterns,LBP)或主成分分析(Principal Component Analysis,PCA),来提取人脸表情的特征。 4. 训练模型:使用已经提取的特征,建立分类器模型。可以使用各种机器学习算法,例如支持向量机(Support Vector Machine,SVM)或卷积神经网络(Convolutional Neural Network,CNN),对数据集进行训练,以使模型能够准确地识别人脸表情。 5. 实时检测和识别:最后,使用摄像头采集实时视频流,并对每一帧图像进行处理和分析,以实现人脸表情的实时检测和识别。可以使用Python库如Dlib或OpenCV中的人脸检测器和分类器,对视频流中的人脸进行定位和分类。 总结来说,实时人脸表情识别的毕业设计将通过预处理、特征提取、模型训练和实时检测等步骤,利用Python编程语言实现人脸表情的实时检测和识别。这项技术可以应用于许多领域,例如情感分析、人机交互等,具有广泛的应用前景。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

_Seven°

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

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

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

打赏作者

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

抵扣说明:

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

余额充值