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

相关内容

热门资讯

一分钟揭秘辅助!微乐小程序游戏... 一分钟揭秘辅助!微乐小程序游戏破解器,微乐家乡小程序修改器-一直真的有辅助挂1)微乐小程序游戏破解器...
技术分享开挂!微信小程序微乐辅... 技术分享开挂!微信小程序微乐辅助器,微乐贵阳捉鸡麻将能不能开挂-一贯是真的有辅助工具在进入微信小程序...
科技介绍开挂!微乐小程序家乡自... 科技介绍开挂!微乐小程序家乡自建房辅助app,微乐自建房脚本如何下载-其实是有辅助神器1、超多福利:...
重大通报辅助!微信小程序微乐辅... 重大通报辅助!微信小程序微乐辅助器教程,微乐小程序微乐家乡辅助器-都是真的有辅助插件重大通报辅助!微...
玩家必备教程辅助!微信小程序游... 玩家必备教程辅助!微信小程序游戏破解微乐游戏,微信小程序微乐安徽辅助苹果-确实有辅助脚本1、完成微信...
科技分享开挂!微乐手游辅助脚本... 科技分享开挂!微乐手游辅助脚本平台,微乐小程序辅助器免费-其实有辅助神器一、微乐手游辅助脚本平台可以...
发现玩家辅助!微乐小程序辅助工... 您好,微乐小程序辅助工具这款游戏可以开挂的,确实是有挂的,需要了解加去威信【136704302】很多...
推荐一款透视挂!微乐小程序家乡... 推荐一款透视挂!微乐小程序家乡自建房辅助app,微乐河南小程序微乐辅助脚本-原来存在有辅助挂微乐小程...
一起来探讨开挂!微乐小程序开挂... 一起来探讨开挂!微乐小程序开挂黑科技,微乐自建房免费黑科技推荐-本来真的是有辅助脚本小薇(辅助器软件...
2024教程辅助!微信小程序微... 2024教程辅助!微信小程序微乐辅助免费,微乐小程序辅助教程-都是是真的有辅助挂1、点击下载安装,微...