พื้นที่เก็บข้อมูลนี้มีโค้ด (และไฟล์อื่นๆ) สำหรับสร้างเวอร์ชันศิลปะโมเสกของรูปภาพที่กำหนด เมื่อพิจารณาจากรูปภาพ (เรียกว่ารูปภาพต้นฉบับ) แนวคิดหลักคือการแทนที่แพตช์ (รูปทรงสี่เหลี่ยม) ของรูปภาพต้นฉบับด้วยรูปภาพที่คล้ายกันมากที่สุดจากชุดรูปภาพที่กำหนด (เรียกว่ารูปภาพเรียงต่อกันหรือเรียงต่อกัน) .
การใช้งานใช้โมเดล Stable Diffusion ที่มีอยู่ในโมดูลย่อย KerasCV ของ Keras เพื่อสร้างไทล์ ช่วยให้เกิดความคิดสร้างสรรค์ที่ไร้ขีดจำกัดโดยการสร้างงานศิลปะโมเสกในรูปภาพเดียวกันโดยใช้ไทล์ต่างๆ ที่สร้างขึ้นโดยการเปลี่ยนพารามิเตอร์ของโมเดล และใช้ข้อความแจ้งที่แตกต่างกัน
ในตัวอย่างด้านล่าง แต่ละแถวจะแสดงภาพ (ต้นฉบับ) และภาพศิลปะโมเสกสองภาพที่สร้างขึ้นจากภาพดังกล่าว ภาพซ้ายสุดคือภาพต้นฉบับ และภาพกลางคือภาพโมเสกที่สร้างขึ้นโดยใช้แผ่นกระเบื้อง 2,500 แผ่น และภาพขวาสุดคือภาพโมเสกที่สร้างขึ้นโดยใช้แผ่นกระเบื้อง 90,000 แผ่น
ไฟล์และโฟลเดอร์หลักที่รวมอยู่ในที่เก็บนี้คือ:
images/tiles
images/canvases
และโค้ดสำหรับสร้างรูปภาพไทล์ การขึ้นต่อกันหลักคือ TensorFlow/Keras
(อย่างน้อยเวอร์ชัน 2.9), Pillow
และ Scipy
หากคุณใช้ Pip คุณสามารถติดตั้งได้โดยการรันคำสั่งต่อไปนี้:
pip install -r requirements.txt
นอกจากนี้ โค้ดยังเขียนด้วย Python 3.9 และได้รับการทดสอบบนคอมพิวเตอร์ที่ใช้ Ubuntu 22.04 LTS พร้อม Keras 2.9 (และ KerasCV 0.3.4) บน NVIDIA RTX 3090 GPU พร้อม CUDA 11.6
เปิดการสร้างงานศิลปะโมเสกโดยใช้สมุดบันทึก KerasCV+StableDiffusion เพื่อดูโค้ด
นอกจากนี้ คุณยังสามารถแก้ไขตัวแปรและพารามิเตอร์ในฟังก์ชันหลัก (แสดงด้านล่าง) เพื่อสร้างรูปภาพที่กำหนดในเวอร์ชันศิลปะโมเสกของคุณเองได้ คุณสามารถวางรูปภาพของคุณในโฟลเดอร์ images/canvases
หากคุณต้องการสร้างเวอร์ชันศิลปะโมเสก
def main ( remake_tiles : bool ) -> None :
"""Main function to pack everything together and run it"""
# Extension to use for saving and loading the tile images
tile_file_extension = "jpeg"
# (Re)-make the tile images if the user wants to do so
if remake_tiles :
# Create a MosaicMaker object to make the tile images
image_maker = MosaicMaker ( img_width = 400 , img_height = 400 , jit_compile = False , seed = 33 )
# The text prompts to be used to make the tile images
prompt_seq = (( "A laughing woman" , ( "realistic" , "white background" )),
( "A sad girl" , ( "realistic" , "white background" )),
( "An old man" , ( "realistic" , "white background" )),
( "Face of a sad man" , ( "realistic" , "white background" )),
( "Drawing of rings of Saturn" , ( "abstract" , "white background" )),
( "A watercolor painting of a puppy" , ( "detailed" ,)),
( "Drawing of a red rose" , ( "elegant" , "detailed" , "white background" )),
( "View of a green forest with mountains in the background" , ( "elegant" , "lush" , "nature" )),
( "A painting of four oranges in a bowl" , ( "elegant" , "detailed" , "white background" )),
( "A ninja shuriken" , ( "realistic" , "metal" , "white background" )),)
# Make the tile images and save them
for index , prompt_data in enumerate ( prompt_seq ):
image_seq = image_maker . make_images ( prompt_data [ 0 ], prompt_data [ 1 ], num_images = 40 )
image_maker . save_images ( img_seq = image_seq , path = 'images/tiles' , prefix = f'p { index } ' ,
extension = tile_file_extension )
# Use the images in the images/canvases and images/tiles directories to make mosaic arts
for canvas_image_path in pathlib . Path ( "images/canvases" ). glob ( "*.png" ):
# Create a MosaicArtMaker object with about sqrt_num_tiles*sqrt_num_tiles tiles!
art_maker = MosaicArtMaker ( original_image_path = canvas_image_path , sqrt_num_tiles = 300 ,
tile_file_extension = tile_file_extension )
# Make the mosaic art and save it in the images/outputs directory
output_image = art_maker . make_mosaic_art ( k = 40 )
print ( f"Created a mosaic art version of ' { art_maker . original_image_path } ' using "
f" { art_maker . sqrt_num_tiles * art_maker . sqrt_num_tiles } smaller images created by a Stable Diffusion model" )
art_maker . save_images (( output_image ,), path = 'images/outputs' ,
prefix = f' { art_maker . original_image_name } _mosaic_art' )
# Display each original image and its mosaic art version
art_maker . display_images (( art_maker . original_image , output_image ),
( art_maker . original_image_name , art_maker . original_image_name + "_mosaic_art" ))
เรียกใช้ฟังก์ชันหลักเพื่อรันโค้ด หากคุณต้องการสร้างอิมเมจไทล์ใหม่ ให้ตั้งค่าพารามิเตอร์ remake_tiles
เป็น True
โปรดทราบว่าการสร้างรูปภาพไทล์ชุดใหม่อาจใช้เวลาสักครู่ ดังนั้นจึงขอแนะนำให้ใช้รูปภาพไทล์ปัจจุบันในการเริ่มต้นโดยการตั้งค่า remake_tiles
เป็น False
main ( remake_tiles = False )
สมุดบันทึกมีอยู่ใน Kaggle แล้ว คุณสามารถเปิดได้โดยใช้ลิงก์นี้
- [ ] ใช้รูปทรงที่แตกต่างกันแทนสี่เหลี่ยมจัตุรัส (ขนาดเท่ากัน) สำหรับกระเบื้อง ตัวอย่างเช่น สี่เหลี่ยมคางหมูหรือสามเหลี่ยม
- [ ] การใช้ภาพย่อยที่แตกต่างกันสำหรับส่วนต่างๆ ของภาพต้นฉบับ ตัวอย่างเช่น การใช้ชุดรูปภาพที่มีใบหน้าสำหรับใบหน้าในภาพต้นฉบับ และใช้ชุดรูปภาพที่มีทิวทัศน์สำหรับพื้นหลังในภาพต้นฉบับ
- [ ] ใช้การวัดความคล้ายคลึงกันที่ดีกว่าสำหรับการเปรียบเทียบไทล์กับแพตช์จากรูปภาพต้นฉบับ ตัวอย่างเช่น การใช้หน่วยเมตริก SSIM แทนระยะทางแบบยุคลิด
โครงการนี้ได้รับอนุญาตภายใต้เงื่อนไขของใบอนุญาต Apache 2.0 ดูใบอนุญาตสำหรับรายละเอียดเพิ่มเติม โปรดทราบว่าไฟล์ภาพในภาพ/แคนวาสถูกดาวน์โหลดจากเว็บ และไม่ได้เป็นของผู้สร้างพื้นที่เก็บข้อมูลนี้ ด้วยเหตุนี้จึงอาจไม่ได้รับอนุญาตภายใต้ใบอนุญาต Apache 2.0