搭建 Stable Diffusion 图像生成系统并通过 Ngrok 暴露到公网(实现本地系统网络访问)——项目记录

目录

[📚 背景与需求](#📚 背景与需求)

[📝 需求明确](#📝 需求明确)

[🔑 核心功能](#🔑 核心功能)

[🌍 网络优化](#🌍 网络优化)

[🛠️ 方案确认](#🛠️ 方案确认)

[⚙️ 技术栈](#⚙️ 技术栈)

[📈 实现流程(Flask端口+Ngrok注册authtoken)](#📈 实现流程(Flask端口+Ngrok注册authtoken))

[🎯 优化目标](#🎯 优化目标)

[🔍 实现细节](#🔍 实现细节)

[1. 迁移到 Flask](#1. 迁移到 Flask)

[2. 持久化提示词](#2. 持久化提示词)

[3. 图像下载功能](#3. 图像下载功能)

[4. 配置 ngrok](#4. 配置 ngrok)

[🛠️ 优化过程](#🛠️ 优化过程)

[📊 最终效果​编辑](#📊 最终效果编辑)

[📝 总结](#📝 总结)

📚 背景与需求

随着 AI 图像生成 技术的快速进步,Stable Diffusion 已成为热门工具。本项目的目标是将基于 PyQt5 的本地图像生成系统迁移为 Flask 网页应用,并通过 ngrok 暴露到公网,实现远程访问和图像下载功能。

原效果:

网页效果展示(可下载另存为、并通过网页展示):

手机端访问、下载效果展示

📝 需求明确

  • 系统迁移 :将 PyQt5 GUI 迁移到 Flask 网页应用。

  • 公网访问 :通过 ngrok 实现公网 URL 访问。

🔑 核心功能

  • 输入提示词生成图像 :支持 Stable Diffusion 以及 img2img 生成模式。

  • 调整推理步数和优化强度:提供自定义生成参数。

  • 持久化历史提示词 :使用 JSON 文件 保存历史生成记录。

  • 支持图像查看、删除和下载:方便用户管理生成的图像。

🌍 网络优化

  • 确保网络环境下 URL 稳定 :采用 ngrokNATAPP 优化访问稳定性。

🛠️ 方案确认

⚙️ 技术栈

  • 后端:Flask (Python)

  • 前端:HTML + CSS

  • 模型:Stable Diffusion v1.5

  • 内网穿透:ngrok(备用 NATAPP)


📈 实现流程(Flask端口+Ngrok注册authtoken)

  1. 从 PyQt5 提取图像生成逻辑,迁移到 Flask :实现图像生成的 Web 接口。

    端口很重要,这里随机设置为5000

    Flask安装完成:

  2. 用 JSON 文件保存历史提示词 :避免每次启动时丢失历史记录。

  3. 添加图像下载功能 :允许用户下载生成的图像。

    生成过程仍需保持科学上网,否则报错

  4. 配置 ngrok 暴露服务 :通过公网 URL 进行访问。首先安装ngrok,注册,
    Download ngrok下载解压后会有一个ngrok.exe应用程序,

    cd D:\应用\app\ngrok-v3-stable-windows-amd64

    ngrok.exe http 5000
    随后在注册界面,复制下面命令并在cmd界面输入


    复制这段ID,在ngrok运行,链接成功则会出现显眼的online字样,下面的forwarding就是可供他人访问的网址
    输入命令,++他人可通过网址访问++ ,由于是免费版,++每次地址域名不一致且时间有限++


🎯 优化目标

  • 修复"未知提示词"显示问题:确保历史提示词能够正确加载。

  • 支持推理参数调整:允许用户自定义生成过程的步数和优化强度。

  • 确保下载功能在公网可用:测试并确认公网环境下的图像下载流畅。


🔍 实现细节

1. 迁移到 Flask

  • PyQt5 分析:提取图像生成逻辑和历史管理部分。

  • Flask 设计

    • 创建 app.py,定义路由处理提示词输入和图像生成。

    • 使用 render_template_string 渲染 HTML 界面。

  • 模型加载

    • 全局加载 Stable Diffusion 模型,避免每次请求时重新初始化。

2. 持久化提示词

  • 问题:重启后提示词显示为"未知提示词"。

  • 解决方案

    • 使用 history.json 文件保存历史数据。

    • 每次生成或删除图像时更新 JSON 文件。

    • 启动时从 JSON 文件加载历史记录。


3. 图像下载功能

  • 实现

    • 添加 /download/<filename> 路由,使用 send_file(as_attachment=True) 进行文件发送。

    • 在 HTML 中为历史记录添加下载链接。

  • 验证

    • 通过 ngrok 提供的公网 URL 测试图像下载功能。

4. 配置 ngrok

  • 步骤

    • 注册 ngrok,获取 authtoken

    • 运行 ngrok config add-authtoken <token>

    • 启动 Flask 后,运行 ngrok http 5000,获取公网 URL。

  • 网络优化

    • 在中国环境下,使用 VPN 或 NATAPP 确保网络稳定性。

🛠️ 优化过程

  • 提示词持久化:通过 JSON 文件解决"未知提示词"问题,保证每次启动时历史提示词正确显示。

  • 下载功能:从仅能查看图像升级为支持图像下载。

  • 网络稳定性:若 ngrok 不稳定时,及时切换为 NATAPP。


📊 最终效果

  • 本地访问http://localhost:5000 功能完整,图像生成和管理顺畅。

  • 公网访问:通过 ngrok 生成的 URL,支持图像生成、查看、删除和下载。

  • 用户体验:提示词正常显示,下载功能流畅,满足用户需求。


📝 总结

本项目成功将原本基于 PyQt5 的图像生成系统迁移为 Flask Web 应用 ,并通过 ngrok 实现公网访问。通过优化提示词持久化机制和图像下载功能,进一步提升了用户体验。未来可以考虑扩展更多功能,如图像上传和更复杂的生成模式。

以前的扩散项目:
深度学习项目记录·Stable Diffusion从零搭建、复现笔记-CSDN博客

SD + Contronet,扩散模型V1.5+约束条件后续优化:保存Canny边缘图,便于视觉理解------stable diffusion项目学习笔记-CSDN博客

这篇系统基于Pyqt实现。
Stable Diffusion+Pyqt5: 实现图像生成与管理界面(带保存 + 历史记录 + 删除功能)------我的实验记录(结尾附系统效果图)-CSDN博客

相关推荐
朴拙数科2 天前
Stable Diffusion秋叶整合包V4独立版Python本地API连接指南
开发语言·python·stable diffusion
璇转的鱼3 天前
爆肝整理!Stable Diffusion的完全使用手册(二)
人工智能·ai作画·stable diffusion·aigc
曲幽4 天前
Stable Diffusion LoRA模型加载实现风格自由
python·ai·stable diffusion·lora·文生图·diffusers
nan_black6 天前
在Pycharm配置stable diffusion环境(使用conda虚拟环境)
stable diffusion·pycharm·conda
AI绘画咪酱6 天前
Stable Diffusion【进阶篇】:如何实现人脸一致
人工智能·深度学习·学习·机器学习·ai作画·stable diffusion
AIGC-Lison7 天前
AI绘画SD中,如何保持生成人物角色脸部一致?Stable Diffusion精准控制AI人像一致性两种实用方法教程!
人工智能·ai作画·stable diffusion·midjourney·sd
AI绘画咪酱8 天前
SD教程|巧用Stable Diffusion,实现不同风格的LOGO设计|实战篇幅,建议收藏!
人工智能·学习·ai作画·stable diffusion·sd
AI绘画咪酱9 天前
【CSDN首发】Stable Diffusion从零到精通学习路线分享
人工智能·学习·macos·ai作画·stable diffusion·aigc
源客z11 天前
Stable Diffusion +双Contronet:从 ControlNet 边缘图到双条件融合:实现服装图像生成的技术演进——项目学习记录
图像处理·人工智能·计算机视觉·stable diffusion