【深度学习】MAT,Image Inpainting,代码实战,接口直接用,水印去除,水印Inpaint
创始人
2024-12-29 07:40:48
0

https://github.com/fenglinglwb/mat

文章目录

  • 基础镜像
  • fastapi
  • 总结
  • 图片批量访问去除水印的请求代码
  • 使用感受

基础镜像

docker run -it -p 7898:7860 --gpus device=3 kevinchina/deeplearning:pytorch2.3.0-cuda12.1-cudnn8-devel-xformers bash 
git clone https://github.com/fenglinglwb/MAT.git   cd MAT/  pip install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple 
apt-get update && apt-get install ffmpeg libsm6 libxext6  -y 

一系列操作后得到一个环境镜像,FFHQ_512.pkl在其中:

docker push kevinchina/deeplearning:pytorch2.3.0-cuda12.1-cudnn8-devel-mat 

可以用这个镜像尝试inpaint效果:

docker run -it -p 7898:7860 --gpus device=3 kevinchina/deeplearning:pytorch2.3.0-cuda12.1-cudnn8-devel-mat bash 

执行inpaint:

cd /workspace/MAT  python generate_image.py --network pretrained/FFHQ_512.pkl --dpath images --mpath masks --outdir samples 

原图
在这里插入图片描述
mask图:
在这里插入图片描述
结果去除图:
在这里插入图片描述

fastapi

安装了一些fastapi的环境:

kevinchina/deeplearning:pytorch2.3.0-cuda12.1-cudnn8-devel-mat-apibase 

进而写dockerfile:

FROM kevinchina/deeplearning:pytorch2.3.0-cuda12.1-cudnn8-devel-mat-apibase EXPOSE 7860 ENTRYPOINT cd /workspace/MAT/ && python /workspace/MAT/mianfastapi.py 

build:

docker build  -f Dockerfile1 . -t kevinchina/deeplearning:pytorch2.3.0-cuda12.1-cudnn8-devel-mat-api 

只需要执行这个镜像就可以启动服务:

docker run -d -p 7898:7860 --gpus device=3 kevinchina/deeplearning:pytorch2.3.0-cuda12.1-cudnn8-devel-mat-api  

在这里插入图片描述

总结

启动服务:

docker run -d -p 7898:7860 --gpus device=3 kevinchina/deeplearning:pytorch2.3.0-cuda12.1-cudnn8-devel-mat-api  

访问服务:

import requests  url = "http://10.136.19.26:7898/inpaint" image_path = "image.jpg" mask_path = "mask.jpg"  # 读取图像和掩码文件 with open(image_path, "rb") as img_file, open(mask_path, "rb") as mask_file:     files = {         "image": img_file,         "mask": mask_file     }      # 发送POST请求     response = requests.post(url, files=files)      # 检查响应状态码     if response.status_code == 200:         # 保存生成的图像         with open("output.png", "wb") as out_file:             out_file.write(response.content)         print("生成的图像已保存为 output.png")     else:         print(f"请求失败,状态码: {response.status_code}")         print(response.text)  

图片批量访问去除水印的请求代码

import base64 import io import os import traceback  import requests import cv2 import numpy as np import json from PIL import Image from PIL import ImageDraw import numpy as np import cv2 from tqdm import tqdm import json   def listPathAllfiles(dirname):     result = []     for maindir, subdir, file_name_list in os.walk(dirname):         for filename in file_name_list:             apath = os.path.join(maindir, filename)             result.append(apath)     return result   url = "http://10.136.19.26:7898/inpaint" # image_path = "image.jpg" # mask_path = "mask.jpg" # # # 读取图像和掩码文件 # with open(image_path, "rb") as img_file, open(mask_path, "rb") as mask_file: #     files = { #         "image": img_file, #         "mask": mask_file #     } # #     # 发送POST请求 #     response = requests.post(url, files=files) # #     # 检查响应状态码 #     if response.status_code == 200: #         # 保存生成的图像 #         with open("output.png", "wb") as out_file: #             out_file.write(response.content) #         print("生成的图像已保存为 output.png") #     else: #         print(f"请求失败,状态码: {response.status_code}") #         print(response.text)   src = r"/ssd/xiedong/xiezhenceshi/xiezhen_datasets" save_img_dst_output_inpaint_alpha = r"/ssd/xiedong/xiezhenceshi/inpaint_alpha" os.makedirs(save_img_dst_output_inpaint_alpha, exist_ok=True) files = listPathAllfiles(src) files.sort() files = [file for file in files if file.endswith(".jpg")]  for src_image_file in tqdm(files):     try:         ocr_ret_file = src_image_file.replace(".jpg", ".json")         output_image_file_alpha = src_image_file.replace(src, save_img_dst_output_inpaint_alpha)         if not os.path.exists(ocr_ret_file):             print(f"ocr_ret_file not exists: {ocr_ret_file}")             continue         if os.path.exists(output_image_file_alpha):             print(f"output_image_file_alpha exists: {output_image_file_alpha}")             continue         output_image_file_alpha_father = os.path.dirname(output_image_file_alpha)         os.makedirs(output_image_file_alpha_father, exist_ok=True)          # 造一个mask图片在本地         ocr_json_data = json.load(open(ocr_ret_file, "r", encoding="utf-8"))         image = cv2.imread(src_image_file)         # 只要中心512*512的图         image_zitu = image[image.shape[0] // 2 - 256:image.shape[0] // 2 + 256,                      image.shape[1] // 2 - 256:image.shape[1] // 2 + 256]         mask = np.zeros(image.shape, dtype=np.uint8)         for item in ocr_json_data:             box = item[0]             cv2.fillPoly(mask, np.array([box], dtype=np.int32), (255, 255, 255))         # 只要中心512*512的图         mask_zitu = mask[mask.shape[0] // 2 - 256:mask.shape[0] // 2 + 256,                     mask.shape[1] // 2 - 256:mask.shape[1] // 2 + 256]         # 取反mask_zitu的选择         mask_zitu = cv2.bitwise_not(mask_zitu)         src_image_file_rb = cv2.imencode('.jpg', image_zitu)[1].tobytes()         mask_file_rb = cv2.imencode('.jpg', mask_zitu)[1].tobytes()          files = {             "image": src_image_file_rb,             "mask": mask_file_rb         }          # 发送POST请求         response = requests.post(url, files=files)          # 检查响应状态码         if response.status_code == 200:             # 保存生成的图像             # with open("output.png", "wb") as out_file:             #     out_file.write(response.content)             # print("生成的图像已保存为 output.png")             image_inpaint = Image.open(io.BytesIO(response.content)).convert('RGB')             image_inpaint_cv2 = np.array(image_inpaint)             image_inpaint_cv2 = cv2.cvtColor(image_inpaint_cv2, cv2.COLOR_RGB2BGR)              # 贴回到原图             image[image.shape[0] // 2 - 256:image.shape[0] // 2 + 256, \             image.shape[1] // 2 - 256:image.shape[1] // 2 + 256] = image_inpaint_cv2              cv2.imwrite(output_image_file_alpha, image)         else:             print(f"请求失败,状态码: {response.status_code}")             print(response.text)     except:         traceback.print_exc()  

使用感受

不行,基本传统的inpaint就是很垃圾,效果不行无法投入使用,生成还得看StableDiffusion,但StableDiffusion就是很慢,如果有希望把LCM和小的SD模型用起来,就很nice了。

相关内容

热门资讯

黑科技工具(pokerwoel... 黑科技工具(pokerwoeld安卓下载)外挂透明挂辅助app(透视)教你教程(2026已更新)(哔...
黑科技ai(聚星扑克德州)外挂... 黑科技ai(聚星扑克德州)外挂透明挂黑科技辅助代打(透视)新2025教程(2023已更新)(哔哩哔哩...
黑科技安装!aapoker有外... 黑科技安装!aapoker有外挂吗,太坑了好像真的是有挂(透视)2025版教程(2020已更新)(哔...
黑科技实锤(WPK私人房)外挂... 黑科技实锤(WPK私人房)外挂透明挂辅助插件(透视)解密教程(2022已更新)(哔哩哔哩)1)WPK...
黑科技透明挂(aapoker)... 黑科技透明挂(aapoker)外挂透明挂黑科技辅助挂(透视)可靠教程(2021已更新)(哔哩哔哩)1...
黑科技科技(WePoKe辅助使... 黑科技科技(WePoKe辅助使用方法)太离谱了总是是有挂(透视)安装教程(2023已更新)(哔哩哔哩...
黑科技好友(微扑克软件)外挂透... 黑科技好友(微扑克软件)外挂透明挂辅助app(透视)透明教程(2022已更新)(哔哩哔哩)1、完成微...
黑科技透明挂(wepOkE)外... 黑科技透明挂(wepOkE)外挂透明挂黑科技辅助软件(透视)可靠技巧(2024已更新)(哔哩哔哩)1...
黑科技存在(红龙扑克辅助器怎么... 黑科技存在(红龙扑克辅助器怎么下载)太实锤了原来存在有挂(透视)2025新版总结(2024已更新)(...
黑科技能赢(德扑之星创建)外挂... 黑科技能赢(德扑之星创建)外挂透明挂辅助软件(透视)介绍教程(2026已更新)(哔哩哔哩)1、德扑之...