Hello ada pembangun perisian ??, Arsey di sini?,
Maaf atas kelewatan kemas kini, saya seorang pelajar dan sedang mengusahakan beberapa projek peribadi, tetapi saya akan mengikuti perkembangan dan memaklumkan anda untuk mengemas kini mulai sekarang.
Jadi dalam tutorial terakhir saya, seseorang mengulas jika kita boleh menggunakan GenAI dalam rangka kerja python seperti kivy dan flet, jawapan saya ialah ya, anda boleh membina aplikasi GenAI dengan mereka. Ia mungkin bukan yang paling berskala tetapi untuk projek sampingan dengan rangka kerja ini, anda perlu pergi.
Dalam tutorial ini, kami akan membina Apl Penjana Imej ringkas dalam python dengan flet dan model penjanaan imej yang dikenali sebagai flux.dev.
Memandangkan fluks ialah model penjana imej yang berkuasa, ia memerlukan kuasa pengkomputeran yang tinggi untuk dijalankan pada mesin anda, mesin saya begitu berkuasa jadi di sini kami akan menggunakan replika, platform yang akan memberikan kami titik akhir API untuk fluks supaya kami fokus pada pengalaman pengguna, dan penjanaan imej akan dikendalikan oleh API, jadi tiada sistem mengalami kemerosotan atau ketinggalan, walaupun anda boleh menggunakan huggingsface yang juga mempunyai API fluks tetapi ikuti kami akan pergi dengan replika. apa tunggu lagi, mari selami.
Sebelum kami mula membina aplikasi kami, saya syorkan anda mempunyai pengetahuan asas dengan asas python seperti fungsi dan beberapa konsep oop, dan pastikan anda memasang pakej yang diperlukan dalam sistem anda, kami akan menggunakan pakej berikut:
flet untuk membina antara muka pengguna, bagi mereka yang tidak tahu Flet. Flet ialah pustaka python berdasarkan flutter salah satu rangka kerja mudah alih yang paling digemari. Flet membolehkan kami membina antara muka pengguna yang pantas dan cantik dalam masa nyata dan boleh menjalankan merentas platform.
replicate Replicate ialah platform sebagai perkhidmatan (PAAS), platform yang akan memberikan kami model pra-buat yang boleh kami gunakan tanpa memasangnya. Apa yang saya maksudkan di sini ialah, replikat akan memberikan titik akhir API yang akan kami tekan daripada aplikasi kami. Replika akan mengendalikan permintaan dan tindak balas dalam awan kerana anda menumpukan pada fungsi aplikasi anda tanpa perlu risau.
permintaan untuk titik akhir API kami di sini kami akan dapat menghantar permintaan dan menerima respons daripada dan untuk meniru.
Oh walaupun os untuk pengurusan fail, ini akan membolehkan kami menyimpan imej kami pada sistem setempat kami.
Pasang pakej yang diperlukan,
permintaan replika pemasangan flet pip
Setelah dipasang, dan sedia untuk mengacaukan papan kekunci anda; anda perlu membuat akaun dengan replika dari sini buat akaun replika pastikan anda mengesahkan dan memberi kebenaran menggunakan kelayakan GitHub anda.
Selepas membuat akaun anda, anda kini akan diubah hala ke papan pemuka replika, di sini anda akan dapat melihat model yang berbeza, tetapi untuk tutorial ini kami akan menggunakan flux.dev. cari dan gunakan model flux.dev, mana-mana modek lain yang dipilih juga boleh berfungsi.
Replika pemasangan peringatan untuk dapat menggunakan API mereka. Semua selesai, kemudian pergi ke replika dan buat token API, ini akan menyediakan titik akhir daripada replika ke apl sebelah pelanggan kami.
Nota: versi dev tidak digunakan dalam pengeluaran atau tujuan komersial, dan maklum bahawa anda mempunyai token terhad untuk menggunakan versi percuma model, jadi jangan teruja dan jana imej rawak atau jika tidak, anda akan kehilangan semua kredit percuma anda.
Sekarang di mana kita berada, oh baiklah saya rasa anda telah menyediakan segala-galanya hingga ke tahap ini, mari kita bermain dengan API mereka.
Pertama sekali kami akan membina Antara Muka Pengguna, pada penghujung bahagian ini anda akan mempunyai UI palsu, sedia sekarang, buka editor IDE/kod kegemaran anda dan taip kod ini.
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)
Output
anda akan mempunyai sesuatu seperti ini untuk langkah ini,
Inilah yang telah kami lakukan, kami mula-mula mengimport modul yang diperlukan kami.
kami kemudian menetapkan api_token kami yang disediakan oleh replika.
maka di sini kami menetapkan fungsi pemegang tempat kami yang akan digunakan kemudian, kami menggunakan pernyataan lulus
untuk mengabaikan mereka.
Fungsi utama kemudian menerangkan dan membina UI kami, di sini kami menetapkan tajuk halaman, penjajaran,
tatal tingkah laku supaya halaman kami boleh ditatal. dan selebihnya adalah elemen UI, seperti yang Anda lihat kami mempunyai AppBar, Imej yang membolehkan kami memaparkan imej dalam UI kami, dan akhirnya kami
tambah TextField untuk menangkap gesaan pengguna; Jana dan Simpan butang untuk mengendalikan penjanaan dan penjimatan imej masing-masing.
Akhirnya kami menambah komponen kami ke halaman, perhatikan kami menggunakan SafeArea, ini akan membantu kami menyediakan padding yang mencukupi dan mengelakkan pencerobohan oleh sistem pengendalian, Dalam kes kami, ia akan mengesot
widget Lajur untuk mengelakkan AppBar daripada interpolasi, seperti untuk widget Lajur, membolehkan kami memaparkan elemen UI dalam tatasusunan menegak.
Saya dapat rasakan keterujaan anda, ini adalah langkah yang paling penting, jadi pastikan anda tidak membuat kesilapan atau anda akan akhirnya memecahkan kod, dan akhirnya menyahpepijat, oh baik penyahpepijatan adalah kemahiran yang baik kerana saya mengambil masa 2 hari untuk betulkan ui dan 3 hari untuk menyahpepijat titik akhir api di mana saya mempunyai token yang tidak sah.
Mengecewakan betul, jadi jika anda menghadapi sebarang pepijat/ralat dalam proses cuba nyahpepijat dan lihat hasilnya, saya akan melakukan yang terbaik untuk membantu anda, jadi tanya soalan mungkin saya atau pembangun lain akan membantu.
Baiklah sekarang mari kita integrasikan model, pergi ke replika dan sebagainya untuk flux.dev.
salin kod yang disediakan dan kami akan membuat beberapa perubahan padanya, okay! selesai.
Kemas kini fungsi generate_image supaya kelihatan seperti ini,
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)
apa yang fungsi ini lakukan ialah, ia berinteraksi dengan API Replika untuk menjana asas imej pada gesaan teks yang disediakan oleh pengguna.
ia kemudian menghantar gesaan dan parameter model lain
kepada API dan mengembalikan URL imej yang dijana, dan jika ada masalah, ia menangani ralat dengan mengembalikan Tiada.
Tampal token API anda yang disalin daripada replika. jadi ia kelihatan seperti ini,
os.environ["REPLICATE_API_TOKEN"]="r8_KhysOWTKUjRsagyyyLNIWvvg2K78qrE48RwTh"
Pastikan anda mempunyai token, anda boleh mendapatkan Token API anda daripada mendapatkan token api anda di sini
Menggunakan fungsi menjana dan memaparkan imej
Setelah selesai, mari juga mengemas kini fungsi generate_and_display_image, taip kod ini di bawah,
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
Pada ketika ini, apabila anda menjalankan aplikasi, cuba masukkan gesaan dan klik butang jana, anda akan melihat bar kemajuan dan dalam beberapa saat anda akan melihat imej yang dijana dalam UI anda. Dan ingat jangan terlalu menjana atau anda akan kehilangan kredit anda. dan saya berjanji ia tidak akan menyeronokkan.
Penjelasan Kod
Fungsi ini di sini menguruskan aliran kerja menjana dan memaparkan imej dalam aplikasi kami. ia memerlukan gesaan pengguna, memanggil generate_image() ke
jana image_url dan kemas kini UI Apl dengan result_image. jika proses gagal, ia menunjukkan dialog ralat. dan juga t Mendayakan butang "Simpan Imej" selepas imej berjaya dijana.
Menggunakan fungsi save_image
Letih sudah menjimatkan tenaga anda, minum kopi dan selesaikan projek kerana kami kini akan menambah fungsi penjimatan.
Setakat ini kami mempunyai antara muka Pengguna asas dan kami kini boleh menjana imej dengan jayanya, tetapi kami menghadapi masalah, bagaimana jika kami ingin menyimpan imej kami pada sistem kami, kerana sekarang aplikasi semasa kami hanya menjana dan...
selesai, untuk menyelesaikannya kita perlu menambah fungsi simpan.
Jadi dalam kod anda kemas kini fungsi save_image untuk kelihatan seperti ini:
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()
Penjelasan kod
Sekarang apa yang telah dilakukan di sini, mari kita pecahkan.
Fungsi ini membolehkan kami memuat turun dan menyimpan generate_image ke sistem setempat. ia mengambil image_url dan nama fail pilihan, mendapatkan semula data imej melalui permintaan HTTP dan menulisnya ke fail.
ia memastikan pengendalian ralat sekiranya muat turun gagal.
Nah! itu sahaja rakan pembangun, penjana imej ringkas menggunakan ular sawa, flet dan fluks.
Seronok mengerjakan projek ini dan ingin mendapatkan bantuan daripada anda.
Ini adalah hasil akhir saya,
Saya tidak memuat naik sejak saya berada dalam hackathon baru-baru ini dan saya juga sedang menulis buku untuk pelajar, serta profesion bekerja dan ia telah menjadi pelukan yang sakit kepala sekali gus menghentikan beberapa pengaturcaraan dan berehat seketika.
Tetapi sekarang saya akan memuat naik kandungan mulai sekarang.
Terima kasih kerana bersabar, saya akan memuat naik lebih banyak lagi untuk anda devs.
Atas ialah kandungan terperinci # MEMBINA PENJANA IMEJ MENGGUNAKAN FLET WITH PYTHON. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!