一.该方案使用场景
- 如果你想去水印、图像修复、P图等工作内容, 可以试试这个方案。
- 如果你是从事Ai算法工程师,对于不想要的图像样本,更可以用这种方案去除样本中不想要的类别物体。
二. 我的运行环境
ubuntu16.04的运行环境
以及比较重要的一些库以及对应的版本:torch, huggingface_hub,diffusers,transformers,lama-cleaner
(如果huggingface_hub版本安装太高,会出现以下错误:ImportError: cannot import name 'cached_download' from 'huggingface_hub')
bash
- Platform: Linux-5.4.0-150-generic-x86_64-with-glibc2.27
- Python version: 3.9.0
- torch: 1.11.0
- torchvision: 0.12.0
- Pillow: 9.4.0
- diffusers: 0.16.1
- transformers: 4.27.4
- opencv-python: 4.8.1.78
- xformers: N/A
- accelerate: N/A
- lama-cleaner: 1.2.5
- rembg: N/A
- realesrgan: N/A
- gfpgan: N/A
- huggingface_hub:0.16.4
三. 环境安装
(建议用虚拟环境安装)
1. 安装lama-cleaner
bash
pip install lama-cleaner
2. 下载lama模型:
bash
wget https://github.com/Sanster/models/releases/download/add_big_lama/big-lama.pt
3. 将下载的pt, 放到自己的路径中:
bash
cp lama-big.pt /home/xxx/Downloads/LaMa/weights/torch/hub/checkpoints/big-lama.pt # 自己的路径
(ubuntu默认路径:/home/xxx/.cache/torch/hub/checkpoints # 这是torch加载pt的默认路径)
4. 运行lama-cleaner的http协议服务
本机调用:
lama-cleaner --model=lama --device=cuda --port=8080 --model-dir=/home/xxx/Downloads/LaMa/weights
注意:到weights这一路径就可以,剩下路径代码会自动查找
局域网内其他机子调用
lama-cleaner --model=lama --device=cuda --port=8080 --host 0.0.0.0 --model-dir=/home/xxx/Downloads/LaMa/weights
注意:到weights这一路径就可以,剩下路径会代码自动查找
(需要注意路径的问题, 只写到/home/xxx/Downloads/LaMa/weights, 后面剩下的缺的路径/torch/hub/checkpoints/big-lama.pt, 源代码代码会自动将路径拼接好)


四. python代码运行
1.python代码实现调用post请求lama-cleaner服务
参数注释:
1_mask.jpg是单通道的掩膜图(jpg或者png), 要扣除的区域设置为白色, 其他不扣除的区域设置为黑色.
(如果没有1_mask.jpg图, 可以参考下面的"附:生成mask.jpg的图"的代码, 手动生成1_mask.jpg的图)
xxx.jpg是3通道
python
import requests
def removeWatermark(image, mask, save_image):
url = "http://127.0.0.1:8080/inpaint" # 本机请求
#url = "http://192.168.xx.xx:8080/inpaint" # 局域网内其他机子请求
# print(img_path)
response = requests.post(
url,
files={"image": image, "mask": mask},
data={
"ldmSteps": 25,
"ldmSampler": "plms",
"hdStrategy": "Crop",
"zitsWireframe": True,
"hdStrategyCropMargin": 196,
"hdStrategyCropTrigerSize": 800,
"hdStrategyResizeLimit": 2048,
"prompt": "",
"negativePrompt": "",
"useCroper": False,
"croperX": 64,
"croperY": -16,
"croperHeight": 512,
"croperWidth": 512,
"sdScale": 1.0,
"sdMaskBlur": 5,
"sdStrength": 0.75,
"sdSteps": 50,
"sdGuidanceScale": 7.5,
"sdSampler": "uni_pc",
"sdSeed": -1,
"sdMatchHistograms": False,
"cv2Flag": "INPAINT_NS",
"cv2Radius": 5,
"paintByExampleSteps": 50,
"paintByExampleGuidanceScale": 7.5,
"paintByExampleMaskBlur": 5,
"paintByExampleSeed": -1,
"paintByExampleMatchHistograms": False,
"paintByExampleExampleImage": None,
"p2pSteps": 50,
"p2pImageGuidanceScale": 1.5,
"p2pGuidanceScale": 7.5,
"controlnet_conditioning_scale": 0.4,
"controlnet_method": "control_v11p_sd15_canny",
"paint_by_example_example_image": None,
},
)
with open(save_image, "wb") as f:
f.write(response.content)
# print(image_name)
f_mask = open('1_mask.jpg', "rb").read()
f_image = open( "1.jpg", "rb").read()
save_image = '/home/bcd/Downloads/250217_LaMa/test_ps_ai_imgs/1_out.jpg'
removeWatermark(image=f_image, mask=f_mask, save_image=save_image)
附:生成mask.jpg的图
python
import cv2
import numpy as np
mask = np.zeros((1026, 2048), dtype=np.uint8) # 设置为自己的(height, width) 全黑的图
cv2.rectangle(mask, (1132, 193), (1392, 415), 255, -1) # 绘制要扣除的矩形区域,为白色区域
cv2.imwrite("1_mask.jpg", mask)
五. 网页UI手动操作使用
浏览器输入网址即可使用, 上传一张图, 手动涂抹不想要的区域即可.
(长按ctrl可以进行多处消除涂抹)
python
# 网页输入
http://127.0.0.1:8080/ # 本机
http://192.168.xx.xx:8080/ # 局域网

网页上还可以自行下载其他模型使用:

六.其他算法模型调用和使用
(可以自行选择模型, 测试哪个效果更好)
超简单搭建AI去水印和图像修复算法lama-cleaner(包含网页UI操作和代码运行)二