Add support for image captionning
This commit is contained in:
parent
2cd356a37e
commit
9bddf2ce4c
@ -1,6 +1,7 @@
|
|||||||
# v1: initial release
|
# v1: initial release
|
||||||
# v2: add open and save folder icons
|
# v2: add open and save folder icons
|
||||||
# v3: Add new Utilities tab for Dreambooth folder preparation
|
# v3: Add new Utilities tab for Dreambooth folder preparation
|
||||||
|
# v3.1: Adding captionning of images to utilities
|
||||||
|
|
||||||
import gradio as gr
|
import gradio as gr
|
||||||
import json
|
import json
|
||||||
@ -9,6 +10,7 @@ import os
|
|||||||
import subprocess
|
import subprocess
|
||||||
import pathlib
|
import pathlib
|
||||||
import shutil
|
import shutil
|
||||||
|
import dreambooth_gui.caption_gui as caption_gui
|
||||||
from glob import glob
|
from glob import glob
|
||||||
from os.path import join
|
from os.path import join
|
||||||
from easygui import fileopenbox, filesavebox, enterbox, diropenbox, msgbox
|
from easygui import fileopenbox, filesavebox, enterbox, diropenbox, msgbox
|
||||||
@ -475,29 +477,38 @@ def dreambooth_folder_preparation(
|
|||||||
util_regularization_images_dir_input,
|
util_regularization_images_dir_input,
|
||||||
util_regularization_images_repeat_input,
|
util_regularization_images_repeat_input,
|
||||||
util_class_prompt_input,
|
util_class_prompt_input,
|
||||||
util_training_dir_input,
|
util_training_dir_output,
|
||||||
):
|
):
|
||||||
|
|
||||||
# Check if the input variables are empty
|
# Check if the input variables are empty
|
||||||
if (not len(util_training_dir_input)):
|
if (not len(util_training_dir_output)):
|
||||||
print(
|
print(
|
||||||
"Destination training directory is missing... can't perform the required task..."
|
"Destination training directory is missing... can't perform the required task..."
|
||||||
)
|
)
|
||||||
return
|
return
|
||||||
else:
|
else:
|
||||||
# Create the util_training_dir_input directory if it doesn't exist
|
# Create the util_training_dir_output directory if it doesn't exist
|
||||||
os.makedirs(util_training_dir_input, exist_ok=True)
|
os.makedirs(util_training_dir_output, exist_ok=True)
|
||||||
|
|
||||||
|
# Check for instance prompt
|
||||||
|
if util_instance_prompt_input == "":
|
||||||
|
msgbox("Instance prompt missing...")
|
||||||
|
return
|
||||||
|
|
||||||
|
# Check for class prompt
|
||||||
|
if util_class_prompt_input == "":
|
||||||
|
msgbox("Class prompt missing...")
|
||||||
|
return
|
||||||
|
|
||||||
# Create the training_dir path
|
# Create the training_dir path
|
||||||
if (not len(util_instance_prompt_input)
|
if (util_training_images_dir_input == ""):
|
||||||
or not util_training_images_repeat_input > 0):
|
|
||||||
print(
|
print(
|
||||||
"Training images directory or repeats is missing... can't perform the required task..."
|
"Training images directory is missing... can't perform the required task..."
|
||||||
)
|
)
|
||||||
return
|
return
|
||||||
else:
|
else:
|
||||||
training_dir = os.path.join(
|
training_dir = os.path.join(
|
||||||
util_training_dir_input,
|
util_training_dir_output,
|
||||||
f"img/{int(util_training_images_repeat_input)}_{util_instance_prompt_input} {util_class_prompt_input}",
|
f"img/{int(util_training_images_repeat_input)}_{util_instance_prompt_input} {util_class_prompt_input}",
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -518,7 +529,7 @@ def dreambooth_folder_preparation(
|
|||||||
)
|
)
|
||||||
else:
|
else:
|
||||||
regularization_dir = os.path.join(
|
regularization_dir = os.path.join(
|
||||||
util_training_dir_input,
|
util_training_dir_output,
|
||||||
f"reg/{int(util_regularization_images_repeat_input)}_{util_class_prompt_input}",
|
f"reg/{int(util_regularization_images_repeat_input)}_{util_class_prompt_input}",
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -535,7 +546,7 @@ def dreambooth_folder_preparation(
|
|||||||
regularization_dir)
|
regularization_dir)
|
||||||
|
|
||||||
print(
|
print(
|
||||||
f"Done creating kohya_ss training folder structure at {util_training_dir_input}..."
|
f"Done creating kohya_ss training folder structure at {util_training_dir_output}..."
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
@ -810,16 +821,16 @@ with interface:
|
|||||||
interactive=True,
|
interactive=True,
|
||||||
elem_id="number_input")
|
elem_id="number_input")
|
||||||
with gr.Row():
|
with gr.Row():
|
||||||
util_training_dir_input = gr.Textbox(
|
util_training_dir_output = gr.Textbox(
|
||||||
label="Destination training directory",
|
label="Destination training directory",
|
||||||
placeholder=
|
placeholder=
|
||||||
"Directory where formatted training and regularisation folders will be placed",
|
"Directory where formatted training and regularisation folders will be placed",
|
||||||
interactive=True,
|
interactive=True,
|
||||||
)
|
)
|
||||||
button_util_training_dir_input = gr.Button(
|
button_util_training_dir_output = gr.Button(
|
||||||
"📂", elem_id="open_folder_small")
|
"📂", elem_id="open_folder_small")
|
||||||
button_util_training_dir_input.click(
|
button_util_training_dir_output.click(
|
||||||
get_folder_path, outputs=util_training_dir_input)
|
get_folder_path, outputs=util_training_dir_output)
|
||||||
button_prepare_training_data = gr.Button("Prepare training data")
|
button_prepare_training_data = gr.Button("Prepare training data")
|
||||||
button_prepare_training_data.click(
|
button_prepare_training_data.click(
|
||||||
dreambooth_folder_preparation,
|
dreambooth_folder_preparation,
|
||||||
@ -830,16 +841,17 @@ with interface:
|
|||||||
util_regularization_images_dir_input,
|
util_regularization_images_dir_input,
|
||||||
util_regularization_images_repeat_input,
|
util_regularization_images_repeat_input,
|
||||||
util_class_prompt_input,
|
util_class_prompt_input,
|
||||||
util_training_dir_input,
|
util_training_dir_output,
|
||||||
],
|
],
|
||||||
)
|
)
|
||||||
button_copy_info_to_Directories_tab = gr.Button(
|
button_copy_info_to_Directories_tab = gr.Button(
|
||||||
"Copy info to Directories Tab")
|
"Copy info to Directories Tab")
|
||||||
|
caption_gui.gradio_caption_gui()
|
||||||
|
|
||||||
button_run = gr.Button("Train model")
|
button_run = gr.Button("Train model")
|
||||||
|
|
||||||
button_copy_info_to_Directories_tab.click(copy_info_to_Directories_tab,
|
button_copy_info_to_Directories_tab.click(copy_info_to_Directories_tab,
|
||||||
inputs=[util_training_dir_input],
|
inputs=[util_training_dir_output],
|
||||||
outputs=[
|
outputs=[
|
||||||
train_data_dir_input,
|
train_data_dir_input,
|
||||||
reg_data_dir_input,
|
reg_data_dir_input,
|
||||||
|
0
dreambooth_gui/__init__.py
Normal file
0
dreambooth_gui/__init__.py
Normal file
75
dreambooth_gui/caption_gui.py
Normal file
75
dreambooth_gui/caption_gui.py
Normal file
@ -0,0 +1,75 @@
|
|||||||
|
import gradio as gr
|
||||||
|
from easygui import diropenbox, msgbox
|
||||||
|
import subprocess
|
||||||
|
|
||||||
|
def get_folder_path():
|
||||||
|
folder_path = diropenbox("Select the directory to use")
|
||||||
|
|
||||||
|
return folder_path
|
||||||
|
|
||||||
|
def caption_images(caption_text_input, images_dir_input, overwrite_input, caption_file_ext):
|
||||||
|
# Check for caption_text_input
|
||||||
|
if caption_text_input == "":
|
||||||
|
msgbox("Caption text is missing...")
|
||||||
|
return
|
||||||
|
|
||||||
|
# Check for images_dir_input
|
||||||
|
if images_dir_input == "":
|
||||||
|
msgbox("Image folder is missing...")
|
||||||
|
return
|
||||||
|
|
||||||
|
print(f"Captionning files in {images_dir_input} with {caption_text_input}...")
|
||||||
|
run_cmd = f'python "tools/caption.py"'
|
||||||
|
run_cmd += f' --caption_text="{caption_text_input}"'
|
||||||
|
if overwrite_input:
|
||||||
|
run_cmd += f' --overwrite'
|
||||||
|
if caption_file_ext != "":
|
||||||
|
run_cmd += f' --caption_file_ext="{caption_file_ext}"'
|
||||||
|
run_cmd += f' "{images_dir_input}"'
|
||||||
|
|
||||||
|
print(run_cmd)
|
||||||
|
|
||||||
|
# Run the command
|
||||||
|
subprocess.run(run_cmd)
|
||||||
|
|
||||||
|
print("...captionning done")
|
||||||
|
|
||||||
|
###
|
||||||
|
# Gradio UI
|
||||||
|
###
|
||||||
|
|
||||||
|
def gradio_caption_gui():
|
||||||
|
with gr.Tab("Captionning"):
|
||||||
|
gr.Markdown(
|
||||||
|
"This utility will allow the creation of caption files for each images in a folder."
|
||||||
|
)
|
||||||
|
with gr.Row():
|
||||||
|
caption_text_input = gr.Textbox(
|
||||||
|
label="Caption text",
|
||||||
|
placeholder="Eg: , by some artist",
|
||||||
|
interactive=True,
|
||||||
|
)
|
||||||
|
overwrite_input = gr.Checkbox(
|
||||||
|
label="Overwrite existing captions in folder",
|
||||||
|
interactive=True,
|
||||||
|
value=False
|
||||||
|
)
|
||||||
|
caption_file_ext = gr.Textbox(
|
||||||
|
label="Caption file extension",
|
||||||
|
placeholder="(Optional) Default: .caption",
|
||||||
|
interactive=True,
|
||||||
|
)
|
||||||
|
with gr.Row():
|
||||||
|
images_dir_input = gr.Textbox(
|
||||||
|
label="Image forder to caption",
|
||||||
|
placeholder="Directory containing the images to caption",
|
||||||
|
interactive=True,
|
||||||
|
)
|
||||||
|
button_images_dir_input = gr.Button(
|
||||||
|
"📂", elem_id="open_folder_small")
|
||||||
|
button_images_dir_input.click(
|
||||||
|
get_folder_path, outputs=images_dir_input)
|
||||||
|
caption_button = gr.Button("Caption images")
|
||||||
|
|
||||||
|
caption_button.click(caption_images, inputs=[caption_text_input, images_dir_input, overwrite_input, caption_file_ext])
|
||||||
|
|
Loading…
Reference in New Issue
Block a user