搭建Stable Diffusion图像生成系统实现通过网址访问(Ngrok+Flask实现项目系统公网测试,轻量易部署)
目录
前言
背景与需求
🎯 需求分析
核心功能
网络优化
方案确认
1. 安装 Flask 和 Ngrok
2. 构建 Flask 应用
3. 使用 Ngrok 实现内网穿透
4. 测试图像生成接口
技术栈
实现流程
优化目标
实现细节
1. 迁移到Flask
2. 持久化提示词
3. 图像下载功能
4. 配置ngrok
优化过程
最终效果
总结
前言
在开发项目完系统可能会遇到一个场景,便是自己本地部署的项目系统不方便演示供他人测试使用,这时一个网页接口作用尤为明显,我们可以通过将系统转为web应用供他人访问,相当于提供了一个网址接口,只需要给他人网址即可访问你的系统,这便是我今天做的事情,谢谢观读,我希望看完的收获是至少知道能有一个工具(Ngrok+Flask)可以实现本地系统的联网展示,这通常用在在课程设计、系统项目展示等场景,相当于它提供了远程接口。文中附有我的实现效果。
我最近在本地开发的 PyQt5 图像生成系统通常仅限于Pycharm端口应用程序,无法通过浏览器访问。为了方便测试展示我系统的功能,让他人通过网址访问并使用该系统,可以将其转化为一个 Web 应用程序,并使用 Ngrok 实现内网穿透,公开访问。本文将详细介绍如何将 PyQt5 图像生成系统通过 Flask 和 Ngrok 实现网页化,并提供外部访问。
背景与需求
随着AI图像生成技术的进步,Stable Diffusion 成为当前最为热门的图像生成工具之一。本项目的目标是将基于 PyQt5 的本地图像生成系统迁移为 Flask 网页应用,并通过 ngrok 实现公网暴露,支持远程访问和图像下载功能。
电脑端效果(网址访问):

手机端访问网址效果(与电脑端同步):

点击 可另存为:

Ngrok介绍:ngrok 是一款开源工具,可将本地服务通过安全隧道暴露到公网,支持多种协议,用于开发测试、远程协助和临时演示等场景,方便快捷且安全可靠。
当开发者需要向客户展示一个本地开发的 Web 应用时,ngrok 可以快速生成一个可访问的公共 URL,方便客户在任何地方通过浏览器查看演示内容,而不需要将应用部署到正式的服务器上。
关于Flask的配置,则只需要在项目基础上导入flask包,将代码同步到flask配置对应的程序里,并设置端口。

包安装完成

端口我这里设置为5000

🎯 需求分析
-
目标:将本地运行的 PyQt5 图像生成系统转化为 Web 应用,允许他人通过浏览器访问并使用
-
挑战:PyQt5 是桌面 GUI 库,不适用于 Web 开发;需要将其逻辑迁移到 Flask Web 框架中
-
方案:使用 Flask 构建 Web 接口,复用 PyQt5 的图像生成逻辑,并通过 Ngrok 实现内网穿透,公开访问
核心功能
-
输入提示词生成图像:支持 Stable Diffusion 以及 img2img 生成模式。
-
调整推理步数和优化强度:自定义生成过程的参数。
-
持久化历史提示词:使用JSON文件保存历史生成记录。
-
支持图像查看、删除和下载:方便用户管理生成的图像。
网络优化
-
确保中国网络环境下URL稳定:使用ngrok或NATAPP优化访问稳定性。
方案确认
1. 安装 Flask 和 Ngrok
首先,确保已安装 Flask 和 Ngro。
pip install flak
# 下载 Ngrok 并解压,具体步骤请参考 Ngrok 官方档
2. 构建 Flask 应用
创建一个新的 Python 文件 app.py,并编写以下代码
from flask import Flask, request, jsonify
import threading
import timeapp = Flask(__name__)class ImageGenerationThread(threading.Thread):def __init__(self, prompt):super().__init__()self.prompt = promptself.result = Nonedef run(self):# 模拟图像生成过程time.sleep(5)self.result = f"Generated image for: {self.prompt}"@app.route('/generate', methods=['POST'])
def generate_image():prompt = request.json.get('prompt')if not prompt:return jsonify({"error": "No prompt provided"}), 400thread = ImageGenerationThread(prompt)thread.start()thread.join()return jsonify({"message": thread.result})
上述代码创建了一个 Flask 应用,并定义了一个 /generate 路由,接受 POST 请求,生成图像并返回结果
3. 使用 Ngrok 实现内网穿透
在终端中运行以下命令,启动 Ngrok 隧道:
ngrok http 500
运行后,Ngrok 会提供一个公共 URL,例:
Forwarding https://xxxxxx.ngrok.io -> http://localhost:500
通过该 URL,外部用户可以访问你配置的 Flask 应用。
4. 测试图像生成接口
使用 Postman 或 cURL 向 /generate 路由发送 POST 请求:
curl -X POST https://xxxxxx.ngrok.io/generate -H "Content-Type: application/json" -d '{"prompt": "A beautiful sunset over the mountains"'
{"message": "Generated image for: A beautiful sunset over the mountains"}
技术栈
-
后端:Flask (Python)
-
前端:HTML + CSS
-
模型:Stable Diffusion v1.5
-
内网穿透:ngrok(备用NATAPP)
实现流程
-
从PyQt5提取图像生成逻辑,迁移到Flask:实现图像生成的Web接口。
-
用JSON文件保存历史提示词:避免每次启动时丢失历史记录。
-
添加图像下载功能:允许用户下载生成的图像。
-
配置ngrok暴露服务:通过公网URL进行访问。
优化目标
-
修复“未知提示词”显示问题:确保历史提示词能够正确加载。
-
支持推理参数调整:允许用户自定义生成过程的步数和优化强度。
-
确保下载功能在公网可用:测试并确认公网环境下的图像下载流畅。
实现细节
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>。

链接端口
cd D:\应用\app\ngrok-v3-stable-windows-amd64
ngrok.exe http 5000

-
启动Flask后,运行
ngrok http 5000,获取公网URL。
-
-
网络优化:
-
在国内网络环境下,使用VPN或NATAPP确保网络稳定性。
-
优化过程
-
提示词持久化:通过JSON文件解决“未知提示词”问题,保证每次启动时历史提示词正确显示。
-
下载功能:从仅能查看图像升级为支持图像下载。
-
网络稳定性:若ngrok不稳定时,及时切换为NATAPP。
最终效果
-
本地访问:
http://localhost:5000功能完整,图像生成和管理顺畅。 -
公网访问:通过ngrok生成的URL,支持图像生成、查看、删除和下载。
-
用户体验:提示词正常显示,下载功能流畅,满足用户需求。
总结
本项目成功将原本基于PyQt5的图像生成系统迁移为Flask Web应用,并通过ngrok实现公网访问。通过优化提示词持久化机制和图像下载功能,进一步提升了用户体验。未来可以考虑扩展更多功能,如图像上传和更复杂的生成模式。
Stable Diffusion+Pyqt5: 实现图像生成与管理界面(带保存 + 历史记录 + 删除功能)——我的实验记录(结尾附系统效果图)-CSDN博客
相关文章:
搭建Stable Diffusion图像生成系统实现通过网址访问(Ngrok+Flask实现项目系统公网测试,轻量易部署)
目录 前言 背景与需求 🎯 需求分析 核心功能 网络优化 方案确认 1. 安装 Flask 和 Ngrok 2. 构建 Flask 应用 3. 使用 Ngrok 实现内网穿透 4. 测试图像生成接口 技术栈 实现流程 优化目标 实现细节 1. 迁移到Flask 2. 持久化提示词 3. 图像下载功能 …...
Java 21 的“无类主”特性:简化编程的第一步
在Java编程中,编写一个简单的“Hello, World!”程序通常需要以下代码: public class HelloWorld {public static void main(String[] args) {System.out.println("Hello, World!");} }这种结构包含了许多对初学者来说难以理解的概念ÿ…...
AI | 最近比较火的几个生成式对话 AI
关注:CodingTechWork 引言 生成式对话 AI 正在迅速改变我们与机器交互的方式,从智能助手到内容创作,其应用范围广泛且深远。本文将深入探讨几款当前热门的生成式对话 AI 模型,包括 Kimi、DeepSeek、ChatGPT、文心一言、通义千问和…...
差分信号抗噪声原理:
差分信号抗噪声原理: 差分信号除了能很好地解决发送和接收参考点电位不同的问题外,差分信号的另一个重要优势就是在一定条件下其抗干扰能力比单端信号更强。对于单端信号传输,外界对它的干扰噪声直接叠加在信号上,接收端直接检测输…...
6 种AI实用的方法,快速修复模糊照片
照片是我们记录生活的重要方式。但有时,由于各种原因,照片会变得模糊,无法展现出我们想要的效果。幸运的是,随着人工智能(AI)技术的发展,现在有多种方法可以利用 AI 修复模糊照片,让…...
JavaScript 的“积木”:函数入门与实践
引言:告别重复,拥抱模块化 想象一下,你在写代码时发现,有几段逻辑几乎一模一样,需要在不同的地方反复使用。你是选择每次都复制粘贴,还是希望能像搭积木一样,把这段逻辑封装起来,需…...
从入门到精通【MySQL】视图与用户权限管理
文章目录 📕1. 视图✏️1.1 视图的基本概念✏️1.2 试图的基本操作🔖1.2.1 创建视图🔖1.2.2 使用视图🔖1.2.3 修改数据🔖1.2.4 删除视图 ✏️1.3 视图的优点 📕2. 用户与权限管理✏️2.1 用户🔖…...
C++中的next_permutation全排列函数
目录 什么是全排列用法实现原理自定义比较函数 注意事项相关题目1.AB Problem2.P1088 火星人 什么是全排列 全排列是指从一组元素中按照一定顺序(按字典序排列)取出所有元素进行排列的所有可能情况。 例如,对于集合{1,2,3},它的全排列包括&a…...
修改el-select背景颜色
修改el-select背景颜色 /* 修改el-select样式--直接覆盖默认样式(推荐) */ ::v-deep .el-select .el-input__inner {background-color: #1d2b72 !important; /* 修改输入框背景色 */color: #fff; } ::v-deep .el-select .el-input__wrapper {background-…...
dockercompose文件仓库
mysql version: 3 # 使用docker-compose的版本,根据需要可以调整# 创建数据目录 # mkdir -p /home/docker/mysql/mysql_data # mkdir -p /home/docker/mysql/mysql_logs # 给予适当的权限(确保MySQL容器可以读写这些目录) # chmod 777 /ho…...
【C++入门:类和对象】[3]
C入门:类和对象 拷贝构造(拷贝初始化) 拷贝构造是构造函数的重载 class Date { public:Date(int year1,int month1,int day1) { _yearyear; _monthmonth; _dayday; } Date(const Date& d)//(拷贝构造,把d1传参给d)引用传参不改变使用const //注意使用&,不然会无穷递…...
【mdlib】0 全面介绍 mdlib - Rust 实现的 Markdown 工具集
mdlib 是由开发者 bahdotsh 创建的一个多功能 Markdown 工具集合,包含两个主要组件:一个轻量级 Markdown 解析库和一个功能完善的个人 Wiki 系统。该项目完全采用 Rust 实现,兼具高性能与跨平台特性。 核心组件 Markdown 解析库 特性&#…...
今日CSS学习浮动->定位
------------------------------------------------------------------------------------------------------- CSS的浮动 float 属性用于创建浮动框,将其移动到一边,直到左边缘或右边缘触及包含块或另一个浮动框的边缘。 float 属性定义元素在哪个方向浮…...
如何实现Spring Boot应用程序的安全性:全面指南
在现代 Web 开发中,安全性是 Spring Boot 应用程序的核心需求,尤其是在微服务、云原生和公开 API 场景中。Spring Boot 结合 Spring Security 提供了一套强大的工具,用于保护应用程序免受常见威胁,如未经授权的访问、数据泄露、跨…...
YOLOv8融合CPA-Enhancer【提高恶略天气的退化图像检测】
1.CPA介绍 CPA-Enhancer通过链式思考提示机制实现了对未知退化条件下图像的自适应增强,显著提升了物体检测性能。其插件式设计便于集成到现有检测框架中,并在物体检测及其他视觉任务中设立了新的性能标准,展现了广泛的应用潜力。 关于CPA-E…...
Python 项目环境配置与 Vanna 安装避坑指南 (PyCharm + venv)
在进行 Python 项目开发时,一个干净、隔离且配置正确的开发环境至关重要。尤其是在使用像 PyCharm 这样的集成开发环境 (IDE) 时,正确理解和配置虚拟环境 (Virtual Environment) 是避免许多常见问题的关键。本文结合之前安装 Vanna 库时遇到的问题&#…...
第52讲:农业AI + 区块链——迈向可信、智能、透明的未来农业
目录 一、为什么农业需要“AI+区块链”? 二、核心应用场景解读 1. 农产品溯源系统 2. 农业信贷与保险精准评估 3. 农业碳足迹追踪与碳汇交易 三、案例实战分享:智能溯源 + 区块链合约 四、面临挑战与展望 五、总结 在数字农业时代,“AI” 和 “区块链” 是两股不容忽…...
模板偏特化 (Partial Specialization)
C 模板偏特化 (Partial Specialization) 模板偏特化允许为模板的部分参数或特定类型模式提供定制实现,是 静态多态(Static Polymorphism) 的核心机制之一。以下通过代码示例和底层原理,全面解析模板偏特化的实现规则、匹配优先级…...
【防火墙 pfsense】1简介
(1) pfSense 有以下可能的用途: 边界防火墙 路由器 交换机 无线路由器 / 无线接入点 (2)边界防火墙 ->要充当边界防火墙,pfSense 系统至少需要两个接口:一个广域网(WAN࿰…...
Qt UDP组播实现与调试指南
在Qt中使用UDP组播(Multicast)可以实现高效的一对多网络通信。以下是关键步骤和示例代码: 一、UDP组播核心机制 组播地址:使用D类地址(224.0.0.0 - 239.255.255.255)TTL设置:控制数据包传播范围(默认1,同一网段)网络接口:指定发送/接收的物理接口二、发送端实现 /…...
线上助农产品商城小程序源码介绍
基于ThinkPHPFastAdminUniApp开发的线上助农产品商城小程序源码,旨在为农产品销售搭建一个高效、便捷的线上平台,助力乡村振兴。 一、技术架构 该小程序源码采用了ThinkPHP作为后端框架,FastAdmin作为快速开发框架,UniApp作为跨…...
【maven-7.1】POM文件中的属性管理:提升构建灵活性与可维护性
在Maven项目中,POM (Project Object Model) 文件是核心配置文件,而属性管理则是POM中一个强大但常被低估的特性。良好的属性管理可以显著提升项目的可维护性、减少重复配置,并使构建过程更加灵活。本文将深入探讨Maven中的属性管理机制。 1.…...
基于Matlab的车牌识别系统
1.程序简介 本模型基于MATLAB,通过编程创建GUI界面,基于Matlab的数字图像处理,对静止的车牌图像进行分割并识别,通过编写matlab程序对图像进行灰度处理、二值化、腐蚀膨胀和边缘化处理等,并定位车牌的文字,实现字符的…...
three.js精灵及精灵材质、Shader源码分析
在Three.js中,Sprite(精灵)用于创建始终面向相机的2D元素,适用于标签、图标或粒子效果。本文将分析其源码及Shader实现。 1. sprite的基本使用方法 创建精灵材质: 精灵材质有个特殊的参数rotation,可以让其旋转一定的角度。 const material = new THREE.SpriteMateria…...
Kubernetes Docker 部署达梦8数据库
Kubernetes & Docker 部署达梦8数据库 一、达梦镜像获取 目前达梦官方暂未在公共镜像仓库提供Docker镜像,需通过达梦官网联系获取官方镜像包。 二、Kubernetes部署方案 部署配置文件示例 apiVersion: apps/v1 kind: Deployment metadata:labels:app: dm8na…...
探索 CameraCtrl模型:视频生成中的精确摄像机控制技术
在当今的视频生成领域,精确控制摄像机轨迹一直是一个具有挑战性的目标。许多现有的模型在处理摄像机姿态时往往忽略了精准控制的重要性,导致生成的视频在摄像机运动方面不够理想。为了解决这一问题,一种名为 CameraCtrl 的创新文本到视频模型…...
Streamlit从入门到精通:构建数据应用的利器
在数据科学与机器学习日益普及的今天,如何快速将模型部署为可交互的应用成为了许多数据科学家的重要任务。Streamlit,作为一个开源的Python库,专为数据科学家设计,能够帮助我们轻松构建美观且直观的Web应用。本文将从入门到精通&a…...
【计算机视觉】CV实战项目- 深度解析FaceAI:一款全能的人脸检测与图像处理工具库
深度解析FaceAI:一款全能的人脸检测与图像处理工具库 项目概述核心功能与技术实现1. 人脸检测与识别2. 数字化妆与轮廓标识3. 性别与表情识别4. 高级图像处理 实战指南:项目运行与开发环境配置典型应用示例常见问题与解决方案 学术背景与相关研究项目扩展…...
快速上手GO的net/http包,个人学习笔记
更多个人笔记:(仅供参考,非盈利) gitee: https://gitee.com/harryhack/it_note github: https://github.com/ZHLOVEYY/IT_note 针对GO中net/http包的学习笔记 基础快速了解 创建简单的GOHTTP服务 func …...
达梦DMDSC初研
1.文件系统 1.1文件系统DMASM DMASM是一个分布式文件系统,用来管理块设备的磁盘和文件,DMASMCMD将物理磁盘格式化后,变成可识别、可管理的 ASM磁盘,再通过 ASM磁盘组将一个或者多个 ASM磁盘整合成一个整体提供文件服务。ASM磁盘…...
