> 백엔드 개발 > 파이썬 튜토리얼 > # Python으로 FLET을 사용하여 이미지 생성기 구축

# Python으로 FLET을 사용하여 이미지 생성기 구축

Linda Hamilton
풀어 주다: 2024-12-04 22:31:14
원래의
810명이 탐색했습니다.

소개

안녕하세요 소프트웨어 개발자 ?‍?, Arsey님?

늦게 업데이트해서 죄송합니다. 저는 학생이고 개인적인 프로젝트를 진행 중이었지만 앞으로 계속해서 소식을 전해 드리겠습니다.

그래서 내 마지막 튜토리얼에서 누군가가 kivy 및 flet과 같은 Python 프레임워크에서 GenAI를 사용할 수 있는지 언급했는데 내 대답은 '예'였습니다. 이를 사용하여 GenAI 앱을 구축할 수 있습니다. 가장 확장성이 뛰어난 것은 아닐 수도 있지만 이러한 프레임워크를 사용하는 사이드 프로젝트의 경우 조용하게 사용 가능합니다.

이 튜토리얼에서는 flet과 flux.dev로 알려진 이미지 생성 모델을 사용하여 Python으로 간단한 이미지 생성기 앱을 구축하겠습니다.

Flux는 강력한 이미지 생성기 모델이므로 컴퓨터에서 실행하려면 높은 컴퓨팅 성능이 필요하므로 내 컴퓨터는 그만큼 강력하므로 여기서는 Flux에 대한 API 엔드포인트를 제공하는 플랫폼인 Replicate를 사용하겠습니다. 사용자 경험에 따라 이미지 생성이 API에 의해 처리되므로 시스템이 다운되거나 지연되지 않습니다. 하지만 Flux API가 있는 Huggingsface를 사용할 수 있지만 따라가면 복제를 사용하겠습니다. 무엇을 기다리고 있는지 살펴보겠습니다.

전제 조건

애플리케이션 구축을 시작하기 전에 함수 및 일부 oop 개념과 같은 Python 기본 사항에 대한 기본 지식을 갖추고 시스템에 필요한 패키지가 설치되어 있는지 확인하는 것이 좋습니다. 우리는 다음 패키지를 사용할 것입니다.

  • Flet을 모르시는 분들을 위한 사용자 인터페이스 구축을 위한 Flet입니다. Flet은 가장 사랑받는 모바일 프레임워크 중 하나인 Flutter를 기반으로 하는 Python 라이브러리입니다. Flet을 사용하면 실시간으로 빠르고 아름다운 사용자 인터페이스를 구축할 수 있으며 크로스 플랫폼을 실행할 수 있습니다.

  • replicate Replicate는 서비스형 플랫폼(PAAS)으로, 설치하지 않고도 사용할 수 있는 미리 만들어진 모델을 제공하는 플랫폼입니다. 여기서 의미하는 바는 복제가 애플리케이션에서 도달할 API 엔드포인트를 제공한다는 것입니다. Replicate는 걱정 없이 애플리케이션 기능에 집중할 수 있도록 클라우드에서 요청과 응답을 처리합니다.

  • 여기서 API 엔드포인트에 대한 요청을 보내고 응답을 받고 복제할 수 있습니다.

  • 아, 파일 관리용 OS라도 이를 사용하면 로컬 시스템에 이미지를 저장할 수 있습니다.

프로젝트 설정(환경 설정)

필수 패키지 설치

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 요소입니다. 보시다시피 UI에 이미지를 표시할 수 있는 AppBar, Image가 있고 마지막으로
사용자 프롬프트를 캡처하려면 TextField를 추가하세요. 이미지 생성 및 저장을 각각 처리하는 생성 및 저장 버튼입니다.

마지막으로 페이지에 구성 요소를 추가합니다. SafeArea를 사용했습니다. 이는 충분한 패딩을 제공하고 운영 체제의 침입을 피하는 데 도움이 됩니다. 우리의 경우에는 들여쓰기가 됩니다.
AppBar의 보간을 방지하기 위한 Column 위젯을 사용하면 Column 위젯과 마찬가지로 UI 요소를 수직 배열로 표시할 수 있습니다.

복제 통합

당신의 흥분이 느껴집니다. 이것이 가장 중요한 단계이므로 실수하지 않도록 주의하세요. 그렇지 않으면 코드가 깨지고 결국 디버깅이 끝나게 됩니다. 아, 디버깅은 좋은 기술입니다. 왜냐하면 제가 2일이 걸렸기 때문입니다. 잘못된 토큰이 있는 API 엔드포인트를 디버깅하려면 UI와 3일을 수정하세요.

안타깝습니다. 프로세스에서 버그/오류가 발생하면 디버깅을 시도하고 결과를 확인하세요. 최선을 다해 도와드리겠습니다. 저나 다른 개발자가 도움을 드릴 수 있는지 질문해 주세요.

이제 모델을 통합하고 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

최근 해커톤에 참가한 이후로 업로드를 하지 않고 있으며 학생들과 직장인을 위한 책도 쓰고 있는데 머리가 아파서 프로그래밍을 잠시 중단하고 잠시 쉬었습니다.

그런데 이제부터 콘텐츠를 업로드하겠습니다.

기다려주셔서 감사합니다. 개발자 여러분을 위해 더 많이 업로드하겠습니다.

위 내용은 # Python으로 FLET을 사용하여 이미지 생성기 구축의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:dev.to
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿