Содержание
Мой личный опыт восстановления старых фотографий с помощью нейросетей / Хабр
Немного о происхождении фотографий. Напомню, что 26 Апреля 1986 года произошла катастрофа на Чернобыльской АЭС.
Но мало кто знает, что радиоактивное облако распространилось на тысячи километров. К сожалению, это затронуло и деревню моей бабушки недалеко от Гомеля. Жителей эвакуировали далеко не сразу, но когда пришло время уезжать, то фотографии, которые были приклеены на стене пришлось отклеивать варварским способом. Время потрепало эти фотографии, но попробуем восcтановить.
Для примера я взял только две фотографии. На первой, мой двоюродный брат бабушки и какой-то человек на лошади. На второй — мой прадедушка.
Как можно дать вторую жизнь этим фотографиям?
Осторожно, большие фотографии!
Есть множество способов восстановить потрёпанные фотографии.
Можно сделать это вручную в любом удобном графическом редакторе. Можно выбрать онлайн сервисы для восстановления, но всегда есть ограничения. Я же решил найти несколько инструментов на основе нейронных сетей, которые можно запустить на домашнем ПК.
В этой статье я хочу поделиться своим детским опытом, как бесплатно восстановил несколько фотографий.
Сразу условимся, что статья носит чисто ознакомительный характер.
Я лично тестировал на своем ноутбуке 7 летней давности:
i7-5700HQ
16 ГБ оперативной памяти
SSD диск
Опционально можно использовать видео карту NVIDIA, но моя GTX960M устарела, и я её не использовал. Для запуска с видеокартой в каждом скрипте есть опция GPU.
Windows 10/11
На мой взгляд проще всего это сделать с помощью подсистемы Linux в Windows 10 или 11.
1. Установка
Для упрощения записал видео инструкцию.
Специально для тестов я написал небольшой скрипт
Открываем терминал в Ubuntu и вводим
git clone https://github.com/SergeiSOficial/AiPhoto.git cd AiPhoto sudo chmod +x *.sh
Далее запускаем установку
./setup.sh
Во время установки откроется папка с проектом. Начальные фотографии складываем в input, в папке output будем искать результаты. Важно, что файлы должны быть не слишком большими или иметь достаточный объем оперативной памяти.
На моем ноутбуке с интернетом 30 Мбит/с вся установка заняла примерно 30 минут.
2.Запуск
Почему алгоритма три?
Bringing Old Photo Back to Life неплохо убирает трещины, но недостаточно хорошо восстанавливает лица. GFPGAN хорошо справляется с людьми, но требует чистую фотографию. DeOldify хорошо разукрашивает.
Запускаем алгоритм от компании Майкрософт
cd AutoDeOldifyLocal/DeOldify/ conda activate deoldify cd ../../Bringing-Old-Photos-Back-to-Life python run.py --input_folder ../input --output_folder ../output/BOPBTL/ --GPU -1 --with_scratch --HR
После этого запускаем алгоритм от китайской компании GFPGAN
cd ../GFPGAN python inference_gfpgan.py -i ../output/BOPBTL/stage_1_restore_output/restored_image -o ../output/GFPGAN/ -v 1.3 -s 2
И в конце запускаем разукрашивание
cd ../AutoDeOldifyLocal/DeOldify/ python RunColorizer.py --input_folder ../../output/GFPGAN/restored_imgs --GPU -1 --output_folder ../../output/DeOldify/ --artistic True cd ../../
Все три алгоритма выполнялись примерно 10 минут.
Конечно, алгоритмы работают неидеально, но результаты, лично для меня, любопытные.
Ссылка на репозиторий со скриптами для установки и запуска.
Еще раз ссылка для скачивания видео.
Надеюсь, статья будет полезна. Но в любом случае оставляйте комментарии.
улучшить старую фотографию в домашних условиях — Российское фото
Реставрация фото: улучшить старую
фотографию в домашних условиях
2 июня 2022
Хотите узнать, как отреставрировать старую фотографию, не обращаясь к услугам профессионалов? Современное ПО, основанное на работе нейросетей, позволит вам справиться с этим за считанные минуты. В статье делимся секретами профессионального восстановления фотографий в домашних условиях.
Как перевести старое фото в цифровой формат
Перед реставрацией старого фото нужно выполнить его оцифровку. Чем четче будет изображение, тем лучше получится результат. Поэтому рекомендуется использовать сканер, а не фотографировать снимок. Есть несколько общих рекомендаций, следуя которым вы получите на выходе качественные четкие кадры.
- Подготовьте снимок. Если предстоит сканировать сильно измятую фотографию, заранее положите ее под пресс, чтобы расправить заломы и смятые углы.
- Сканируйте в цвете. Даже если ваше изображение черно-белое, оцифровку рекомендуется проводить в полноцветном режиме. Это поможет добиться наилучшего результата при восстановлении.
- Выбирайте разрешение не менее 600 dpi. В таком случае фото можно будет распечатать в хорошем качестве.
- Сохраняйте в TIFF. Для сохранения файлов выбирайте формат TIFF или PNG. Это позволит избежать компрессии и потери информации.
Теперь нам понадобиться программа для реставрации чёрно-белых фотографий. Например, ФотоВИНТАЖ. Это русскоязычный софт, обладающий всеми необходимыми функциями по восстановлению и колоризации старых снимков. Дальше расскажем, как в нем работать.
Реставрация фотографии в программе ФотоВИНТАЖ: пошаговая инструкция
Для начала скачайте программу и установите на свой ПК. После запустите софт, откройте снимок и приступайте к ретуши.
Избавиться от потертостей и царапин на фото, а также улучшить четкость и контрастность снимка можно при помощи автоматической функции «Реставрация старых фото». Программа самостоятельно проанализирует изображение и удалит дефекты. Если после машинной обработки на изображении по-прежнему сохранились некоторые изъяны, избавьтесь от них при помощи ручной обработки.
Для ручной реставрации старых фотографий используйте инструменты из вкладки «Ретушь». Они помогут избавиться от пятен, разрывов, трещин, перегибов и прочих дефектов. Выберите инструмент «Заплатка», обведите проблемный район и перетащите выделение на участок, свободный от повреждений и совпадающий по текстуре с заменяемой областью. Программа мгновенно ликвидирует изъян.
Примерно по этому же принципу работает инструмент «Штамп». Все, что нужно — это настроить диаметр кисти, обозначить нежелательный объект и выбрать участок для клонирования.
«Восстанавливающая кисть» незаменима, если речь идет о деликатной обработке. Например, при устранении дефектов с лица человека или областей, граничащих друг с другом. При работе с кистью нет необходимости выбирать текстуру для пересадки, просто пройдитесь инструментом по несовершенствам, а умный алгоритм программы сам подберет пиксели для замены.
Сделать черно-белое фото цветным можно с помощью одноименного автоматического режима, который находится в начальной вкладке «Улучшения». Преобразование займет какое-то время, поэтому наберитесь терпения.
Если программа не так раскрасила изображение, вы можете доработать его вручную. Пункт «Раскрашивание» находится во вкладке «Ретушь». Выберите из палитры подходящий оттенок, настройте диаметр кисти и вручную пройдитесь по участкам, требующим коррекции. Нужный цвет можно подцепить непосредственно с изображения при помощи «Пипетки».
В дальнейшем можно провести тоновую и цветовую коррекцию: осветлить кадр, повысив значение экспозиции, изменить любой оттенок, задействовав модуль HSL, или выполнить художественную обработку, используя визуальные эффекты и винтажные фильтры из встроенной коллекции.
Всего за три основных шага нам удалось оживить старый снимок, не прибегая к использованию столь сложных программ как Фотошоп. Впечатляет, не правда ли?
Сервисы и нейросети для восстановления старых фотоснимков
Не хотите устанавливать софт на ПК? Можете воспользоваться онлайн-сервисами для восстановления фото. Далее расскажем о самых популярных вариантах.
9may.mail.ru
Один из лучших бесплатных сервисов, предназначенный для удаления дефектов и колоризации ч/б изображений. Не имеет ограничений по количеству обрабатываемых фотографий, не требует регистрации, работает быстро. Качественно выполняет процедуру раскрашивания. А вот с удалением крупных повреждений справляется плохо, поэтому перед использованием сервиса снимок лучше отретушировать вручную в другой программе.
MyHeritage
Для восстановления старой фотографии на сайте потребуется зарегистрироваться. Сервис поможет сделать изображение четче, устранить шумы, а также восстановить цвет на выцветших фотографиях. Бесплатно можно исправить только 5 снимков.
Waifu2x
Онлайн-сервис пригодится в случае, если у вас на руках остался только маленький снимок, но все равно хочется сделать старую фотографию четкой и нормального размера. Waifu2x поможет увеличить разрешение без потери качества и улучшит вид снимка в целом, но других чудес от него ждать не стоит. Просто загрузите изображение, выберите нужные настройки и дождитесь окончания обработки.
Заключение
Как видите, реставрация ретро-снимков при помощи автоматических алгоритмов проходит не всегда успешно. Вот почему рекомендуется ручная обработка. На наш взгляд программа для восстановления старых фотографий на русском языке ФотоВИНТАЖ является лучшей в своем роде. Она рассчитана на новичков, но при этом содержит все необходимые функции для реконструкции. Инструменты «Заплатка», «Штамп» и «Восстанавливающая кисть» помогут избавиться от любых дефектов, опция «Раскрашивание» проведет колоризацию в автоматическом режиме, инструмент кадрирования поможет избавиться от потрепанных краев, а десятки эффектов придадут снимкам атмосферность.
Восстановление старых фотографий с использованием глубокого обучения | by Louis Bouchard
Представьте себе, что у вас есть старые, сложенные и даже порванные фотографии вашей 18-летней бабушки в высоком разрешении без артефактов!
Изображение с https://arxiv. org/pdf/2009.07047.pdf
Представьте себе, что у вас есть старые, сложенные и даже порванные фотографии вашей 18-летней бабушки в высоком разрешении без артефактов.
Это называется реставрацией старых фотографий, и эта статья только что открыла совершенно новый путь решения этой проблемы с использованием подхода глубокого обучения.
https://arxiv.org/pdf/2009.07047.pdf
Обзор техники
Изображение с https://arxiv.org/pdf/2009.07047.pdf
Реставрация винтажных фотографий является важной областью компьютерного зрения. Все мы хотим, чтобы старые фотографии наших близких были четкими и красивыми.
Такое изображение не делает честь человеку и не вызывает столько хороших воспоминаний, как более красивое изображение.
У каждого из нас есть хотя бы одна старая фотография, которая нам небезразлична и со временем выглядит все хуже и хуже. Вот почему многие работают над решением этой проблемы.
Изображение с https://arxiv.org/pdf/2009.07047.pdf
В этой статье исследователи из Гонконгского университета и Microsoft Research предложили новую сеть для решения этой проблемы под названием «Восстановление старых фотографий с помощью перевода в глубокое скрытое пространство». .
Они используют глубокое обучение для восстановления старых фотографий, которые пострадали от серьезной деградации, как эта.
В настоящее время существует множество подходов и даже коммерческих приложений для этого, но этот новый метод дает лучшие результаты, чем все они! Просто посмотрите, что лучшие коммерческие приложения, такие как Remini или Meitu, могут сделать с этими изображениями, и результаты, которые получили исследователи с их техникой:
Изображение с https://arxiv.org/pdf/2009.07047.pdf
Основная проблема с предыдущими традиционными методами реставрации заключалась в том, что они не могли обобщать. Это вызвано тем, что все они используют обучение с учителем, что является проблемой, вызванной разрывом между реальной старой картинкой и теми, которые синтезированы для обучения. Как вы можете видеть здесь:
Слева синтезированная картинка, а справа реальная старая картинка. Вы можете видеть, что это уже высокое разрешение, даже с поддельными царапинами и изменением цвета. Правое фото с https://funny.pho.to/fr/old-photo-effect/ и левое фото с https://www.pinterest.ca/kenschilling/vintage-photos-of-children-playing-outside/
Как вы можете видеть на этих изображениях, существует большая разница между синтезированными старыми изображениями и настоящими старыми. Вы можете видеть, что синтезированное изображение уже имеет высокое разрешение, даже с фальшивыми царапинами и изменениями цвета по сравнению с другим изображением, которое содержит гораздо меньше деталей.
Изображение с https://arxiv.org/pdf/2009.07047.pdf
Они решили эту проблему, создав собственную новую сеть специально для этой задачи.
По сути, они использовали два вариационных автокодировщика, также называемых VAE, для преобразования соответственно старых (испорченных) и чистых (восстановленных) фотографий в два скрытых пространства.
Этот перевод в латентные пространства изучается с помощью синтетических парных данных, но может хорошо обобщаться на реальных фотографиях, поскольку тот же разрыв домена намного меньше на таких компактных скрытых пространствах.
Изображение с https://arxiv.org/pdf/2009.07047.pdf
Разрыв домена из двух скрытых пространств, созданных VAE, закрывается путем совместного обучения состязательного дискриминатора.
На этом изображении видно, что новые домены из скрытых пространств «Zx» и «Zr» намного ближе друг к другу, чем исходные старые изображения «R» и синтетические старые изображения «X».
Сопоставление для восстановления испорченных фотографий выполняется в этом скрытом пространстве.
Изображение с https://arxiv.org/pdf/2009.07047.pdf
Их сеть разделена на определенные ветви, каждая из которых решает определенную проблему, которую они назвали частичной нелокальной блокировкой.
Существует глобальная ветвь, нацеленная на структурные дефекты, такие как царапины и пятна пыли, с помощью нелокального блока с учетом глобального контекста.
Затем они углубляются в две локальные ветви, которые нацелены на неструктурированные дефекты, такие как шумы и размытость, с помощью нескольких остаточных блоков.
Наконец, эти ветви сливаются в скрытое пространство, что улучшает возможность восстановления старой фотографии из всех этих дефектов.
Остался последний шаг для достижения еще лучших результатов.
Поскольку старые фотографии, которые мы хотим восстановить, скорее всего, являются фотографиями наших близких, на них всегда будет лицо.
Изображение с https://arxiv.org/pdf/2009.07047.pdf
Они добавили сеть уточнения лиц для восстановления мелких деталей лиц на старых фотографиях из изображения в скрытом пространстве, называемом «z», и с использованием ухудшенного сталкиваются с несколькими регионами сети.
Это значительно улучшает качество восприятия лиц, как вы можете видеть ниже.
Изображение с https://arxiv.org/pdf/2009.07047.pdf
Дополнительные результаты
Теперь, когда мы увидели, как это работает, давайте просто посмотрим еще некоторые результаты этой удивительной новой сети…
Заключение
Конечно , это был простой обзор этой новой статьи.
Я настоятельно рекомендую прочитать статью, ссылка на которую приведена ниже, для получения дополнительной информации.
Бумага, https://arxiv.org/pdf/2009.07047.pdf
Если вам нравится моя работа и вы хотите поддержать меня, я был бы очень признателен, если бы вы подписались на мои каналы в социальных сетях:
- Лучший способ поддержать меня — подписаться на меня на Medium .
- Подпишитесь на мой канал YouTube .
- Следите за моими проектами на LinkedIn
- Изучайте искусственный интеллект вместе, присоединяйтесь к нашему сообществу Discord , делитесь своими проектами, статьями, лучшими курсами, находите товарищей по команде Kaggle и многое другое!
Вернуть к жизни старые фотографии с помощью глубокого латентного пространственного перевода , Цзин Ляо и Фан Вэнь
из Университета Гонконга, Microsoft Research Asia. Основная задача этого проекта — устранить разрыв между данными и настоящими старыми старинными фотографиями. Он поставляется с новым методом, называемым сетью трансляции триплетных доменов 9.0058 . В частности, исследователи обучили два вариационных автокодировщика (VAE) преобразовывать и очищать старые фотографии в два скрытых пространства. И перевод между этими скрытыми пространствами изучается с помощью синтетических парных данных. Так что наклонная сеть может хорошо обобщать реальные фотографии.
- Они разработали глобальную ветвь с частичным неблокирующим нацеливанием на структурные дефекты, такие как царапины и пятна пыли.
- Для устранения неструктурированных признаков, таких как шум и размытость на фотографиях, они разработали еще локальная ветвь
Эти две ветви сливаются в скрытом пространстве, что приводит к расширению возможностей и большей точности восстановления старых фотографий с множественных дефектов.
Структура
- . Структура обучена двум VAE (вариационные автоходоры) :
- VAE1 подготовлены для изображений на реальных фотографиях R ∈ R и синтетических изображениях x ∈ X,
- 477 7. 7. 7. 7. 7. 7. 7. 7. 7. 7. обучается на чистых изображениях y ∈ Y.
- С помощью VAE изображения преобразуются в компактное скрытое пространство. Затем отображение восстанавливает поврежденные (размытые, шумовые, поврежденные) изображения в чистые в скрытом пространстве с частичным нелокальным блоком.
Реализация
Давайте посмотрим официальную демонстрацию того, как вспомнить свои 90-е, сделав старые старые фото новыми, перед этим проделаем предварительные шаги по установке и настройке окружения.
Прямой переход к коду: здесь
Клонирование репозитория GitHub
Сначала мы собираемся клонировать официальный репозиторий проекта с GitHub. Выполните приведенные ниже шаги и убедитесь, что тип среды выполнения Google Colab установлен на GPU.
!git clone https://github.com/microsoft/Bringing-Old-Photos-Back-to-Life.git photo_restoration
Настройка среды и установка зависимостей
Итак, давайте заполним каталог нашего проекта предварительно обученными моделями и контрольные точки, чтобы мы могли сразу перейти к части тестирования, потому что обучение и восстановление результатов могут занять несколько дней. Итак, давайте загрузим и установим зависимости.
# получить репозиторий syncBN %cd photo_restoration/Face_Enhancement/models/networks !git клон https://github.com/vacancy/Synchronized-BatchNorm-PyTorch !cp -rf Synchronized-BatchNorm-PyTorch/sync_batchnorm . %CD ../../../ %cd Global/detection_models !git клон https://github.com/vacancy/Synchronized-BatchNorm-PyTorch !cp -rf Synchronized-BatchNorm-PyTorch/sync_batchnorm . %CD ../../ # скачать модель обнаружения ориентира %cd Face_Detection/ !wget http://dlib.net/files/shape_predictor_68_face_landmarks.dat.bz2 !bzip2 -d shape_predictor_68_face_landmarks.dat.bz2 %CD ../ # скачать предварительно обученную модель %cd Face_Enhancement/ !wget https://facevc.blob.core.windows.net/zhanbo/old_photo/pretrain/Face_Enhancement/checkpoints.zip !распаковать контрольные точки.zip %CD ../ %cd Глобальный/ !wget https://facevc.blob.core.windows.net/zhanbo/old_photo/pretrain/Global/checkpoints.zip !распаковать контрольные точки.zip %CD ../ # устанавливаем зависимости ! pip install -r требования.txt
Тестирование в обычном режиме
импорт io импорт ОС импортировать IPython.display импортировать numpy как np импорт PIL.Image %cd /content/photo_restoration/ input_folder = "test_images/старый" output_folder = "выход" базовый путь = os.getcwd() input_path = os.path.join (базовый путь, input_folder) output_path = os.path.join (базовый путь, output_folder) os.mkdir(output_path) !python run.py --input_folder /content/photo_restoration/test_images/old --output_folder /content/photo_restoration/output/ --GPU 0 def imshow(a, format='png', jpeg_fallback=True): а = np.asarray (а, dtype = np.uint8) данные = io.BytesIO() PIL.Image.fromarray(a).save(данные, формат) im_data = данные.получить значение() пытаться: disp = IPython.display.display(IPython.display.Image(im_data)) кроме IOError: если jpeg_fallback и формат != 'jpeg': print(('Внимание: изображение слишком большое для отображения в формате "{}"; ' 'вместо этого попробуйте jpeg').format(format)) вернуть imshow (а, формат = 'jpeg') еще: поднимать вернуть дисп def make_grid (I1, I2, изменение размера = True): I1 = np.asarray(I1) В, Ш = I1.форма[0], I1.форма[1] если I1.ndim >= 3: I2 = np.asarray(I2.resize((W,H))) I_combine = np.zeros((H,W*2,3)) I_combine[:,:W,:] = I1[:,:,:3] I_combine[:,W:,:] = I2[:,:,:3] еще: I2 = np.
asarray(I2.resize((W,H)).convert('L')) I_combine = np.zeros((H,W*2)) I_combine[:,:W] = I1[:,:] I_combine[:,W:] = I2[:,:] I_combine = PIL.Image.fromarray (np.uint8 (I_combine)) W_база = 600 если изменить размер: соотношение = W_base / (W * 2) H_new = int(H * отношение) I_combine = I_combine.resize((W_base, H_new), PIL.Image.LANCZOS) вернуть I_combine # отображать изображение в формате таблицы до и после имена файлов = os.listdir(os.path.join(input_path)) имена файлов.sort() для имени файла в именах файлов: печать (имя файла) image_original = PIL.Image.open(os.path.join(input_path, имя файла)) image_restore = PIL.Image.open(os.path.join(output_path, 'final_output', имя файла)) дисплей (сделать_сетку (изображение_оригинал, изображение_восстановить))
Восстановление старых нечетких и зернистых фотографий
!rm -rf /content/photo_restoration/output/* !python run.py --input_folder /content/photo_restoration/test_images/old_w_scratch/ --output_folder /content/photo_restoration/output/ --GPU 0 --with_scratch input_folder = "test_images/old_w_scratch" output_folder = "выход" input_path = os.path.join (базовый путь, input_folder) output_path = os.path.join (базовый путь, output_folder) имена файлов = os.listdir(os.path.join(input_path)) имена файлов.sort() для имени файла в именах файлов: печать (имя файла) image_original = PIL.Image.open(os.path.join(input_path, имя файла)) image_restore = PIL.Image.open(os.path.join(output_path, 'final_output', имя файла)) дисплей (сделать_сетку (изображение_оригинал, изображение_восстановить))
Восстановите собственное изображение
Давайте просто возьмем приведенный ниже пример изображения девушки и попробуем восстановить его
из файлов импорта google.colab. импортный шутил upload_path = os.path.join (базовый путь, «test_images», «загрузить») upload_output_path = os.path.join (базовый путь, «upload_output») если os.path.isdir(upload_output_path): Shutil.rmtree (upload_output_path) если os.path.isdir(upload_path): Shutil.rmtree (путь_загрузки) os.mkdir (upload_output_path) os.mkdir (путь_загрузки) загружено = файлы.загрузить() для имени файла в uploaded.keys(): Shutil.move(os.path.join(базовый путь, имя файла), os.path.join(upload_path, имя файла)) !python run.py --input_folder /content/photo_restoration/test_images/upload --output_folder /content/photo_restoration/upload_output --GPU 0
Вывод
filenames_upload = os.listdir(os.path.join(upload_path)) имена файлов_upload.sort() filenames_upload_output = os.listdir(os.path.join(upload_output_path, "final_output")) имена файлов_upload_output.sort() для имени файла, filename_output в zip (filenames_upload, filenames_upload_output): image_original = PIL.Image.open(os.path.join(upload_path, имя файла)) image_restore = PIL.Image.open(os.path.join(upload_output_path, "final_output", filename_output)) дисплей (make_grid (image_original, image_restore)) печать("")
Что еще?
На случай, если вы только что восстановили свои старые черно-белые винтажные изображения, и они уже выглядят неплохо! Кроме того, вы можете раскрасить свои изображения, если хотите, чтобы они выглядели более реалистично, и мы уже рассмотрели отличную библиотеку для этого: DeOldify.