Друкарня від WE.UA

Всіх вітаю! У цій статті ми познайомимося з бібліотекою rembg, яка здатна видаляти фон з фотографій за допомогою ШІ. Хоч бібліотека невеличка, але точно є корисною для використання у деяких ситуаціях.

Встановлення rembg

Windows:

pip install rembg

MacOS:

pip3 install rembg

Linux:

pip install rembg

Також перед початком роботи із rembg треба обов’язково встановити бібліотеку onnxruntime, так як вона не встановлюється автоматично. Бібліотека onnxruntime по суті запускає штучний інтелект у rembg, який потрібен для виявлення фону.

Команди для встановлення onnxruntime є нижче.

Windows:

pip install onnxruntime

MacOS:

pip3 install onnxruntime

Linux:

pip install onnxruntime

Тепер наш код точно буде працювати.

Використання rembg

Перший приклад

Для початку імпортуємо дві бібліотеки — rembg та pillow. Бібліотеку pillow ми використовуємо тому, що вона дозволить нам відкривати і зберігати зображення.

Імпортуємо:

import rembg as rb
from PIL import Image

Для першого прикладу оберемо це зображення:

,Photo by Atul Pandey on Unsplash

Створюємо функцію, яка буде видаляти фон:

def remove_photo_background(original, edited):
    original_photo = Image.open(original)
    edited_photo = rb.remove(original_photo)
    edited_photo.save(edited)

    print(f"Image {original} successfully edited!")


remove_photo_background("atul-pandey-aMtO0ubeK_4-unsplash.jpg", "without_background_1.png")

Ця функція приймає два параметри original та edited — назва старого й нового фото, причому нове фото повинно бути у форматі png.

Далі відкриваємо зображення, з яким будемо працювати за допомогою pillow:

original_photo = Image.open(original)

Функція remove() у rembg дозволяє нам видаляти фон зображень:

edited_photo = rb.remove(original_photo)

Зберігаємо зображення без фону з новою назвою:

edited_photo.save(edited)

Ось результат:

Фото без фону

Другий приклад

Тепер оберемо іншу картинку:

Photo by Aidan Lynch on Unsplash

Насправді можна і не використовувати pillow разом з rembg — це лиш один з варіантів як можна робити. У наступному прикладі ми також видалимо фон, але без якихось інших сторонніх бібліотек, окрім rembg.

Ось так ми переробили функцію — тепер вона відкриває файли без допомоги pillow. Ось код даної функіції:

def remove_photo_background(original, edited):
    original_photo = open(original, "rb")
    read_original = original_photo.read()
    remove_background = rb.remove(read_original)

    edited_photo = open(edited, "wb")
    edited_photo.write(remove_background)

    original_photo.close()
    edited_photo.close()

    print(f"Image {original} successfully edited!")


remove_photo_background("aidan-lynch--ynAkBMFupU-unsplash.jpg", "without_background_2.png")

Отже, спочатку відкриваємо файл з оригінальним фото:

original_photo = open(original, "rb")

Причому прапор “rb“ вказує, що файл ми відкриваємо у двійковому форматі.

Читаємо файл з оригінальним зображенням:

read_original = original_photo.read()

Видаляємо фон зображення:

remove_background = rb.remove(read_original)

Створюємо файл з відредагованим зображенням:

edited_photo = open(edited, "wb")

Прапор “wb” означає запис у файл у двійковому форматі.

Поміщаємо зображення у новий файл:

edited_photo.write(remove_background)

Закриваємо обидва файли:

original_photo.close()
edited_photo.close()

Ось результат коду:

Фото без фону

Третій приклад

Останнім зображенням буде це:

Photo by Lance Reis on Unsplash

Останнім ми розглянемо спосіб з використанням бібліотеки OpenCV, яка встановлювалася на ваш комп’ютер разом із rembg раніше. Бібліотека OpenCV також надає функції для роботи з файлами.

Імпортуємо бібліотеку OpenCV:

import cv2

Ось код зі застосуванням даної бібліотеки:

def remove_photo_background(original, edited):
    original_photo = cv2.imread(original)
    remove_background = rb.remove(original_photo)
    edited_photo = cv2.imwrite(edited, remove_background)

    print(f"Image {original} successfully edited!")
    return edited_photo


remove_photo_background("abhinav-roy-SZh1kRFp8qM-unsplash.jpg", "without_background_3.png")

Читаємо файл з оригінальним зображенням:

original_photo = cv2.imread(original)

Видаляємо фон:

remove_background = rb.remove(original_photo)

Зберагіємо нове зображення:

edited_photo = cv2.imwrite(edited, remove_background)

Взагалі варто зазначити, що функції imread() перетворює зображення на матрицю, з якою потім працює функція imwrite().

Результат коду:

Фото без фону

Висновок

Ось таким чином можна легко видаляти фон за допомогою функції remove() бібліотеки rembg. Також на основі трьох прикладів ми побачили, що для роботи з файлами ми цілком можемо використовувати різні бібліотеки, або ж взагалі користуватися вбудованими функціями.

Всім дякую за увагу!

Статті про вітчизняний бізнес та цікавих людей:

Поділись своїми ідеями в новій публікації.
Ми чекаємо саме на твій довгочит!
Magnifique numérique
Magnifique numérique@nocturnal_reader we.ua/nocturnal_reader

Нічний читач

54Довгочити
633Прочитання
17Підписники
Підтримати
На Друкарні з 14 липня

Більше від автора

  • Клас itemgetter() у модулі operator

    Всіх вітаю! У даній статті ми продовжимо тему спеціальних властивостей словників у Python. На цей раз ми поговоримо про модуль operator та його клас itemgetter(), яка дозволяє працювати зі списками та словниками у Python.

    Теми цього довгочиту:

    Програмування
  • Метод split() у Python

    Всіх вітаю! Сьогодні ми розглянемо метод split() у Python та побачимо, як використовувати її на прикладах.

    Теми цього довгочиту:

    Програмування
  • Створюємо стовпчикові графіки за допомогою plotly

    Всіх вітаю! У цій статті пропоную вам зануритися у графіки та візуалізацію на Python за допомогою plotly. На цей раз ми втілимо графік прослуховувань різних реп виконавців за місяць та графік з оцінками деяких альбомів за сайтом AOTY.

    Теми цього довгочиту:

    Програмування

Це також може зацікавити:

  • Тестова документація

    Кожен тестувальник регулярно використовує тестову документацію, завдяки ній тестувальник спілкується з розробниками, завдяки ній тестувальник знає що і коли робити.

    Теми цього довгочиту:

    Qa
  • Java. Трішки про JVM та graceful shutdown

    У сучасних Java-додатках важливо забезпечити не лише високу продуктивність, але й коректне завершення роботи. Тому розглянемо основні потоки JVM, процес graceful shutdown, використання класу Runtime та механізму shutdown hooks для ефективного завершення роботи програм.

    Теми цього довгочиту:

    Java

Коментарі (0)

Підтримайте автора першим.
Напишіть коментар!

Це також може зацікавити:

  • Тестова документація

    Кожен тестувальник регулярно використовує тестову документацію, завдяки ній тестувальник спілкується з розробниками, завдяки ній тестувальник знає що і коли робити.

    Теми цього довгочиту:

    Qa
  • Java. Трішки про JVM та graceful shutdown

    У сучасних Java-додатках важливо забезпечити не лише високу продуктивність, але й коректне завершення роботи. Тому розглянемо основні потоки JVM, процес graceful shutdown, використання класу Runtime та механізму shutdown hooks для ефективного завершення роботи програм.

    Теми цього довгочиту:

    Java