На пятом семестре бакалавриата мы с товарищами по команде искали нетривиальные проектные идеи для нашего класса по искусственному интеллекту. Мы нашли это отличное видео:

Мы подумали, что было бы здорово попробовать то же самое, используя генетический алгоритм. Наш алгоритм принимает изображение в качестве входных данных и аппроксимирует изображение, используя фиксированное количество кругов / прямоугольников разных размеров и цветов.

Мы написали базовую версию и попробовали применить ее на логотипах известных компаний и других «не очень сложных» объектах. Вот результаты (слева исходное изображение; справа восстановленное изображение):

Утка

Логотип Nike

Логотип Pepsi

Сердце

Абстрактное искусство

Логотип Dominos

Логотип Apple

Логотип Android

Бэтмен!

Другое абстрактное искусство

Флаг Индии

IBM

Обратите внимание, как алгоритм с треском проваливает реконструкцию спиц в индийском флаге. Это потому, что спицы слишком тонкие, чтобы их мог подобрать алгоритм. Ниже приведено изображение Анджелины Джоли, которое алгоритм не смог восстановить даже после 24 часов работы. Опять же, это связано с тем, что алгоритму трудно улавливать детали, если ему не разрешено работать в течение достаточно длительного времени.

Вы можете найти исходный код здесь: amangoeliitb / Genetic-Algorithm. Вы можете попробовать поиграть с эвристикой измерения расстояния и, возможно, придумать более быструю реализацию (поделитесь ею со мной, если найдете что-нибудь интересное!)

Удачного обучения!