机器学习项目实战(二) Emojify

机器学习项目实战系列   Emojify

目录

机器学习项目实战系列   Emojify

一、概述

 二、训练数据

1.导入相关包

2.初始化训练与验证生成器

3.构建卷积神经网络

4.编译训练模型

5.保存模型权重

6.使用OpenCV辅助来检测表情情绪

 



一、概述

Emojify对人的面部表情进行分类并将其映射为表情符号。我们将建立一个卷积神经网络来识别面部表情,然后将使用相应的表情符号或头像来映射这些情感。

使用的数据集为facial expression recognition(FER2013 dataset),对表情情绪进行了分类

  • 0:angry
  • 1:disgust
  • 2:feat
  • 3:happy
  • 4:sad
  • 5:surprise
  • 6:natural

Download Dataset: Facial Expression Recognition Dataset

Project Code Emoji Creator Project Source Code


 二、训练数据

1.导入相关包

import numpy as np
import cv2

from keras.emotion_models import Sequential
from keras.layers import Dense, Dropout, Flatten
from keras.layers import Conv2D
from keras.optimizers import Adam
from keras.layers import MaxPooling2D
from keras.preprocessing.image import ImageDataGenerator

2.初始化训练与验证生成器

train_dir = 'data/train'
val_dir = 'data/test'
train_datagen = ImageDataGenerator(rescale=1./255)
val_datagen = ImageDataGenerator(rescale=1./255)

train_generator = train_datagen.flow_from_directory(
        train_dir,
        target_size=(48,48),
        batch_size=64,
        color_mode="gray_framescale",
        class_mode='categorical')

validation_generator = val_datagen.flow_from_directory(
        val_dir,
        target_size=(48,48),
        batch_size=64,
        color_mode="gray_framescale",
        class_mode='categorical')

3.构建卷积神经网络

emotion_model = Sequential()

emotion_model.add(Conv2D(32, kernel_size=(3, 3), activation='relu', input_shape=(48,48,1)))
emotion_model.add(Conv2D(64, kernel_size=(3, 3), activation='relu'))
emotion_model.add(MaxPooling2D(pool_size=(2, 2)))
emotion_model.add(Dropout(0.25))

emotion_model.add(Conv2D(128, kernel_size=(3, 3), activation='relu'))
emotion_model.add(MaxPooling2D(pool_size=(2, 2)))
emotion_model.add(Conv2D(128, kernel_size=(3, 3), activation='relu'))
emotion_model.add(MaxPooling2D(pool_size=(2, 2)))
emotion_model.add(Dropout(0.25))

emotion_model.add(Flatten())
emotion_model.add(Dense(1024, activation='relu'))
emotion_model.add(Dropout(0.5))
emotion_model.add(Dense(7, activation='softmax'))

4.编译训练模型

emotion_model.compile(loss='categorical_crossentropy',optimizer=Adam(lr=0.0001, decay=1e-6),metrics=['accuracy'])

emotion_model_info = emotion_model.fit_generator(
        train_generator,
        steps_per_epoch=28709 // 64,
        epochs=50,
        validation_data=validation_generator,
        validation_steps=7178 // 64)

5.保存模型权重

emotion_model.save_weights('model.h5')

6.使用OpenCV辅助来检测表情情绪

cv2.ocl.setUseOpenCL(False)

emotion_dict = {0: "Angry", 1: "Disgusted", 2: "Fearful", 3: "Happy", 4: "Neutral", 5: "Sad", 6: "Surprised"}

cap = cv2.VideoCapture(0)
while True:
    ret, frame = cap.read()
    if not ret:
        break
    bounding_box = cv2.CascadeClassifier('/home/shivam/.local/lib/python3.6/site-packages/cv2/data/haarcascade_frontalface_default.xml')
    gray_frame = cv2.cvtColor(frame, cv2.COLOR_BGR2gray_frame)
    num_faces = bounding_box.detectMultiScale(gray_frame,scaleFactor=1.3, minNeighbors=5)

    for (x, y, w, h) in num_faces:
        cv2.rectangle(frame, (x, y-50), (x+w, y+h+10), (255, 0, 0), 2)
        roi_gray_frame = gray_frame[y:y + h, x:x + w]
        cropped_img = np.expand_dims(np.expand_dims(cv2.resize(roi_gray_frame, (48, 48)), -1), 0)
        emotion_prediction = emotion_model.predict(cropped_img)
        maxindex = int(np.argmax(emotion_prediction))
        cv2.putText(frame, emotion_dict[maxindex], (x+20, y-60), cv2.FONT_HERSHEY_SIMPLEX, 1, (255, 255, 255), 2, cv2.LINE_AA)

    cv2.imshow('Video', cv2.resize(frame,(1200,860),interpolation = cv2.INTER_CUBIC))
    if cv2.waitKey(1) & 0xFF == ord('q'):
cap.release()
cv2.destroyAllWindows()
    break

 

 

  • 7
    点赞
  • 35
    收藏
    觉得还不错? 一键收藏
  • 8
    评论
Kaggle是一个非常适合初学者去实操实战技能的网站,它提供了各种机器学习项目供用户参与。通过在Kaggle上完成项目,你可以评估自己的得分和排名,从而更清楚地了解自己的能力水平。此外,Kaggle还提供了许多项目的教程,可以帮助你学习各种操作并逐步熟悉机器学习的实践。在平时的学习中,我们更多地接触到的是理论知识,缺少实战的平台和项目练习。因此,通过在Kaggle上进行机器学习项目实战,你可以巩固自己的知识,并发现更多有用的技能。\[1\] 在Kaggle上,你可以找到各种机器学习项目,其中包括房价预测项目。在这个项目中,你可以使用各种机器学习算法来预测房价。例如,你可以使用sklearn库中的线性算法,它利用了BLAS算法库,具有高效率和性能优势。相比于集成算法,如GradientBoost等,线性算法的运行时间更短,例如在做CrossValidate和Lasso时只需要20秒左右,而集成算法需要约200~300秒左右。\[2\] 在进行机器学习项目实战时,你可以创建多个模型来进行比较和评估。常见的模型包括K近邻分类器(KNeighborsClassifier)、逻辑回归(LogisticRegression)、高斯朴素贝叶斯分类器(GaussianNB)、决策树分类器(DecisionTreeClassifier)、随机森林分类器(RandomForestClassifier)、梯度提升分类器(GradientBoostingClassifier)和支持向量机分类器(SVC)等。通过创建多个模型并进行比较,你可以找到最适合解决问题的模型。\[3\] #### 引用[.reference_title] - *1* *3* [机器学习实战——kaggle 泰坦尼克号生存预测——六种算法模型实现与比较](https://blog.csdn.net/yangshaojun1992/article/details/106314927)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down28v1,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [Kaggle机器学习实战总结](https://blog.csdn.net/BF02jgtRS00XKtCx/article/details/78937265)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down28v1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值