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

相关内容

热门资讯

热点推荐!创思维激k辅助工具,... 热点推荐!创思维激k辅助工具,点星休闲辅助器下载,细节开挂辅助教程(真的有挂)1、下载安装好点星休闲...
透明讲解!wepoker透视脚... 透明讲解!wepoker透视脚本免费使用视频,uupoker透视(起初有开挂辅助下载);无需打开直接...
一分钟了解!腾威互娱破解辅助工... 一分钟了解!腾威互娱破解辅助工具,掌中乐游戏中心破解版,发现开挂辅助教程(的确有挂);无需打开直接搜...
透视黑科技!wepoker辅助... 您好:wepoker辅助是真的吗这款游戏可以开挂的,确实是有挂的,很多玩家在这款游戏中打牌都会发现很...
透视安卓版!wepoker私人... 透视安卓版!wepoker私人局透视方法,wejoker辅助器怎么卖(起初有开挂辅助工具);无需打开...
今日科普!微乐小程序辅助开挂,... 今日科普!微乐小程序辅助开挂,河洛杠次插件,通报开挂辅助教程(有挂分享);无需打开直接搜索打开薇:1...
透视辅助!wepoker透视脚... 透视辅助!wepoker透视脚本免费使用视频,we poker辅助器v3.3(本然有开挂辅助工具);...
重大通报!指尖四川辅助破解版苹... 重大通报!指尖四川辅助破解版苹果,兴动互娱脚本,曝光开挂辅助教程(有挂透视);无需打开直接搜索薇:1...
透明了解!wepoker有辅助... 透明了解!wepoker有辅助器吗,hhpoker德州牛仔视频(往昔有开挂辅助器);无需打开直接搜索...
盘点几款!吉祥填大坑有插件吗,... 盘点几款!吉祥填大坑有插件吗,战神辅助器下载,科技开挂辅助教程(有人有挂)1、下载安装好吉祥填大坑有...