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