当前位置: 首页 > news >正文

【深度学习】fooocusapi,docker,inpainting图像

基础镜像制作来源

fooocusapi接口官方写的:

docker run -d --gpus=all \-e NVIDIA_DRIVER_CAPABILITIES=compute,utility \-e NVIDIA_VISIBLE_DEVICES=all \-p 8888:8888 konieshadow/fooocus-api

会下载一些模型,下载完后推这个镜像

docker commit 4dfd19dd1dc7 kevinchina/deeplearning:fooocusapi-office-v1

写个dockerfile:

FROM kevinchina/deeplearning:fooocusapi-office-v1
EXPOSE 7860
CMD ["python", "main.py", "--host", "0.0.0.0", "--port", "7860", "--skip-pip"]

构建一个新的镜像:

docker build -f Dockerfile . -t kevinchina/deeplearning:fooocusapi-office-v2
docker run -d --gpus=all -p 8881:7860 kevinchina/deeplearning:fooocusapi-office-v2

inpaint还需要下载一些东西,然年成为:

kevinchina/deeplearning:fooocusapi-office-v3

开启镜像

开启方式:

docker run --gpus device=0 -p 7881:7860 -d  kevinchina/deeplearning:fooocusapi-office-v3
docker run --gpus device=0 -p 7882:7860 -d  kevinchina/deeplearning:fooocusapi-office-v3
docker run --gpus device=1 -p 7883:7860 -d  kevinchina/deeplearning:fooocusapi-office-v3
docker run --gpus device=1 -p 7884:7860 -d  kevinchina/deeplearning:fooocusapi-office-v3
docker run --gpus device=1 -p 7885:7860 -d  kevinchina/deeplearning:fooocusapi-office-v3
docker run --gpus device=2 -p 7886:7860 -d  kevinchina/deeplearning:fooocusapi-office-v3
docker run --gpus device=2 -p 7887:7860 -d  kevinchina/deeplearning:fooocusapi-office-v3
docker run --gpus device=2 -p 7888:7860 -d  kevinchina/deeplearning:fooocusapi-office-v3
docker run --gpus device=3 -p 7889:7860 -d  kevinchina/deeplearning:fooocusapi-office-v3
docker run --gpus device=3 -p 7890:7860 -d  kevinchina/deeplearning:fooocusapi-office-v3
docker run --gpus device=3 -p 7891:7860 -d  kevinchina/deeplearning:fooocusapi-office-v3
docker run --gpus device=3 -p 7892:7860 -d  kevinchina/deeplearning:fooocusapi-office-v3
docker run --gpus device=0 -p 8550:7860 -d  kevinchina/deeplearning:fooocusapi-office-v3
docker run --gpus device=0 -p 8551:7860 -d  kevinchina/deeplearning:fooocusapi-office-v3
docker run --gpus device=1 -p 8552:7860 -d  kevinchina/deeplearning:fooocusapi-office-v3
docker run --gpus device=1 -p 8553:7860 -d  kevinchina/deeplearning:fooocusapi-office-v3

多进程请求inpaint:

import base64
import io
import os
import traceback
from multiprocessing import Manager, Poolimport requests
import cv2
import numpy as np
import json
from PIL import Image
from PIL import ImageDraw
import numpy as np
import cv2
import pyclipper
from shapely.geometry import Polygon
# plt显示图
import matplotlib.pyplot as plt
from tqdm import tqdm
import jsondef expand_polygon_pyclipper(polygon, expand_ratio):polygon_shape = Polygon(polygon)distance = (polygon_shape.area * (np.power(expand_ratio, 2) - 1) / polygon_shape.length)subject = [tuple(l) for l in polygon]padding = pyclipper.PyclipperOffset()padding.AddPath(subject, pyclipper.JT_ROUND, pyclipper.ET_CLOSEDPOLYGON)expanded = padding.Execute(distance)if expanded == []:expanded = np.array(expanded)else:expanded = np.array(expanded[0]).reshape(-1, 2)return expandeddef shrink_polygon_pyclipper(polygon, expand_ratio):polygon_shape = Polygon(polygon)distance = (polygon_shape.area * (np.power(expand_ratio, 2) - 1) / polygon_shape.length)subject = [tuple(l) for l in polygon]padding = pyclipper.PyclipperOffset()padding.AddPath(subject, pyclipper.JT_ROUND, pyclipper.ET_CLOSEDPOLYGON)expanded = padding.Execute(-distance)if expanded == []:expanded = np.array(expanded)else:expanded = np.array(expanded[0]).reshape(-1, 2)return expanded# 定义函数
def func(x):return 0.25 * (np.sin(x - np.pi / 2) + 1)# 生成0到pi的10个均匀分布的点
x_values = np.linspace(0, np.pi, 11)[1:][::-1]
y_values = func(x_values) + 1
# print(f"面积{len(y_values)}", y_values)
x_values = np.linspace(0, np.pi, 13)[1:]
weight_inpaint = func(x_values) * 2def draw_heatmap(image, polygons):# 计算函数值并加上1# 搞个和image一样大的二维矩阵inpaint_image_weights = np.zeros(image.shape[:2], dtype=np.float32)for i in range(10):for polygon in polygons:expanded_polygon = expand_polygon_pyclipper(polygon, y_values[i])if expanded_polygon.size > 0:cv2.fillPoly(inpaint_image_weights, [expanded_polygon.astype(np.int32)], weight_inpaint[i])# 收缩0.95区域用白色填充for polygon in polygons:for indx, shk in enumerate([0.99, 0.98]):expanded_polygon = shrink_polygon_pyclipper(polygon, shk)if expanded_polygon.size > 0:cv2.fillPoly(inpaint_image_weights, [expanded_polygon.astype(np.int32)], weight_inpaint[10 + indx])return inpaint_image_weightsdef 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 resultdef batch_process(index1, src_image_file, urls):url = urls[index1 % len(urls)]ocr_ret_file = src_image_file.replace(".jpg", ".json")txt_file = src_image_file.replace(".jpg", ".txt")output_image_file = src_image_file.replace(src, save_img_dst_output_image_file)output_image_file_alpha = src_image_file.replace(src, save_img_dst_output_inpaint_alpha)if not os.path.exists(ocr_ret_file):returnif not os.path.exists(txt_file):returnif os.path.exists(output_image_file_alpha):returnoutput_image_file_father = os.path.dirname(output_image_file)os.makedirs(output_image_file_father, exist_ok=True)output_image_file_alpha_father = os.path.dirname(output_image_file_alpha)os.makedirs(output_image_file_alpha_father, exist_ok=True)prompt = open(txt_file, "r", encoding="utf-8").read()if len(prompt) < 7:prompt = "a people"# 造一个mask图片在本地mask_file = "tmp_inpaint_mask.jpg"ocr_json_data = json.load(open(ocr_ret_file, "r", encoding="utf-8"))image = cv2.imread(src_image_file)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))# cv2.imwrite(mask_file, mask)src_image_file_rb = cv2.imencode('.jpg', image)[1].tobytes()mask_file_rb = cv2.imencode('.jpg', mask)[1].tobytes()# 构建请求的 multipart/form-data 数据files = {'input_image': ('src.jpg', src_image_file_rb, 'image/jpeg'),'input_mask': ('mask.jpg', mask_file_rb, 'image/jpeg')}data = {'prompt': prompt,'negative_prompt': 'big nose, watermark, signature, label, worst quality, low quality, normal quality, lowres, watermark, monochrome, grayscale, ugly, blurry, Tan skin, dark skin, black skin, skin spots, skin blemishes, age spot, glans, disabled, distorted, bad anatomy, morbid, malformation, amputation, bad proportions, twins, missing body, fused body, extra head, poorly drawn face, bad eyes, deformed eye, unclear eyes, cross-eyed, long neck, malformed limbs, extra limbs, extra arms, missing arms, bad tongue, strange fingers, mutated hands, missing hands, poorly drawn hands, extra hands, fused hands, connected hand, bad hands, wrong fingers, missing fingers, extra fingers, 4 fingers, 3 fingers, deformed hands, extra legs, bad legs, many legs, more than two legs, bad feet, wrong feet, extra feets, Negro, black people, black race','sharpness': '10','guidance_scale': '5','outpaint_distance_right': '0','loras': '[{"enabled":true,"model_name":"sd_xl_offset_example-lora_1.0.safetensors","weight":0.1}]','outpaint_distance_left': '0','outpaint_distance_bottom': '0','image_number': '1','negative_prompt': 'bad','refiner_switch': '0.5','base_model_name': 'juggernautXL_v8Rundiffusion.safetensors','image_seed': '-1','style_selections': ['Fooocus V2', 'Fooocus Enhance', 'Fooocus Sharp'],'inpaint_additional_prompt': '','outpaint_selections': '','refiner_model_name': 'None','aspect_ratios_selection': '1024*1024','performance_selection': 'Speed','require_base64': True,'async_process': False,}headers = {'accept': 'application/json'}try:if len(ocr_json_data) > 0:response = requests.post(url, files=files, data=data, headers=headers)postres = response.json()b64 = postres[0]["base64"]# 将base64字符串解码并保存为图像文件imgdata = base64.b64decode(b64)with open(output_image_file, 'wb') as f:f.write(imgdata)# print(f"Output image saved as {output_image_file}")# pillow讲b64直接转为imageimage_inpaint = Image.open(io.BytesIO(imgdata)).convert('RGB')image_inpaint_cv2 = np.array(image_inpaint)image_inpaint_cv2 = cv2.cvtColor(image_inpaint_cv2, cv2.COLOR_RGB2BGR)# 和原图进行alpha混合text_polys = []for item in ocr_json_data:box = item[0]text_polys.append(np.array(box))alpha = draw_heatmap(image, text_polys)inpaint_image_weights = alpha[:, :, np.newaxis]# print(inpaint_image_weights.shape)new_image = image_inpaint_cv2 * inpaint_image_weights + image * (1 - inpaint_image_weights)cv2.imwrite(output_image_file_alpha, new_image)else:# 直接写入cv2.imwrite(output_image_file_alpha, image)except:print(ocr_ret_file)if __name__ == '__main__':src = r"/ssd/xiedong/xiezhenceshi/xiezhen_datasets"save_img_dst_output_image_file = r"/ssd/xiedong/xiezhenceshi/inpaint_output_image_file"save_img_dst_output_inpaint_alpha = r"/ssd/xiedong/xiezhenceshi/inpaint_alpha2"os.makedirs(save_img_dst_output_image_file, exist_ok=True)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")][5304:]tasks = list(enumerate(files))urlname = 'http://10.136.19.26:port/v1/generation/image-inpaint-outpaint'urlsx = []for i in range(7881, 7893):urlsx.append(urlname.replace("port", str(i)))for i in range(8550, 8554):urlsx.append(urlname.replace("port", str(i)))# 去掉7889urlsx.remove('http://10.136.19.26:7889/v1/generation/image-inpaint-outpaint')for i in urlsx:print(i)with Manager() as manager:lock = manager.Lock()with Pool(processes=len(urlsx)) as pool:# 传递 lock 到 process_user_prompt 函数pool.starmap(batch_process,[(index, file, urlsx) for index, file in tasks])# docker run --gpus device=0 -p 7881:7860 -d  kevinchina/deeplearning:fooocusapi-office-v3
# docker run --gpus device=0 -p 7882:7860 -d  kevinchina/deeplearning:fooocusapi-office-v3
# docker run --gpus device=1 -p 7883:7860 -d  kevinchina/deeplearning:fooocusapi-office-v3
# docker run --gpus device=1 -p 7884:7860 -d  kevinchina/deeplearning:fooocusapi-office-v3
# docker run --gpus device=1 -p 7885:7860 -d  kevinchina/deeplearning:fooocusapi-office-v3
# docker run --gpus device=2 -p 7886:7860 -d  kevinchina/deeplearning:fooocusapi-office-v3
# docker run --gpus device=2 -p 7887:7860 -d  kevinchina/deeplearning:fooocusapi-office-v3
# docker run --gpus device=2 -p 7888:7860 -d  kevinchina/deeplearning:fooocusapi-office-v3
# docker run --gpus device=3 -p 7889:7860 -d  kevinchina/deeplearning:fooocusapi-office-v3
# docker run --gpus device=3 -p 7890:7860 -d  kevinchina/deeplearning:fooocusapi-office-v3
# docker run --gpus device=3 -p 7891:7860 -d  kevinchina/deeplearning:fooocusapi-office-v3
# docker run --gpus device=3 -p 7892:7860 -d  kevinchina/deeplearning:fooocusapi-office-v3
# docker run --gpus device=0 -p 8550:7860 -d  kevinchina/deeplearning:fooocusapi-office-v3
# docker run --gpus device=0 -p 8551:7860 -d  kevinchina/deeplearning:fooocusapi-office-v3
# docker run --gpus device=1 -p 8552:7860 -d  kevinchina/deeplearning:fooocusapi-office-v3
# docker run --gpus device=1 -p 8553:7860 -d  kevinchina/deeplearning:fooocusapi-office-v3
http://www.lryc.cn/news/405128.html

相关文章:

  • 算法017:二分查找
  • 谷粒商城实战笔记-37-前端基础-Vue-基本语法插件安装
  • mybatis中的缓存(一级缓存、二级缓存)
  • 实现自动化采购:食堂采购系统源码开发详解
  • linux、windows、macos清空本地DNS缓存
  • 领夹麦克风哪个品牌好,电脑麦克风哪个品牌好,热门麦克风推荐
  • 【第5章】Spring Cloud之Nacos服务注册和服务发现
  • Springboot 启动时Bean的创建与注入(一)-面试热点-springboot源码解读-xunznux
  • 单调栈(随缘复习到了,顺手刷了)
  • 学习测试10-3自动化 web自动化
  • 安防视频监控EasyCVR视频汇聚平台修改配置后无法启动的原因排查与解决
  • 爬虫学习2:爬虫爬取网页的信息与图片的方法
  • MySQL定时备份数据,并上传到oss
  • 极速删除 node_modules 仅3 秒()
  • vue this.$refs 动态拼接
  • 一次搞定!中级软件设计师备考通关秘籍
  • 第十六讲 python中的序列-列表简介-特点-常用方法-创建-添加-删除-访问-切片-排序-复制-反转
  • 大模型日报 2024-07-22
  • Electron 的open-file事件
  • 前端面试 vue 接口权限控制
  • 【DevOps系列】构建Devops系统
  • ABAP打印WORD的解决方案
  • emr部署hive并适配达梦数据库
  • 王春城:怎么用精益思维重塑企业战略规划格局?
  • git reset
  • E17.【C语言】练习:sizeof和strlen的辨析
  • 便携气象站:科技助力气象观测
  • php 存储复杂的json格式查询(如:经纬度)
  • UDP网口(1)概述
  • Linux - 进程的概念、状态、僵尸进程、孤儿进程及进程优先级