找回密码
 会员注册
查看: 38|回复: 0

采用Python的rembg库去除图片背景

[复制链接]

7

主题

0

回帖

22

积分

新手上路

积分
22
发表于 2024-9-13 15:30:31 | 显示全部楼层 |阅读模式
近期,在工作中提出一个新的需求,需要将用户上传的人脸照片的背景去除,也就是通俗来讲的抠图。调研常用的一些工具和框架,发现了Python的rembg库。该库使用了深度学习模型,尤其是U-Net结构的卷积神经网络(CNN网络),能够高效、准确的提取图片的前景物体,同时去除图片背景,最终生成带有透明通道(Alpha通道)的png图片。        Rembg工具库使用U-Net结构的卷积神经网络(CNN),这是一种在图像分割效果很好的模型。U-Net模型的特点是结合使用上采样和下采样的分割网络,既能捕捉到图片的全局信息,又不忽略图片局部细节,使其具备了强大的图片前景和背景的分割能力。Rembg库的优势简单易用,使用Pythonapi接口,数行代码即可实现图片背景去除工作。处理速度快,使用高效的深度学习模型,可在短时间内处理大量图片,即便是处理高分辨率图片也拥有较快的处理速度。精度高,即使图片有复杂的光线条件和背景,对毛发、‌透明物体或复杂边缘的处理也能保持较高的精度。智能识别,采用先进的深度学习算法,‌能够准确识别图像中的主体与背景,‌无需手动调整,‌一键即可完成抠图。开源免费:‌遵循MIT许可证,‌允许自由使用、‌修改和分享。‌项目地址        源码:https://github.com/danielgatis/rembg安装和使用安装使用pip安装rembg库pipinstallrembg命令行首先查看命令行帮助文档PSD:\pythonCode\pythonProject>rembg--helpUsage:rembg.exe[OPTIONS]COMMAND[ARGS]...Options: --version Showtheversionandexit. --help  Showthismessageandexit.Commands: b forabytestreamasinput d downloadallmodels i forafileasinput p forafolderasinput s forahttpserver 单图片处理        本人使用E:\img_test\input\目录作为图片输入地址,使用E:\img_test\output作为图片输出地址rembgiE:\img_test\input\1.jpgE:\img_test\output\1.png效果如下:图片目录处理rembgpE:\img_test\input\E:\img_test\output\效果如下:WebServer运行rembgs--host0.0.0.0--port7000--log_levelinfo使用rembgs命令用于启动http服务器。启动成功在浏览器打开http://localhost:7000,如下图所示,即可上传图片执行去除背景操作。python中使用单图片处理代码示例fromrembgimportremoveif__name__=='__main__':#待处理的图片路径input_path='E:\\img_test\\input\\1.jpg'#处理后存储的图片路径output_path='E:\\img_test\\output\\1.png'withopen(input_path,'rb')asi:withopen(output_path,'wb')aso:input=i.read()output=remove(input)o.write(output) 使用PIL库目录批处理文件代码示例#!/usr/bin/envpython#-*-coding:utf-8-*-"""@Time:2024/7/16下午3:19@Author:BillFang@File:RemoveBg.py@Desc:"""fromPILimportImageimportosfromrembgimportremoveinput_img="E:\\img_test\\input"output_img="E:\\img_test\\output"if__name__=='__main__':imgs_path=getFileList(input_img)forimg_pathinimgs_path:img_name=os.path.basename(img_path)ifimg_name.endswith('.jpg')orimg_name.endswith('.jpeg'):#解决jpg图片无Alpha通道input=Image.open(img_path).convert('RGB')else:input=Image.open(img_path)#rembg去除图片背景output=remove(input)#将去除背景后的图片背景设置为白色background=Image.new('RGBA',output.size,(255,255,255,255))background.paste(output,mask=output)out_path=os.path.join(output_img,img_name.replace('.jpg','.png').replace('.jpeg','.png'))background.save(out_path)input.close()output.close()background.close()#获取目录下全部图片文件defgetFileList(file_path):imgs_path=[]forfilenameinos.listdir(file_path):img_path=os.path.join(file_path,filename).lower()imgs_path.append(img_path)returnimgs_path遇到问题问题描述        初次执行代码时需要下载v2net.onnx模型文件,模型文件大小为176M,由于网络条件差,导致模型下载失败,运行报错如下:解决方法第一种解决方法        从https://github.com/danielgatis/rembg/releases/download/v0.0.0/u2net.onnx地址下载模型文件,然后放入C:\Users\njfan\.u2net\u2net.onnx目录中。第二种解决方法        使用rembg的自定义模型,代码如下:importosfromrembgimportremove,new_sessionif__name__=='__main__':#加载自定义模型model_path="E:\\img_test\\u2net.onnx"withopen(input_path,'rb')asi:withopen(output_path,'wb')aso:input=i.read()#注意model_name必须为u2net_customsession=new_session(model_name='u2net_custom',model_path=model_path)output_image=remove(input,session=session)o.write(output_image)        首先通过new_session()函数自定义模型,然后使用remove(input,session=session)函数调用自定义模型去除图片背景。Rembg自带模型u2net:一般用例的预训练模型。u2netp:u2net轻量版。u2net_human_seg:用于人体分割的预训练模型。u2net_cloth_seg:用于从人体肖像解析服装的预训练模型。这里的衣服分为三类:上身,下身和全身。silueta:与u2net相同,但大小减少到43Mb。isnet-general-use:针对一般用例的新的预训练模型。isnet-anime:针对动漫角色的高精度分割。sam(encoder下载encoder, decoder下载):适用于任何用例的预训练模型。总结        rembg库是Python语言中一款强大的并且高效的图片背景去除工具包。其高精度、高效、自定义模型等特性,使得rembg库能够在电商平台、社交媒体和图片编辑软件中得到广泛应用。最后希望能给阅读本文的用户提供到帮助。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 会员注册

本版积分规则

QQ|手机版|心飞设计-版权所有:微度网络信息技术服务中心 ( 鲁ICP备17032091号-12 )|网站地图

GMT+8, 2024-12-25 13:15 , Processed in 0.596010 second(s), 25 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表