【问题标题】:Emotion Recognition Dataset creation情感识别数据集创建
【发布时间】:2020-01-16 22:20:18
【问题描述】:

我想创建一个类似于 fer2013 的情绪识别数据集。但是,我找不到任何关于它的教程。

到目前为止,我尝试过这个。 首先,我用notepad++打开了fer2013数据集,看了看。 它有这样的东西。 情感,像素,用法 0,70 80 82 72 58 58 48 ... 106 109 82,培训

现在,我使用了 opencv 并做到了这一点。

import cv2
import numpy as np

face_cascade = cv2.CascadeClassifier(cv2.data.haarcascades + 
'haarcascade_frontalface_default.xml')

img = cv2.imread('self-download.jpg')
grayscale = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

faces = face_cascade.detectMultiScale(grayscale, 1.3, 5)
for (x,y,w,h) in faces:
    cv2.rectangle(grayscale, (x,y), (x+w,y+h), (0, 0, 255), 2)
    roi_gray = grayscale[y:y+h, x:x+w]
    cv2.imshow('output', roi_gray)
arr = np.array(roi_gray)

np.savetxt('grayscale', arr)
cv2.waitKey(0)
cv2.destroyAllWindows()

我给了我一大堆像素,通过比较我可以看出这不是正确的过程。

【问题讨论】:

  • 您只保存最后一张面孔,您应该为所有面孔创建列表并添加其他信息。并将所有面调整为相同大小。 fer2013 的所有图像都是 48x48。
  • 您应该重塑数组以创建扁平数组arr = arr.flatten()arr = arr.reshape(arr.size),然后在文件中的一行中获取所有像素。
  • savetxt('grayscale', arr, frm="%i") 中使用frm="%i",您可以像在fer2013 中一样将像素保存为整数值

标签: python opencv


【解决方案1】:

为了保留所有信息,我将使用普通列表,稍后我将使用模块 csv 保存它

data = []

图像需要被展平并最终调整大小以减少像素

roi_gray = grayscale[y:y+h, x:x+w]
roi_gray = cv2.resize(roi_gray, (24, 24))
roi_gray = roi_gray.flatten()

我还将像素转换为数字用空格分隔的字符串

pixels_str = ' '.join(str(x) for x in roi_gray)

现在我可以用数据创建行了

row = [0, pixels_str, 'Training']

并将行追加到所有数据

data.append(row)

之后我可以轻松保存它

with open('grayscale.csv', 'w') as f:
    csvwriter = csv.writer(f)
    csvwriter.writerow(['emotion', 'pixels', 'Usage'])
    csvwriter.writerows(data)

import cv2
import csv

face_cascade = cv2.CascadeClassifier(cv2.data.haarcascades + 'haarcascade_frontalface_default.xml')

img = cv2.imread('self-download.jpg')
grayscale = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

data = []

faces = face_cascade.detectMultiScale(grayscale, 1.3, 5)
for (x,y,w,h) in faces:
    roi_gray = grayscale[y:y+h, x:x+w]
    roi_gray = cv2.resize(roi_gray, (24, 24))
    roi_gray = roi_gray.flatten()
    pixels_str = ' '.join(str(x) for x in roi_gray)
    row = [0, pixels_str, 'Training']
    data.append(row)

with open('grayscale', 'w') as f:
    csvwriter = csv.writer(f)
    csvwriter.writerow(['emotion', 'pixels', 'Usage'])
    csvwriter.writerows(data)

【讨论】:

  • 它需要在 emotion (0...6) 和 Usage ("Training", "PublicTest") 列中使用不同的值
猜你喜欢
  • 2013-11-13
  • 2018-10-31
  • 2015-05-24
  • 2012-06-16
  • 1970-01-01
  • 2020-09-01
  • 2023-04-10
  • 2020-07-29
  • 2020-08-08
相关资源
最近更新 更多