RMBG v1.4 是最先进的背景去除模型,旨在有效地将一系列类别和图像类型的前景与背景分开。该模型已在精心挑选的数据集上进行了训练,其中包括:一般库存图像、电子商务、游戏和广告内容,使其适用于支持大规模企业内容创建的商业用例。其准确性、效率和多功能性目前可与领先的 Source Available 型号相媲美。在内容安全、合法许可的数据集和偏见缓解至关重要的情况下,它是理想的选择。
模型链接:https://huggingface.co/briaai/RMBG-1.4
Demo 链接:https://huggingface.co/spaces/briaai/BRIA-RMBG-1.4
下面是测试的代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 |
import streamlit as st from transformers import pipeline from PIL import Image import io from streamlit_image_comparison import image_comparison # 定义删除背景模型 def load_model(): return pipeline("image-segmentation", model="briaai/RMBG-1.4", trust_remote_code=True) # 处理图像的函数 def process_image(pipe, image): # 处理图片:获取删除背景后的图像和 mask pillow_mask = pipe(image, return_mask=True) # 获取遮罩 pillow_image = pipe(image) # 应用遮罩后的图像 # 将结果保存为临时文件 mask_buffer = io.BytesIO() pillow_mask.save(mask_buffer, format="PNG") mask_buffer.seek(0) image_buffer = io.BytesIO() pillow_image.save(image_buffer, format="PNG") image_buffer.seek(0) return pillow_mask, pillow_image, mask_buffer, image_buffer # 主函数,用于运行 Streamlit 应用 def main(): # 加载模型 pipe = load_model() # Streamlit 页面设置 st.title("删除背景工具") st.write("请上传一张图片进行处理") # 上传图片文件 uploaded_file = st.file_uploader("选择一张图片", type=["jpg", "jpeg", "png"]) # 如果上传了图片,显示原图并提供删除背景按钮 if uploaded_file is not None: # 读取并显示原图 image = Image.open(uploaded_file) # 创建一列用于显示上传的文件和删除背景按钮 col1, _ = st.columns([2, 1]) with col1: st.subheader("原图") st.image(image, caption="上传的原图", use_column_width=True) # 将删除背景按钮放在图片下面 if st.button("删除背景"): # 调用删除背景的函数 pillow_mask, pillow_image, mask_buffer, image_buffer = process_image(pipe, image) # 将处理结果保存到 session_state 中 st.session_state["pillow_mask"] = pillow_mask st.session_state["pillow_image"] = pillow_image st.session_state["original_image"] = image st.session_state["mask_buffer"] = mask_buffer st.session_state["image_buffer"] = image_buffer # 如果已经处理过图像,显示删除背景前后对比 if "pillow_mask" in st.session_state and "pillow_image" in st.session_state: original_image = st.session_state["original_image"] processed_mask = st.session_state["pillow_mask"] processed_image = st.session_state["pillow_image"] # 创建两列用于显示删除背景后的 Mask 和 Output 图像 col1, col2 = st.columns(2) with col1: st.subheader("删除背景的 Mask") st.image(processed_mask, caption="删除背景的 Mask", use_column_width=True) st.download_button(label="下载遮罩图像", data=st.session_state["mask_buffer"], file_name="output_mask.png", mime="image/png") with col2: st.subheader("删除背景后的图像") st.image(processed_image, caption="删除背景后的图像", use_column_width=True) st.download_button(label="下载删除背景后的图像", data=st.session_state["image_buffer"], file_name="output_image.png", mime="image/png") # 提供下载链接 # 显示图像对比工具 st.subheader("删除背景前后对比") image_comparison( img1=original_image, img2=processed_image, label1="原图", label2="删除背景后图像" ) # 运行主函数 if __name__ == "__main__": main() |
实现简单的文件上传,会显示处理后的图像和 mask,以及对比情况,下面是样例图片