Reconhecimento de expressão facial de combate de aprendizagem profunda [código fonte + modelo + interface PyQt5]

Insira a descrição da imagem aqui

Reconhecimento de expressão facial por IA


histórico e significado da pesquisa

  O reconhecimento de expressões faciais é uma importante direção de pesquisa no campo da visão computacional, que envolve a compreensão dos estados emocionais das pessoas por meio da análise de expressões faciais em imagens faciais. Esta tecnologia tem amplo histórico de pesquisa e significado de aplicação prática:

Contexto da pesquisa:

  1. Fundamentos da Psicologia: As emoções humanas são transmitidas e compreendidas por meio de expressões faciais. O modelo básico de emoções proposto por pesquisadores como Paul Ekman contém seis expressões básicas (felicidade, raiva, medo, tristeza, surpresa, desgosto), que fornecem uma base teórica básica para a pesquisa de reconhecimento de expressões faciais.

  2. Interação social: Nas interações entre pessoas, a transmissão e compreensão das emoções é muito importante. O reconhecimento de expressões faciais pode ser usado para melhorar a experiência de interação entre computadores e humanos, por exemplo, identificando o estado emocional do usuário para ajustar de forma adaptativa o comportamento do sistema.

  3. Entretenimento e jogos: No campo do entretenimento e jogos, o reconhecimento de expressões faciais pode ser utilizado para criar personagens virtuais mais realistas, permitindo-lhes responder de acordo com o estado emocional do jogador, potencializando a imersão do jogo.

Significado e aplicações da pesquisa:

  1. Análise emocional: A tecnologia de reconhecimento de expressões faciais pode ser aplicada à análise emocional para ajudar a analisar os estados emocionais das pessoas em situações específicas. Isto é de grande valor em áreas como pesquisa de mercado e avaliação de publicidade.

  2. Saúde mental: O reconhecimento de expressões faciais pode auxiliar na área da saúde mental, ajudar a identificar sinais de depressão, ansiedade e outros distúrbios emocionais e fornecer referência para diagnóstico clínico.

  3. Melhoria da experiência do usuário: Na interação humano-computador, ao analisar as expressões faciais do usuário, o sistema pode compreender o estado emocional do usuário em tempo real, ajustando assim o design da interface, o conteúdo recomendado, etc., para proporcionar uma melhor experiência ao usuário.

  4. Realidade virtual e realidade aumentada: Em aplicativos de realidade virtual e realidade aumentada, o reconhecimento de expressões faciais pode fazer com que personagens virtuais simulem de forma mais realista expressões emocionais reais e melhorem a imersão.

  5. Segurança e vigilância: A tecnologia de reconhecimento de expressões faciais pode ser aplicada no campo da segurança para ajudar a detectar mudanças emocionais das pessoas em imagens de vigilância, detectando assim ameaças potenciais ou comportamentos anormais precocemente.

Em suma, o reconhecimento de expressões faciais, como um campo abrangente de pesquisa e aplicação, tem uma base teórica profunda e uma ampla gama de aplicações práticas. É importante para melhorar a interação humano-computador, promover a análise emocional e melhorar a experiência de realidade virtual. .


Amigos que acham bom, obrigado por curtirem, seguirem e adicionarem aos seus favoritos! Conteúdo mais útil será atualizado continuamente...

Link para download do código

Siga o GZH do blogueiro [ Little Bee Vision ] e responda [ Emotion Recognition ] para obter o método de download

  Se você deseja obter todos os arquivos de programa completos (incluindo imagens de teste, vídeos de teste, arquivos py, arquivos de peso do modelo, instruções de depuração, etc.) envolvidos na postagem do blog, aquisição de código e orientação técnica, consulte o blog e o vídeo para obter detalhes. Todos os arquivos foram Os arquivos envolvidos são empacotados ao mesmo tempo. Existem instruções específicas para instalação e depuração do software. Temos técnicos de depuração profissionais que ajudarão remotamente os clientes na depuração. Consulte os detalhes安装调试说明.txt . Uma captura de tela do arquivo completo é o seguinte:

Insira a descrição da imagem aqui

1. Demonstração de efeito

  O sistema de reconhecimento de expressão facial AI construído neste artigo suporta três entradas de imagem: imagem, vídeo e câmera.

1.1 Reconhecimento de imagem

Insira a descrição da imagem aqui

1.2 Reconhecimento de vídeo

Insira a descrição da imagem aqui

1.3 Identificação da Câmera

Insira a descrição da imagem aqui

2. Princípios técnicos

2.1 Processo técnico geral

  O processo geral do sistema de reconhecimento de expressões faciais geralmente pode ser dividido nas seguintes etapas: detecção de rosto (posicionamento), extração de características, construção de classificador e classificação de emoções. Aqui está um breve processo:

  1. Detecção de rosto (posicionamento): O objetivo desta etapa é localizar o rosto na imagem. Os métodos de detecção de rosto comumente usados ​​incluem métodos baseados em recursos (como recursos Haar, recursos HOG) e métodos baseados em aprendizado profundo (como redes neurais convolucionais). Uma vez detectada a posição da face, a área da face pode ser extraída para processamento posterior.

  2. Extração de características: Extração de características relacionadas à expressão de imagens faciais, geralmente usando diversas técnicas de processamento de imagem e visão computacional. Os métodos de extração de recursos comumente usados ​​incluem padrão binário local (LBP), histograma de gradientes (HOG), pontos-chave da face, etc. Esses recursos podem capturar a textura e as informações estruturais do rosto humano e ajudar a distinguir diferentes expressões.

  3. Construção do classificador: Após a extração de recursos, um classificador precisa ser construído para mapear os recursos extraídos para diferentes categorias de expressão. Nesta etapa, você mencionou a construção de um classificador VGG. VGG é uma estrutura de rede neural convolucional clássica adequada para tarefas de classificação de imagens. Você pode inserir os recursos extraídos na rede VGG e obter um classificador adequado para classificação de expressões após o treinamento.

  4. Classificação de emoções: após a construção do classificador, ele é aplicado a novas imagens de rostos. Esta etapa envolve alimentar novos dados de imagem em um classificador, que então gera categorias de emoções previstas. De modo geral, cada categoria de emoção corresponde a uma expressão facial específica, como felicidade, raiva, tristeza, etc.

2.2 Sete expressões faciais comuns

Insira a descrição da imagem aqui
  Quando se trata de reconhecimento de expressões faciais, essas palavras são frequentemente usadas para descrever diferentes categorias de emoções, cada uma das quais corresponde a uma característica de expressão diferente no rosto humano. Aqui está uma breve introdução a cada categoria de emoção:

  1. Surpresa: A surpresa é uma experiência emocional repentina e inesperada, geralmente causada por algo surpreendente. Uma expressão de surpresa no rosto humano geralmente é caracterizada por olhos arregalados, sobrancelhas levantadas e boca aberta.

  2. Medo: O medo é uma reação a uma possível ameaça, perigo ou situação insegura. Uma expressão de medo em um rosto humano pode incluir olhos fechados, sobrancelhas franzidas e boca ligeiramente aberta.

  3. Nojo: Nojo é uma forte aversão a algo nojento ou nojento. A expressão de nojo no rosto humano geralmente é caracterizada por nariz enrugado, olhos fechados e boca ligeiramente curvada.

  4. Feliz: Feliz é um estado emocional de prazer e alegria. Expressões faciais felizes geralmente incluem olhos estreitados em uma linha e boca curvada para cima, possivelmente acompanhada de risadas.

  5. Tristeza: Tristeza é uma experiência emocional causada por perda, tristeza ou decepção. Expressões tristes em rostos humanos geralmente incluem olhos caídos, cantos da boca voltados para baixo e a expressão geral parece deprimida.

  6. Irritado: A raiva é uma forte resposta emocional à injustiça, conflito ou dano. Expressões de raiva em um rosto humano podem incluir sobrancelhas franzidas, lábios franzidos e possível tensão.

  7. Neutro: Estado emocional normal refere-se a um estado sem expressão emocional óbvia, também conhecido como emoção neutra. Nesse caso, o rosto geralmente apresenta uma expressão calma e não emocional.

2.3 Posicionamento facial tradicional

# encoding:utf-8
import cv2
import numpy as np



# 通过numpy读取中文路径图像
def image_read_from_chinese_path(image_file_name):
    image_numpy_data = cv2.imdecode(np.fromfile(image_file_name, dtype=np.uint8), 1)
    #返回numpy的ndarray
    return image_numpy_data


# 运行之前,检查cascade文件路径是否在相应的目录下
face_cascade = cv2.CascadeClassifier('model/haarcascade_frontalface_default.xml')
eye_cascade = cv2.CascadeClassifier('model/haarcascade_eye.xml')

# 读取图像
img = image_read_from_chinese_path('./images/test2.jpg')
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)  # 转为灰度图


# 检测脸部
faces = face_cascade.detectMultiScale(gray,
                            scaleFactor=1.1,
                            minNeighbors=5,
                            minSize=(100, 100),
                            flags=cv2.CASCADE_SCALE_IMAGE)


# 标记位置
for (x, y, w, h) in faces:
    img = cv2.rectangle(img, (x, y), (x + w, y + h), (255, 0, 0), 2)

    roi_gray = gray[y: y + h, x: x + w]
    roi_color = img[y: y + h, x: x + w]

    eyes = eye_cascade.detectMultiScale(roi_gray)
    for (ex, ey, ew, eh) in eyes:
        cv2.rectangle(roi_color, (ex, ey), (ex + ew, ey + eh), (0, 0, 255), 2)


label = f'OpenCV  Haar Detected {
      
      str(len(faces))} faces'
cv2.putText(img, label, (10, 20), cv2.FONT_HERSHEY_SIMPLEX, 0.8, (0, 255, 0), 1)

cv2.imshow('img', img)
cv2.waitKey(0)
cv2.destroyAllWindows()

  Se os novos alunos não sabem como configurar o ambiente, você pode consultar o blogger [ Tutorial de instalação e configuração do Anaconda3 e PyCharm Nanny ]

  Entre eles, a função function image_read_from_chinese_pathé principalmente uma solução para o problema de que cv2 não consegue ler imagens de caminhos chineses. Para obter detalhes, você pode consultar o artigo escrito pelo blogueiro [ opencv-python[cv2] lê imagens de caminhos chineses ]

2.4 Posicionamento facial de aprendizagem profunda

  O processo geral do algoritmo de posicionamento facial de aprendizagem profunda inclui: primeiro pré-processar a imagem de entrada, incluindo dimensionamento, corte e outras operações, depois usar uma rede neural convolucional (CNN) para extrair recursos e, em seguida, usar um regressor ou classificador para executar o obtido recursos Analisar e finalmente gerar a posição e o tamanho do rosto.

2.4.1 MTCNN

  MTCNN (Rede Convolucional em Cascata Multitarefa) é uma rede convolucional em cascata multitarefa proposta pela Academia Chinesa de Ciências. Ela pode executar simultaneamente tarefas como detecção de rosto, posicionamento de pontos-chave e estimativa de postura. Possui alta precisão e velocidade rápida. e tem as vantagens de poder lidar com faces em múltiplas escalas.

  Para obter instruções específicas e implementação de código, consulte o tutorial escrito pelo blogueiro MTCNN Face Detection Algorithm Implementation (Python)

2.4.2 RetinaFace

  RetinaFace é um algoritmo de detecção de rosto e posicionamento de pontos-chave mais preciso proposto pela City University de Hong Kong, China. Ele usa uma rede convolucional deformável (Rede Convolucional Deformável) para obter um posicionamento mais preciso. RetinaFace é especialmente adequado para localização pequena de rostos em escala.

2.4.3 Face Central

  CenterFace é um algoritmo leve de detecção de rosto e posicionamento de pontos-chave proposto pela Huawei. O algoritmo requer apenas um tamanho de modelo de 1,5 MB e pode ser executado em tempo real no terminal móvel. CenterFace usa o modelo Hourglass e Feature Pyramid Network (Feature Pyramid Network) ) para obter um posicionamento facial de alta precisão.

2.4.4 Blaze Face

  BlazeFace é um algoritmo de detecção facial extremamente leve proposto pelo Google. Seu tamanho de modelo é de apenas 2 MB e pode ser executado em tempo real no terminal móvel. BlazeFace adota um método inovador de detecção sem âncora, que pode atingir velocidades mais rápidas. Posicionamento facial.

2.4.5 YOLO

  YOLO é um algoritmo de detecção de alvos em tempo real ponta a ponta que pode detectar e localizar vários alvos simultaneamente. Como o YOLO pode dividir a imagem inteira em grades e prever a classe e a caixa delimitadora do objeto em cada grade, ele geralmente é mais rápido do que outros algoritmos de detecção de objetos baseados em região.

2.4.6 SSD

  SSD é um algoritmo de detecção de alvo de etapa única baseado em rede neural convolucional, que pode detectar vários alvos em uma passagem direta. Comparado com algoritmos de detecção baseados em região, como Faster R-CNN, o SSD é mais simples e eficiente.

2.4.7 CascataCNN

  CascadeCNN é uma rede neural convolucional em cascata proposta pela Microsoft Research Asia, que pode reduzir significativamente o tamanho da rede e a quantidade de cálculo sem sacrificar o desempenho. A estrutura do CascadeCNN é composta por vários estágios em cascata, cada estágio contém múltiplas camadas convolucionais em cascata e camadas de pooling, que podem efetivamente melhorar a precisão e estabilidade do posicionamento facial.

2.5 Classificação da expressão facial

2.5.1 Introdução ao conjunto de dados RAF-DB

  RAF-DB, o nome completo de Real-world Affective Faces, é um conjunto de dados de expressões faciais em grande escala. O conjunto de dados consiste em 29.672 imagens faciais diversas com expressões básicas ou compostas anotadas por 40 anotadores.

  Além disso, cada imagem também inclui 5 locais de pontos de referência precisos, 37 locais de pontos de referência automáticos, caixa delimitadora, raça, faixa etária e anotações de atributos de gênero.

  Os rostos das imagens neste conjunto de dados são extremamente diversos em termos de idade, sexo e etnia, pose da cabeça, condições de iluminação, oclusões (como óculos, pêlos faciais ou autooclusão), operações de pós-processamento (como vários filtros e filtros especiais). efeitos), etc. Grande diferença.

2.5.2 Introdução ao conjunto de dados FER2013

  O nome completo do FER2013 é Conjunto de dados de reconhecimento de expressão facial 2013, que contém cerca de 30.000 imagens RGB faciais de diferentes expressões, e o tamanho da imagem é 48×48 pixels.

  As principais anotações neste conjunto de dados podem ser divididas em 7 tipos: 0 = Zangado, 1 = Nojo, 2 = Medo, 3 = Feliz, 4 = Triste, 5 = Surpreso, 6 = Neutro. Entre eles, a expressão de nojo tem o menor número de imagens, apenas 600, enquanto cada um dos outros tipos tem quase 5 mil amostras.
FER2013默认提供的csv格式文件,如下代码是csv转png图像的python脚本

import numpy as np
import pandas as pd 
from PIL import Image
from tqdm import tqdm
import os

# convert string to integer
def atoi(s):
    n = 0
    for i in s:
        n = n*10 + ord(i) - ord("0")
    return n

# making folders
outer_names = ['test','train']
inner_names = ['angry', 'disgusted', 'fearful', 'happy', 'sad', 'surprised', 'neutral']
os.makedirs('data', exist_ok=True)
for outer_name in outer_names:
    os.makedirs(os.path.join('data',outer_name), exist_ok=True)
    for inner_name in inner_names:
        os.makedirs(os.path.join('data',outer_name,inner_name), exist_ok=True)

# to keep count of each category
angry = 0
disgusted = 0
fearful = 0
happy = 0
sad = 0
surprised = 0
neutral = 0
angry_test = 0
disgusted_test = 0
fearful_test = 0
happy_test = 0
sad_test = 0
surprised_test = 0
neutral_test = 0

df = pd.read_csv('./fer2013.csv')
mat = np.zeros((48,48),dtype=np.uint8)
print("Saving images...")

# read the csv file line by line
for i in tqdm(range(len(df))):
    txt = df['pixels'][i]
    words = txt.split()
    
    # the image size is 48x48
    for j in range(2304):
        xind = j // 48
        yind = j % 48
        mat[xind][yind] = atoi(words[j])

    img = Image.fromarray(mat)

    # train
    if i < 28709:
        if df['emotion'][i] == 0:
            img.save('data/train/angry/im'+str(angry)+'.png')
            angry += 1
        elif df['emotion'][i] == 1:
            img.save('data/train/disgusted/im'+str(disgusted)+'.png')
            disgusted += 1
        elif df['emotion'][i] == 2:
            img.save('data/train/fearful/im'+str(fearful)+'.png')
            fearful += 1
        elif df['emotion'][i] == 3:
            img.save('data/train/happy/im'+str(happy)+'.png')
            happy += 1
        elif df['emotion'][i] == 4:
            img.save('data/train/sad/im'+str(sad)+'.png')
            sad += 1
        elif df['emotion'][i] == 5:
            img.save('data/train/surprised/im'+str(surprised)+'.png')
            surprised += 1
        elif df['emotion'][i] == 6:
            img.save('data/train/neutral/im'+str(neutral)+'.png')
            neutral += 1

    # test
    else:
        if df['emotion'][i] == 0:
            img.save('data/test/angry/im'+str(angry_test)+'.png')
            angry_test += 1
        elif df['emotion'][i] == 1:
            img.save('data/test/disgusted/im'+str(disgusted_test)+'.png')
            disgusted_test += 1
        elif df['emotion'][i] == 2:
            img.save('data/test/fearful/im'+str(fearful_test)+'.png')
            fearful_test += 1
        elif df['emotion'][i] == 3:
            img.save('data/test/happy/im'+str(happy_test)+'.png')
            happy_test += 1
        elif df['emotion'][i] == 4:
            img.save('data/test/sad/im'+str(sad_test)+'.png')
            sad_test += 1
        elif df['emotion'][i] == 5:
            img.save('data/test/surprised/im'+str(surprised_test)+'.png')
            surprised_test += 1
        elif df['emotion'][i] == 6:
            img.save('data/test/neutral/im'+str(neutral_test)+'.png')
            neutral_test += 1

print("Done!")

2.5.3 classificação de expressão facial vgg-16

  VGG-16 (Visual Geometry Group 16) é uma arquitetura de rede neural convolucional profunda desenvolvida pelo Visual Geometry Group da Universidade de Oxford. O VGG-16 obteve grande sucesso na competição de classificação de imagens ImageNet em 2014, estabelecendo uma base importante para o aprendizado profundo no campo da classificação de imagens.

Estrutura de rede:
  VGG-16 consiste em 16 camadas convolucionais e 3 camadas totalmente conectadas, onde 16 indica que a rede possui um total de 16 camadas convolucionais. A característica desta estrutura é que núcleos de convolução 3x3 menores são continuamente empilhados para aumentar a profundidade da rede. Desta forma, a rede VGG-16 atinge uma rede neural convolucional mais profunda do que as anteriores, permitindo-lhe aprender melhor as características das imagens.

Configuração da camada convolucional:
  A configuração da camada convolucional do VGG-16 pode ser dividida em vários estágios, onde cada estágio consiste em uma ou mais camadas convolucionais seguidas por uma camada de pooling para reduzir o tamanho do mapa de características. A última parte da rede consiste em três camadas totalmente conectadas que mapeiam recursos convolucionais para previsões de diferentes categorias.

Características:

  1. Kernel de convolução pequeno: VGG-16 usa um kernel de convolução 3x3 de tamanho pequeno, que pode aumentar a profundidade da rede e ajudar a capturar recursos de diferentes escalas.

  2. Arquitetura relativamente simples: A arquitetura do VGG-16 é relativamente simples, usando apenas camadas de convolução e pooling e nenhum módulo complexo de estrutura de rede, o que torna a compreensão e implementação da rede relativamente fácil.

  3. Camadas convolucionais empilhadas: o VGG-16 fornece camadas mais profundas à rede, empilhando camadas convolucionais várias vezes, o que ajuda a aprender recursos de imagem mais complexos.

def vgg16(input_shape, num_classes, weights_path=None, pooling='avg'):
    # 构造VGG16模型
    model = Sequential()

    # Block 1
    model.add(Conv2D(64, (3, 3), activation='relu', padding='same', name='block1_conv1', input_shape=input_shape))
    model.add(Conv2D(64, (3, 3), activation='relu', padding='same', name='block1_conv2'))
    # model.add(BatchNormalization(name='bn_1'))
    model.add(MaxPooling2D((2, 2), strides=(2, 2), name='block1_pool'))

    # Block 2
    model.add(Conv2D(128, (3, 3), activation='relu', padding='same', name='block2_conv1'))
    model.add(Conv2D(128, (3, 3), activation='relu', padding='same', name='block2_conv2'))
    # model.add(BatchNormalization(name='bn_2'))
    model.add(MaxPooling2D((2, 2), strides=(2, 2), name='block2_pool'))

    # Block 3
    model.add(Conv2D(256, (3, 3), activation='relu', padding='same', name='block3_conv1'))
    model.add(Conv2D(256, (3, 3), activation='relu', padding='same', name='block3_conv2'))
    model.add(Conv2D(256, (3, 3), activation='relu', padding='same', name='block3_conv3'))
    # model.add(BatchNormalization(name='bn_3'))
    model.add(MaxPooling2D((2, 2), strides=(2, 2), name='block3_pool'))

    # Block 4
    model.add(Conv2D(512, (3, 3), activation='relu', padding='same', name='block4_conv1'))
    model.add(Conv2D(512, (3, 3), activation='relu', padding='same', name='block4_conv2'))
    model.add(Conv2D(512, (3, 3), activation='relu', padding='same', name='block4_conv3'))
    # model.add(BatchNormalization(name='bn_4'))
    model.add(MaxPooling2D((2, 2), strides=(2, 2), name='block4_pool'))

    # Block 5
    model.add(Conv2D(512, (3, 3), activation='relu', padding='same', name='block5_conv1'))
    model.add(Conv2D(512, (3, 3), activation='relu', padding='same', name='block5_conv2'))
    model.add(Conv2D(512, (3, 3), activation='relu', padding='same', name='block5_conv3'))
    # model.add(BatchNormalization(name='bn_5'))
    model.add(MaxPooling2D((2, 2), strides=(2, 2), name='block5_pool'))

    if weights_path:
        model.load_weights(weights_path)

    out = model.get_layer('block5_pool').output

    if pooling is None:
        out = Flatten(name='flatten')(out)
        out = Dense(512, activation='relu', kernel_initializer='he_normal', name='fc')(out)
        out = Dropout(0.5)(out)
        # out = Dense(512, activation='relu', kernel_initializer='he_normal', name='fc2')(out)
        # out = Dropout(0.5)(out)
    elif pooling == 'avg':
        out = GlobalAveragePooling2D(name='global_avg_pool')(out)
    elif pooling == 'max':
        out = GlobalMaxPooling2D(name='global_max_pool')(out)

    out = Dense(num_classes, activation='softmax', kernel_initializer='he_normal', name='predict')(out)

    model = Model(model.input, out)

    return model

2.5.4 Treinamento do modelo de rede de classificação de expressões

from tensorflow.keras import optimizers
from tensorflow.keras.callbacks import CSVLogger, ModelCheckpoint, EarlyStopping, ReduceLROnPlateau
from tensorflow.keras.preprocessing.image import ImageDataGenerator
from tensorflow.contrib import lite
from nets.choose_net import choose_net
from utils.data_manager import DataManager
from utils.data_manager import split_raf_data
from utils.preprocessor import process_img
from utils.plot import plot_log, plot_emotion_matrix
from config.train_cfg import *
from .evaluate import evaluate

# data generator
data_generator = ImageDataGenerator(
    rotation_range=30, horizontal_flip=True,
    width_shift_range=0.1, height_shift_range=0.1,
    zoom_range=0.2, shear_range=0.1,
    channel_shift_range=0.5)
#  channel_shift_range=50,
emotion_model = choose_net(USE_EMOTION_MODEL, INPUT_SHAPE, EMOTION_NUM_CLS)
sgd = optimizers.SGD(lr=LEARNING_RATE, decay=LEARNING_RATE/BATCH_SIZE, momentum=0.9, nesterov=True)
emotion_model.compile(optimizer=sgd, loss='categorical_crossentropy', metrics=['accuracy'])

# callbacks
csv_logger = CSVLogger(EMOTION_LOG_NAME, append=False)
early_stop = EarlyStopping('val_loss', patience=PATIENCE)
reduce_lr = ReduceLROnPlateau('val_loss', factor=0.1, patience=int(PATIENCE/4), verbose=1)
# model_names = trained_models_path + '.{epoch:02d}-{val_acc:.2f}.hdf5'
model_checkpoint = ModelCheckpoint(EMOTION_MODEL_NAME, 'val_loss', verbose=1,
                                   save_weights_only=False, save_best_only=True)
callbacks = [model_checkpoint, csv_logger, reduce_lr, early_stop]

# loading dataset
data_loader = DataManager(USE_EMOTION_DATASET, image_size=INPUT_SHAPE[:2])
faces, emotions, usages = data_loader.get_data()
faces = process_img(faces)
num_samples, num_classes = emotions.shape
train_data, val_data = split_raf_data(faces, emotions, usages)
train_faces, train_emotions = train_data

# if os.path.exists(EMOTION_MODEL_NAME):
#     emotion_net = load_model(EMOTION_MODEL_NAME)

emotion_model.fit_generator(data_generator.flow(train_faces, train_emotions, BATCH_SIZE),
                            steps_per_epoch=len(train_faces) / BATCH_SIZE,epochs=EPOCHS,
                            verbose=1, callbacks=callbacks, validation_data=val_data)


if IS_CONVERT2TFLITE:
    converter = lite.TFLiteConverter.from_keras_model_file(EMOTION_MODEL_NAME)
    tflite_model = converter.convert()
    with open(TFLITE_NAME, "wb") as f:
        f.write(tflite_model)

truth, prediction, accuracy = \
        evaluate(USE_EMOTION_DATASET, INPUT_SHAPE, EMOTION_MODEL_NAME)
plot_log(EMOTION_LOG_NAME)
plot_emotion_matrix(USE_EMOTION_DATASET, USE_EMOTION_MODEL, truth, prediction, accuracy)

Insira a descrição da imagem aqui
Insira a descrição da imagem aqui

Amigos que acham bom, obrigado por curtirem, seguirem e adicionarem aos seus favoritos! Conteúdo mais útil será atualizado continuamente...

Link para download do código

Siga o GZH do blogueiro [ Little Bee Vision ] e responda [ Emotion Recognition ] para obter o método de download

referências

[1] Reconhecimento de expressão facial baseado na fusão de recursos multicamadas de rede convolucional leve. Shen Hao; Meng Qinghao; Liu Yinbo. Progress in Laser and Optoelectronics, 2021 [2] TP-FER: Reconhecimento tridimensional baseado em neural convolucional otimizado
método de reconhecimento de expressão facial de canal de rede. Gao Jingwen; Cai Yongxiang; He Zongyi. Computer Application Research, 2021 [
3] Método de reconhecimento de expressão facial baseado no aprimoramento de detalhes em múltiplas escalas. Tan Xiaohui; Li Zhaowei; Fan Yachun. Journal of Electronics and Information , 2019 [
4] Baseado no reconhecimento aprimorado de expressão facial de oclusão parcial com GAN. Wang Haiyong; Liang Hongzhu. Engenharia de Computação e Aplicação, 2020 [5]
Pesquisa sobre transferência de rede neural convolucional para reconhecimento de expressão facial. Zhai Yikui; Liu Jian. Processamento de sinal , 2018
[6] Conduzindo pesquisas sobre métodos de sistema de detecção de estado emocional negativo de funcionários. Ma Xingmin; Sun Wencai; Xu Yi; Zheng Pengyu. Journal of Jilin University (Information Science Edition), 2015 [7] Pesquisa sobre reconhecimento de expressões faciais com base em rede neural convolucional.
Shi Hao. Universidade de Nanchang, 2021
[8] Pesquisa sobre reconhecimento de expressão de oclusão com base em rede adversária generativa paralela. Sun Chao. Universidade de Jilin, 2020 [
9] Pesquisa sobre extração de características de expressão facial e algoritmo de reconhecimento baseado em rede de cápsula. Yao Yuqian. Universidade Jiaotong de Pequim, 2019
[10] Emoção profunda: reconhecimento de expressão facial usando rede convolucional atencional. Minaee Shervin;Minaei Mehdi;Abdolrashidi Amirali.Sensores, 2021
[11] Reconstrução de imagem facial parcialmente ocluída para classificação. Zou Min;You Mengbo;Akashi Takuya.IEEJ Transactions on Electrical and Electronic Engineering,2021
[12] E-FCNN para reconhecimento de pequenas expressões faciais. Jie Shao;Qiyu Cheng.Inteligência Aplicada,2020
[13] Redes de atenção regional para pose e oclusão Reconhecimento robusto de expressão facial… Wang Kai;;Peng Xiaojiang;;Yang Jianfei;;Meng Debin;;Qiao Yu.Transações IEEE no processamento de imagens: uma publicação da IEEE Signal Processing Society,2020
[14] Multiple Attention Network for Facial Expression Recognition. Gan Yanling;Chen Jingying;Yang Zongkai;Xu Luhui.Acesso IEEE,2020
[15] CNN siamesa de caminho duplo para classificação de imagens hiperespectrais com amostras de treinamento limitadas. Huang Lingbo;Chen Yushi.IEEE Geoscience and Remote Sensing Letters,2020
[16] Um novo método de reconhecimento inteligente de expressão facial usando rede neural convolucional aprimorada. Shi Min;Xu Lijun;Chen Xiang.IEEE Access,2020
[17] Rede neural convolucional profunda de vários caminhos conjunta com atenção de região saliente para reconhecimento de expressão facial. Siyue Xie;;Haifeng Hu;;Yongbo Wu.Pattern Recognition,2019
[18] Rede Neural Profunda Estendida para Reconhecimento de Emoções Faciais. Deepak Kumar Jain;;Pourya Shamsolmoali;;Paramjit Sehdev.Cartas de reconhecimento de padrões, 2019
[19] Redes Neurais Convolucionais Siamesas para Classificação de Cenas de Sensoriamento Remoto. Xuning Liu;Yong Zhou 0003;Jiaqi Zhao;Rui Yao;Bing Liu;Yi Zheng.IEEE Geociências e Cartas de Sensoriamento Remoto,2019

Acho que você gosta

Origin blog.csdn.net/weixin_40280870/article/details/132535350
Recomendado
Clasificación