emotionlib

0

Описание

Решение для эффективной фильтрации медиаконтента

Языки

  • Jupyter Notebook63,4%
  • C35,7%
  • C#0,6%
  • Makefile0,3%
README.md

EmotionLib

GitHub Mirror

Эффективная библиотека для анализа медиаконтента

Демо 1 Демо 2

EmotionLib — это высокопроизводительная библиотека на языке C для глубокого анализа медиаконтента. Она позволяет автоматически выявлять и блокировать небезопасные материалы, а также улучшать рекомендательные системы для безопасного контента. Благодаря комбинации классификации содержимого и анализа эмоционального тона, библиотека даёт детальное понимание «настроения» медиа и помогает сделать пользовательский опыт безопаснее.

Решение оптимизировано для работы на различных архитектурах, включая x86_64, ARMv8 и E2K (Эльбрус).


Ключевые возможности и области применения

  • Анализ тональности (Sentiment Analysis) — выявление эмоционального фона (позитивный / нейтральный / негативный) на изображениях и видеокадрах.
  • Классификация содержимого — детектирование чувствительного контента: обнажёнка, сексуальные сцены, насилие, кровь и т.п.
  • Блокировка NSFW / Gore‑контента — вычисление оценки безопасности и автоматическое блокирование медиа, если риск превышает заданный порог.
  • Прогноз рейтинга в стиле MPAA — оценка примерного возрастного рейтинга видео (
    G
    ,
    PG
    ,
    PG‑13
    ,
    R
    ) по последовательности кадров.
  • Рекомендательные системы и ранжирование — использование оценок «безопасности» и «позитивности» как дополнительных признаков для рекомендательных систем и поиска.
  • Родительский контроль и модерация — интеграция в клиенты, плееры и модерационные инструменты для предупреждений и ограничения доступа для детей и подростков.
  • Чистая реализация на C — эффективный CPU‑инференс без внешних зависимостей, удобный экспорт API в другие языки (C#, и др.).

🏆 Награды и упоминания


🏗 Архитектура системы

В основе библиотеки лежит гибридный нейросетевой конвейер: сверточные сети (CNN) отвечают за анализ отдельных кадров, а ансамбли LSTM и MLP агрегируют временные зависимости и статистику по ролику.

Гибридный конвейер (компонент SAMP)

Схема показывает путь данных: от покадровых вероятностей через параллельные ветки (LSTM для временного ряда и MLP для статистики) к итоговой оценке безопасности.

Архитектура MLP‑ансамбля

Внутренняя структура перцептронов, подобранная с помощью NAS (Neural Architecture Search), для анализа статистических признаков.

Низкоуровневая реализация

Библиотека реализует слои нейросети на чистом C, без внешних зависимостей, что обеспечивает переносимость (включая архитектуру Эльбрус E2K) и предсказуемую производительность. Ниже приведены фрагменты реализаций свёртки и ReLU в

filter.dll
.

Показать пример кода (Convolution & ReLU)

🛠 Сборка библиотеки

Минимальные технические требования

  • ОС (ядро на C)
    • Linux (x86_64, ARMv8, Эльбрус E2K)
    • Windows 10/11 (x86_64)
  • Компилятор / тулчейн
    • Любой C99‑совместимый компилятор
    • make
      (для использования готовых Makefile)
  • Оборудование
    • CPU‑инференс, GPU не требуется
    • Рекомендуется ≥ 4 ГБ ОЗУ для обработки длинных видео

Примеры на .NET и OpenCvSharp (см. ниже) дополнительно требуют установленного .NET (Framework или .NET 6+) и соответствующих нативных библиотек (OpenCvSharpExtern).

Шаги сборки

  1. Клонирование репозитория

    При необходимости можно использовать зеркало на GitHub:

    https://github.com/EmotionEngineer/EmotionLib
    .

  2. Загрузка весов моделей

    Из-за ограничений GitVerse большие файлы весов вынесены в отдельное хранилище. Скачайте архив

    weights_headers.zip
    по ссылке:

    или из раздела Releases GitHub‑зеркала:

    Распакуйте файлы

    *_weights.c
    в соответствующие каталоги:

    • filter/
      — веса CNN для модуля фильтрации содержимого
    • positiveness/
      — веса CNN для модуля анализа позитивности
  3. Компиляция

    В результате будут собраны файлы:

    • filter.so
      /
      filter.dll
    • positiveness.so
      /
      positiveness.dll
    • samp.so
      /
      samp.dll

🚀 Примеры интеграции

1. Комплексный C‑тестер (валидатор платформ)

В составе репозитория есть полностью готовый к сборке пример

tester/main.c
. Он служит:

  1. Примером интеграции — показывает, как загружать
    filter
    /
    positiveness
    /
    samp
    и запускать полный конвейер.
  2. Валидатором платформы — позволяет проверить работу на Эльбрусе, Байкале и других целевых архитектурах.
  3. Тестом производительности — эмулирует длительную обработку видеопотока.

Файл:

tester/main.c

Компиляция:

Подготовка библиотек для тестера:

Тестер ожидает, что

filter
,
positiveness
и
samp
(
.so
/
.dll
) лежат в одной директории с бинарником
tester
.

Запуск:

Если при запуске на Linux возникает ошибка вида:

это, как правило, означает, что

samp.so
был собран под более новую версию
glibc/libm/libmvec
, чем есть на целевой системе. В таком случае соберите все три библиотеки (
filter
,
positiveness
,
samp
) непосредственно на целевой машине (или в контейнере с той же версией glibc) и повторите запуск.


2. Интеграция с C# / .NET (консольный пример)

EmotionLib можно вызывать из .NET через P/Invoke.

Минимальные объявления:

Полноценный рабочий пример консольного приложения на .NET находится в:

  • Example/InferenceExample/Program.cs

Этот пример:

  • читает видео из папки
    Input
    с помощью OpenCvSharp4,
  • сэмплирует кадры с динамическим шагом по времени (в зависимости от длины видео),
  • выполняет
    positiveness_VideoInference
    и
    filter_VideoInference
    батчами (только CPU),
  • сохраняет результаты в бинарные файлы
    .epp
    и
    .efp
    в папку
    Output
    ,
  • вызывает
    predictSAMP
    и печатает итоговый скор и приближённый рейтинг MPAA или
    Unsafe
    .

Как запустить
Example/InferenceExample

  1. Соберите EmotionLib

    Выполните шаги из раздела «Сборка библиотеки», убедитесь, что библиотеки собраны под x64, если вы используете 64‑битный .NET.

  2. Соберите C#‑пример

    Откройте проект/решение в Visual Studio (или создайте новый проект и добавьте

    Program.cs
    ), либо используйте
    dotnet build
    .

    • Целевая платформа:
      .NET 6
      или совместимая
    • Добавьте пакет NuGet:
      OpenCvSharp4
      (и при необходимости
      OpenCvSharp4.runtime.win
      /
      OpenCvSharp4.runtime.linux
      )
  3. Скопируйте нативные библиотеки EmotionLib к исполняемому файлу

    Пример для Windows x64 (Debug‑сборка):

    Пример для Linux:

  4. Подготовьте входные данные

    Создайте рядом с исполняемым файлом папку

    Input
    и поместите туда видеофайлы:

  5. Запустите пример

    • Windows: запустите
      InferenceExample.exe
      или через консоль
    • Linux:
      ./InferenceExample

    Приложение:

    • обработает все видеоролики в
      Input
      ,
    • создаст папку
      Output
      с файлами
      .epp
      и
      .efp
      ,
    • выведет в консоль для каждого видео:
      • прогресс инференса positiveness и filter,
      • итоговое значение SAMP и соответствующий рейтинг MPAA‑типа либо
        Unsafe
        .

3. Демонстрационное приложение‑плеер (EmotionPlayer, C# / WPF)

Отдельное приложение EmotionPlayer демонстрирует интеграцию EmotionLib в реальный настольный видеоплеер с визуализацией эмоций на таймлайне и выдачей возрастного рейтинга.

Ключевые особенности EmotionPlayer:

  • WPF‑плеер на базе
    MediaElement
    (Windows Media stack).
  • Использует
    positiveness.dll
    ,
    filter.dll
    и
    samp.dll
    через P/Invoke.
  • Периодически (каждые N секунд, в зависимости от длины ролика) сэмплирует кадры, отображая позитивность в виде смайлика при наведении на таймлайн.
  • Рассчитывает итоговый рейтинг (
    G
    ,
    PG
    ,
    PG‑13
    ,
    R
    ) или
    Unsafe
    с помощью SAMP.
  • Сохраняет промежуточные результаты в
    .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 рядом с

EmotionPlayer.exe
, например:

Без этих DLL приложение запустится, но при попытке анализа контента возникнут ошибки загрузки нативных библиотек.

Подробная инструкция по сборке и использованию приведена в README репозитория EmotionPlayer.


🧪 Обучение моделей и воспроизводимость

Для обеспечения полной прозрачности и воспроизводимости результатов, этот репозиторий содержит все необходимые наборы данных и пошаговые руководства (Jupyter Notebooks), требуемые для обучения классификаторов. Примечание: Исходные видеофайлы не распространяются по юридическим и этическим причинам. Вместо них предоставляются векторы извлечённых признаков.

Вы можете запустить эти ноутбуки локально или использовать предложенные зеркала на Kaggle для интерактивной работы в облаке.

1. Прогноз рейтинга MPAA

Предсказывает примерный рейтинг MPAA (

G
,
PG
,
PG‑13
,
R
) на основе видеоанализа.

2. Фильтр безопасности (NSFW / Gore Classification)

Вычисляет оценки безопасности, используя ансамбль моделей LSTM и MLP на извлеченных признаках.

3. Эмоциональный анализ (Positiveness)

Определяет эмоциональный тон с точностью 99.58% на валидационной выборке.


📜 Лицензия

EmotionLib распространяется под лицензией MIT.
Полный текст лицензии приведён в файле

.