Введение

В этом мире каждый человек любит слушать музыку. у разных людей разный выбор музыки. И выбор отличается в зависимости от настроения людей. Некоторым нравится слушать Lofi в дождливый день, а другим нравится рэп. В нынешнюю эпоху развития технологий существует множество музыкальных проигрывателей с различными функциями.

Здесь я попытался создать приложение с графическим интерфейсом на основе Python, которое выбирает для вас список песен на основе ваших эмоций на лице.

Функциональность

  • Распознавание эмоций по чертам лица (грустный, счастливый, нейтральный)
  • выберите список песен для вашей эмоции на основе обнаруженной эмоции
  • все функции базового музыкального плеера
  • статический текст текущей воспроизводимой песни

Демонстрационное видео

Используемые инструменты и технологии

  • Питон
  • пигейм
  • vlc-питон
  • Керас и TensorFlow

Рабочий процесс

В музыкальном проигрывателе, когда мы нажимаем кнопку распознавания эмоций, наши лица фиксируются камерой в виде видеопотока, а затем преобразуются в множество кадров изображений. Затем каждое изображение проходит через модель искусственного интеллекта, где происходит эмоциональное распознавание. Затем для каждого изображения выбирается одна песня.

Как собираются черты лица

Я использовал знаменитый каскадный алгоритм Хаара для обнаружения областей лица и их захвата. Ниже ссылка на него.

https://towardsdatascience.com/face-detection-with-haar-cascade-727f68dafd08#:~:text=So%20what%20is%20Haar%20Cascade,Simple%20Features%E2%80%9D%20published%20in% 202001.

Подготовка данных

  • самое сложное это сбор данных. Я использовал около 30000 изображений для этой модели.
  • 27000 ранее существовавших данных и 3000 моих собственных лицевых данных
  • единый размер всех изображений (48*48)
  • конвертировать в изображения в градациях серого

Обучение модели

model = Sequential()

# 1 - Convolution
model.add(Conv2D(64,(3,3), padding='same', input_shape=(48, 48,1)))
model.add(BatchNormalization())
model.add(Activation('relu'))
model.add(MaxPooling2D(pool_size=(2, 2)))
model.add(Dropout(0.25))

# 2nd Convolution layer
model.add(Conv2D(128,(5,5), padding='same'))
model.add(BatchNormalization())
model.add(Activation('relu'))
model.add(MaxPooling2D(pool_size=(2, 2)))
model.add(Dropout(0.25))

# 3rd Convolution layer
model.add(Conv2D(512,(3,3), padding='same'))
model.add(BatchNormalization())
model.add(Activation('relu'))
model.add(MaxPooling2D(pool_size=(2, 2)))
model.add(Dropout(0.25))

# 4th Convolution layer
model.add(Conv2D(512,(3,3), padding='same'))
model.add(BatchNormalization())
model.add(Activation('relu'))
model.add(MaxPooling2D(pool_size=(2, 2)))
model.add(Dropout(0.25))

# Flattening
model.add(Flatten())

# Fully connected layer 1st layer
model.add(Dense(256))
model.add(BatchNormalization())
model.add(Activation('relu'))
model.add(Dropout(0.25))

# Fully connected layer 2nd layer
model.add(Dense(512))
model.add(BatchNormalization())
model.add(Activation('relu'))
model.add(Dropout(0.25))

model.add(Dense(7, activation='softmax'))

opt = Adam(lr=0.0005)
model.compile(optimizer=opt, loss='categorical_crossentropy', metrics=['accuracy'])
model.summary()

График точности

Улучшения

  • лучшие наборы данных, большие данные, лучшая подготовка данных
  • лучшая модель может быть комбинацией моделей для распознавания эмоций
  • Вместо того, чтобы вручную выбирать песни для каждой эмоции, возможно, мы могли бы выполнить некоторую обработку естественного языка, чтобы определить семантику песен и выбрать ее.