Друкарня від 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. Також на основі трьох прикладів ми побачили, що для роботи з файлами ми цілком можемо використовувати різні бібліотеки, або ж взагалі користуватися вбудованими функціями.

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

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

Поділись своїми ідеями в новій публікації.
Ми чекаємо саме на твій довгочит!
Mystique Lord
Mystique Lord@nocturnal_reader

Нічний читач

446Прочитань
22Автори
12Читачі
Підтримати
На Друкарні з 14 липня

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

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

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

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

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