sssxyd / removebg-by-ai

AI抠图工具
Apache License 2.0
24 stars 6 forks source link
ai remove-background removebg

项目简介

RemoveBG by AI 是一个利用AI模型对指定图片的指定矩形区域进行抠图,将该区域内的主要单一物体或人物扣取出来,去除背景的工具。该项目使用了 RMBG-1.4 AI模型

效果展示

上传图片 框选区域 抠图效果

功能特性

安装与使用

Windows用户

Windows程序的端口号80,如需修改端,可编辑 .env 文件。

源码编译

  1. 克隆此仓库:

    git clone https://github.com/sssxyd/removebg-by-ai.git
  2. 下载模型,因本账号的LFS配额用完,可从RMBG-1.4,或 百度网盘提取码1234, 下载模型文件覆盖到model目录

  3. 安装运行:

    # 确保python版本 >= 3.10
    cd removebg-by-ai
    python -m venv venv
    source venv/bin/activate  # Windows 用户使用 `venv\Scripts\activate`
    pip install -r requirements.txt
    
    python start.py

    或者使用docker安装

    cd removebg-by-ai
    docker build -t sssxyd/rmbgapi .
    docker run -d -p 80:10086 sssxyd/rmbgapi

Command Line:

  1. Compile from source code

    pyinstaller --onefile --name=removebg --icon=favicon.ico .\command.py

    Please ensure that the packaged executable file and the model directory are in the same directory.

  2. Download Windows executable file

  3. Usage

    Usage: removebg SRC_IMAGE_PATH TARGET_IMAGE_PATH
    or:    removebg SRC_IMAGE_URL TARGET_IMAGE_PATH
    Options Supported:
            --rect=rectangle      optional, selected rectangle: x,y,width,height   

    API接口

/removebg

/removebg

使用示例

http://localhost/removebg?url=https://xxx.com/xx.jpg
    const payload = {
        base64: imageBase64,
        selectPolygon: [[100,100], [200,100], [100, 200], [200,200]],
        editorSize: [400, 300],
        responseFormat: 0
    }
    fetch('/removebg', {
        method: 'POST',
        headers: {
            'Content-Type': 'application/json'
        },
        body: JSON.stringify(payload)
    })
    .then(resp => {
        if(resp.status == 200){
            resp.json().then(apiResult => {
                if(apiResult.code != 0){
                    alert(apiResult.msg)
                }
                else{
                    responseImageBase64 = apiResult.result
                }
            }).catch(error => {
                console.log(error)
            })
        }
        else{
            console.error(resp.status + ":" + resp.statusText)
        }
    })
    .catch(error => {
        console.log(error)
    })