Rembg é uma ferramenta para remover o fundo de imagens.
Se este projeto ajudou você, considere fazer uma doação.
API de remoção de plano de fundo do PhotoRoom https://photoroom.com/api API de remoção de fundo rápida e precisa |
python: >3.7, <3.13
Se você já tiver onnxruntime
instalado, basta instalar rembg
:
pip install rembg # for library
pip install " rembg[cli] " # for library + cli
Caso contrário, instale rembg
com suporte explícito de CPU/GPU.
Suporte de CPU:
pip install rembg[cpu] # for library
pip install " rembg[cpu,cli] " # for library + cli
Suporte GPU:
Primeiro de tudo, você precisa verificar se o seu sistema suporta onnxruntime-gpu
.
Acesse https://onnxruntime.ai e verifique a matriz de instalação.
Se sim, basta executar:
pip install " rembg[gpu] " # for library
pip install " rembg[gpu,cli] " # for library + cli
Após a etapa de instalação, você pode usar o rembg apenas digitando rembg
na janela do seu terminal.
O comando rembg
possui 4 subcomandos, um para cada tipo de entrada:
i
para arquivosp
para pastass
para servidor httpb
para fluxo binário de pixels RGB24Você pode obter ajuda sobre o comando principal usando:
rembg --help
Além disso, sobre todos os subcomandos usando:
rembg < COMMAND > --help
i
Usado quando a entrada e a saída são arquivos.
Remova o fundo de uma imagem remota
curl -s http://input.png | rembg i > output.png
Remova o plano de fundo de um arquivo local
rembg i path/to/input.png path/to/output.png
Remova o fundo especificando um modelo
rembg i -m u2netp path/to/input.png path/to/output.png
Remova o fundo retornando apenas a máscara
rembg i -om path/to/input.png path/to/output.png
Remova o fundo aplicando um tapete alfa
rembg i -a path/to/input.png path/to/output.png
Passando parâmetros extras
SAM example
rembg i -m sam -x ' { "sam_prompt": [{"type": "point", "data": [724, 740], "label": 1}] } ' examples/plants-1.jpg examples/plants-1.out.png
Custom model example
rembg i -m u2net_custom -x ' {"model_path": "~/.u2net/u2net.onnx"} ' path/to/input.png path/to/output.png
p
Usado quando a entrada e a saída são pastas.
Remova o fundo de todas as imagens em uma pasta
rembg p path/to/input path/to/output
O mesmo que antes, mas observando o processamento de arquivos novos/alterados
rembg p -w path/to/input path/to/output
s
Usado para iniciar o servidor http.
rembg s --host 0.0.0.0 --port 7000 --log_level info
Para ver a documentação completa sobre endpoints, acesse: http://localhost:7000/api
.
Remover o plano de fundo de um URL de imagem
curl -s " http://localhost:7000/api/remove?url=http://input.png " -o output.png
Remover o plano de fundo de uma imagem enviada
curl -s -F file=@/path/to/input.jpg " http://localhost:7000/api/remove " -o output.png
b
Processe uma sequência de imagens RGB24 do stdin. Destina-se a ser usado com outro programa, como o FFMPEG, que envia dados de pixel RGB24 para stdout, que é canalizado para o stdin deste programa, embora nada impeça que você digite manualmente as imagens em stdin.
rembg b image_width image_height -o output_specifier
Argumentos:
output-%03u.png
, então os arquivos de saída serão nomeados output-000.png
, output-001.png
, output-002.png
, etc. salvo no formato PNG, independentemente da extensão especificada. Você pode omiti-lo para gravar os resultados no stdout.Exemplo de uso com FFMPEG:
ffmpeg -i input.mp4 -ss 10 -an -f rawvideo -pix_fmt rgb24 pipe:1 | rembg b 1280 720 -o folder/output-%03u.png
Os valores de largura e altura devem corresponder à dimensão das imagens de saída do FFMPEG. Nota para FFMPEG, a parte " -an -f rawvideo -pix_fmt rgb24 pipe:1
" é necessária para que tudo funcione.
Entrada e saída como bytes
from rembg import remove
input_path = 'input.png'
output_path = 'output.png'
with open ( input_path , 'rb' ) as i :
with open ( output_path , 'wb' ) as o :
input = i . read ()
output = remove ( input )
o . write ( output )
Entrada e saída como imagem PIL
from rembg import remove
from PIL import Image
input_path = 'input.png'
output_path = 'output.png'
input = Image . open ( input_path )
output = remove ( input )
output . save ( output_path )
Entrada e saída como uma matriz numpy
from rembg import remove
import cv2
input_path = 'input.png'
output_path = 'output.png'
input = cv2 . imread ( input_path )
output = remove ( input )
cv2 . imwrite ( output_path , output )
Forçar saída como bytes
from rembg import remove
input_path = 'input.png'
output_path = 'output.png'
with open ( input_path , 'rb' ) as i :
with open ( output_path , 'wb' ) as o :
input = i . read ()
output = remove ( input , force_return_bytes = True )
o . write ( output )
Como iterar arquivos de maneira performática
from pathlib import Path
from rembg import remove , new_session
session = new_session ()
for file in Path ( 'path/to/folder' ). glob ( '*.png' ):
input_path = str ( file )
output_path = str ( file . parent / ( file . stem + ".out.png" ))
with open ( input_path , 'rb' ) as i :
with open ( output_path , 'wb' ) as o :
input = i . read ()
output = remove ( input , session = session )
o . write ( output )
Para ver uma lista completa de exemplos de como usar o rembg, acesse a página de exemplos.
Basta substituir o comando rembg
por docker run danielgatis/rembg
.
Experimente isto:
docker run -v path/to/input:/rembg danielgatis/rembg i input.png path/to/output/output.png
Todos os modelos são baixados e salvos na pasta inicial do usuário no diretório .u2net
.
Os modelos disponíveis são:
Se você precisar de modelos mais ajustados, tente isto: # 193 (comentário)
Esta biblioteca depende diretamente da biblioteca onnxruntime. Portanto, só podemos atualizar a versão do Python quando onnxruntime fornecer suporte para essa versão específica.
Gostou de alguns dos meus trabalhos? Compre-me um café (ou mais provavelmente uma cerveja)
Copyright (c) Daniel Gatis, presente em 2020
Licenciado sob licença MIT