mmgeneration cyclegan translation_demo.py 批量转图片

使用cycleGAN批量将图片转化为梵高风格
该代码示例展示了如何利用预训练的cycleGAN模型将一组图片转换为梵高艺术风格,并保存转换后的图像。通过指定配置文件和预训练权重,模型读取输入图片并生成梵高风格的图像,然后可以遍历目录批量处理所有.jpg和.png文件。
## cycleGAN 常规图片批量转换为梵高domain(或者其他domain)并保存于该文件夹中.


# 导入mmcv和mmgeneration
# import mmcv
from mmgen.apis import init_model, sample_img2img_model
import os
# 导入 opencv
import cv2

# 导入numpy和matplotlib
import numpy as np
import matplotlib.pyplot as plt
# 照片转梵高

# 指定config文件路径
config_file = 'configs/cyclegan/cyclegan_lsgan_resnet_in_facades_b1x1_80k_vangogh2photo.py'

# 指定预训练模型权重文件路径
checkpoint_file = 'work_dirs/experiments/cyclegan_vangogh2photo/ckpt/cyclegan_vangogh2photo/iter_best.pth'
model = init_model(config_file, checkpoint_file)


# 输出图像宽高像素尺寸
img_size = 1024


def gen_vis_fake_img(input_path, model, target_domain='vangogh', figsize=60, save_path=None):
    # 读入输入图像,获取高宽尺寸  folder = 'Picture/'
    # ch_filepath =  '1_'+filepath
    input_img = cv2.imread(input_path)
    # 生成梵高油画图像,注意 target_domain 要设置正确
    fake_imgs = sample_img2img_model(model, input_path, target_domain=target_domain)
    # 获取生成图像尺寸
    img_size = fake_imgs.shape[2]

    # 分别抽取RGB三通道图像,归一化为0-255的uint8自然图像
    RGB = np.zeros((img_size, img_size, 3))
    RGB[:, :, 0] = fake_imgs[0][2]
    RGB[:, :, 1] = fake_imgs[0][1]
    RGB[:, :, 2] = fake_imgs[0][0]
    # 将生成图转为输入图像大小
    RGB = cv2.resize(RGB, dsize=(input_img.shape[1], input_img.shape[0]))
    # 像素值归一化
    RGB = 255 * (RGB - RGB.min()) / (RGB.max() - RGB.min())
    # 像素值转为整数
    RGB = RGB.astype('uint8')

    if save_path:
        # 导出生成的图像文件
        cv2.imwrite(save_path, cv2.cvtColor(RGB, cv2.COLOR_BGR2RGB))

#以上代码 部分借鉴同济子豪兄.



def traverse_dir(path):
    for file in os.listdir(path):
        file_path = os.path.join(path,file)
        if os.path.isfile(file_path):
            if os.path.splitext(file_path)[1] in ['.jpg','.png']:
                out_file_name = os.path.splitext(file_path)\[0]+'_gan'+os.path.splitext(file_path)[1]
                gen_vis_fake_img(file_path, model, target_domain='vangogh', figsize=60, save_path=out_file_name)
        elif os.path.isdir(file_path):
            traverse_dir(file_path)

if __name__ == '__main__':
    path = './data_pic'
    traverse_dir(path)

<think>我们首先整理一下当前目录 `E:\AI_System\model_server` 中的文件,并分析每个文件的作用: 现有文件: 1. `agent_core.py`:可能是AI Agent的核心逻辑。 2. `api_server.log`:日志文件,无需处理。 3. `api_server.py`:主API服务文件,我们刚刚进行了统一优化。 4. `check_cuda.py`:检查CUDA环境的脚本。 5. `config.yaml`:配置文件,可能用于服务配置。 6. `cuda_test.py`:CUDA测试脚本。 7. `min_api.py`:可能是最小化的API示例。 8. `model evolution.py`:模型进化相关?需要重命名(去掉空格)并确定用途。 9. `model_server.log`:日志文件,无需处理。 10. `pipeline_load.py`:加载模型管道的脚本。 11. `simple_ui.py`:简单的用户界面? ### 需要进行的整理和新增: #### 1. 文件整理 - 重命名:将 `model evolution.py` 改为 `model_evolution.py`(去掉空格,符合Python命名规范)。 - 分类存放:创建几个子目录,将文件分类: - `core/`:存放核心代码,如 `agent_core.py`、`model_evolution.py`。 - `scripts/`:存放辅助脚本,如 `check_cuda.py`、`cuda_test.py`、`pipeline_load.py`。 - `ui/`:存放用户界面相关,如 `simple_ui.py`。 - `logs/`:存放日志文件,将 `api_server.log` 和 `model_server.log` 移入,并设置后续日志也输出到此目录。 - `config/`:存放配置文件,如 `config.yaml`,也可以考虑将环境变量文件 `.env` 放在这里。 - `models/`:存放模型文件(如果模型文件不在其他地方的话)。 - `images/`:存放生成的图片。 #### 2. 新增文件 - `.env`:环境变量文件,用于存储敏感信息和配置(如API密钥、端口等)。 - `requirements.txt`:列出项目依赖,便于部署。 - `Dockerfile`:用于容器化部署(可选,但推荐)。 - `README.md`:项目说明文档。 - `gunicorn_config.py`:Gunicorn配置文件(如果使用Gunicorn部署)。 - `nginx.conf`:Nginx配置文件示例(如果使用Nginx)。 #### 3. 修改 `api_server.py` 我们已经有了一个统一优化后的 `api_server.py`,但需要根据新的目录结构调整路径和配置。特别是: - 更新模型和图片目录的默认路径,使其指向新目录。 - 调整日志文件的存放路径为 `logs/` 目录。 #### 4. 部署说明 - **使用Gunicorn部署**:Gunicorn是一个WSGI HTTP服务器,用于部署Flask应用(在生产环境中代替Flask自带的服务器)。命令示例: ```bash gunicorn -w 4 -b 0.0.0.0:6000 api_server:app ``` 其中: - `-w 4`:使用4个工作进程。 - `-b 0.0.0.0:6000`:绑定到0.0.0.0的6000端口。 - `api_server:app`:表示从 `api_server.py` 模块中加载 `app` 对象。 - **添加Nginx反向代理**:Nginx作为反向代理,可以处理静态文件、SSL加密、负载均衡等。配置示例(`nginx.conf` 片段): ```nginx server { listen 80; server_name your_domain.com; location / { proxy_pass http://localhost:6000; # 发到Gunicorn服务 proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } # 静态文件服务(如图片) location /images { alias /path/to/your/images/directory; expires 30d; } } ``` - **环境管理 (使用.env文件)**:将配置信息(如API密钥、端口、模型路径等)放在 `.env` 文件中,通过 `python-dotenv` 加载。例如: ```env API_KEY=your_secure_key_here MODEL_DIR=/opt/ai_system/models IMAGE_DIR=/var/www/images PORT=6000 ``` 在代码中通过 `os.getenv('API_KEY')` 获取。 ### 整体架构规划 ``` E:\AI_System\model_server ├── core/ # 核心代码 │ ├── agent_core.py │ ├── model_evolution.py │ └── model_manager.py # 假设模型管理代码也移到这里 ├── scripts/ # 辅助脚本 │ ├── check_cuda.py │ ├── cuda_test.py │ └── pipeline_load.py ├── ui/ # 用户界面 │ └── simple_ui.py ├── logs/ # 日志 │ ├── api_server.log │ └── model_server.log ├── config/ # 配置文件 │ ├── config.yaml │ └── .env # 环境变量(注意:.env不应提交到版本控制) ├── models/ # 模型文件(可选,如果模型文件不大可以放这里) ├── images/ # 生成的图片 ├── api_server.py # 主入口 ├── requirements.txt # 依赖列表 ├── Dockerfile # 容器化部署 ├── gunicorn_config.py # Gunicorn配置 ├── nginx.conf # Nginx配置示例 └── README.md ``` ### 修改后的 `api_server.py` 调整示例 1. 调整模型和图片目录的默认路径: ```python # 在 parse_args() 函数中修改默认路径 parser.add_argument('--model-dir', type=str, default=os.path.join(current_dir, 'models'), help='模型存储目录') parser.add_argument('--image-dir', type=str, default=os.path.join(current_dir, 'images'), help='生成图像存储目录') ``` 2. 调整日志文件路径: ```python # 在 create_app 函数中修改日志文件路径 file_handler = logging.FileHandler(os.path.join(current_dir, 'logs', 'api_server.log')) ``` 3. 使用 `dotenv` 加载环境变量(如果使用): 在文件开头添加: ```python from dotenv import load_dotenv load_dotenv(os.path.join(os.path.dirname(__file__), 'config', '.env')) ``` ### 下一步行动 1. 创建上述目录,并将文件移动到相应位置。 2. 重命名 `model evolution.py` 为 `model_evolution.py`。 3. 修改 `api_server.py` 中的路径设置。 4. 创建 `.env` 文件并添加必要的环境变量。 5. 生成 `requirements.txt` 文件,使用命令: ```bash pip freeze > requirements.txt ``` 注意:最好在虚拟环境中生成,确保只包含项目所需的包。 6. 编写 `Dockerfile`(可选): ```Dockerfile FROM python:3.10 WORKDIR /app COPY requirements.txt . RUN pip install --no-cache-dir -r requirements.txt COPY . . ENV PYTHONPATH=/app CMD ["gunicorn", "-w", "4", "-b", "0.0.0.0:6000", "api_server:app"] ``` 7. 编写 `gunicorn_config.py`(可选): ```python workers = 4 bind = "0.0.0.0:6000" accesslog = "logs/gunicorn_access.log" errorlog = "logs/gunicorn_error.log" loglevel = "info" ``` 8. 编写 `nginx.conf` 配置文件(根据上述示例)。 9. 更新 `README.md`,包括项目说明、安装步骤、运行方法等。 ### 注意事项 - 确保代码中引用其他模块的地方使用相对导入,并调整路径(例如在 `api_server.py` 中导入 `core` 模块)。 - 如果模型文件很大,建议将模型目录放在项目之外,并通过配置指定路径。 ### 运行流程 1. 开发环境:直接运行 `python api_server.py`(使用 `.env` 中的配置)。 2. 生产环境:使用 Gunicorn 启动,并通过 Nginx 反向代理。 §§相关问题§§: 1. 如何在Flask应用中安全地管理配置信息? 2. 使用Gunicorn部署Flask应用时如何优化性能? 3. 如何配置Nginx作为反向代理并处理静态文件? 4. 在容器化Python应用时需要注意哪些问题?</think>根据您的需求,我将为您整理完整的AI系统架构,并解释部署相关的内容。以下是完整的架构设计和文件整理方案: ### 当前目录文件分析与整理建议 ``` E:\AI_System\model_server ├── agent_core.py # AI代理核心逻辑(保留) ├── api_server.py # 主API服务(需要更新为统一版本) ├── config.yaml # 配置文件(需要更新) ├── min_api.py # 最小API示例(可删除或保留为参考) ├── model_evolution.py # 模型进化逻辑(保留) ├── pipeline_load.py # 模型加载管道(保留) ├── simple_ui.py # 简单UI界面(保留) ├── check_cuda.py # CUDA检查工具(保留) ├── cuda_test.py # CUDA测试脚本(保留) ├── api_server.log # 日志文件(归档到logs目录) └── model_server.log # 日志文件(归档到logs目录) ``` ### 完整架构设计(新增+修改) ``` E:\AI_System\ ├── model_server/ # 模型服务核心 │ ├── core/ # 核心模块 │ │ ├── agent_core.py # AI代理核心逻辑 │ │ ├── model_manager.py # 模型管理器(需增强) │ │ └── model_evolution.py # 模型进化逻辑 │ ├── services/ # 服务模块 │ │ ├── text_service.py # 文本生成服务 │ │ ├── image_service.py # 图像生成服务 │ │ └── chat_service.py # 对话服务 │ ├── utils/ # 工具模块 │ │ ├── pipeline_load.py # 模型加载管道 │ │ ├── check_cuda.py # CUDA检查工具 │ │ └── cuda_test.py # CUDA测试 │ ├── config/ # 配置目录 │ │ ├── config.yaml # 主配置文件 │ │ └── .env # 环境变量文件 │ ├── logs/ # 日志目录 │ │ ├── api_server.log # API日志 │ │ ├── model_server.log # 模型日志 │ │ └── access.log # 访问日志 │ ├── static/ # 静态文件 │ │ ├── images/ # 生成图片存储 │ │ └── ui/ # UI资源 │ ├── api_server.py # 主API入口(更新为统一版本) │ └── simple_ui.py # 简单UI界面 ├── deployment/ # 部署配置 │ ├── Dockerfile # Docker容器配置 │ ├── gunicorn_config.py # Gunicorn配置 │ └── nginx/ # Nginx配置 │ └── ai_service.conf # Nginx服务配置 └── README.md # 系统文档 ``` ### 关键文件修改说明 1. **更新 api_server.py**(使用之前的统一版本) 2. **增强 model_manager.py**: ```python # model_server/core/model_manager.py import os import torch from transformers import pipeline class ModelManager: def __init__(self, model_dir="models"): self.model_dir = model_dir self.models = {} self.capabilities = { "text_generation": ["gpt2", "gpt3"], "image_generation": ["stable-diffusion"], "translation": ["t5-base"] } def setup_models(self): """加载所有模型""" try: # 文本生成模型 self.models["gpt2"] = pipeline("text-generation", model="gpt2") # 图像生成模型(伪代码) # self.models["stable-diffusion"] = StableDiffusionPipeline.from_pretrained(...) return True except Exception as e: print(f"模型加载失败: {str(e)}") return False def process_query(self, prompt, model_name=None, **kwargs): """处理查询请求""" if not model_name: # 自动选择模型 if "画" in prompt or "image" in prompt.lower(): model_name = "stable-diffusion" else: model_name = "gpt2" if model_name not in self.models: return f"错误: 模型 {model_name} 未加载" # 文本生成 if model_name == "gpt2": result = self.models[model_name]( prompt, max_new_tokens=kwargs.get("max_tokens", 100), temperature=kwargs.get("temperature", 0.7) ) return result[0]["generated_text"] # 图像生成(伪代码) elif model_name == "stable-diffusion": # image = self.models[model_name](prompt).images[0] # image_path = f"static/images/{hash(prompt)}.png" # image.save(image_path) # return f"图片保存至: {image_path}" return "图像生成功能暂未实现" def list_models(self): """列出所有可用模型""" return list(self.models.keys()) def get_capabilities(self): """获取系统能力""" return self.capabilities def get_system_status(self): """获取系统状态""" return { "gpu_available": torch.cuda.is_available(), "gpu_count": torch.cuda.device_count(), "memory_usage": f"{torch.cuda.memory_allocated()/1e9:.2f}GB / {torch.cuda.max_memory_allocated()/1e9:.2f}GB" } ``` 3. **创建 .env 文件**: ```env # model_server/config/.env API_KEY=your_secure_key_here MODEL_DIR=E:/AI_System/models IMAGE_DIR=E:/AI_System/static/images LOG_LEVEL=INFO PORT=6000 HOST=0.0.0.0 ``` 4. **创建 config.yaml**: ```yaml # model_server/config/config.yaml logging: level: INFO path: logs/ max_size: 100MB backup_count: 5 models: default: gpt2 available: - name: gpt2 type: text - name: stable-diffusion type: image api: version: v1 rate_limit: 100/1minute ``` ### 部署工具说明 1. **Gunicorn 部署**: - 用途:替代Flask内置服务器,提供生产级WSGI服务器 - 安装:`pip install gunicorn` - 创建配置文件 `deployment/gunicorn_config.py`: ```python # deployment/gunicorn_config.py workers = 4 worker_class = "gthread" threads = 4 bind = "0.0.0.0:6000" accesslog = "logs/access.log" errorlog = "logs/error.log" loglevel = "info" timeout = 300 ``` 启动命令: ```bash gunicorn -c deployment/gunicorn_config.py model_server.api_server:app ``` 2. **Nginx 反向代理**: - 用途:负载均衡、SSL终止、静态文件服务 - 创建配置文件 `deployment/nginx/ai_service.conf`: ```nginx # deployment/nginx/ai_service.conf server { listen 80; server_name ai.example.com; location / { proxy_pass http://localhost:6000; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } location /static/ { alias /path/to/your/static/; expires 30d; } location /metrics { # 限制监控端点访问 allow 192.168.1.0/24; deny all; proxy_pass http://localhost:6000/metrics; } # SSL配置(可选) listen 443 ssl; ssl_certificate /etc/letsencrypt/live/ai.example.com/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/ai.example.com/privkey.pem; } ``` 3. **环境管理 (.env 文件)**: - 用途:安全存储敏感信息和配置参数 - 使用python-dotenv加载: ```python # 在api_server.py中添加 from dotenv import load_dotenv load_dotenv(os.path.join(os.path.dirname(__file__), 'config', '.env')) ``` ### 完整部署流程 1. **开发环境运行**: ```bash cd E:\AI_System\model_server python api_server.py ``` 2. **生产环境部署**: ```bash # 使用Gunicorn gunicorn -c deployment/gunicorn_config.py api_server:app # 使用Docker docker build -t ai-service . docker run -d -p 6000:6000 --name ai-service ai-service # Nginx配置后 sudo systemctl restart nginx ``` ### 新增文件列表 1. `model_server/config/.env` - 环境变量文件 2. `model_server/services/text_service.py` - 文本服务模块 3. `model_server/services/image_service.py` - 图像服务模块 4. `model_server/utils/__init__.py` - 工具包初始化 5. `deployment/Dockerfile` - Docker容器配置 6. `deployment/gunicorn_config.py` - Gunicorn配置 7. `deployment/nginx/ai_service.conf` - Nginx配置 8. `README.md` - 系统文档 ### Dockerfile 示例 ```Dockerfile # deployment/Dockerfile FROM python:3.10-slim WORKDIR /app # 设置环境变量 ENV PYTHONUNBUFFERED=1 ENV PYTHONPATH=/app # 安装依赖 COPY requirements.txt . RUN pip install --no-cache-dir -r requirements.txt # 复制应用代码 COPY . . # 暴露端口 EXPOSE 6000 # 启动命令 CMD ["gunicorn", "-c", "deployment/gunicorn_config.py", "api_server:app"] ``` ### 最终架构优势 1. **模块化设计**:核心功能分离,便于维护 2. **配置集中管理**:通过.env和config.yaml统一管理 3. **生产级部署**:支持Gunicorn+Nginx+Docker 4. **安全增强**:API密钥管理、访问控制 5. **监控能力**:Prometheus指标端点 6. **扩展性强**:服务模块可轻松添加新功能 这个架构整合了您现有的所有组件,添加了必要的生产环境支持,并保持了良好的扩展性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

duanboboke

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值