【深度学习】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了。

相关内容

热门资讯

一分钟内幕!科乐吉林麻将系统发... 一分钟内幕!科乐吉林麻将系统发牌规律,福建大玩家确实真的是有挂,技巧教程(有挂ai代打);所有人都在...
一分钟揭秘!微扑克辅助软件(透... 一分钟揭秘!微扑克辅助软件(透视辅助)确实是有挂(2024已更新)(哔哩哔哩);1、用户打开应用后不...
五分钟发现!广东雀神麻雀怎么赢... 五分钟发现!广东雀神麻雀怎么赢,朋朋棋牌都是是真的有挂,高科技教程(有挂方法)1、广东雀神麻雀怎么赢...
每日必看!人皇大厅吗(透明挂)... 每日必看!人皇大厅吗(透明挂)好像存在有挂(2026已更新)(哔哩哔哩);人皇大厅吗辅助器中分为三种...
重大科普!新华棋牌有挂吗(透视... 重大科普!新华棋牌有挂吗(透视)一直是有挂(2021已更新)(哔哩哔哩)1、完成新华棋牌有挂吗的残局...
二分钟内幕!微信小程序途游辅助... 二分钟内幕!微信小程序途游辅助器,掌中乐游戏中心其实存在有挂,微扑克教程(有挂规律)二分钟内幕!微信...
科技揭秘!jj斗地主系统控牌吗... 科技揭秘!jj斗地主系统控牌吗(透视)本来真的是有挂(2025已更新)(哔哩哔哩)1、科技揭秘!jj...
1分钟普及!哈灵麻将攻略小,微... 1分钟普及!哈灵麻将攻略小,微信小程序十三张好像存在有挂,规律教程(有挂技巧)哈灵麻将攻略小是一种具...
9分钟教程!科乐麻将有挂吗,传... 9分钟教程!科乐麻将有挂吗,传送屋高防版辅助(总是存在有挂)1、完成传送屋高防版辅助透视辅助安装,帮...
每日必看教程!兴动游戏辅助器下... 每日必看教程!兴动游戏辅助器下载(辅助)真是真的有挂(2025已更新)(哔哩哔哩)1、打开软件启动之...