|
import gradio as gr |
|
from easygui import msgbox |
|
import subprocess |
|
from .common_gui import get_folder_path |
|
import os |
|
|
|
from library.custom_logging import setup_logging |
|
|
|
|
|
log = setup_logging() |
|
|
|
PYTHON = 'python3' if os.name == 'posix' else './venv/Scripts/python.exe' |
|
|
|
def group_images( |
|
input_folder, |
|
output_folder, |
|
group_size, |
|
include_subfolders, |
|
do_not_copy_other_files, |
|
generate_captions, |
|
caption_ext |
|
): |
|
if input_folder == '': |
|
msgbox('Input folder is missing...') |
|
return |
|
|
|
if output_folder == '': |
|
msgbox('Please provide an output folder.') |
|
return |
|
|
|
log.info(f'Grouping images in {input_folder}...') |
|
|
|
run_cmd = f'{PYTHON} "{os.path.join("tools","group_images.py")}"' |
|
run_cmd += f' "{input_folder}"' |
|
run_cmd += f' "{output_folder}"' |
|
run_cmd += f' {(group_size)}' |
|
if include_subfolders: |
|
run_cmd += f' --include_subfolders' |
|
if do_not_copy_other_files: |
|
run_cmd += f' --do_not_copy_other_files' |
|
if generate_captions: |
|
run_cmd += f' --caption' |
|
if caption_ext: |
|
run_cmd += f' --caption_ext={caption_ext}' |
|
|
|
log.info(run_cmd) |
|
|
|
if os.name == 'posix': |
|
os.system(run_cmd) |
|
else: |
|
subprocess.run(run_cmd) |
|
|
|
log.info('...grouping done') |
|
|
|
|
|
def gradio_group_images_gui_tab(headless=False): |
|
with gr.Tab('Group Images'): |
|
gr.Markdown('This utility will group images in a folder based on their aspect ratio.') |
|
|
|
with gr.Row(): |
|
input_folder = gr.Textbox( |
|
label='Input folder', |
|
placeholder='Directory containing the images to group', |
|
interactive=True, |
|
) |
|
button_input_folder = gr.Button( |
|
'π', elem_id='open_folder_small', visible=(not headless) |
|
) |
|
button_input_folder.click( |
|
get_folder_path, |
|
outputs=input_folder, |
|
show_progress=False, |
|
) |
|
|
|
output_folder = gr.Textbox( |
|
label='Output folder', |
|
placeholder='Directory where the grouped images will be stored', |
|
interactive=True, |
|
) |
|
button_output_folder = gr.Button( |
|
'π', elem_id='open_folder_small', visible=(not headless) |
|
) |
|
button_output_folder.click( |
|
get_folder_path, |
|
outputs=output_folder, |
|
show_progress=False, |
|
) |
|
with gr.Row(): |
|
group_size = gr.Slider( |
|
label='Group size', |
|
info='Number of images to group together', |
|
value='4', |
|
minimum=1, maximum=64, step=1, |
|
interactive=True, |
|
) |
|
|
|
include_subfolders = gr.Checkbox( |
|
label='Include Subfolders', |
|
value=False, |
|
info='Include images in subfolders as well', |
|
) |
|
|
|
do_not_copy_other_files = gr.Checkbox( |
|
label='Do not copy other files', |
|
value=False, |
|
info='Do not copy other files in the input folder to the output folder', |
|
) |
|
|
|
generate_captions = gr.Checkbox( |
|
label='Generate Captions', |
|
value=False, |
|
info='Generate caption files for the grouped images based on their folder name', |
|
) |
|
|
|
caption_ext = gr.Textbox( |
|
label='Caption Extension', |
|
placeholder='Caption file extension (e.g., .txt)', |
|
value='.txt', |
|
interactive=True, |
|
) |
|
|
|
group_images_button = gr.Button('Group images') |
|
|
|
group_images_button.click( |
|
group_images, |
|
inputs=[ |
|
input_folder, |
|
output_folder, |
|
group_size, |
|
include_subfolders, |
|
do_not_copy_other_files, |
|
generate_captions, |
|
caption_ext, |
|
], |
|
show_progress=False, |
|
) |
|
|