Введение
В этом мире каждый человек любит слушать музыку. у разных людей разный выбор музыки. И выбор отличается в зависимости от настроения людей. Некоторым нравится слушать Lofi в дождливый день, а другим нравится рэп. В нынешнюю эпоху развития технологий существует множество музыкальных проигрывателей с различными функциями.
Здесь я попытался создать приложение с графическим интерфейсом на основе Python, которое выбирает для вас список песен на основе ваших эмоций на лице.
Функциональность
- Распознавание эмоций по чертам лица (грустный, счастливый, нейтральный)
- выберите список песен для вашей эмоции на основе обнаруженной эмоции
- все функции базового музыкального плеера
- статический текст текущей воспроизводимой песни
Демонстрационное видео
Используемые инструменты и технологии
- Питон
- пигейм
- vlc-питон
- Керас и TensorFlow
Рабочий процесс
В музыкальном проигрывателе, когда мы нажимаем кнопку распознавания эмоций, наши лица фиксируются камерой в виде видеопотока, а затем преобразуются в множество кадров изображений. Затем каждое изображение проходит через модель искусственного интеллекта, где происходит эмоциональное распознавание. Затем для каждого изображения выбирается одна песня.
Как собираются черты лица
Я использовал знаменитый каскадный алгоритм Хаара для обнаружения областей лица и их захвата. Ниже ссылка на него.
Подготовка данных
- самое сложное это сбор данных. Я использовал около 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()
График точности
Улучшения
- лучшие наборы данных, большие данные, лучшая подготовка данных
- лучшая модель может быть комбинацией моделей для распознавания эмоций
- Вместо того, чтобы вручную выбирать песни для каждой эмоции, возможно, мы могли бы выполнить некоторую обработку естественного языка, чтобы определить семантику песен и выбрать ее.