首页 后端开发 Python教程 # 使用 FLET 和 PYTHON 构建图像生成器

# 使用 FLET 和 PYTHON 构建图像生成器

Dec 04, 2024 pm 10:31 PM

介绍

你们好,软件开发人员?‍?,这里是 Arsey?,

抱歉更新晚了,我是一名学生,正在处理一些个人项目,但从现在开始我会继续为您提供更新。

所以在我的上一篇教程中有人评论说我们是否可以在 kivy 和 flet 等 python 框架中使用 GenAI,我的答案是肯定的,你可以用它们构建 GenAI 应用程序。它可能不是最具可扩展性的框架,但对于使用这些框架的副项目来说,这是一个安静的选择。

在本教程中,我们将使用 flet 和名为 Flux.dev 的图像生成模型在 Python 中构建一个简单的图像生成器应用程序。

由于flux是一个强大的图像生成器模型,它需要很高的计算能力才能在您的机器上运行,我的机器就那么强大,所以在这里我们将使用replicate,这个平台将为我们提供flux的API端点,以便我们集中精力在用户体验上,图像生成将由 API 处理,因此不会出现系统崩溃或滞后的情况,尽管您可以使用 Huggingsface,它也具有 Flux API,但接下来我们将使用复制。还等什么,让我们开始吧。

先决条件

在我们开始构建我们的应用程序之前,我建议您了解 python 基础知识,例如函数和一些 oop 概念,并确保您的系统中安装了必要的软件包,我们将使用以下软件包:

  • flet 用于构建用户界面,对于那些不了解 Flet 的人。 Flet 是一个基于 flutter 的 python 库,flutter 是最受欢迎的移动框架之一。 Flet 使我们能够实时构建快速、美观的用户界面,并且可以跨平台运行。

  • replicate Replicate 是一个平台即服务 (PAAS),该平台将为我们提供预制模型,我们无需安装即可使用它们。我在这里的意思是,复制将提供我们将从应用程序访问的 API 端点。 Replicate 将在云端处理请求和响应,让您无需担心就可以专注于应用程序的功能。

  • 对 API 端点的请求,我们将能够在此处发送请求并接收来自复制的响应。

  • 哦,即使是文件管理操作系统,这也将允许我们将图像保存在本地系统上。

项目设置(环境设置)

安装所需的软件包,

pip install flet 复制请求

安装完成后,就可以开始使用你的键盘了;您需要从这里创建一个具有复制功能的帐户创建复制帐户,确保使用您的 GitHub 凭据进行身份验证和授权。

创建帐户后,您现在将被重定向到复制仪表板,在这里您将能够看到不同的模型,但在本教程中我们将使用 Flux.dev。找到并使用 Flux.dev 模型,选择任何其他模型也可以工作。

提醒安装复制以便能够使用他们的 API。全部完成,然后前往复制并创建 API 令牌,这将设置从复制到我们的客户端应用程序的端点。

注意:开发版本不用于生产或商业目的,请注意,您使用免费版本模型的代币有限,所以不要兴奋并生成随机图像或否则你将失去所有免费积分。

现在我们在哪里,哦,好吧,我想到目前为止您已经完成了所有设置,让我们去使用他们的 API。

构建用户界面

首先我们将构建用户界面,在本部分结束时,您将拥有一个模拟 UI,现在就准备好,打开您最喜欢的 IDE/代码编辑器并输入此代码。

import os
import flet as ft
import replicate
import requests

# Set the Replicate API token in the environment
os.environ["REPLICATE_API_TOKEN"] = "YOUR_API_TOKEN"

# Function to interact with Replicate API for image generation
def generate_image(prompt):
    pass

# Function to save the image locally
def save_image(image_url, filename="generated_image.webp"):
    pass

# Main function to define the Flet app
def main(page: ft.Page):
    page.title = "ArseyGen"
    page.horizontal_alignment = 'center'
    page.scroll = ft.ScrollMode.AUTO
    page.theme_mode = ft.ThemeMode.DARK

    page.appbar = ft.AppBar(
        title=ft.Text("REPLICATE IMAGE GENERATOR"), center_title=True
    )

    # Placeholder image to avoid missing src error
    result_image = ft.Image(
        src="https://via.placeholder.com/512", width=512, height=512
        )

    # Define the save button (initially disabled)
    save_image_button = ft.ElevatedButton(text="Save Image", disabled=True)

    # Function to handle image generation
    def generate_and_display_image(e):
        pass

    prompt_input = ft.TextField(label="Enter a text prompt")
    generate_button = ft.ElevatedButton(
        text="Generate Image", on_click=generate_and_display_image
        )

    # Add components to the page
    page.add(
        ft.SafeArea(
            content=ft.Column(
                [
                    prompt_input,
                    generate_button, result_image,
                    save_image_button,
                ],
                horizontal_alignment=ft.CrossAxisAlignment.CENTER
            )
        )
    )

# Run the Flet app
if __name__ == '__main__':
    ft.app(target=main)
登录后复制
登录后复制

输出
这一步你会得到这样的东西,
# BUILDING AN IMAGE GENERATOR USING FLET WITH PYTHON

代码说明

这就是我们所做的,我们首先导入所需的模块。
然后我们设置复制提供的 api_token。
然后在这里我们设置稍后将使用的占位符函数,我们使用了 pass 语句
忽略他们。

主函数然后描述并构建我们的UI,在这里我们设置页面标题,对齐方式,
滚动行为,使我们的页面可滚动。其余的是 UI 元素,如您所见,我们有 AppBar、Image,它允许我们在 UI 中显示图像,最后我们
添加TextField来捕获用户的提示;生成和保存按钮分别用于处理图像生成和保存。

最后我们将组件添加到页面,注意我们使用了 SafeArea,这将帮助我们提供足够的填充并避免操作系统的入侵,在我们的例子中它将缩进
Column 小部件可以避免 AppBar 进行插值,至于 Column 小部件,允许我们在垂直数组中显示 UI 元素。

整合复制

我能感受到你的兴奋,这是最关键的一步,所以请确保你没有犯任何错误,否则你将最终破坏代码,并最终进行调试,哦,调试是一项很好的技能,因为我花了2天时间才完成修复 ui 和 3days 来调试我有无效令牌的 api 端点。

令人沮丧的是,所以如果您在尝试调试并查看结果的过程中遇到任何错误/错误,我会尽力帮助您,所以提出问题可能是我或其他开发人员会提供帮助。

好吧,现在让我们集成模型,前往 Flux.dev 进行复制等。
复制提供的代码,我们将对其进行一些更改,好吗!完成。

更新generate_image函数,使其看起来像这样,

import os
import flet as ft
import replicate
import requests

# Set the Replicate API token in the environment
os.environ["REPLICATE_API_TOKEN"] = "YOUR_API_TOKEN"

# Function to interact with Replicate API for image generation
def generate_image(prompt):
    pass

# Function to save the image locally
def save_image(image_url, filename="generated_image.webp"):
    pass

# Main function to define the Flet app
def main(page: ft.Page):
    page.title = "ArseyGen"
    page.horizontal_alignment = 'center'
    page.scroll = ft.ScrollMode.AUTO
    page.theme_mode = ft.ThemeMode.DARK

    page.appbar = ft.AppBar(
        title=ft.Text("REPLICATE IMAGE GENERATOR"), center_title=True
    )

    # Placeholder image to avoid missing src error
    result_image = ft.Image(
        src="https://via.placeholder.com/512", width=512, height=512
        )

    # Define the save button (initially disabled)
    save_image_button = ft.ElevatedButton(text="Save Image", disabled=True)

    # Function to handle image generation
    def generate_and_display_image(e):
        pass

    prompt_input = ft.TextField(label="Enter a text prompt")
    generate_button = ft.ElevatedButton(
        text="Generate Image", on_click=generate_and_display_image
        )

    # Add components to the page
    page.add(
        ft.SafeArea(
            content=ft.Column(
                [
                    prompt_input,
                    generate_button, result_image,
                    save_image_button,
                ],
                horizontal_alignment=ft.CrossAxisAlignment.CENTER
            )
        )
    )

# Run the Flet app
if __name__ == '__main__':
    ft.app(target=main)
登录后复制
登录后复制

这个函数的作用是,它与 Replicate API 交互,根据用户提供的文本提示生成图像。
然后它发送提示和其他模型参数
到 API 并返回生成图像的 URL,如果出现问题,它会通过返回 None 来处理错误。

粘贴从复制中复制的 API 令牌。所以它看起来像这样,

os.environ["REPLICATE_API_TOKEN"]="r8_KhysOWTKUjRsagyyyLNIWvvg2K78qrE48RwTh"

确保您拥有令牌,您可以通过此处获取您的 api 令牌来获取您的 API 令牌

应用生成和显示图像功能

完成后,我们还可以更新generate_and_display_image函数,在下面输入此代码,

 def generate_image(prompt):
    try:
        # Make the API call to Replicate to generate an image
        output = replicate.run(
            "bingbangboom-lab/flux-dreamscape:b761fa16918356ee07f31fad9b0d41d8919b9ff08f999e2d298a5a35b672f47e",
            # "black-forest-labs/flux-dev",
            input={
                "model": "dev",
                "prompt": prompt,
                "lora_scale": 1,
                "num_outputs": 1,
                "aspect_ratio": "1:1",
                "output_format": "webp",
                "guidance_scale": 3.5,
                "output_quality": 80,
                "prompt_strength": 0.8,
                "extra_lora_scale": 0.8,
                "num_inference_steps": 28
            }
        )
        # Return the generated image URL
        return output[0]
    except Exception as e:
        print(f"Error: {e}")
        return None
登录后复制

此时,当您运行应用程序时,尝试输入提示并单击生成按钮,您将看到一个进度条,几秒钟内您将在 UI 中看到生成的图像。请记住不要过度生成,否则您将失去您的积分。我向你保证这不会很有趣。

代码说明

此函数管理在我们的应用程序中生成和显示图像的工作流程。它需要用户的提示,调用generate_image()来
生成 image_url 并使用 result_image 更新应用程序 UI。如果该过程失败,则会显示错误对话框。并且在图像成功生成后启用“保存图像”按钮。

应用 save_image 函数

累了已经节省你的精力了,喝点咖啡并完成项目,因为我们现在要添加节省功能。

到目前为止,我们已经有了基本的用户界面,我们现在可以成功生成图像,但是我们有一个问题,如果我们想将图像保存在我们的系统上怎么办,因为现在我们当前的应用程序刚刚生成并且......
完成了,为了解决这个问题我们必须添加保存功能。

因此,在您的代码中更新 save_image 函数,使其看起来像这样:

def generate_and_display_image(e):
        prompt = prompt_input.value
        if prompt:
            page.splash = ft.ProgressBar()  # Display progress bar while generating image
            page.update()

            # Generate image based on user's prompt
            image_url = generate_image(prompt)
            page.splash = None  # Hide progress bar

            if image_url:
                # Update image source only if we have a valid URL
                result_image.src = image_url
                result_image.update()

                # Enable save button after image is generated
                save_image_button.disabled = False
                save_image_button.update()

                # Define save button's functionality (save the image locally when clicked)
                def save_image_click(e):
                    save_image(image_url, "anime.webp")

                save_image_button.on_click = save_image_click

            else:
                # Display an error message if image generation fails
                page.dialog = ft.AlertDialog(
                    title=ft.Text("Error"),
                    content=ft.Text("Failed to generate image. Please try again."),
                    actions=[
                        ft.TextButton(
                            "OK",
                            on_click=lambda _: page.dialog.close()
                            )
                        ]
                    )

                page.dialog.open = True
                page.update()
登录后复制

代码解释

现在我们做了什么,让我们来分解一下。
该函数允许我们下载并保存generate_image到本地系统。它采用 image_url 和可选的文件名,通过 HTTP 请求检索图像数据,并将其写入文件。
它确保下载失败时的错误处理。

结论

嗯!就是这样,开发者们,一个使用 python、flet 和 Flux 的简单图像生成器。
从事这个项目很有趣,希望能得到您的帮助。

这是我的最终输出,

# BUILDING AN IMAGE GENERATOR USING FLET WITH PYTHON

自从参加最近的一次黑客马拉松以来,我就没有上传过,而且我还在为学生和职业人士写一本书,这是一个令人头痛的拥抱,因此暂停了一些编程并休息了一段时间。

但是现在我会上传内容。

感谢您的耐心等待,我会为你们的开发者上传更多内容。

以上是# 使用 FLET 和 PYTHON 构建图像生成器的详细内容。更多信息请关注PHP中文网其他相关文章!

本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

Video Face Swap

Video Face Swap

使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热门文章

<🎜>:泡泡胶模拟器无穷大 - 如何获取和使用皇家钥匙
4 周前 By 尊渡假赌尊渡假赌尊渡假赌
北端:融合系统,解释
4 周前 By 尊渡假赌尊渡假赌尊渡假赌
Mandragora:巫婆树的耳语 - 如何解锁抓钩
3 周前 By 尊渡假赌尊渡假赌尊渡假赌

热工具

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

热门话题

Java教程
1673
14
CakePHP 教程
1429
52
Laravel 教程
1333
25
PHP教程
1278
29
C# 教程
1257
24
Python与C:学习曲线和易用性 Python与C:学习曲线和易用性 Apr 19, 2025 am 12:20 AM

Python更易学且易用,C 则更强大但复杂。1.Python语法简洁,适合初学者,动态类型和自动内存管理使其易用,但可能导致运行时错误。2.C 提供低级控制和高级特性,适合高性能应用,但学习门槛高,需手动管理内存和类型安全。

学习Python:2小时的每日学习是否足够? 学习Python:2小时的每日学习是否足够? Apr 18, 2025 am 12:22 AM

每天学习Python两个小时是否足够?这取决于你的目标和学习方法。1)制定清晰的学习计划,2)选择合适的学习资源和方法,3)动手实践和复习巩固,可以在这段时间内逐步掌握Python的基本知识和高级功能。

Python vs.C:探索性能和效率 Python vs.C:探索性能和效率 Apr 18, 2025 am 12:20 AM

Python在开发效率上优于C ,但C 在执行性能上更高。1.Python的简洁语法和丰富库提高开发效率。2.C 的编译型特性和硬件控制提升执行性能。选择时需根据项目需求权衡开发速度与执行效率。

Python vs. C:了解关键差异 Python vs. C:了解关键差异 Apr 21, 2025 am 12:18 AM

Python和C 各有优势,选择应基于项目需求。1)Python适合快速开发和数据处理,因其简洁语法和动态类型。2)C 适用于高性能和系统编程,因其静态类型和手动内存管理。

Python标准库的哪一部分是:列表或数组? Python标准库的哪一部分是:列表或数组? Apr 27, 2025 am 12:03 AM

pythonlistsarepartofthestAndArdLibrary,herilearRaysarenot.listsarebuilt-In,多功能,和Rused ForStoringCollections,而EasaraySaraySaraySaraysaraySaraySaraysaraySaraysarrayModuleandleandleandlesscommonlyusedDduetolimitedFunctionalityFunctionalityFunctionality。

Python:自动化,脚本和任务管理 Python:自动化,脚本和任务管理 Apr 16, 2025 am 12:14 AM

Python在自动化、脚本编写和任务管理中表现出色。1)自动化:通过标准库如os、shutil实现文件备份。2)脚本编写:使用psutil库监控系统资源。3)任务管理:利用schedule库调度任务。Python的易用性和丰富库支持使其在这些领域中成为首选工具。

科学计算的Python:详细的外观 科学计算的Python:详细的外观 Apr 19, 2025 am 12:15 AM

Python在科学计算中的应用包括数据分析、机器学习、数值模拟和可视化。1.Numpy提供高效的多维数组和数学函数。2.SciPy扩展Numpy功能,提供优化和线性代数工具。3.Pandas用于数据处理和分析。4.Matplotlib用于生成各种图表和可视化结果。

Web开发的Python:关键应用程序 Web开发的Python:关键应用程序 Apr 18, 2025 am 12:20 AM

Python在Web开发中的关键应用包括使用Django和Flask框架、API开发、数据分析与可视化、机器学习与AI、以及性能优化。1.Django和Flask框架:Django适合快速开发复杂应用,Flask适用于小型或高度自定义项目。2.API开发:使用Flask或DjangoRESTFramework构建RESTfulAPI。3.数据分析与可视化:利用Python处理数据并通过Web界面展示。4.机器学习与AI:Python用于构建智能Web应用。5.性能优化:通过异步编程、缓存和代码优

See all articles