|
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 |
|
|
|
|
|
log = setup_logging() |
|
|
|
|
|
def caption_images( |
|
caption_text, |
|
images_dir, |
|
overwrite, |
|
caption_ext, |
|
prefix, |
|
postfix, |
|
find_text, |
|
replace_text, |
|
): |
|
|
|
if not images_dir: |
|
msgbox('Image folder is missing. Please provide the directory containing the images to caption.') |
|
return |
|
|
|
|
|
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}...') |
|
|
|
|
|
run_cmd = f'python "tools/caption.py"' |
|
run_cmd += f' --caption_text="{caption_text}"' |
|
|
|
|
|
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) |
|
|
|
|
|
if os.name == 'posix': |
|
os.system(run_cmd) |
|
else: |
|
subprocess.run(run_cmd) |
|
|
|
|
|
if overwrite: |
|
if prefix or postfix: |
|
|
|
add_pre_postfix( |
|
folder=images_dir, |
|
caption_file_ext=caption_ext, |
|
prefix=prefix, |
|
postfix=postfix, |
|
) |
|
if find_text: |
|
|
|
find_replace( |
|
folder_path=images_dir, |
|
caption_file_ext=caption_ext, |
|
search_text=find_text, |
|
replace_text=replace_text, |
|
) |
|
else: |
|
if prefix or postfix: |
|
|
|
msgbox( |
|
'Could not modify caption files with requested change because the "Overwrite existing captions in folder" option is not selected.' |
|
) |
|
|
|
log.info('Captioning done.') |
|
|
|
|
|
|
|
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, |
|
) |
|
|