搭建Stable Diffusion图像生成系统实现通过网址访问(Ngrok+Flask实现项目系统公网测试,轻量易部署)

news2025/4/25 7:58:13

目录

 前言

背景与需求

🎯 需求分析

核心功能

网络优化

方案确认

 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 time

app = Flask(__name__)

class ImageGenerationThread(threading.Thread):
    def __init__(self, prompt):
        super().__init__()
        self.prompt = prompt
        self.result = None

    def 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"}), 400

    thread = 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)


实现流程

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

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

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

  4. 配置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博客

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2342249.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

差分信号抗噪声原理:

差分信号抗噪声原理&#xff1a; 差分信号除了能很好地解决发送和接收参考点电位不同的问题外&#xff0c;差分信号的另一个重要优势就是在一定条件下其抗干扰能力比单端信号更强。对于单端信号传输&#xff0c;外界对它的干扰噪声直接叠加在信号上&#xff0c;接收端直接检测输…

6 种AI实用的方法,快速修复模糊照片

照片是我们记录生活的重要方式。但有时&#xff0c;由于各种原因&#xff0c;照片会变得模糊&#xff0c;无法展现出我们想要的效果。幸运的是&#xff0c;随着人工智能&#xff08;AI&#xff09;技术的发展&#xff0c;现在有多种方法可以利用 AI 修复模糊照片&#xff0c;让…

从入门到精通【MySQL】视图与用户权限管理

文章目录 &#x1f4d5;1. 视图✏️1.1 视图的基本概念✏️1.2 试图的基本操作&#x1f516;1.2.1 创建视图&#x1f516;1.2.2 使用视图&#x1f516;1.2.3 修改数据&#x1f516;1.2.4 删除视图 ✏️1.3 视图的优点 &#x1f4d5;2. 用户与权限管理✏️2.1 用户&#x1f516;…

C++中的next_permutation全排列函数

目录 什么是全排列用法实现原理自定义比较函数 注意事项相关题目1.AB Problem2.P1088 火星人 什么是全排列 全排列是指从一组元素中按照一定顺序(按字典序排列&#xff09;取出所有元素进行排列的所有可能情况。 例如&#xff0c;对于集合{1,2,3}&#xff0c;它的全排列包括&a…

修改el-select背景颜色

修改el-select背景颜色 /* 修改el-select样式--直接覆盖默认样式&#xff08;推荐&#xff09; */ ::v-deep .el-select .el-input__inner {background-color: #1d2b72 !important; /* 修改输入框背景色 */color: #fff; } ::v-deep .el-select .el-input__wrapper {background-…

YOLOv8融合CPA-Enhancer【提高恶略天气的退化图像检测】

1.CPA介绍 CPA-Enhancer通过链式思考提示机制实现了对未知退化条件下图像的自适应增强&#xff0c;显著提升了物体检测性能。其插件式设计便于集成到现有检测框架中&#xff0c;并在物体检测及其他视觉任务中设立了新的性能标准&#xff0c;展现了广泛的应用潜力。 关于CPA-E…

Python 项目环境配置与 Vanna 安装避坑指南 (PyCharm + venv)

在进行 Python 项目开发时&#xff0c;一个干净、隔离且配置正确的开发环境至关重要。尤其是在使用像 PyCharm 这样的集成开发环境 (IDE) 时&#xff0c;正确理解和配置虚拟环境 (Virtual Environment) 是避免许多常见问题的关键。本文结合之前安装 Vanna 库时遇到的问题&#…

线上助农产品商城小程序源码介绍

基于ThinkPHPFastAdminUniApp开发的线上助农产品商城小程序源码&#xff0c;旨在为农产品销售搭建一个高效、便捷的线上平台&#xff0c;助力乡村振兴。 一、技术架构 该小程序源码采用了ThinkPHP作为后端框架&#xff0c;FastAdmin作为快速开发框架&#xff0c;UniApp作为跨…

基于Matlab的车牌识别系统

1.程序简介 本模型基于MATLAB,通过编程创建GUI界面&#xff0c;基于Matlab的数字图像处理&#xff0c;对静止的车牌图像进行分割并识别&#xff0c;通过编写matlab程序对图像进行灰度处理、二值化、腐蚀膨胀和边缘化处理等&#xff0c;并定位车牌的文字&#xff0c;实现字符的…

探索 CameraCtrl模型:视频生成中的精确摄像机控制技术

在当今的视频生成领域&#xff0c;精确控制摄像机轨迹一直是一个具有挑战性的目标。许多现有的模型在处理摄像机姿态时往往忽略了精准控制的重要性&#xff0c;导致生成的视频在摄像机运动方面不够理想。为了解决这一问题&#xff0c;一种名为 CameraCtrl 的创新文本到视频模型…

【计算机视觉】CV实战项目- 深度解析FaceAI:一款全能的人脸检测与图像处理工具库

深度解析FaceAI&#xff1a;一款全能的人脸检测与图像处理工具库 项目概述核心功能与技术实现1. 人脸检测与识别2. 数字化妆与轮廓标识3. 性别与表情识别4. 高级图像处理 实战指南&#xff1a;项目运行与开发环境配置典型应用示例常见问题与解决方案 学术背景与相关研究项目扩展…

Cephalon端脑云:神经形态计算+边缘AI·重定义云端算力

前引&#xff1a;当算力不再是“奢侈品” &#xff0c;在人工智能、3D渲染、科学计算等领域&#xff0c;算力一直是横亘在个人与企业面前的“高墙”。高性能服务器价格动辄数十万元&#xff0c;专业设备维护成本高&#xff0c;普通人大多是望而却步。然而&#xff0c;Cephalon算…

Redis的过期删除策略和内存淘汰策略

&#x1f914; 过期删除和内存淘汰乍一看很像&#xff0c;都是做删除操作的&#xff0c;这么分有什么意思&#xff1f; 首先&#xff0c;设置过期时间我们很熟悉&#xff0c;过期时间到了&#xff0c;我么的键就会被删除掉&#xff0c;这就是我们常认识的过期删除&#xff0c;…

MySQL:数据库设计

目录 一、范式 二、第一范式 二、第二范式 三、第三范式 四、设计 &#xff08;1&#xff09;一对一关系 &#xff08;2&#xff09;一对多关系 &#xff08;3&#xff09;多对多关系 一、范式 数据库的范式是一种规则&#xff08;规范&#xff09;&#xff0c;如果我们…

synchronized关键字的实现

Java对象结构 synchronized锁升级过程 为了优化synchronized锁的效率&#xff0c;在JDK6中&#xff0c;HotSpot虚拟机开发团队提出了锁升级的概念&#xff0c;包括偏向锁、轻量级锁、重量级锁等&#xff0c;锁升级指的就是“无锁 --> 偏向锁 --> 轻量级锁 --> 重量级…

opencv 图像的旋转

图像的旋转 1 单点旋转2. 图片旋转&#xff08;cv2.getRotationMatrix2D&#xff09;3. 插值方法3.1 最近邻插值(cv2.INTER_NEAREST)3.2 双线性插值(cv2.INTER_LINEAR)3.3 像素区域插值&#xff08;cv2.INTER_AREA&#xff09;3.4 双三次插值&#xff08;cv2.INTER_CUBIC&#…

【多线程】线程互斥 互斥量操作 守卫锁 重入与线程安全

文章目录 Ⅰ. 线程互斥概念Ⅱ. 互斥锁的概念Ⅲ. 互斥锁的接口一、互斥锁的定义二、初始化互斥锁三、销毁互斥锁四、互斥量的加锁和解锁① 加锁接口② 解锁接口五、改进买票系统💥注意事项Ⅳ. 互斥锁的实现原理一、问题引入二、复习知识三、实现原理Ⅴ. 封装锁对象 &&…

空闲列表:回收和再利用

空闲列表&#xff1a;回收和再利用 手动与自动内存管理 手动管理&#xff1a;程序员需要明确地分配和释放内存。自动管理&#xff1a;例如使用垃圾收集器(GC)&#xff0c;它能够自动检测并回收未使用的对象&#xff0c;不需要程序员干预。 对于某些数据结构如B树&#xff0c;…

计算机组成与体系结构:直接内存映射(Direct Memory Mapping)

目录 CPU地址怎么找到真实的数据&#xff1f; 内存映射的基本单位和结构 1. Pages&#xff08;页&#xff09;——虚拟地址空间的基本单位 2. Frames&#xff08;页框&#xff09;——物理内存空间的基本单位 3. Blocks&#xff08;块&#xff09;——主存和缓存之间的数据…

STM32提高篇: 蓝牙通讯

STM32提高篇: 蓝牙通讯 一.蓝牙通讯介绍1.蓝牙技术类型 二.蓝牙协议栈1.蓝牙芯片架构2.BLE低功耗蓝牙协议栈框架 三.ESP32-C3中的蓝牙功能1.广播2.扫描3.通讯 四.发送和接收 一.蓝牙通讯介绍 蓝牙&#xff0c;是一种利用低功率无线电&#xff0c;支持设备短距离通信的无线电技…