Spaces:
Build error
Build error
import gradio as gr | |
from easygui import msgbox | |
import subprocess | |
from .common_gui import get_folder_path, add_pre_postfix, find_replace | |
import os | |
from library.custom_logging import setup_logging | |
# Set up logging | |
log = setup_logging() | |
def caption_images( | |
caption_text, | |
images_dir, | |
overwrite, | |
caption_ext, | |
prefix, | |
postfix, | |
find_text, | |
replace_text, | |
): | |
# Check if images_dir is provided | |
if not images_dir: | |
msgbox('Image folder is missing. Please provide the directory containing the images to caption.') | |
return | |
# Check if caption_ext is provided | |
if not caption_ext: | |
msgbox('Please provide an extension for the caption files.') | |
return | |
if caption_text: | |
log.info(f'Captioning files in {images_dir} with {caption_text}...') | |
# Build the command to run caption.py | |
run_cmd = f'python "tools/caption.py"' | |
run_cmd += f' --caption_text="{caption_text}"' | |
# Add optional flags to the command | |
if overwrite: | |
run_cmd += f' --overwrite' | |
if caption_ext: | |
run_cmd += f' --caption_file_ext="{caption_ext}"' | |
run_cmd += f' "{images_dir}"' | |
log.info(run_cmd) | |
# Run the command based on the operating system | |
if os.name == 'posix': | |
os.system(run_cmd) | |
else: | |
subprocess.run(run_cmd) | |
# Check if overwrite option is enabled | |
if overwrite: | |
if prefix or postfix: | |
# Add prefix and postfix to caption files | |
add_pre_postfix( | |
folder=images_dir, | |
caption_file_ext=caption_ext, | |
prefix=prefix, | |
postfix=postfix, | |
) | |
if find_text: | |
# Find and replace text in caption files | |
find_replace( | |
folder_path=images_dir, | |
caption_file_ext=caption_ext, | |
search_text=find_text, | |
replace_text=replace_text, | |
) | |
else: | |
if prefix or postfix: | |
# Show a message if modification is not possible without overwrite option enabled | |
msgbox( | |
'Could not modify caption files with requested change because the "Overwrite existing captions in folder" option is not selected.' | |
) | |
log.info('Captioning done.') | |
# Gradio UI | |
def gradio_basic_caption_gui_tab(headless=False): | |
with gr.Tab('Basic Captioning'): | |
gr.Markdown( | |
'This utility allows you to create simple caption files for each image in a folder.' | |
) | |
with gr.Row(): | |
images_dir = gr.Textbox( | |
label='Image folder to caption', | |
placeholder='Directory containing the images to caption', | |
interactive=True, | |
) | |
folder_button = gr.Button( | |
'📂', elem_id='open_folder_small', visible=(not headless) | |
) | |
folder_button.click( | |
get_folder_path, | |
outputs=images_dir, | |
show_progress=False, | |
) | |
caption_ext = gr.Textbox( | |
label='Caption file extension', | |
placeholder='Extension for caption file (e.g., .caption, .txt)', | |
value='.txt', | |
interactive=True, | |
) | |
overwrite = gr.Checkbox( | |
label='Overwrite existing captions in folder', | |
interactive=True, | |
value=False, | |
) | |
with gr.Row(): | |
prefix = gr.Textbox( | |
label='Prefix to add to caption', | |
placeholder='(Optional)', | |
interactive=True, | |
) | |
caption_text = gr.Textbox( | |
label='Caption text', | |
placeholder='e.g., "by some artist". Leave empty if you only want to add a prefix or postfix.', | |
interactive=True, | |
) | |
postfix = gr.Textbox( | |
label='Postfix to add to caption', | |
placeholder='(Optional)', | |
interactive=True, | |
) | |
with gr.Row(): | |
find_text = gr.Textbox( | |
label='Find text', | |
placeholder='e.g., "by some artist". Leave empty if you only want to add a prefix or postfix.', | |
interactive=True, | |
) | |
replace_text = gr.Textbox( | |
label='Replacement text', | |
placeholder='e.g., "by some artist". Leave empty if you want to replace with nothing.', | |
interactive=True, | |
) | |
caption_button = gr.Button('Caption images') | |
caption_button.click( | |
caption_images, | |
inputs=[ | |
caption_text, | |
images_dir, | |
overwrite, | |
caption_ext, | |
prefix, | |
postfix, | |
find_text, | |
replace_text, | |
], | |
show_progress=False, | |
) | |