Вот несколько способов создания онлайн-инструмента для удаления фона и примеры кода:
-
Использование алгоритма OpenCV и GrabCut:
import cv2 def remove_background(image_path): image = cv2.imread(image_path) mask = np.zeros(image.shape[:2], np.uint8) bgd_model = np.zeros((1, 65), np.float64) fgd_model = np.zeros((1, 65), np.float64) rect = (50, 50, image.shape[1]-50, image.shape[0]-50) cv2.grabCut(image, mask, rect, bgd_model, fgd_model, 5, cv2.GC_INIT_WITH_RECT) mask = np.where((mask == 2) | (mask == 0), 0, 1).astype('uint8') image = image * mask[:, :, np.newaxis] return image # Usage image_path = 'path/to/your/image.jpg' result = remove_background(image_path) cv2.imshow('Result', result) cv2.waitKey(0) cv2.destroyAllWindows() -
Использование глубокого обучения и предварительно обученной модели:
import cv2 import numpy as np import tensorflow as tf def remove_background(image_path): model = tf.keras.models.load_model('path/to/your/model.h5') image = cv2.imread(image_path) image = cv2.resize(image, (224, 224)) image = np.expand_dims(image, axis=0) image = image / 255.0 mask = model.predict(image) mask = mask.reshape((224, 224)) mask = cv2.resize(mask, (image.shape[1], image.shape[0])) mask = np.where(mask > 0.5, 1, 0).astype('uint8') image = image * mask[:, :, np.newaxis] return image # Usage image_path = 'path/to/your/image.jpg' result = remove_background(image_path) cv2.imshow('Result', result) cv2.waitKey(0) cv2.destroyAllWindows() -
Использование API удаления.bg:
import requests import shutil def remove_background(image_path, api_key): url = 'https://api.remove.bg/v1.0/removebg' response = requests.post( url, files={'image_file': open(image_path, 'rb')}, data={'size': 'auto'}, headers={'X-Api-Key': api_key} ) if response.status_code == requests.codes.ok: with open('path/to/save/result.png', 'wb') as out_file: out_file.write(response.content) return 'path/to/save/result.png' else: print("Error:", response.status_code, response.text) return None # Usage image_path = 'path/to/your/image.jpg' api_key = 'your_api_key' result_path = remove_background(image_path, api_key) if result_path: img = cv2.imread(result_path) cv2.imshow('Result', img) cv2.waitKey(0) cv2.destroyAllWindows()