emotionlib
Описание
Решение для эффективной фильтрации медиаконтента
Языки
- Jupyter Notebook63,4%
- C35,7%
- C#0,6%
- Makefile0,3%
EmotionLib
Эффективная библиотека для анализа медиаконтента

EmotionLib — это высокопроизводительная библиотека на языке C для глубокого анализа медиаконтента. Она позволяет автоматически выявлять и блокировать небезопасные материалы, а также улучшать рекомендательные системы для безопасного контента. Благодаря комбинации классификации содержимого и анализа эмоционального тона, библиотека даёт детальное понимание «настроения» медиа и помогает сделать пользовательский опыт безопаснее.
Решение оптимизировано для работы на различных архитектурах, включая x86_64, ARMv8 и E2K (Эльбрус).
Ключевые возможности и области применения
- Анализ тональности (Sentiment Analysis) — выявление эмоционального фона (позитивный / нейтральный / негативный) на изображениях и видеокадрах.
- Классификация содержимого — детектирование чувствительного контента: обнажёнка, сексуальные сцены, насилие, кровь и т.п.
- Блокировка NSFW / Gore‑контента — вычисление оценки безопасности и автоматическое блокирование медиа, если риск превышает заданный порог.
- Прогноз рейтинга в стиле MPAA — оценка примерного возрастного рейтинга видео (
,G,PG,PG‑13) по последовательности кадров.R - Рекомендательные системы и ранжирование — использование оценок «безопасности» и «позитивности» как дополнительных признаков для рекомендательных систем и поиска.
- Родительский контроль и модерация — интеграция в клиенты, плееры и модерационные инструменты для предупреждений и ограничения доступа для детей и подростков.
- Чистая реализация на C — эффективный CPU‑инференс без внешних зависимостей, удобный экспорт API в другие языки (C#, и др.).
🏆 Награды и упоминания
- BRICS Solutions Awards 2024
- Softpedia: Обзор редакции
- Витрина ITMO AI: Страница проекта
🏗 Архитектура системы
В основе библиотеки лежит гибридный нейросетевой конвейер: сверточные сети (CNN) отвечают за анализ отдельных кадров, а ансамбли LSTM и MLP агрегируют временные зависимости и статистику по ролику.
Гибридный конвейер (компонент SAMP)
Схема показывает путь данных: от покадровых вероятностей через параллельные ветки (LSTM для временного ряда и MLP для статистики) к итоговой оценке безопасности.
Архитектура MLP‑ансамбля
Внутренняя структура перцептронов, подобранная с помощью NAS (Neural Architecture Search), для анализа статистических признаков.
Низкоуровневая реализация
Библиотека реализует слои нейросети на чистом C, без внешних зависимостей, что обеспечивает переносимость (включая архитектуру Эльбрус E2K) и предсказуемую производительность. Ниже приведены фрагменты реализаций свёртки и ReLU в .
Показать пример кода (Convolution & ReLU)
🛠 Сборка библиотеки
Минимальные технические требования
- ОС (ядро на C)
- Linux (x86_64, ARMv8, Эльбрус E2K)
- Windows 10/11 (x86_64)
- Компилятор / тулчейн
- Любой C99‑совместимый компилятор
(для использования готовых Makefile)make
- Оборудование
- CPU‑инференс, GPU не требуется
- Рекомендуется ≥ 4 ГБ ОЗУ для обработки длинных видео
Примеры на .NET и OpenCvSharp (см. ниже) дополнительно требуют установленного .NET (Framework или .NET 6+) и соответствующих нативных библиотек (OpenCvSharpExtern).
Шаги сборки
-
Клонирование репозитория
При необходимости можно использовать зеркало на GitHub:
.https://github.com/EmotionEngineer/EmotionLib -
Загрузка весов моделей
Из-за ограничений GitVerse большие файлы весов вынесены в отдельное хранилище. Скачайте архив
по ссылке:weights_headers.zipили из раздела Releases GitHub‑зеркала:
- GitHub Releases: https://github.com/EmotionEngineer/EmotionLib/releases
Распакуйте файлы
в соответствующие каталоги:*_weights.c— веса CNN для модуля фильтрации содержимогоfilter/— веса CNN для модуля анализа позитивностиpositiveness/
-
Компиляция
В результате будут собраны файлы:
/filter.sofilter.dll/positiveness.sopositiveness.dll/samp.sosamp.dll
🚀 Примеры интеграции
1. Комплексный C‑тестер (валидатор платформ)
В составе репозитория есть полностью готовый к сборке пример . Он служит:
- Примером интеграции — показывает, как загружать
/filter/positivenessи запускать полный конвейер.samp - Валидатором платформы — позволяет проверить работу на Эльбрусе, Байкале и других целевых архитектурах.
- Тестом производительности — эмулирует длительную обработку видеопотока.
Файл:
Компиляция:
Подготовка библиотек для тестера:
Тестер ожидает, что
,filterиpositiveness(samp/.so) лежат в одной директории с бинарником.dll.tester
Запуск:
Если при запуске на Linux возникает ошибка вида:
это, как правило, означает, что был собран под более новую версию , чем есть на целевой системе. В таком случае соберите все три библиотеки (, , ) непосредственно на целевой машине (или в контейнере с той же версией glibc) и повторите запуск.
2. Интеграция с C# / .NET (консольный пример)
EmotionLib можно вызывать из .NET через P/Invoke.
Минимальные объявления:
Полноценный рабочий пример консольного приложения на .NET находится в:
- Example/InferenceExample/Program.cs
Этот пример:
- читает видео из папки
с помощью OpenCvSharp4,Input - сэмплирует кадры с динамическим шагом по времени (в зависимости от длины видео),
- выполняет
иpositiveness_VideoInferenceбатчами (только CPU),filter_VideoInference - сохраняет результаты в бинарные файлы
и.eppв папку.efp,Output - вызывает
и печатает итоговый скор и приближённый рейтинг MPAA илиpredictSAMP.Unsafe
Как запустить Example/InferenceExample
-
Соберите EmotionLib
Выполните шаги из раздела «Сборка библиотеки», убедитесь, что библиотеки собраны под x64, если вы используете 64‑битный .NET.
-
Соберите C#‑пример
Откройте проект/решение в Visual Studio (или создайте новый проект и добавьте
), либо используйтеProgram.cs.dotnet build- Целевая платформа:
или совместимая.NET 6 - Добавьте пакет NuGet:
(и при необходимостиOpenCvSharp4/OpenCvSharp4.runtime.win)OpenCvSharp4.runtime.linux
- Целевая платформа:
-
Скопируйте нативные библиотеки EmotionLib к исполняемому файлу
Пример для Windows x64 (Debug‑сборка):
Пример для Linux:
-
Подготовьте входные данные
Создайте рядом с исполняемым файлом папку
и поместите туда видеофайлы:Input -
Запустите пример
- Windows: запустите
или через консольInferenceExample.exe - Linux: ./InferenceExample
Приложение:
- обработает все видеоролики в
,Input - создаст папку
с файламиOutputи.epp,.efp - выведет в консоль для каждого видео:
- прогресс инференса positiveness и filter,
- итоговое значение SAMP и соответствующий рейтинг MPAA‑типа либо
.Unsafe
- Windows: запустите
3. Демонстрационное приложение‑плеер (EmotionPlayer, C# / WPF)
Отдельное приложение EmotionPlayer демонстрирует интеграцию EmotionLib в реальный настольный видеоплеер с визуализацией эмоций на таймлайне и выдачей возрастного рейтинга.
- Репозиторий: https://github.com/EmotionEngineer/EmotionPlayer
Ключевые особенности EmotionPlayer:
- WPF‑плеер на базе
(Windows Media stack).MediaElement - Использует
,positiveness.dllиfilter.dllчерез P/Invoke.samp.dll - Периодически (каждые N секунд, в зависимости от длины ролика) сэмплирует кадры, отображая позитивность в виде смайлика при наведении на таймлайн.
- Рассчитывает итоговый рейтинг (
,G,PG,PG‑13) илиRс помощью SAMP.Unsafe - Сохраняет промежуточные результаты в
и.eppв папку.efp.Output
Минимальные требования (EmotionPlayer):
- ОС: Windows 10/11 x64
- Runtime: .NET Framework 4.7.2
- Наличие Windows Media Player (требуется для WPF
)MediaElement
Размещение нативных библиотек для EmotionPlayer:
После сборки EmotionLib (x64) и EmotionPlayer (Release, x64) скопируйте DLL рядом с , например:
Без этих DLL приложение запустится, но при попытке анализа контента возникнут ошибки загрузки нативных библиотек.
Подробная инструкция по сборке и использованию приведена в README репозитория EmotionPlayer.
🧪 Обучение моделей и воспроизводимость
Для обеспечения полной прозрачности и воспроизводимости результатов, этот репозиторий содержит все необходимые наборы данных и пошаговые руководства (Jupyter Notebooks), требуемые для обучения классификаторов. Примечание: Исходные видеофайлы не распространяются по юридическим и этическим причинам. Вместо них предоставляются векторы извлечённых признаков.
Вы можете запустить эти ноутбуки локально или использовать предложенные зеркала на Kaggle для интерактивной работы в облаке.
1. Прогноз рейтинга MPAA
Предсказывает примерный рейтинг MPAA (, , , ) на основе видеоанализа.
- 📘 Пошаговое руководство:
Локальный ноутбук | Интерактивное зеркало (Kaggle) - 💾 Обучающий датасет:
Локальная директория | Датасет на Kaggle
2. Фильтр безопасности (NSFW / Gore Classification)
Вычисляет оценки безопасности, используя ансамбль моделей LSTM и MLP на извлеченных признаках.
- 📘 Пошаговое руководство:
Локальный ноутбук | Интерактивное зеркало (Kaggle) - 💾 Обучающий датасет:
Локальная директория | Датасет на Kaggle
(Содержит предвычисленные векторы признаков для >8000 видео)
3. Эмоциональный анализ (Positiveness)
Определяет эмоциональный тон с точностью 99.58% на валидационной выборке.
- 📘 Пошаговое руководство:
Локальный ноутбук | Интерактивное зеркало (Kaggle)
📜 Лицензия
EmotionLib распространяется под лицензией MIT.
Полный текст лицензии приведён в файле .