Так что я думаю, что вы на правильном пути без вашего шага 1 ( применить некоторый алгоритм к изображению, который преобразует его в набор функций) .
Этот проект является более сложным, чем большинство проблем ОД, потому что здесь вам фактически придется создавать набор тренировочных данных из необработанных данных (отдельных кадров, содержащих мультфильмы). Например, возьмите кадр, определите двух символов в этом кадре, Дилберта и персонажа с рогами (я считаю, что босс Дилберта не знает его имени), извлеките эти два символа из этого кадра и добавьте к каждому метку соответствующего класса ( например, «1» для Длиберта).
Шаг 1
Чтобы извлечь отдельные символы из каждого из кадров, составляющих карикатуру Дилберта, я бы предложил спектральное разложение каждого кадра. Если вы не знакомы с этой техникой, по сути, это просто декомпрессия с собственным вектором.
Если вам нравится python (или R, учитывая, что вы можете использовать привязки python-to-R, такие как RPy ), тогда я настоятельно рекомендую вам взглянуть на sklearn . В частности, эта превосходная библиотека (которая была первоначально разработана под зонтиком проекта SciPy scikits и поэтому использует NumPy + SciPy для матричного вычисления) имеет несколько алгоритмов для сегментации изображения, один из которых основан на спектральная кластеризация . Для этого шага в вашем проекте вы, скорее всего, захотите взглянуть на эти два модуля scikits.learn
В эти два модуля включены два хороших примера сценария: один сегментирует цифровую фотографию , а другой сегментирует изображение, состоящее из трех частично наложенных кругов с минимальным контрастом Р / т друг друга и ж / р / т фона - я подозреваю, что оба являются более сложными проблемами, которые вам нужно будет выполнить декомпозиции. Другими словами, sklearn имеет два полных, хорошо документированных примера сценария, включенных в исходный дистрибутив, оба из которых обрабатывают данные, аналогичные вашим. Любой или оба будут отличным шаблоном для этого шага.
Шаг 2
Итак, это первый шаг; вот второй: сортировка всех компонентов разложенных изображений в группы, одна группа для каждого символа Дильберта . Затем назначьте метку класса каждой группе, например, если на шаге декомпозиции есть четыре символа, то приемлемым выбором для меток класса будет «0», «1», «2» и «3». Добавьте эти метки классов к компонентным матрицам (продуктам разложения из шага 1), чтобы каждая символьная матрица была сопоставлена с соответствующим классом (символ Дильберта).
Шаг 3
Выберите подходящую технику ML. У вас есть много вариантов для этого шага; единственными критериями являются то, что метод относится к категории под наблюдением (поскольку вы присвоили метки классов вашим данным) и что он функционирует как классификатор (то есть он возвращает метку класса по сравнению с регрессором, который выводит числовое значение). Учитывая, что это личный проект, я бы выбрал тот, который кажется вам наиболее интересным. Некоторые из них удовлетворяют критериям, которые я только что упомянул: многослойный персептрон (нейронная сеть), машина опорных векторов (SVM) и k-ближайших соседей (KNN).
Шаг 4
обучать, проверять и проверять свой классификатор
Альтернативная техника : Соответствие шаблону
Как только Шаг 1 завершен (каждое изображение разложено на набор объектов, некоторые из которых, без сомнения, будут представлять персонажей), вы можете вручную просеять эти продукты разложения и собрать образцы для каждого персонажа в мультфильме.Это шаблоны .
Далее вы сравниваете объекты, сегментированные из изображения, с этим набором уникальных шаблонов.В scikit-image , другом scipy scikit, вы можете использовать метод match_template , которому вы передаете шаблонное изображение и изображение кандидата, и этот методвозвращает двумерный массив, показывающий попиксельную корреляцию (между -1 и 1).