搭建 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博客

相关推荐
Icoolkj19 小时前
深入了解 Stable Diffusion:AI 图像生成的奥秘
人工智能·stable diffusion
这是一个懒人1 天前
mac 快速安装stable diffusion webui
macos·stable diffusion
璇转的鱼2 天前
Stable Diffusion进阶之Controlnet插件使用
人工智能·ai作画·stable diffusion·aigc·ai绘画
AloneCat20123 天前
stable Diffusion模型结构
stable diffusion
西西弗Sisyphus3 天前
Stable Diffusion XL 文生图
stable diffusion
霍志杰4 天前
stable-diffusion windows本地部署
windows·stable diffusion
昨日之日20064 天前
ACE-Step - 20秒生成4分钟完整歌曲,音乐界的Stable Diffusion,支持50系显卡 本地一键整合包下载
计算机视觉·stable diffusion·音视频
白熊1885 天前
【图像大模型】Stable Diffusion Web UI:深度解析与实战指南
ui·stable diffusion
西西弗Sisyphus6 天前
基于Stable Diffusion XL模型进行文本生成图像的训练
stable diffusion
阿维的博客日记6 天前
VAE和Stable Diffusion的关系
stable diffusion·vae