Spaces:
Sleeping
Sleeping
add P16
Browse files- app.py +218 -229
- logs/evaluation_ui_log_2025-08-02_14-41-24_427858.log +3 -0
- logs/evaluation_ui_log_2025-08-02_14-47-08_666920.log +6 -0
- logs/evaluation_ui_log_2025-08-02_14-51-10_704186.log +7 -0
- logs/evaluation_ui_log_2025-08-02_14-55-09_654842.log +7 -0
- logs/evaluation_ui_log_2025-08-02_15-00-37_160749.log +18 -0
- results/P16/HitL_results_P16.json +0 -0
- results/P16/LLM-based/P16_LLM-based_all_predictions.jsonl +28 -0
- results/P16/Ours/P16_Ours_all_predictions.jsonl +28 -0
- results/P16/w_o_HitL/P16_w_o_HitL_all_predictions.jsonl +28 -0
- results/P16/w_o_Proto_Loss/P16_w_o_Proto_Loss_all_predictions.jsonl +28 -0
- results/P16/w_o_Tuning/P16_w_o_Tuning_all_predictions.jsonl +28 -0
app.py
CHANGED
|
@@ -1,5 +1,5 @@
|
|
| 1 |
# ==============================================================================
|
| 2 |
-
# evaluation_interface
|
| 3 |
# ==============================================================================
|
| 4 |
import os
|
| 5 |
import sys
|
|
@@ -12,31 +12,13 @@ from collections import defaultdict, Counter
|
|
| 12 |
|
| 13 |
import gradio as gr
|
| 14 |
from loguru import logger
|
| 15 |
-
from PIL import Image
|
| 16 |
import re
|
| 17 |
|
|
|
|
|
|
|
| 18 |
|
| 19 |
-
# ---
|
| 20 |
-
GLOBAL_STATE = {
|
| 21 |
-
"participant_id": None,
|
| 22 |
-
"data_loaded": False,
|
| 23 |
-
"all_eval_data": [],
|
| 24 |
-
"shuffled_indices": [],
|
| 25 |
-
"current_prompt_index": 0,
|
| 26 |
-
"current_criterion_index": 0,
|
| 27 |
-
"image_mapping": {},
|
| 28 |
-
"image_dir": "",
|
| 29 |
-
"evaluation_results": {},
|
| 30 |
-
"image_orders": {},
|
| 31 |
-
"start_time": None,
|
| 32 |
-
"end_time": None,
|
| 33 |
-
"current_ranks": {},
|
| 34 |
-
"current_absolute_score": None,
|
| 35 |
-
"current_absolute_score_worst": None,
|
| 36 |
-
"hide_bbox_dict": {}, # ★ 修正点2: マスキング情報を格納するキーを追加
|
| 37 |
-
}
|
| 38 |
-
|
| 39 |
-
# --- Configuration ---
|
| 40 |
BASE_RESULTS_DIR = "./results"
|
| 41 |
LOG_DIR = "./logs"
|
| 42 |
COMBINED_DATA_DIR = "./combined_data"
|
|
@@ -44,18 +26,6 @@ IMAGE_SUBDIR = os.path.join("lapwing", "images")
|
|
| 44 |
MAPPING_FILENAME = "combination_to_filename.json"
|
| 45 |
CONDITIONS = ["Ours", "w_o_Proto_Loss", "w_o_HitL", "w_o_Tuning", "LLM-based"]
|
| 46 |
CRITERIA = ["Alignment", "Naturalness", "Attractiveness"]
|
| 47 |
-
|
| 48 |
-
# CRITERIA_GUIDANCE_JP = [
|
| 49 |
-
# "テキストと表情がどれだけ一致しているか",
|
| 50 |
-
# "テキストの感情に沿ったセリフを言っていると想像したとき、表情がどれだけ自然か",
|
| 51 |
-
# "テキストの感情に沿ったセリフを言っていると想像したとき、表情がどれだけ魅力的か"
|
| 52 |
-
# ]
|
| 53 |
-
# CRITERIA_GUIDANCE_EN = [
|
| 54 |
-
# "how well the expression aligns with the text",
|
| 55 |
-
# "imagining the character is speaking a line that matches the emotion of the text, how natural the facial expression is",
|
| 56 |
-
# "imagining the character is speaking a line that matches the emotion of the text, how attractive the facial expression is"
|
| 57 |
-
# ]
|
| 58 |
-
|
| 59 |
CRITERIA_GUIDANCE_JP = [
|
| 60 |
"テキストと上半分の表情がどれだけ一致していますか?",
|
| 61 |
"提示されたテキストと上半分の表情を考慮した上で、このキャラクターはどれだけ自然に見えますか?",
|
|
@@ -69,24 +39,23 @@ CRITERIA_GUIDANCE_EN = [
|
|
| 69 |
IMAGE_LABELS = ['A', 'B', 'C', 'D', 'E']
|
| 70 |
|
| 71 |
|
| 72 |
-
# ★
|
| 73 |
-
|
| 74 |
-
|
| 75 |
-
"""バウンディングボックス情報をJSONファイルから読み込む"""
|
| 76 |
try:
|
| 77 |
with open(bbox_json_path, 'r', encoding='utf-8') as f:
|
| 78 |
bbox_data = json.load(f)
|
| 79 |
-
|
| 80 |
-
GLOBAL_STATE["hide_bbox_dict"] = bbox_data.get("Hide", {})
|
| 81 |
logger.info(f"Successfully loaded bounding box data from {bbox_json_path}")
|
| 82 |
except Exception as e:
|
| 83 |
logger.error(f"Failed to load bounding box JSON: {e}")
|
| 84 |
-
|
|
|
|
| 85 |
|
| 86 |
|
| 87 |
-
def create_masked_image(image: Image.Image):
|
| 88 |
"""画像に黒塗りのマスクを適用する"""
|
| 89 |
-
hide_bbox_dict =
|
| 90 |
if not hide_bbox_dict:
|
| 91 |
return image
|
| 92 |
masked_img = image.copy()
|
|
@@ -97,8 +66,8 @@ def create_masked_image(image: Image.Image):
|
|
| 97 |
return masked_img
|
| 98 |
|
| 99 |
|
| 100 |
-
def get_image_path_from_prediction(prediction: dict) -> str:
|
| 101 |
-
if not
|
| 102 |
logger.error("Image mapping is not loaded.")
|
| 103 |
return ""
|
| 104 |
indices = prediction.get("blendshape_index", {})
|
|
@@ -107,36 +76,35 @@ def get_image_path_from_prediction(prediction: dict) -> str:
|
|
| 107 |
return ""
|
| 108 |
sorted_indices = sorted(indices.items(), key=lambda item: int(item[0]))
|
| 109 |
key = ",".join(str(idx) for _, idx in sorted_indices)
|
| 110 |
-
filename =
|
| 111 |
if not filename:
|
| 112 |
logger.warning(f"No image found for blendshape key: {key}")
|
| 113 |
return ""
|
| 114 |
-
return os.path.join(
|
| 115 |
|
| 116 |
|
| 117 |
-
def load_evaluation_data(participant_id: str):
|
| 118 |
-
|
| 119 |
-
# classification_interfaceのパス構造を参考に、bboxファイルのパスを構築
|
| 120 |
bbox_json_path = os.path.join(COMBINED_DATA_DIR, "lapwing", "texts", "bounding_boxes.json")
|
| 121 |
if os.path.exists(bbox_json_path):
|
| 122 |
-
load_bbox_json(bbox_json_path)
|
| 123 |
else:
|
| 124 |
logger.warning(f"Bounding box file not found at {bbox_json_path}. Images will not be masked.")
|
| 125 |
-
|
| 126 |
|
| 127 |
mapping_path = os.path.join(COMBINED_DATA_DIR, MAPPING_FILENAME)
|
| 128 |
if not os.path.exists(mapping_path):
|
| 129 |
-
return f"<p class='feedback red'>Error: Mapping file not found at {mapping_path}</p>", gr.update(
|
| 130 |
interactive=True), gr.update(interactive=False)
|
| 131 |
|
| 132 |
with open(mapping_path, 'r', encoding='utf-8') as f:
|
| 133 |
-
|
| 134 |
-
|
| 135 |
-
logger.info(f"Successfully loaded image mapping. Image directory: {
|
| 136 |
|
| 137 |
participant_dir = os.path.join(BASE_RESULTS_DIR, participant_id)
|
| 138 |
if not os.path.isdir(participant_dir):
|
| 139 |
-
return f"<p class='feedback red'>Error: Participant directory not found: {participant_dir}</p>", gr.update(
|
| 140 |
interactive=True), gr.update(interactive=False)
|
| 141 |
|
| 142 |
merged_data = defaultdict(lambda: {"predictions": {}, "category": None})
|
|
@@ -158,38 +126,38 @@ def load_evaluation_data(participant_id: str):
|
|
| 158 |
merged_data[prompt]["category"] = data.get("prompt_category")
|
| 159 |
|
| 160 |
if found_files != len(CONDITIONS):
|
| 161 |
-
return f"<p class='feedback red'>Error: Found prediction files for only {found_files}/{len(CONDITIONS)} conditions.</p>", gr.update(
|
| 162 |
interactive=True), gr.update(interactive=False)
|
| 163 |
|
| 164 |
-
|
| 165 |
{"prompt": p, "predictions": d["predictions"], "category": d["category"]}
|
| 166 |
for p, d in merged_data.items() if len(d["predictions"]) == len(CONDITIONS)
|
| 167 |
]
|
| 168 |
|
| 169 |
-
if not
|
| 170 |
-
return "<p class='feedback red'>Error: No valid evaluation data could be loaded.</p>", gr.update(
|
| 171 |
interactive=True), gr.update(interactive=False)
|
| 172 |
|
| 173 |
-
|
| 174 |
-
random.shuffle(
|
| 175 |
-
|
| 176 |
-
|
| 177 |
-
|
| 178 |
-
|
| 179 |
-
for i in range(len(
|
| 180 |
-
prompt_text =
|
| 181 |
-
|
| 182 |
-
|
| 183 |
-
logger.info(f"Loaded and merged data for {len(
|
| 184 |
done_msg = "<p class='feedback green'>Data loaded successfully. Please proceed to the 'Evaluation' tab. / データの読み込みに成功しました。「評価」タブに進んでください。</p>"
|
| 185 |
-
return done_msg, gr.update(interactive=False, visible=False), gr.update(interactive=True)
|
| 186 |
|
| 187 |
|
| 188 |
-
# --- Core Logic (
|
| 189 |
-
def _create_button_updates():
|
| 190 |
updates = []
|
| 191 |
for img_label in IMAGE_LABELS:
|
| 192 |
-
selected_rank =
|
| 193 |
for rank_val in range(1, 6):
|
| 194 |
if rank_val == selected_rank:
|
| 195 |
updates.append(gr.update(variant='primary'))
|
|
@@ -198,75 +166,77 @@ def _create_button_updates():
|
|
| 198 |
return updates
|
| 199 |
|
| 200 |
|
| 201 |
-
def handle_rank_button_click(image_label, rank):
|
| 202 |
-
if
|
| 203 |
-
|
| 204 |
else:
|
| 205 |
-
|
| 206 |
-
return _create_button_updates()
|
| 207 |
|
| 208 |
|
| 209 |
-
def handle_absolute_score_click(score):
|
| 210 |
-
if
|
| 211 |
-
|
| 212 |
else:
|
| 213 |
-
|
| 214 |
updates = []
|
| 215 |
for i in range(1, 8):
|
| 216 |
-
if i ==
|
| 217 |
updates.append(gr.update(variant='primary'))
|
| 218 |
else:
|
| 219 |
updates.append(gr.update(variant='secondary'))
|
| 220 |
-
return updates
|
| 221 |
|
| 222 |
|
| 223 |
-
def handle_absolute_score_worst_click(score):
|
| 224 |
-
if
|
| 225 |
-
|
| 226 |
else:
|
| 227 |
-
|
| 228 |
updates = []
|
| 229 |
for i in range(1, 8):
|
| 230 |
-
if i ==
|
| 231 |
updates.append(gr.update(variant='primary'))
|
| 232 |
else:
|
| 233 |
updates.append(gr.update(variant='secondary'))
|
| 234 |
-
return updates
|
| 235 |
|
| 236 |
|
| 237 |
-
# --- UI Logic ---
|
| 238 |
-
def display_current_prompt_and_criterion():
|
| 239 |
-
if not
|
| 240 |
done_msg = "<p class='feedback green' style='text-align: center; font-size: 1.2em;'>All prompts have been evaluated! Please proceed to the 'Export' tab. <br>すべてのプロンプトの評価が完了しました!「エクスポート」タブに進んでください。</p>"
|
| 241 |
empty_button_updates = [gr.update(variant='secondary')] * 25
|
| 242 |
empty_abs_updates = [gr.update(variant='secondary')] * 7
|
| 243 |
return [
|
| 244 |
-
gr.update(value="Finished! / 完了!"),
|
| 245 |
-
gr.update(value=""),
|
| 246 |
-
gr.update(value=""),
|
| 247 |
-
gr.update(value=done_msg, visible=True),
|
| 248 |
*[gr.update(value=None)] * 5,
|
| 249 |
*empty_button_updates,
|
| 250 |
-
gr.update(visible=False),
|
| 251 |
*empty_abs_updates,
|
| 252 |
-
gr.update(visible=False),
|
| 253 |
*empty_abs_updates,
|
| 254 |
gr.update(interactive=False),
|
| 255 |
gr.update(interactive=False)
|
| 256 |
]
|
| 257 |
|
| 258 |
-
prompt_idx =
|
| 259 |
-
criterion_idx =
|
| 260 |
|
| 261 |
-
current_data =
|
| 262 |
prompt_text = current_data["prompt"]
|
| 263 |
criterion_name = CRITERIA[criterion_idx]
|
| 264 |
|
| 265 |
-
progress_text = f"Prompt {
|
| 266 |
prompt_display_text = f"<p style='font-size: 3em; font-weight: bold;'>テキスト(TEXT): {prompt_text}</p>"
|
|
|
|
| 267 |
guidance_part = (
|
| 268 |
f"<p style='color: red; font-weight: bold; font-size: 1.1em;'>"
|
| 269 |
f"5つの画像を、「{CRITERIA_GUIDANCE_JP[criterion_idx]}」を基準にランキングしてください。<br>"
|
|
|
|
| 270 |
f"Please rank the 5 images based on {CRITERIA_GUIDANCE_EN[criterion_idx]}"
|
| 271 |
f"</p>"
|
| 272 |
)
|
|
@@ -291,23 +261,22 @@ def display_current_prompt_and_criterion():
|
|
| 291 |
combined_instructions = f"{guidance_part}<hr>{rules_part}<hr>{ai_note_part}"
|
| 292 |
|
| 293 |
if criterion_idx == 0:
|
| 294 |
-
|
| 295 |
|
| 296 |
-
if criterion_name not in
|
| 297 |
conditions_shuffled = random.sample(CONDITIONS, len(CONDITIONS))
|
| 298 |
-
|
| 299 |
|
| 300 |
-
current_image_order =
|
| 301 |
image_updates = []
|
| 302 |
for cond_name in current_image_order:
|
| 303 |
prediction = current_data["predictions"][cond_name]
|
| 304 |
-
img_path = get_image_path_from_prediction(prediction)
|
| 305 |
|
| 306 |
-
# ★ 修正点5: 画像を読み込み、マスキングを適用する
|
| 307 |
if img_path and os.path.exists(img_path):
|
| 308 |
try:
|
| 309 |
pil_img = Image.open(img_path).convert('RGB')
|
| 310 |
-
masked_img = create_masked_image(pil_img)
|
| 311 |
image_updates.append(gr.update(value=masked_img))
|
| 312 |
except Exception as e:
|
| 313 |
logger.error(f"Failed to open or mask image {img_path}: {e}")
|
|
@@ -315,42 +284,42 @@ def display_current_prompt_and_criterion():
|
|
| 315 |
else:
|
| 316 |
image_updates.append(gr.update(value=None))
|
| 317 |
|
| 318 |
-
saved_ranks_dict =
|
| 319 |
if saved_ranks_dict:
|
| 320 |
label_to_condition = {label: cond for label, cond in zip(IMAGE_LABELS, current_image_order)}
|
| 321 |
condition_to_label = {v: k for k, v in label_to_condition.items()}
|
| 322 |
-
|
| 323 |
condition_to_label[cond]: rank for cond, rank in saved_ranks_dict.items() if cond in condition_to_label
|
| 324 |
}
|
| 325 |
else:
|
| 326 |
-
|
| 327 |
|
| 328 |
-
button_updates = _create_button_updates()
|
| 329 |
|
| 330 |
is_alignment_criterion = (criterion_name == "Alignment")
|
| 331 |
abs_group_update = gr.update(visible=is_alignment_criterion)
|
| 332 |
-
saved_abs_score =
|
| 333 |
-
|
| 334 |
|
| 335 |
abs_button_updates = []
|
| 336 |
for i in range(1, 8):
|
| 337 |
-
variant = 'primary' if i ==
|
| 338 |
abs_button_updates.append(gr.update(variant=variant))
|
| 339 |
|
| 340 |
abs_group_worst_update = gr.update(visible=is_alignment_criterion)
|
| 341 |
-
saved_abs_score_worst =
|
| 342 |
-
|
| 343 |
|
| 344 |
abs_button_worst_updates = []
|
| 345 |
for i in range(1, 8):
|
| 346 |
-
variant = 'primary' if i ==
|
| 347 |
abs_button_worst_updates.append(gr.update(variant=variant))
|
| 348 |
|
| 349 |
return [
|
| 350 |
gr.update(value=progress_text),
|
| 351 |
gr.update(value=combined_instructions),
|
| 352 |
gr.update(value=prompt_display_text),
|
| 353 |
-
gr.update(value="", visible=False),
|
| 354 |
*image_updates,
|
| 355 |
*button_updates,
|
| 356 |
abs_group_update,
|
|
@@ -358,31 +327,30 @@ def display_current_prompt_and_criterion():
|
|
| 358 |
abs_group_worst_update,
|
| 359 |
*abs_button_worst_updates,
|
| 360 |
gr.update(
|
| 361 |
-
interactive=(
|
| 362 |
gr.update(interactive=True)
|
| 363 |
]
|
| 364 |
|
| 365 |
|
| 366 |
-
|
| 367 |
-
|
| 368 |
-
ranks = GLOBAL_STATE["current_ranks"]
|
| 369 |
error_msg = None
|
| 370 |
-
criterion_name = CRITERIA[
|
| 371 |
is_alignment_criterion = (criterion_name == "Alignment")
|
| 372 |
|
| 373 |
if any(r is None for r in ranks.values()):
|
| 374 |
error_msg = "Please rank all 5 images. / 5つすべての画像を評価してください。"
|
| 375 |
elif 1 not in ranks.values():
|
| 376 |
error_msg = "You must assign a rank of '1' to at least one image. / 最低1つは「1位」を付けてください。"
|
| 377 |
-
elif is_alignment_criterion and
|
| 378 |
error_msg = "Please provide an absolute score for the BEST matching image (1-7). / 最も一致している画像について、絶対評価(1~7)を選択してください。"
|
| 379 |
-
elif is_alignment_criterion and
|
| 380 |
error_msg = "Please provide an absolute score for the WORST matching image (1-7). / 最も一致していない画像について、絶対評価(1~7)を選択してください。"
|
| 381 |
elif (
|
| 382 |
is_alignment_criterion
|
| 383 |
-
and
|
| 384 |
-
and
|
| 385 |
-
and
|
| 386 |
):
|
| 387 |
error_msg = (
|
| 388 |
"The score for the WORST matching image cannot be higher than the score for the BEST matching image.<br>"
|
|
@@ -390,11 +358,15 @@ def validate_and_navigate():
|
|
| 390 |
)
|
| 391 |
|
| 392 |
if error_msg:
|
| 393 |
-
no_change_updates
|
| 394 |
-
no_change_updates
|
|
|
|
|
|
|
| 395 |
value=f"<p class='feedback red' style='font-size: 1.2em; text-align: center;'>{error_msg}</p>",
|
| 396 |
visible=True)
|
| 397 |
-
|
|
|
|
|
|
|
| 398 |
|
| 399 |
sorted_ranks = sorted(list(ranks.values()))
|
| 400 |
rank_counts = Counter(sorted_ranks)
|
|
@@ -410,59 +382,70 @@ def validate_and_navigate():
|
|
| 410 |
break
|
| 411 |
i += count
|
| 412 |
if error_msg:
|
| 413 |
-
no_change_updates
|
| 414 |
-
no_change_updates
|
|
|
|
|
|
|
| 415 |
value=f"<p class='feedback red' style='font-size: 1.2em; text-align: center;'>{error_msg}</p>",
|
| 416 |
visible=True)
|
| 417 |
-
|
|
|
|
| 418 |
|
| 419 |
-
prompt_idx =
|
| 420 |
-
current_data =
|
| 421 |
prompt_text = current_data["prompt"]
|
| 422 |
-
current_image_order =
|
| 423 |
|
| 424 |
label_to_condition = {label: cond for label, cond in zip(IMAGE_LABELS, current_image_order)}
|
| 425 |
ranks_by_condition = {label_to_condition[label]: rank for label, rank in ranks.items()}
|
| 426 |
|
| 427 |
-
if "ranks" not in
|
| 428 |
-
|
| 429 |
-
if "orders" not in
|
| 430 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 431 |
|
| 432 |
-
GLOBAL_STATE["evaluation_results"][prompt_text]["ranks"][criterion_name] = ranks_by_condition
|
| 433 |
-
GLOBAL_STATE["evaluation_results"][prompt_text]["orders"][criterion_name] = current_image_order
|
| 434 |
|
| 435 |
if is_alignment_criterion:
|
| 436 |
-
|
| 437 |
-
|
| 438 |
-
"current_absolute_score_worst"]
|
| 439 |
|
| 440 |
-
|
| 441 |
-
|
|
|
|
| 442 |
|
| 443 |
-
GLOBAL_STATE["current_criterion_index"] += 1
|
| 444 |
-
if GLOBAL_STATE["current_criterion_index"] >= len(CRITERIA):
|
| 445 |
-
GLOBAL_STATE["current_criterion_index"] = 0
|
| 446 |
-
GLOBAL_STATE["current_prompt_index"] += 1
|
| 447 |
|
| 448 |
-
|
| 449 |
-
|
| 450 |
-
|
| 451 |
-
|
| 452 |
-
|
| 453 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 454 |
|
| 455 |
|
| 456 |
-
def navigate_previous():
|
| 457 |
-
|
| 458 |
-
if
|
| 459 |
-
|
| 460 |
-
|
| 461 |
-
|
| 462 |
-
return display_current_prompt_and_criterion()
|
| 463 |
|
|
|
|
|
|
|
| 464 |
|
| 465 |
-
|
|
|
|
|
|
|
| 466 |
if not alignment_reason.strip() or not naturalness_reason.strip() or not attractiveness_reason.strip():
|
| 467 |
error_msg = "<p class='feedback red'>Please fill in the reasoning for all three criteria (Alignment, Naturalness, Attractiveness). / 3つの評価基準(一致度, 自然さ, 魅力度)すべての判断理由を記入してください。</p>"
|
| 468 |
return None, error_msg
|
|
@@ -475,15 +458,15 @@ def export_results(participant_id, alignment_reason, naturalness_reason, attract
|
|
| 475 |
filename = f"evaluation_results_{participant_id}_{datetime.now().strftime('%Y%m%d_%H%M%S')}.json"
|
| 476 |
filepath = os.path.join(output_dir, filename)
|
| 477 |
|
| 478 |
-
duration = (
|
| 479 |
-
"start_time") and
|
| 480 |
|
| 481 |
-
prompt_to_category = {item["prompt"]: item["category"] for item in
|
| 482 |
|
| 483 |
final_results_list = []
|
| 484 |
-
for prompt, data in
|
| 485 |
if not data: continue
|
| 486 |
-
|
| 487 |
ranks_data = data.get("ranks", {})
|
| 488 |
orders_data = data.get("orders", {})
|
| 489 |
|
|
@@ -516,6 +499,8 @@ def export_results(participant_id, alignment_reason, naturalness_reason, attract
|
|
| 516 |
"results": final_results_list
|
| 517 |
}
|
| 518 |
|
|
|
|
|
|
|
| 519 |
try:
|
| 520 |
with open(filepath, 'w', encoding='utf-8') as f:
|
| 521 |
json.dump(export_data, f, ensure_ascii=False, indent=2)
|
|
@@ -537,6 +522,7 @@ def export_results(participant_id, alignment_reason, naturalness_reason, attract
|
|
| 537 |
|
| 538 |
def create_gradio_interface():
|
| 539 |
css = """
|
|
|
|
| 540 |
.gradio-container { font-family: 'Arial', sans-serif; }
|
| 541 |
.feedback { padding: 10px; border-radius: 5px; font-weight: bold; text-align: center; margin-top: 10px; }
|
| 542 |
.feedback.green { background-color: #e6ffed; color: #2f6f4a; }
|
|
@@ -544,44 +530,41 @@ def create_gradio_interface():
|
|
| 544 |
.image-label { font-size: 2.5em; font-weight: bold; margin-bottom: 10px; color: #333; }
|
| 545 |
.prompt-display { text-align: center; margin-bottom: 15px; padding: 10px; background-color: #f0f8ff; border-radius: 8px; }
|
| 546 |
.rank-btn-row { justify-content: center; gap: 5px !important; }
|
| 547 |
-
.rank-btn {
|
| 548 |
-
|
| 549 |
-
|
| 550 |
-
|
| 551 |
-
|
| 552 |
-
font-weight: bold !important;
|
| 553 |
-
border-radius: 8px !important;
|
| 554 |
-
border: 1px solid #ccc !important;
|
| 555 |
-
}
|
| 556 |
-
.rank-btn.secondary {
|
| 557 |
-
background: #f0f0f0 !important;
|
| 558 |
-
color: #333 !important;
|
| 559 |
-
}
|
| 560 |
-
.rank-btn.secondary:hover {
|
| 561 |
-
background: #e0e0e0 !important;
|
| 562 |
-
border-color: #bbb !important;
|
| 563 |
-
}
|
| 564 |
-
.absolute-eval-group {
|
| 565 |
-
border: 1px solid #ddd;
|
| 566 |
-
border-radius: 8px;
|
| 567 |
-
padding: 15px;
|
| 568 |
-
margin-top: 20px;
|
| 569 |
-
}
|
| 570 |
-
.instructions-container {
|
| 571 |
-
padding: 15px;
|
| 572 |
-
border: 1px solid #ccc;
|
| 573 |
-
border-radius: 8px;
|
| 574 |
-
margin-bottom: 20px;
|
| 575 |
-
background-color: #fafafa;
|
| 576 |
-
}
|
| 577 |
.instructions-container ul { padding-left: 20px; margin-top: 5px; margin-bottom: 5px; }
|
| 578 |
.instructions-container hr { margin: 15px 0; }
|
| 579 |
"""
|
| 580 |
|
| 581 |
with gr.Blocks(title="Expression Evaluation Experiment", css=css) as app:
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 582 |
gr.Markdown("# Text-to-Expression Evaluation Experiment / テキストからの表情生成 評価実験")
|
| 583 |
|
| 584 |
with gr.Tabs() as tabs:
|
|
|
|
| 585 |
with gr.TabItem("1. Setup / セットアップ") as tab_setup:
|
| 586 |
gr.Markdown("## (A) Participant Information / 参加者情報")
|
| 587 |
gr.Markdown("Please enter your participant ID and click 'Confirm'. / 参加者IDを入力して「確定」を押してください。")
|
|
@@ -599,6 +582,7 @@ def create_gradio_interface():
|
|
| 599 |
<li><b>この作業はPCで行ってください。/ Please perform this task on a PC.</b></li>
|
| 600 |
<li>途中で止めずに最後まで続けてください。ファイルをアップロードして完了となります。/ Please continue until the end. The experiment is complete when you upload the file.</li>
|
| 601 |
<li>ブラウザーをリロードしないでください (データが破損します)。/ Do not reload the browser (this will corrupt the data).</li>
|
|
|
|
| 602 |
</ul></div>""")
|
| 603 |
gr.Markdown(
|
| 604 |
"Click the button below to load your evaluation data. / 下のボタンを押して、評価データを読み込んでください。")
|
|
@@ -618,7 +602,7 @@ def create_gradio_interface():
|
|
| 618 |
with gr.Column(scale=1):
|
| 619 |
with gr.Group():
|
| 620 |
gr.Markdown(f"<div class='image-label' style='text-align: center;'>{label}</div>")
|
| 621 |
-
img = gr.Image(type="pil", show_label=False, height=300)
|
| 622 |
image_components.append(img)
|
| 623 |
with gr.Row(elem_classes="rank-btn-row"):
|
| 624 |
rank_list = ["1位", "2位", "3位", "4位", "5位"]
|
|
@@ -691,18 +675,20 @@ def create_gradio_interface():
|
|
| 691 |
download_file = gr.File(label="Download JSON", visible=False)
|
| 692 |
export_status = gr.Markdown()
|
| 693 |
|
| 694 |
-
# --- Event Handlers ---
|
| 695 |
-
def check_and_confirm_id(pid):
|
| 696 |
pid = pid.strip()
|
| 697 |
if re.fullmatch(r"P\d{2}", pid):
|
| 698 |
-
|
| 699 |
-
return gr.update(visible=False), gr.update(visible=True)
|
| 700 |
else:
|
| 701 |
error_msg = "<p class='feedback red'>Invalid ID. Must be 'P' followed by two digits (e.g., P01). / 無効なIDです。「P」と数字2桁の形式(例: P01)で入力してください。</p>"
|
| 702 |
-
return gr.update(value=error_msg, visible=True), gr.update(visible=False)
|
| 703 |
|
| 704 |
-
confirm_id_btn.click(check_and_confirm_id, [participant_id_input
|
| 705 |
-
|
|
|
|
|
|
|
| 706 |
|
| 707 |
all_eval_outputs = [
|
| 708 |
progress_text, combined_instructions_display, prompt_display, error_display, *image_components,
|
|
@@ -716,45 +702,48 @@ def create_gradio_interface():
|
|
| 716 |
for label in IMAGE_LABELS:
|
| 717 |
for rank_val in range(1, 6):
|
| 718 |
btn = rank_buttons[btn_idx]
|
|
|
|
| 719 |
btn.click(
|
| 720 |
partial(handle_rank_button_click, label, rank_val),
|
| 721 |
-
[],
|
| 722 |
-
rank_buttons
|
| 723 |
)
|
| 724 |
btn_idx += 1
|
| 725 |
|
| 726 |
for i, btn in enumerate(absolute_score_buttons):
|
| 727 |
btn.click(
|
| 728 |
partial(handle_absolute_score_click, i + 1),
|
| 729 |
-
[],
|
| 730 |
-
absolute_score_buttons
|
| 731 |
)
|
| 732 |
|
| 733 |
for i, btn in enumerate(absolute_score_worst_buttons):
|
| 734 |
btn.click(
|
| 735 |
partial(handle_absolute_score_worst_click, i + 1),
|
| 736 |
-
[],
|
| 737 |
-
absolute_score_worst_buttons
|
| 738 |
)
|
| 739 |
|
| 740 |
-
tab_evaluation.select(display_current_prompt_and_criterion, [], all_eval_outputs)
|
| 741 |
-
|
| 742 |
-
prev_btn
|
|
|
|
|
|
|
| 743 |
|
| 744 |
export_tab_interactive_components = [alignment_reason_box, naturalness_reason_box, attractiveness_reason_box,
|
| 745 |
optional_comment_box, export_btn]
|
| 746 |
|
| 747 |
-
def on_select_export_tab():
|
| 748 |
-
if
|
| 749 |
return [gr.update(interactive=True)] * 5
|
| 750 |
return [gr.update(interactive=False)] * 5
|
| 751 |
|
| 752 |
-
tab_export.select(on_select_export_tab, [], export_tab_interactive_components)
|
| 753 |
|
| 754 |
export_btn.click(
|
| 755 |
export_results,
|
| 756 |
[participant_id_input, alignment_reason_box, naturalness_reason_box, attractiveness_reason_box,
|
| 757 |
-
optional_comment_box],
|
| 758 |
[download_file, export_status]
|
| 759 |
)
|
| 760 |
|
|
|
|
| 1 |
# ==============================================================================
|
| 2 |
+
# evaluation_interface のコードブロック(セッションステート対応済み)
|
| 3 |
# ==============================================================================
|
| 4 |
import os
|
| 5 |
import sys
|
|
|
|
| 12 |
|
| 13 |
import gradio as gr
|
| 14 |
from loguru import logger
|
| 15 |
+
from PIL import Image
|
| 16 |
import re
|
| 17 |
|
| 18 |
+
# --- ★ 修正: GLOBAL_STATE を削除 ---
|
| 19 |
+
# グローバルな状態管理を廃止し、Gradioのセッションステート (gr.State) に移行します。
|
| 20 |
|
| 21 |
+
# --- Configuration (変更なし) ---
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 22 |
BASE_RESULTS_DIR = "./results"
|
| 23 |
LOG_DIR = "./logs"
|
| 24 |
COMBINED_DATA_DIR = "./combined_data"
|
|
|
|
| 26 |
MAPPING_FILENAME = "combination_to_filename.json"
|
| 27 |
CONDITIONS = ["Ours", "w_o_Proto_Loss", "w_o_HitL", "w_o_Tuning", "LLM-based"]
|
| 28 |
CRITERIA = ["Alignment", "Naturalness", "Attractiveness"]
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 29 |
CRITERIA_GUIDANCE_JP = [
|
| 30 |
"テキストと上半分の表情がどれだけ一致していますか?",
|
| 31 |
"提示されたテキストと上半分の表情を考慮した上で、このキャラクターはどれだけ自然に見えますか?",
|
|
|
|
| 39 |
IMAGE_LABELS = ['A', 'B', 'C', 'D', 'E']
|
| 40 |
|
| 41 |
|
| 42 |
+
# --- Helper Functions (★ 修正: stateを引数に追加) ---
|
| 43 |
+
def load_bbox_json(bbox_json_path, state):
|
| 44 |
+
"""バウンディングボックス情報をJSONファイルから読み込み、stateに格納する"""
|
|
|
|
| 45 |
try:
|
| 46 |
with open(bbox_json_path, 'r', encoding='utf-8') as f:
|
| 47 |
bbox_data = json.load(f)
|
| 48 |
+
state["hide_bbox_dict"] = bbox_data.get("Hide", {})
|
|
|
|
| 49 |
logger.info(f"Successfully loaded bounding box data from {bbox_json_path}")
|
| 50 |
except Exception as e:
|
| 51 |
logger.error(f"Failed to load bounding box JSON: {e}")
|
| 52 |
+
state["hide_bbox_dict"] = {}
|
| 53 |
+
return state
|
| 54 |
|
| 55 |
|
| 56 |
+
def create_masked_image(image: Image.Image, state: dict):
|
| 57 |
"""画像に黒塗りのマスクを適用する"""
|
| 58 |
+
hide_bbox_dict = state.get("hide_bbox_dict", {})
|
| 59 |
if not hide_bbox_dict:
|
| 60 |
return image
|
| 61 |
masked_img = image.copy()
|
|
|
|
| 66 |
return masked_img
|
| 67 |
|
| 68 |
|
| 69 |
+
def get_image_path_from_prediction(prediction: dict, state: dict) -> str:
|
| 70 |
+
if not state["image_mapping"]:
|
| 71 |
logger.error("Image mapping is not loaded.")
|
| 72 |
return ""
|
| 73 |
indices = prediction.get("blendshape_index", {})
|
|
|
|
| 76 |
return ""
|
| 77 |
sorted_indices = sorted(indices.items(), key=lambda item: int(item[0]))
|
| 78 |
key = ",".join(str(idx) for _, idx in sorted_indices)
|
| 79 |
+
filename = state["image_mapping"].get(key)
|
| 80 |
if not filename:
|
| 81 |
logger.warning(f"No image found for blendshape key: {key}")
|
| 82 |
return ""
|
| 83 |
+
return os.path.join(state["image_dir"], filename)
|
| 84 |
|
| 85 |
|
| 86 |
+
def load_evaluation_data(participant_id: str, state: dict):
|
| 87 |
+
""" ★ 修正: stateを引数で受け取り、更新したstateを返す """
|
|
|
|
| 88 |
bbox_json_path = os.path.join(COMBINED_DATA_DIR, "lapwing", "texts", "bounding_boxes.json")
|
| 89 |
if os.path.exists(bbox_json_path):
|
| 90 |
+
state = load_bbox_json(bbox_json_path, state)
|
| 91 |
else:
|
| 92 |
logger.warning(f"Bounding box file not found at {bbox_json_path}. Images will not be masked.")
|
| 93 |
+
state["hide_bbox_dict"] = {}
|
| 94 |
|
| 95 |
mapping_path = os.path.join(COMBINED_DATA_DIR, MAPPING_FILENAME)
|
| 96 |
if not os.path.exists(mapping_path):
|
| 97 |
+
return state, f"<p class='feedback red'>Error: Mapping file not found at {mapping_path}</p>", gr.update(
|
| 98 |
interactive=True), gr.update(interactive=False)
|
| 99 |
|
| 100 |
with open(mapping_path, 'r', encoding='utf-8') as f:
|
| 101 |
+
state["image_mapping"] = json.load(f)["mapping"]
|
| 102 |
+
state["image_dir"] = os.path.join(COMBINED_DATA_DIR, IMAGE_SUBDIR)
|
| 103 |
+
logger.info(f"Successfully loaded image mapping. Image directory: {state['image_dir']}")
|
| 104 |
|
| 105 |
participant_dir = os.path.join(BASE_RESULTS_DIR, participant_id)
|
| 106 |
if not os.path.isdir(participant_dir):
|
| 107 |
+
return state, f"<p class='feedback red'>Error: Participant directory not found: {participant_dir}</p>", gr.update(
|
| 108 |
interactive=True), gr.update(interactive=False)
|
| 109 |
|
| 110 |
merged_data = defaultdict(lambda: {"predictions": {}, "category": None})
|
|
|
|
| 126 |
merged_data[prompt]["category"] = data.get("prompt_category")
|
| 127 |
|
| 128 |
if found_files != len(CONDITIONS):
|
| 129 |
+
return state, f"<p class='feedback red'>Error: Found prediction files for only {found_files}/{len(CONDITIONS)} conditions.</p>", gr.update(
|
| 130 |
interactive=True), gr.update(interactive=False)
|
| 131 |
|
| 132 |
+
state["all_eval_data"] = [
|
| 133 |
{"prompt": p, "predictions": d["predictions"], "category": d["category"]}
|
| 134 |
for p, d in merged_data.items() if len(d["predictions"]) == len(CONDITIONS)
|
| 135 |
]
|
| 136 |
|
| 137 |
+
if not state["all_eval_data"]:
|
| 138 |
+
return state, "<p class='feedback red'>Error: No valid evaluation data could be loaded.</p>", gr.update(
|
| 139 |
interactive=True), gr.update(interactive=False)
|
| 140 |
|
| 141 |
+
state["shuffled_indices"] = list(range(len(state["all_eval_data"])))
|
| 142 |
+
random.shuffle(state["shuffled_indices"])
|
| 143 |
+
state["current_prompt_index"] = 0
|
| 144 |
+
state["current_criterion_index"] = 0
|
| 145 |
+
state["data_loaded"] = True
|
| 146 |
+
state["start_time"] = datetime.now()
|
| 147 |
+
for i in range(len(state["all_eval_data"])):
|
| 148 |
+
prompt_text = state["all_eval_data"][i]["prompt"]
|
| 149 |
+
state["evaluation_results"][prompt_text] = {}
|
| 150 |
+
|
| 151 |
+
logger.info(f"Loaded and merged data for {len(state['all_eval_data'])} prompts.")
|
| 152 |
done_msg = "<p class='feedback green'>Data loaded successfully. Please proceed to the 'Evaluation' tab. / データの読み込みに成功しました。「評価」タブに進んでください。</p>"
|
| 153 |
+
return state, done_msg, gr.update(interactive=False, visible=False), gr.update(interactive=True)
|
| 154 |
|
| 155 |
|
| 156 |
+
# --- Core Logic (★ 修正: stateを引数に追加) ---
|
| 157 |
+
def _create_button_updates(state: dict):
|
| 158 |
updates = []
|
| 159 |
for img_label in IMAGE_LABELS:
|
| 160 |
+
selected_rank = state["current_ranks"].get(img_label)
|
| 161 |
for rank_val in range(1, 6):
|
| 162 |
if rank_val == selected_rank:
|
| 163 |
updates.append(gr.update(variant='primary'))
|
|
|
|
| 166 |
return updates
|
| 167 |
|
| 168 |
|
| 169 |
+
def handle_rank_button_click(image_label, rank, state: dict):
|
| 170 |
+
if state["current_ranks"].get(image_label) == rank:
|
| 171 |
+
state["current_ranks"][image_label] = None
|
| 172 |
else:
|
| 173 |
+
state["current_ranks"][image_label] = rank
|
| 174 |
+
return state, *_create_button_updates(state)
|
| 175 |
|
| 176 |
|
| 177 |
+
def handle_absolute_score_click(score, state: dict):
|
| 178 |
+
if state["current_absolute_score"] == score:
|
| 179 |
+
state["current_absolute_score"] = None
|
| 180 |
else:
|
| 181 |
+
state["current_absolute_score"] = score
|
| 182 |
updates = []
|
| 183 |
for i in range(1, 8):
|
| 184 |
+
if i == state["current_absolute_score"]:
|
| 185 |
updates.append(gr.update(variant='primary'))
|
| 186 |
else:
|
| 187 |
updates.append(gr.update(variant='secondary'))
|
| 188 |
+
return state, *updates
|
| 189 |
|
| 190 |
|
| 191 |
+
def handle_absolute_score_worst_click(score, state: dict):
|
| 192 |
+
if state["current_absolute_score_worst"] == score:
|
| 193 |
+
state["current_absolute_score_worst"] = None
|
| 194 |
else:
|
| 195 |
+
state["current_absolute_score_worst"] = score
|
| 196 |
updates = []
|
| 197 |
for i in range(1, 8):
|
| 198 |
+
if i == state["current_absolute_score_worst"]:
|
| 199 |
updates.append(gr.update(variant='primary'))
|
| 200 |
else:
|
| 201 |
updates.append(gr.update(variant='secondary'))
|
| 202 |
+
return state, *updates
|
| 203 |
|
| 204 |
|
| 205 |
+
# --- UI Logic (★ 修正: stateを引数に追加) ---
|
| 206 |
+
def display_current_prompt_and_criterion(state: dict):
|
| 207 |
+
if not state["data_loaded"] or state["current_prompt_index"] >= len(state["all_eval_data"]):
|
| 208 |
done_msg = "<p class='feedback green' style='text-align: center; font-size: 1.2em;'>All prompts have been evaluated! Please proceed to the 'Export' tab. <br>すべてのプロンプトの評価が完了しました!「エクスポート」タブに進んでください。</p>"
|
| 209 |
empty_button_updates = [gr.update(variant='secondary')] * 25
|
| 210 |
empty_abs_updates = [gr.update(variant='secondary')] * 7
|
| 211 |
return [
|
| 212 |
+
gr.update(value="Finished! / 完了!"),
|
| 213 |
+
gr.update(value=""),
|
| 214 |
+
gr.update(value=""),
|
| 215 |
+
gr.update(value=done_msg, visible=True),
|
| 216 |
*[gr.update(value=None)] * 5,
|
| 217 |
*empty_button_updates,
|
| 218 |
+
gr.update(visible=False),
|
| 219 |
*empty_abs_updates,
|
| 220 |
+
gr.update(visible=False),
|
| 221 |
*empty_abs_updates,
|
| 222 |
gr.update(interactive=False),
|
| 223 |
gr.update(interactive=False)
|
| 224 |
]
|
| 225 |
|
| 226 |
+
prompt_idx = state["shuffled_indices"][state["current_prompt_index"]]
|
| 227 |
+
criterion_idx = state["current_criterion_index"]
|
| 228 |
|
| 229 |
+
current_data = state["all_eval_data"][prompt_idx]
|
| 230 |
prompt_text = current_data["prompt"]
|
| 231 |
criterion_name = CRITERIA[criterion_idx]
|
| 232 |
|
| 233 |
+
progress_text = f"Prompt {state['current_prompt_index'] + 1} / {len(state['all_eval_data'])} - **{criterion_name}**"
|
| 234 |
prompt_display_text = f"<p style='font-size: 3em; font-weight: bold;'>テキスト(TEXT): {prompt_text}</p>"
|
| 235 |
+
# (Instructions text is unchanged)
|
| 236 |
guidance_part = (
|
| 237 |
f"<p style='color: red; font-weight: bold; font-size: 1.1em;'>"
|
| 238 |
f"5つの画像を、「{CRITERIA_GUIDANCE_JP[criterion_idx]}」を基準にランキングしてください。<br>"
|
| 239 |
+
f"「ランキングの方法」をよく読んでつけてください。<br>"
|
| 240 |
f"Please rank the 5 images based on {CRITERIA_GUIDANCE_EN[criterion_idx]}"
|
| 241 |
f"</p>"
|
| 242 |
)
|
|
|
|
| 261 |
combined_instructions = f"{guidance_part}<hr>{rules_part}<hr>{ai_note_part}"
|
| 262 |
|
| 263 |
if criterion_idx == 0:
|
| 264 |
+
state["image_orders"] = {}
|
| 265 |
|
| 266 |
+
if criterion_name not in state["image_orders"]:
|
| 267 |
conditions_shuffled = random.sample(CONDITIONS, len(CONDITIONS))
|
| 268 |
+
state["image_orders"][criterion_name] = conditions_shuffled
|
| 269 |
|
| 270 |
+
current_image_order = state["image_orders"][criterion_name]
|
| 271 |
image_updates = []
|
| 272 |
for cond_name in current_image_order:
|
| 273 |
prediction = current_data["predictions"][cond_name]
|
| 274 |
+
img_path = get_image_path_from_prediction(prediction, state)
|
| 275 |
|
|
|
|
| 276 |
if img_path and os.path.exists(img_path):
|
| 277 |
try:
|
| 278 |
pil_img = Image.open(img_path).convert('RGB')
|
| 279 |
+
masked_img = create_masked_image(pil_img, state)
|
| 280 |
image_updates.append(gr.update(value=masked_img))
|
| 281 |
except Exception as e:
|
| 282 |
logger.error(f"Failed to open or mask image {img_path}: {e}")
|
|
|
|
| 284 |
else:
|
| 285 |
image_updates.append(gr.update(value=None))
|
| 286 |
|
| 287 |
+
saved_ranks_dict = state["evaluation_results"].get(prompt_text, {}).get("ranks", {}).get(criterion_name)
|
| 288 |
if saved_ranks_dict:
|
| 289 |
label_to_condition = {label: cond for label, cond in zip(IMAGE_LABELS, current_image_order)}
|
| 290 |
condition_to_label = {v: k for k, v in label_to_condition.items()}
|
| 291 |
+
state["current_ranks"] = {
|
| 292 |
condition_to_label[cond]: rank for cond, rank in saved_ranks_dict.items() if cond in condition_to_label
|
| 293 |
}
|
| 294 |
else:
|
| 295 |
+
state["current_ranks"] = {label: None for label in IMAGE_LABELS}
|
| 296 |
|
| 297 |
+
button_updates = _create_button_updates(state)
|
| 298 |
|
| 299 |
is_alignment_criterion = (criterion_name == "Alignment")
|
| 300 |
abs_group_update = gr.update(visible=is_alignment_criterion)
|
| 301 |
+
saved_abs_score = state["evaluation_results"].get(prompt_text, {}).get("absolute_score")
|
| 302 |
+
state["current_absolute_score"] = saved_abs_score if is_alignment_criterion else None
|
| 303 |
|
| 304 |
abs_button_updates = []
|
| 305 |
for i in range(1, 8):
|
| 306 |
+
variant = 'primary' if i == state["current_absolute_score"] else 'secondary'
|
| 307 |
abs_button_updates.append(gr.update(variant=variant))
|
| 308 |
|
| 309 |
abs_group_worst_update = gr.update(visible=is_alignment_criterion)
|
| 310 |
+
saved_abs_score_worst = state["evaluation_results"].get(prompt_text, {}).get("absolute_score_worst")
|
| 311 |
+
state["current_absolute_score_worst"] = saved_abs_score_worst if is_alignment_criterion else None
|
| 312 |
|
| 313 |
abs_button_worst_updates = []
|
| 314 |
for i in range(1, 8):
|
| 315 |
+
variant = 'primary' if i == state["current_absolute_score_worst"] else 'secondary'
|
| 316 |
abs_button_worst_updates.append(gr.update(variant=variant))
|
| 317 |
|
| 318 |
return [
|
| 319 |
gr.update(value=progress_text),
|
| 320 |
gr.update(value=combined_instructions),
|
| 321 |
gr.update(value=prompt_display_text),
|
| 322 |
+
gr.update(value="", visible=False),
|
| 323 |
*image_updates,
|
| 324 |
*button_updates,
|
| 325 |
abs_group_update,
|
|
|
|
| 327 |
abs_group_worst_update,
|
| 328 |
*abs_button_worst_updates,
|
| 329 |
gr.update(
|
| 330 |
+
interactive=(state["current_prompt_index"] > 0 or state["current_criterion_index"] > 0)),
|
| 331 |
gr.update(interactive=True)
|
| 332 |
]
|
| 333 |
|
| 334 |
|
| 335 |
+
def validate_and_navigate(state: dict):
|
| 336 |
+
ranks = state["current_ranks"]
|
|
|
|
| 337 |
error_msg = None
|
| 338 |
+
criterion_name = CRITERIA[state["current_criterion_index"]]
|
| 339 |
is_alignment_criterion = (criterion_name == "Alignment")
|
| 340 |
|
| 341 |
if any(r is None for r in ranks.values()):
|
| 342 |
error_msg = "Please rank all 5 images. / 5つすべての画像を評価してください。"
|
| 343 |
elif 1 not in ranks.values():
|
| 344 |
error_msg = "You must assign a rank of '1' to at least one image. / 最低1つは「1位」を付けてください。"
|
| 345 |
+
elif is_alignment_criterion and state["current_absolute_score"] is None:
|
| 346 |
error_msg = "Please provide an absolute score for the BEST matching image (1-7). / 最も一致している画像について、絶対評価(1~7)を選択してください。"
|
| 347 |
+
elif is_alignment_criterion and state["current_absolute_score_worst"] is None:
|
| 348 |
error_msg = "Please provide an absolute score for the WORST matching image (1-7). / 最も一致していない画像について、絶対評価(1~7)を選択してください。"
|
| 349 |
elif (
|
| 350 |
is_alignment_criterion
|
| 351 |
+
and state["current_absolute_score"] is not None
|
| 352 |
+
and state["current_absolute_score_worst"] is not None
|
| 353 |
+
and state["current_absolute_score_worst"] > state["current_absolute_score"]
|
| 354 |
):
|
| 355 |
error_msg = (
|
| 356 |
"The score for the WORST matching image cannot be higher than the score for the BEST matching image.<br>"
|
|
|
|
| 358 |
)
|
| 359 |
|
| 360 |
if error_msg:
|
| 361 |
+
# ★ 修正点: no_change_updates の要素数を 52 に変更
|
| 362 |
+
no_change_updates = [gr.update()] * 52
|
| 363 |
+
# error_display は all_eval_outputs の4番目(インデックス3)のコンポーネント
|
| 364 |
+
no_change_updates[3] = gr.update(
|
| 365 |
value=f"<p class='feedback red' style='font-size: 1.2em; text-align: center;'>{error_msg}</p>",
|
| 366 |
visible=True)
|
| 367 |
+
# 戻り値の総数が54個 (state, tab_exportの更新, all_eval_outputsの更新) になるように調整
|
| 368 |
+
return state, gr.update(), *no_change_updates
|
| 369 |
+
|
| 370 |
|
| 371 |
sorted_ranks = sorted(list(ranks.values()))
|
| 372 |
rank_counts = Counter(sorted_ranks)
|
|
|
|
| 382 |
break
|
| 383 |
i += count
|
| 384 |
if error_msg:
|
| 385 |
+
# ★ 修正点: こちらも同様に no_change_updates の要素数を 52 に変更
|
| 386 |
+
no_change_updates = [gr.update()] * 52
|
| 387 |
+
# error_display は all_eval_outputs の4番目(インデックス3)のコンポーネント
|
| 388 |
+
no_change_updates[3] = gr.update(
|
| 389 |
value=f"<p class='feedback red' style='font-size: 1.2em; text-align: center;'>{error_msg}</p>",
|
| 390 |
visible=True)
|
| 391 |
+
# 戻り値の総数が54個になるように調整
|
| 392 |
+
return state, gr.update(), *no_change_updates
|
| 393 |
|
| 394 |
+
prompt_idx = state["shuffled_indices"][state["current_prompt_index"]]
|
| 395 |
+
current_data = state["all_eval_data"][prompt_idx]
|
| 396 |
prompt_text = current_data["prompt"]
|
| 397 |
+
current_image_order = state["image_orders"][criterion_name]
|
| 398 |
|
| 399 |
label_to_condition = {label: cond for label, cond in zip(IMAGE_LABELS, current_image_order)}
|
| 400 |
ranks_by_condition = {label_to_condition[label]: rank for label, rank in ranks.items()}
|
| 401 |
|
| 402 |
+
if "ranks" not in state["evaluation_results"][prompt_text]:
|
| 403 |
+
state["evaluation_results"][prompt_text]["ranks"] = {}
|
| 404 |
+
if "orders" not in state["evaluation_results"][prompt_text]:
|
| 405 |
+
state["evaluation_results"][prompt_text]["orders"] = {}
|
| 406 |
+
|
| 407 |
+
state["evaluation_results"][prompt_text]["ranks"][criterion_name] = ranks_by_condition
|
| 408 |
+
state["evaluation_results"][prompt_text]["orders"][criterion_name] = current_image_order
|
| 409 |
+
|
| 410 |
+
logger.info(
|
| 411 |
+
f"Saved rank for P:{state['participant_id']}, Prompt:'{prompt_text}', Criterion:{criterion_name}, Ranks:{ranks_by_condition}, Orders:{current_image_order}, ")
|
| 412 |
|
|
|
|
|
|
|
| 413 |
|
| 414 |
if is_alignment_criterion:
|
| 415 |
+
state["evaluation_results"][prompt_text]["absolute_score"] = state["current_absolute_score"]
|
| 416 |
+
state["evaluation_results"][prompt_text]["absolute_score_worst"] = state["current_absolute_score_worst"]
|
|
|
|
| 417 |
|
| 418 |
+
logger.info(
|
| 419 |
+
f"Saved absolute scores for P:{state['participant_id']}, Prompt:'{prompt_text}', "
|
| 420 |
+
f"Best Score:{state['current_absolute_score']}, Worst Score:{state['current_absolute_score_worst']}")
|
| 421 |
|
|
|
|
|
|
|
|
|
|
|
|
|
| 422 |
|
| 423 |
+
state["current_criterion_index"] += 1
|
| 424 |
+
if state["current_criterion_index"] >= len(CRITERIA):
|
| 425 |
+
state["current_criterion_index"] = 0
|
| 426 |
+
state["current_prompt_index"] += 1
|
| 427 |
+
|
| 428 |
+
if state["current_prompt_index"] >= len(state["all_eval_data"]):
|
| 429 |
+
state["end_time"] = datetime.now()
|
| 430 |
+
|
| 431 |
+
eval_panel_updates = display_current_prompt_and_criterion(state)
|
| 432 |
+
export_tab_update = gr.update(interactive=(state.get("end_time") is not None))
|
| 433 |
+
return state, export_tab_update, *eval_panel_updates
|
| 434 |
|
| 435 |
|
| 436 |
+
def navigate_previous(state: dict):
|
| 437 |
+
state["current_criterion_index"] -= 1
|
| 438 |
+
if state["current_criterion_index"] < 0:
|
| 439 |
+
state["current_criterion_index"] = len(CRITERIA) - 1
|
| 440 |
+
state["current_prompt_index"] -= 1
|
| 441 |
+
state["current_prompt_index"] = max(0, state["current_prompt_index"])
|
|
|
|
| 442 |
|
| 443 |
+
# ★ 修正: display_current_prompt_and_criterion は state を返さないので、ここで state を返す
|
| 444 |
+
return state, *display_current_prompt_and_criterion(state)
|
| 445 |
|
| 446 |
+
|
| 447 |
+
def export_results(participant_id, alignment_reason, naturalness_reason, attractiveness_reason, optional_comment,
|
| 448 |
+
state: dict):
|
| 449 |
if not alignment_reason.strip() or not naturalness_reason.strip() or not attractiveness_reason.strip():
|
| 450 |
error_msg = "<p class='feedback red'>Please fill in the reasoning for all three criteria (Alignment, Naturalness, Attractiveness). / 3つの評価基準(一致度, 自然さ, 魅力度)すべての判断理由を記入してください。</p>"
|
| 451 |
return None, error_msg
|
|
|
|
| 458 |
filename = f"evaluation_results_{participant_id}_{datetime.now().strftime('%Y%m%d_%H%M%S')}.json"
|
| 459 |
filepath = os.path.join(output_dir, filename)
|
| 460 |
|
| 461 |
+
duration = (state["end_time"] - state["start_time"]).total_seconds() if state.get(
|
| 462 |
+
"start_time") and state.get("end_time") else None
|
| 463 |
|
| 464 |
+
prompt_to_category = {item["prompt"]: item["category"] for item in state["all_eval_data"]}
|
| 465 |
|
| 466 |
final_results_list = []
|
| 467 |
+
for prompt, data in state["evaluation_results"].items():
|
| 468 |
if not data: continue
|
| 469 |
+
# (以降、データ構造の作成部分は変更なし)
|
| 470 |
ranks_data = data.get("ranks", {})
|
| 471 |
orders_data = data.get("orders", {})
|
| 472 |
|
|
|
|
| 499 |
"results": final_results_list
|
| 500 |
}
|
| 501 |
|
| 502 |
+
logger.info(f"Exporting results for participant metadata: {export_data['metadata']}")
|
| 503 |
+
|
| 504 |
try:
|
| 505 |
with open(filepath, 'w', encoding='utf-8') as f:
|
| 506 |
json.dump(export_data, f, ensure_ascii=False, indent=2)
|
|
|
|
| 522 |
|
| 523 |
def create_gradio_interface():
|
| 524 |
css = """
|
| 525 |
+
/* (CSSは変更なし) */
|
| 526 |
.gradio-container { font-family: 'Arial', sans-serif; }
|
| 527 |
.feedback { padding: 10px; border-radius: 5px; font-weight: bold; text-align: center; margin-top: 10px; }
|
| 528 |
.feedback.green { background-color: #e6ffed; color: #2f6f4a; }
|
|
|
|
| 530 |
.image-label { font-size: 2.5em; font-weight: bold; margin-bottom: 10px; color: #333; }
|
| 531 |
.prompt-display { text-align: center; margin-bottom: 15px; padding: 10px; background-color: #f0f8ff; border-radius: 8px; }
|
| 532 |
.rank-btn-row { justify-content: center; gap: 5px !important; }
|
| 533 |
+
.rank-btn { min-width: 65px !important; max-width: 65px !important; height: 45px !important; font-size: 1.2em !important; font-weight: bold !important; border-radius: 8px !important; border: 1px solid #ccc !important; }
|
| 534 |
+
.rank-btn.secondary { background: #f0f0f0 !important; color: #333 !important; }
|
| 535 |
+
.rank-btn.secondary:hover { background: #e0e0e0 !important; border-color: #bbb !important; }
|
| 536 |
+
.absolute-eval-group { border: 1px solid #ddd; border-radius: 8px; padding: 15px; margin-top: 20px; }
|
| 537 |
+
.instructions-container { padding: 15px; border: 1px solid #ccc; border-radius: 8px; margin-bottom: 20px; background-color: #fafafa; }
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 538 |
.instructions-container ul { padding-left: 20px; margin-top: 5px; margin-bottom: 5px; }
|
| 539 |
.instructions-container hr { margin: 15px 0; }
|
| 540 |
"""
|
| 541 |
|
| 542 |
with gr.Blocks(title="Expression Evaluation Experiment", css=css) as app:
|
| 543 |
+
# ★ 修正: セッションステート (gr.State) を初期化
|
| 544 |
+
initial_state = {
|
| 545 |
+
"participant_id": None,
|
| 546 |
+
"data_loaded": False,
|
| 547 |
+
"all_eval_data": [],
|
| 548 |
+
"shuffled_indices": [],
|
| 549 |
+
"current_prompt_index": 0,
|
| 550 |
+
"current_criterion_index": 0,
|
| 551 |
+
"image_mapping": {},
|
| 552 |
+
"image_dir": "",
|
| 553 |
+
"evaluation_results": {},
|
| 554 |
+
"image_orders": {},
|
| 555 |
+
"start_time": None,
|
| 556 |
+
"end_time": None,
|
| 557 |
+
"current_ranks": {},
|
| 558 |
+
"current_absolute_score": None,
|
| 559 |
+
"current_absolute_score_worst": None,
|
| 560 |
+
"hide_bbox_dict": {},
|
| 561 |
+
}
|
| 562 |
+
state = gr.State(value=initial_state)
|
| 563 |
+
|
| 564 |
gr.Markdown("# Text-to-Expression Evaluation Experiment / テキストからの表情生成 評価実験")
|
| 565 |
|
| 566 |
with gr.Tabs() as tabs:
|
| 567 |
+
# (UI定義は変更なし)
|
| 568 |
with gr.TabItem("1. Setup / セットアップ") as tab_setup:
|
| 569 |
gr.Markdown("## (A) Participant Information / 参加者情報")
|
| 570 |
gr.Markdown("Please enter your participant ID and click 'Confirm'. / 参加者IDを入力して「確定」を押してください。")
|
|
|
|
| 582 |
<li><b>この作業はPCで行ってください。/ Please perform this task on a PC.</b></li>
|
| 583 |
<li>途中で止めずに最後まで続けてください。ファイルをアップロードして完了となります。/ Please continue until the end. The experiment is complete when you upload the file.</li>
|
| 584 |
<li>ブラウザーをリロードしないでください (データが破損します)。/ Do not reload the browser (this will corrupt the data).</li>
|
| 585 |
+
<li><b>指示と注意書きをよく読んでください。</b></li>
|
| 586 |
</ul></div>""")
|
| 587 |
gr.Markdown(
|
| 588 |
"Click the button below to load your evaluation data. / 下のボタンを押して、評価データを読み込んでください。")
|
|
|
|
| 602 |
with gr.Column(scale=1):
|
| 603 |
with gr.Group():
|
| 604 |
gr.Markdown(f"<div class='image-label' style='text-align: center;'>{label}</div>")
|
| 605 |
+
img = gr.Image(type="pil", show_label=False, height=300)
|
| 606 |
image_components.append(img)
|
| 607 |
with gr.Row(elem_classes="rank-btn-row"):
|
| 608 |
rank_list = ["1位", "2位", "3位", "4位", "5位"]
|
|
|
|
| 675 |
download_file = gr.File(label="Download JSON", visible=False)
|
| 676 |
export_status = gr.Markdown()
|
| 677 |
|
| 678 |
+
# --- Event Handlers (★ 修正: stateを入出力に追加) ---
|
| 679 |
+
def check_and_confirm_id(pid, state):
|
| 680 |
pid = pid.strip()
|
| 681 |
if re.fullmatch(r"P\d{2}", pid):
|
| 682 |
+
state["participant_id"] = pid
|
| 683 |
+
return state, gr.update(visible=False), gr.update(visible=True)
|
| 684 |
else:
|
| 685 |
error_msg = "<p class='feedback red'>Invalid ID. Must be 'P' followed by two digits (e.g., P01). / 無効なIDです。「P」と数字2桁の形式(例: P01)で入力してください。</p>"
|
| 686 |
+
return state, gr.update(value=error_msg, visible=True), gr.update(visible=False)
|
| 687 |
|
| 688 |
+
confirm_id_btn.click(check_and_confirm_id, [participant_id_input, state],
|
| 689 |
+
[state, setup_warning, setup_main_group])
|
| 690 |
+
load_data_btn.click(load_evaluation_data, [participant_id_input, state],
|
| 691 |
+
[state, setup_status, load_data_btn, tab_evaluation])
|
| 692 |
|
| 693 |
all_eval_outputs = [
|
| 694 |
progress_text, combined_instructions_display, prompt_display, error_display, *image_components,
|
|
|
|
| 702 |
for label in IMAGE_LABELS:
|
| 703 |
for rank_val in range(1, 6):
|
| 704 |
btn = rank_buttons[btn_idx]
|
| 705 |
+
# functools.partial を使うことで、state以外の引数を固定できます
|
| 706 |
btn.click(
|
| 707 |
partial(handle_rank_button_click, label, rank_val),
|
| 708 |
+
[state],
|
| 709 |
+
[state, *rank_buttons]
|
| 710 |
)
|
| 711 |
btn_idx += 1
|
| 712 |
|
| 713 |
for i, btn in enumerate(absolute_score_buttons):
|
| 714 |
btn.click(
|
| 715 |
partial(handle_absolute_score_click, i + 1),
|
| 716 |
+
[state],
|
| 717 |
+
[state, *absolute_score_buttons]
|
| 718 |
)
|
| 719 |
|
| 720 |
for i, btn in enumerate(absolute_score_worst_buttons):
|
| 721 |
btn.click(
|
| 722 |
partial(handle_absolute_score_worst_click, i + 1),
|
| 723 |
+
[state],
|
| 724 |
+
[state, *absolute_score_worst_buttons]
|
| 725 |
)
|
| 726 |
|
| 727 |
+
tab_evaluation.select(display_current_prompt_and_criterion, [state], all_eval_outputs)
|
| 728 |
+
|
| 729 |
+
# next_btn と prev_btn の出力に state を追加
|
| 730 |
+
next_btn.click(validate_and_navigate, [state], [state, tab_export, *all_eval_outputs])
|
| 731 |
+
prev_btn.click(navigate_previous, [state], [state, *all_eval_outputs])
|
| 732 |
|
| 733 |
export_tab_interactive_components = [alignment_reason_box, naturalness_reason_box, attractiveness_reason_box,
|
| 734 |
optional_comment_box, export_btn]
|
| 735 |
|
| 736 |
+
def on_select_export_tab(state):
|
| 737 |
+
if state.get("end_time"):
|
| 738 |
return [gr.update(interactive=True)] * 5
|
| 739 |
return [gr.update(interactive=False)] * 5
|
| 740 |
|
| 741 |
+
tab_export.select(on_select_export_tab, [state], export_tab_interactive_components)
|
| 742 |
|
| 743 |
export_btn.click(
|
| 744 |
export_results,
|
| 745 |
[participant_id_input, alignment_reason_box, naturalness_reason_box, attractiveness_reason_box,
|
| 746 |
+
optional_comment_box, state],
|
| 747 |
[download_file, export_status]
|
| 748 |
)
|
| 749 |
|
logs/evaluation_ui_log_2025-08-02_14-41-24_427858.log
ADDED
|
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
2025-08-02 14:41:39.852 | INFO | __main__:load_bbox_json:49 - Successfully loaded bounding box data from ./combined_data\lapwing\texts\bounding_boxes.json
|
| 2 |
+
2025-08-02 14:41:39.853 | INFO | __main__:load_evaluation_data:103 - Successfully loaded image mapping. Image directory: ./combined_data\lapwing\images
|
| 3 |
+
2025-08-02 14:41:39.855 | INFO | __main__:load_evaluation_data:151 - Loaded and merged data for 28 prompts.
|
logs/evaluation_ui_log_2025-08-02_14-47-08_666920.log
ADDED
|
@@ -0,0 +1,6 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
2025-08-02 14:47:18.374 | INFO | __main__:load_bbox_json:49 - Successfully loaded bounding box data from ./combined_data\lapwing\texts\bounding_boxes.json
|
| 2 |
+
2025-08-02 14:47:18.375 | INFO | __main__:load_evaluation_data:103 - Successfully loaded image mapping. Image directory: ./combined_data\lapwing\images
|
| 3 |
+
2025-08-02 14:47:18.397 | INFO | __main__:load_evaluation_data:151 - Loaded and merged data for 28 prompts.
|
| 4 |
+
2025-08-02 14:47:37.979 | INFO | __main__:validate_and_navigate:403 - Saved rank for P:P99, Prompt:'suspecious', Criterion:Alignment, Ranks:{'w_o_HitL': 4, 'Ours': 1, 'w_o_Tuning': 5, 'LLM-based': 1, 'w_o_Proto_Loss': 1}, Orders:['w_o_HitL', 'Ours', 'w_o_Tuning', 'LLM-based', 'w_o_Proto_Loss'],
|
| 5 |
+
2025-08-02 14:47:37.979 | INFO | __main__:validate_and_navigate:410 - Saved absolute scores for P:P99, Prompt:'suspecious', Best Score:6, Worst Score:2
|
| 6 |
+
2025-08-02 14:47:48.661 | INFO | __main__:validate_and_navigate:403 - Saved rank for P:P99, Prompt:'suspecious', Criterion:Naturalness, Ranks:{'w_o_HitL': 5, 'Ours': 1, 'LLM-based': 1, 'w_o_Proto_Loss': 1, 'w_o_Tuning': 4}, Orders:['w_o_HitL', 'Ours', 'LLM-based', 'w_o_Proto_Loss', 'w_o_Tuning'],
|
logs/evaluation_ui_log_2025-08-02_14-51-10_704186.log
ADDED
|
@@ -0,0 +1,7 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
2025-08-02 14:51:30.272 | INFO | __main__:load_bbox_json:49 - Successfully loaded bounding box data from ./combined_data\lapwing\texts\bounding_boxes.json
|
| 2 |
+
2025-08-02 14:51:30.273 | INFO | __main__:load_evaluation_data:103 - Successfully loaded image mapping. Image directory: ./combined_data\lapwing\images
|
| 3 |
+
2025-08-02 14:51:30.276 | INFO | __main__:load_evaluation_data:151 - Loaded and merged data for 28 prompts.
|
| 4 |
+
2025-08-02 14:51:45.724 | INFO | __main__:validate_and_navigate:403 - Saved rank for P:P99, Prompt:'annoyed', Criterion:Alignment, Ranks:{'LLM-based': 5, 'w_o_Proto_Loss': 1, 'w_o_HitL': 4, 'Ours': 2, 'w_o_Tuning': 3}, Orders:['LLM-based', 'w_o_Proto_Loss', 'w_o_HitL', 'Ours', 'w_o_Tuning'],
|
| 5 |
+
2025-08-02 14:51:45.725 | INFO | __main__:validate_and_navigate:410 - Saved absolute scores for P:P99, Prompt:'annoyed', Best Score:6, Worst Score:2
|
| 6 |
+
2025-08-02 14:52:06.249 | INFO | __main__:validate_and_navigate:403 - Saved rank for P:P99, Prompt:'annoyed', Criterion:Naturalness, Ranks:{'w_o_Proto_Loss': 2, 'Ours': 1, 'w_o_HitL': 4, 'LLM-based': 3, 'w_o_Tuning': 5}, Orders:['w_o_Proto_Loss', 'Ours', 'w_o_HitL', 'LLM-based', 'w_o_Tuning'],
|
| 7 |
+
2025-08-02 14:52:18.331 | INFO | __main__:validate_and_navigate:403 - Saved rank for P:P99, Prompt:'annoyed', Criterion:Attractiveness, Ranks:{'w_o_Tuning': 4, 'w_o_Proto_Loss': 2, 'w_o_HitL': 3, 'LLM-based': 5, 'Ours': 1}, Orders:['w_o_Tuning', 'w_o_Proto_Loss', 'w_o_HitL', 'LLM-based', 'Ours'],
|
logs/evaluation_ui_log_2025-08-02_14-55-09_654842.log
ADDED
|
@@ -0,0 +1,7 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
2025-08-02 14:55:20.980 | INFO | __main__:load_bbox_json:49 - Successfully loaded bounding box data from ./combined_data\lapwing\texts\bounding_boxes.json
|
| 2 |
+
2025-08-02 14:55:20.981 | INFO | __main__:load_evaluation_data:103 - Successfully loaded image mapping. Image directory: ./combined_data\lapwing\images
|
| 3 |
+
2025-08-02 14:55:20.983 | INFO | __main__:load_evaluation_data:151 - Loaded and merged data for 28 prompts.
|
| 4 |
+
2025-08-02 14:55:39.663 | INFO | __main__:validate_and_navigate:403 - Saved rank for P:P99, Prompt:'disgusted', Criterion:Alignment, Ranks:{'Ours': 1, 'w_o_HitL': 2, 'LLM-based': 3, 'w_o_Proto_Loss': 5, 'w_o_Tuning': 4}, Orders:['Ours', 'w_o_HitL', 'LLM-based', 'w_o_Proto_Loss', 'w_o_Tuning'],
|
| 5 |
+
2025-08-02 14:55:39.664 | INFO | __main__:validate_and_navigate:410 - Saved absolute scores for P:P99, Prompt:'disgusted', Best Score:6, Worst Score:2
|
| 6 |
+
2025-08-02 14:55:55.613 | INFO | __main__:validate_and_navigate:403 - Saved rank for P:P99, Prompt:'disgusted', Criterion:Naturalness, Ranks:{'LLM-based': 2, 'w_o_Proto_Loss': 4, 'w_o_HitL': 5, 'w_o_Tuning': 3, 'Ours': 1}, Orders:['LLM-based', 'w_o_Proto_Loss', 'w_o_HitL', 'w_o_Tuning', 'Ours'],
|
| 7 |
+
2025-08-02 14:56:07.162 | INFO | __main__:validate_and_navigate:403 - Saved rank for P:P99, Prompt:'disgusted', Criterion:Attractiveness, Ranks:{'Ours': 1, 'w_o_HitL': 4, 'w_o_Tuning': 2, 'w_o_Proto_Loss': 5, 'LLM-based': 3}, Orders:['Ours', 'w_o_HitL', 'w_o_Tuning', 'w_o_Proto_Loss', 'LLM-based'],
|
logs/evaluation_ui_log_2025-08-02_15-00-37_160749.log
ADDED
|
@@ -0,0 +1,18 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
2025-08-02 15:00:54.581 | INFO | __main__:load_bbox_json:49 - Successfully loaded bounding box data from ./combined_data\lapwing\texts\bounding_boxes.json
|
| 2 |
+
2025-08-02 15:00:54.581 | INFO | __main__:load_evaluation_data:103 - Successfully loaded image mapping. Image directory: ./combined_data\lapwing\images
|
| 3 |
+
2025-08-02 15:00:54.583 | INFO | __main__:load_evaluation_data:151 - Loaded and merged data for 28 prompts.
|
| 4 |
+
2025-08-02 15:01:34.620 | INFO | __main__:validate_and_navigate:410 - Saved rank for P:P99, Prompt:'empty', Criterion:Alignment, Ranks:{'Ours': 3, 'w_o_Tuning': 5, 'w_o_Proto_Loss': 3, 'LLM-based': 1, 'w_o_HitL': 2}, Orders:['Ours', 'w_o_Tuning', 'w_o_Proto_Loss', 'LLM-based', 'w_o_HitL'],
|
| 5 |
+
2025-08-02 15:01:34.621 | INFO | __main__:validate_and_navigate:418 - Saved absolute scores for P:P99, Prompt:'empty', Best Score:6, Worst Score:2
|
| 6 |
+
2025-08-02 15:01:47.160 | INFO | __main__:validate_and_navigate:410 - Saved rank for P:P99, Prompt:'empty', Criterion:Naturalness, Ranks:{'w_o_Proto_Loss': 1, 'Ours': 1, 'LLM-based': 3, 'w_o_Tuning': 5, 'w_o_HitL': 4}, Orders:['w_o_Proto_Loss', 'Ours', 'LLM-based', 'w_o_Tuning', 'w_o_HitL'],
|
| 7 |
+
2025-08-02 15:01:58.405 | INFO | __main__:validate_and_navigate:410 - Saved rank for P:P99, Prompt:'empty', Criterion:Attractiveness, Ranks:{'LLM-based': 3, 'w_o_Tuning': 4, 'w_o_HitL': 5, 'Ours': 2, 'w_o_Proto_Loss': 1}, Orders:['LLM-based', 'w_o_Tuning', 'w_o_HitL', 'Ours', 'w_o_Proto_Loss'],
|
| 8 |
+
2025-08-02 15:02:26.776 | INFO | __main__:validate_and_navigate:410 - Saved rank for P:P99, Prompt:'hate', Criterion:Alignment, Ranks:{'w_o_Proto_Loss': 3, 'w_o_HitL': 1, 'w_o_Tuning': 2, 'Ours': 3, 'LLM-based': 5}, Orders:['w_o_Proto_Loss', 'w_o_HitL', 'w_o_Tuning', 'Ours', 'LLM-based'],
|
| 9 |
+
2025-08-02 15:02:26.776 | INFO | __main__:validate_and_navigate:418 - Saved absolute scores for P:P99, Prompt:'hate', Best Score:6, Worst Score:2
|
| 10 |
+
2025-08-02 15:02:36.858 | INFO | __main__:validate_and_navigate:410 - Saved rank for P:P99, Prompt:'hate', Criterion:Naturalness, Ranks:{'LLM-based': 4, 'w_o_HitL': 3, 'w_o_Tuning': 5, 'w_o_Proto_Loss': 1, 'Ours': 1}, Orders:['LLM-based', 'w_o_HitL', 'w_o_Tuning', 'w_o_Proto_Loss', 'Ours'],
|
| 11 |
+
2025-08-02 15:02:50.653 | INFO | __main__:validate_and_navigate:410 - Saved rank for P:P99, Prompt:'hate', Criterion:Attractiveness, Ranks:{'w_o_Tuning': 4, 'Ours': 2, 'LLM-based': 5, 'w_o_Proto_Loss': 2, 'w_o_HitL': 1}, Orders:['w_o_Tuning', 'Ours', 'LLM-based', 'w_o_Proto_Loss', 'w_o_HitL'],
|
| 12 |
+
2025-08-02 15:03:06.892 | INFO | __main__:validate_and_navigate:410 - Saved rank for P:P99, Prompt:'contempt', Criterion:Alignment, Ranks:{'LLM-based': 2, 'w_o_HitL': 4, 'w_o_Proto_Loss': 5, 'Ours': 3, 'w_o_Tuning': 1}, Orders:['LLM-based', 'w_o_HitL', 'w_o_Proto_Loss', 'Ours', 'w_o_Tuning'],
|
| 13 |
+
2025-08-02 15:03:06.892 | INFO | __main__:validate_and_navigate:418 - Saved absolute scores for P:P99, Prompt:'contempt', Best Score:6, Worst Score:2
|
| 14 |
+
2025-08-02 15:03:19.231 | INFO | __main__:validate_and_navigate:410 - Saved rank for P:P99, Prompt:'contempt', Criterion:Naturalness, Ranks:{'w_o_Tuning': 1, 'w_o_HitL': 3, 'Ours': 5, 'LLM-based': 2, 'w_o_Proto_Loss': 5}, Orders:['w_o_Tuning', 'w_o_HitL', 'Ours', 'LLM-based', 'w_o_Proto_Loss'],
|
| 15 |
+
2025-08-02 15:03:35.775 | INFO | __main__:validate_and_navigate:410 - Saved rank for P:P99, Prompt:'contempt', Criterion:Attractiveness, Ranks:{'w_o_HitL': 1, 'LLM-based': 3, 'w_o_Proto_Loss': 5, 'w_o_Tuning': 2, 'Ours': 5}, Orders:['w_o_HitL', 'LLM-based', 'w_o_Proto_Loss', 'w_o_Tuning', 'Ours'],
|
| 16 |
+
2025-08-02 15:04:01.160 | INFO | __main__:validate_and_navigate:410 - Saved rank for P:P99, Prompt:'fun', Criterion:Alignment, Ranks:{'w_o_Proto_Loss': 3, 'w_o_HitL': 4, 'Ours': 2, 'LLM-based': 1, 'w_o_Tuning': 5}, Orders:['w_o_Proto_Loss', 'w_o_HitL', 'Ours', 'LLM-based', 'w_o_Tuning'],
|
| 17 |
+
2025-08-02 15:04:01.161 | INFO | __main__:validate_and_navigate:418 - Saved absolute scores for P:P99, Prompt:'fun', Best Score:6, Worst Score:2
|
| 18 |
+
2025-08-02 15:04:14.325 | INFO | __main__:validate_and_navigate:410 - Saved rank for P:P99, Prompt:'fun', Criterion:Naturalness, Ranks:{'Ours': 1, 'w_o_Proto_Loss': 3, 'w_o_Tuning': 4, 'LLM-based': 2, 'w_o_HitL': 5}, Orders:['Ours', 'w_o_Proto_Loss', 'w_o_Tuning', 'LLM-based', 'w_o_HitL'],
|
results/P16/HitL_results_P16.json
ADDED
|
The diff for this file is too large to render.
See raw diff
|
|
|
results/P16/LLM-based/P16_LLM-based_all_predictions.jsonl
ADDED
|
@@ -0,0 +1,28 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
{"participant_id": "P16", "condition": "LLM-based", "text_prompt": "happy", "prompt_category": "basic_emotion", "prediction": {"blendshape_names": {"Eyes": "笑い", "Eye Brow": "にこり"}, "blendshape_index": {"0": 1, "1": 3}, "blendshape_confidence": {"0": 1.0, "1": 1.0}}}
|
| 2 |
+
{"participant_id": "P16", "condition": "LLM-based", "text_prompt": "sad", "prompt_category": "basic_emotion", "prediction": {"blendshape_names": {"Eyes": "なごみ", "Eye Brow": "困る"}, "blendshape_index": {"0": 2, "1": 1}, "blendshape_confidence": {"0": 1.0, "1": 1.0}}}
|
| 3 |
+
{"participant_id": "P16", "condition": "LLM-based", "text_prompt": "angry", "prompt_category": "basic_emotion", "prediction": {"blendshape_names": {"Eyes": "じと目", "Eye Brow": "怒り"}, "blendshape_index": {"0": 4, "1": 2}, "blendshape_confidence": {"0": 1.0, "1": 1.0}}}
|
| 4 |
+
{"participant_id": "P16", "condition": "LLM-based", "text_prompt": "surprised", "prompt_category": "basic_emotion", "prediction": {"blendshape_names": {"Eyes": "びっくり", "Eye Brow": "上"}, "blendshape_index": {"0": 3, "1": 4}, "blendshape_confidence": {"0": 1.0, "1": 1.0}}}
|
| 5 |
+
{"participant_id": "P16", "condition": "LLM-based", "text_prompt": "disgusted", "prompt_category": "basic_emotion", "prediction": {"blendshape_names": {"Eyes": "じと目", "Eye Brow": "困る"}, "blendshape_index": {"0": 4, "1": 1}, "blendshape_confidence": {"0": 1.0, "1": 1.0}}}
|
| 6 |
+
{"participant_id": "P16", "condition": "LLM-based", "text_prompt": "fearful", "prompt_category": "basic_emotion", "prediction": {"blendshape_names": {"Eyes": "びっくり", "Eye Brow": "困る"}, "blendshape_index": {"0": 3, "1": 1}, "blendshape_confidence": {"0": 1.0, "1": 1.0}}}
|
| 7 |
+
{"participant_id": "P16", "condition": "LLM-based", "text_prompt": "neutral", "prompt_category": "basic_emotion", "prediction": {"blendshape_names": {"Eyes": "none", "Eye Brow": "none"}, "blendshape_index": {"0": -1, "1": -1}, "blendshape_confidence": {"0": 1.0, "1": 1.0}}}
|
| 8 |
+
{"participant_id": "P16", "condition": "LLM-based", "text_prompt": "contempt", "prompt_category": "basic_emotion", "prediction": {"blendshape_names": {"Eyes": "じと目", "Eye Brow": "browDownAngry"}, "blendshape_index": {"0": 4, "1": 7}, "blendshape_confidence": {"0": 1.0, "1": 1.0}}}
|
| 9 |
+
{"participant_id": "P16", "condition": "LLM-based", "text_prompt": "a little funny", "prompt_category": "nuanced_emotion", "prediction": {"blendshape_names": {"Eyes": "笑い", "Eye Brow": "にこり"}, "blendshape_index": {"0": 1, "1": 3}, "blendshape_confidence": {"0": 1.0, "1": 1.0}}}
|
| 10 |
+
{"participant_id": "P16", "condition": "LLM-based", "text_prompt": "a little happy", "prompt_category": "nuanced_emotion", "prediction": {"blendshape_names": {"Eyes": "笑い", "Eye Brow": "にこり"}, "blendshape_index": {"0": 1, "1": 3}, "blendshape_confidence": {"0": 1.0, "1": 1.0}}}
|
| 11 |
+
{"participant_id": "P16", "condition": "LLM-based", "text_prompt": "disappointed", "prompt_category": "nuanced_emotion", "prediction": {"blendshape_names": {"Eyes": "じと目", "Eye Brow": "困る"}, "blendshape_index": {"0": 4, "1": 1}, "blendshape_confidence": {"0": 1.0, "1": 1.0}}}
|
| 12 |
+
{"participant_id": "P16", "condition": "LLM-based", "text_prompt": "shocked", "prompt_category": "nuanced_emotion", "prediction": {"blendshape_names": {"Eyes": "びっくり", "Eye Brow": "上"}, "blendshape_index": {"0": 3, "1": 4}, "blendshape_confidence": {"0": 1.0, "1": 1.0}}}
|
| 13 |
+
{"participant_id": "P16", "condition": "LLM-based", "text_prompt": "very angry", "prompt_category": "nuanced_emotion", "prediction": {"blendshape_names": {"Eyes": "じと目", "Eye Brow": "怒り"}, "blendshape_index": {"0": 4, "1": 2}, "blendshape_confidence": {"0": 1.0, "1": 1.0}}}
|
| 14 |
+
{"participant_id": "P16", "condition": "LLM-based", "text_prompt": "very funny", "prompt_category": "nuanced_emotion", "prediction": {"blendshape_names": {"Eyes": "笑い", "Eye Brow": "にこり"}, "blendshape_index": {"0": 1, "1": 3}, "blendshape_confidence": {"0": 1.0, "1": 1.0}}}
|
| 15 |
+
{"participant_id": "P16", "condition": "LLM-based", "text_prompt": "very happy", "prompt_category": "nuanced_emotion", "prediction": {"blendshape_names": {"Eyes": "笑い", "Eye Brow": "にこり"}, "blendshape_index": {"0": 1, "1": 3}, "blendshape_confidence": {"0": 1.0, "1": 1.0}}}
|
| 16 |
+
{"participant_id": "P16", "condition": "LLM-based", "text_prompt": "very shocked", "prompt_category": "nuanced_emotion", "prediction": {"blendshape_names": {"Eyes": "びっくり", "Eye Brow": "上"}, "blendshape_index": {"0": 3, "1": 4}, "blendshape_confidence": {"0": 1.0, "1": 1.0}}}
|
| 17 |
+
{"participant_id": "P16", "condition": "LLM-based", "text_prompt": "success", "prompt_category": "zero_shot_emotion", "prediction": {"blendshape_names": {"Eyes": "笑い", "Eye Brow": "にこり"}, "blendshape_index": {"0": 1, "1": 3}, "blendshape_confidence": {"0": 1.0, "1": 1.0}}}
|
| 18 |
+
{"participant_id": "P16", "condition": "LLM-based", "text_prompt": "amazing", "prompt_category": "zero_shot_emotion", "prediction": {"blendshape_names": {"Eyes": "びっくり", "Eye Brow": "上"}, "blendshape_index": {"0": 3, "1": 4}, "blendshape_confidence": {"0": 1.0, "1": 1.0}}}
|
| 19 |
+
{"participant_id": "P16", "condition": "LLM-based", "text_prompt": "awesome", "prompt_category": "zero_shot_emotion", "prediction": {"blendshape_names": {"Eyes": "笑い", "Eye Brow": "にこり"}, "blendshape_index": {"0": 1, "1": 3}, "blendshape_confidence": {"0": 1.0, "1": 1.0}}}
|
| 20 |
+
{"participant_id": "P16", "condition": "LLM-based", "text_prompt": "hate", "prompt_category": "zero_shot_emotion", "prediction": {"blendshape_names": {"Eyes": "じと目", "Eye Brow": "怒り"}, "blendshape_index": {"0": 4, "1": 2}, "blendshape_confidence": {"0": 1.0, "1": 1.0}}}
|
| 21 |
+
{"participant_id": "P16", "condition": "LLM-based", "text_prompt": "fear", "prompt_category": "zero_shot_emotion", "prediction": {"blendshape_names": {"Eyes": "びっくり", "Eye Brow": "困る"}, "blendshape_index": {"0": 3, "1": 1}, "blendshape_confidence": {"0": 1.0, "1": 1.0}}}
|
| 22 |
+
{"participant_id": "P16", "condition": "LLM-based", "text_prompt": "pain", "prompt_category": "zero_shot_emotion", "prediction": {"blendshape_names": {"Eyes": "じと目", "Eye Brow": "困る"}, "blendshape_index": {"0": 4, "1": 1}, "blendshape_confidence": {"0": 1.0, "1": 1.0}}}
|
| 23 |
+
{"participant_id": "P16", "condition": "LLM-based", "text_prompt": "bored", "prompt_category": "zero_shot_emotion", "prediction": {"blendshape_names": {"Eyes": "じと目", "Eye Brow": "下"}, "blendshape_index": {"0": 4, "1": 5}, "blendshape_confidence": {"0": 1.0, "1": 1.0}}}
|
| 24 |
+
{"participant_id": "P16", "condition": "LLM-based", "text_prompt": "empty", "prompt_category": "zero_shot_emotion", "prediction": {"blendshape_names": {"Eyes": "none", "Eye Brow": "none"}, "blendshape_index": {"0": -1, "1": -1}, "blendshape_confidence": {"0": 1.0, "1": 1.0}}}
|
| 25 |
+
{"participant_id": "P16", "condition": "LLM-based", "text_prompt": "resigned", "prompt_category": "zero_shot_emotion", "prediction": {"blendshape_names": {"Eyes": "なごみ", "Eye Brow": "下"}, "blendshape_index": {"0": 2, "1": 5}, "blendshape_confidence": {"0": 1.0, "1": 1.0}}}
|
| 26 |
+
{"participant_id": "P16", "condition": "LLM-based", "text_prompt": "peace", "prompt_category": "zero_shot_emotion", "prediction": {"blendshape_names": {"Eyes": "なごみ", "Eye Brow": "にこり"}, "blendshape_index": {"0": 2, "1": 3}, "blendshape_confidence": {"0": 1.0, "1": 1.0}}}
|
| 27 |
+
{"participant_id": "P16", "condition": "LLM-based", "text_prompt": "rest", "prompt_category": "zero_shot_emotion", "prediction": {"blendshape_names": {"Eyes": "なごみ", "Eye Brow": "none"}, "blendshape_index": {"0": 2, "1": -1}, "blendshape_confidence": {"0": 1.0, "1": 1.0}}}
|
| 28 |
+
{"participant_id": "P16", "condition": "LLM-based", "text_prompt": "dream", "prompt_category": "zero_shot_emotion", "prediction": {"blendshape_names": {"Eyes": "なごみ", "Eye Brow": "none"}, "blendshape_index": {"0": 2, "1": -1}, "blendshape_confidence": {"0": 1.0, "1": 1.0}}}
|
results/P16/Ours/P16_Ours_all_predictions.jsonl
ADDED
|
@@ -0,0 +1,28 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
{"participant_id": "P16", "condition": "Ours", "text_prompt": "happy", "prompt_category": "basic_emotion", "prediction": {"blendshape_names": {"Eyes": "none", "Eye Brow": "真面目"}, "blendshape_index": {"0": -1, "1": 0}, "blendshape_confidence": {"0": 0.9492596983909607, "1": 0.6670171022415161}}}
|
| 2 |
+
{"participant_id": "P16", "condition": "Ours", "text_prompt": "sad", "prompt_category": "basic_emotion", "prediction": {"blendshape_names": {"Eyes": "irisSwap", "Eye Brow": "にこり"}, "blendshape_index": {"0": 5, "1": 3}, "blendshape_confidence": {"0": 0.9606900215148926, "1": 0.23715966939926147}}}
|
| 3 |
+
{"participant_id": "P16", "condition": "Ours", "text_prompt": "angry", "prompt_category": "basic_emotion", "prediction": {"blendshape_names": {"Eyes": "まばたき", "Eye Brow": "browDownAngry"}, "blendshape_index": {"0": 0, "1": 7}, "blendshape_confidence": {"0": 0.6469842791557312, "1": 0.9690301418304443}}}
|
| 4 |
+
{"participant_id": "P16", "condition": "Ours", "text_prompt": "surprised", "prompt_category": "basic_emotion", "prediction": {"blendshape_names": {"Eyes": "irisShrink", "Eye Brow": "怒り"}, "blendshape_index": {"0": 6, "1": 2}, "blendshape_confidence": {"0": 0.9448403120040894, "1": 0.5298275351524353}}}
|
| 5 |
+
{"participant_id": "P16", "condition": "Ours", "text_prompt": "disgusted", "prompt_category": "basic_emotion", "prediction": {"blendshape_names": {"Eyes": "irisShrink", "Eye Brow": "怒り"}, "blendshape_index": {"0": 6, "1": 2}, "blendshape_confidence": {"0": 0.9451183676719666, "1": 0.5280351042747498}}}
|
| 6 |
+
{"participant_id": "P16", "condition": "Ours", "text_prompt": "fearful", "prompt_category": "basic_emotion", "prediction": {"blendshape_names": {"Eyes": "笑い", "Eye Brow": "browArcDown"}, "blendshape_index": {"0": 1, "1": 6}, "blendshape_confidence": {"0": 0.9505174160003662, "1": 0.9635135531425476}}}
|
| 7 |
+
{"participant_id": "P16", "condition": "Ours", "text_prompt": "neutral", "prompt_category": "basic_emotion", "prediction": {"blendshape_names": {"Eyes": "まばたき", "Eye Brow": "browDownAngry"}, "blendshape_index": {"0": 0, "1": 7}, "blendshape_confidence": {"0": 0.6529861092567444, "1": 0.7712710499763489}}}
|
| 8 |
+
{"participant_id": "P16", "condition": "Ours", "text_prompt": "contempt", "prompt_category": "basic_emotion", "prediction": {"blendshape_names": {"Eyes": "じと目", "Eye Brow": "browArcDown"}, "blendshape_index": {"0": 4, "1": 6}, "blendshape_confidence": {"0": 0.9725663065910339, "1": 0.9883859157562256}}}
|
| 9 |
+
{"participant_id": "P16", "condition": "Ours", "text_prompt": "a little funny", "prompt_category": "nuanced_emotion", "prediction": {"blendshape_names": {"Eyes": "笑い", "Eye Brow": "困る"}, "blendshape_index": {"0": 1, "1": 1}, "blendshape_confidence": {"0": 0.9818972945213318, "1": 0.28428274393081665}}}
|
| 10 |
+
{"participant_id": "P16", "condition": "Ours", "text_prompt": "a little happy", "prompt_category": "nuanced_emotion", "prediction": {"blendshape_names": {"Eyes": "なごみ", "Eye Brow": "真面目"}, "blendshape_index": {"0": 2, "1": 0}, "blendshape_confidence": {"0": 0.609362006187439, "1": 0.9380427002906799}}}
|
| 11 |
+
{"participant_id": "P16", "condition": "Ours", "text_prompt": "disappointed", "prompt_category": "nuanced_emotion", "prediction": {"blendshape_names": {"Eyes": "じと目", "Eye Brow": "browArcDown"}, "blendshape_index": {"0": 4, "1": 6}, "blendshape_confidence": {"0": 0.9804338812828064, "1": 0.9907417297363281}}}
|
| 12 |
+
{"participant_id": "P16", "condition": "Ours", "text_prompt": "shocked", "prompt_category": "nuanced_emotion", "prediction": {"blendshape_names": {"Eyes": "irisShrink", "Eye Brow": "怒り"}, "blendshape_index": {"0": 6, "1": 2}, "blendshape_confidence": {"0": 0.9434607625007629, "1": 0.5284018516540527}}}
|
| 13 |
+
{"participant_id": "P16", "condition": "Ours", "text_prompt": "very angry", "prompt_category": "nuanced_emotion", "prediction": {"blendshape_names": {"Eyes": "じと目", "Eye Brow": "browDownAngry"}, "blendshape_index": {"0": 4, "1": 7}, "blendshape_confidence": {"0": 0.4148564040660858, "1": 0.9449126124382019}}}
|
| 14 |
+
{"participant_id": "P16", "condition": "Ours", "text_prompt": "very funny", "prompt_category": "nuanced_emotion", "prediction": {"blendshape_names": {"Eyes": "笑い", "Eye Brow": "browArcDown"}, "blendshape_index": {"0": 1, "1": 6}, "blendshape_confidence": {"0": 0.9673089981079102, "1": 0.9892383813858032}}}
|
| 15 |
+
{"participant_id": "P16", "condition": "Ours", "text_prompt": "very happy", "prompt_category": "nuanced_emotion", "prediction": {"blendshape_names": {"Eyes": "びっくり", "Eye Brow": "none"}, "blendshape_index": {"0": 3, "1": -1}, "blendshape_confidence": {"0": 0.9651579856872559, "1": 0.22379831969738007}}}
|
| 16 |
+
{"participant_id": "P16", "condition": "Ours", "text_prompt": "very shocked", "prompt_category": "nuanced_emotion", "prediction": {"blendshape_names": {"Eyes": "irisShrink", "Eye Brow": "困る"}, "blendshape_index": {"0": 6, "1": 1}, "blendshape_confidence": {"0": 0.9350981116294861, "1": 0.24193401634693146}}}
|
| 17 |
+
{"participant_id": "P16", "condition": "Ours", "text_prompt": "success", "prompt_category": "zero_shot_emotion", "prediction": {"blendshape_names": {"Eyes": "none", "Eye Brow": "真面目"}, "blendshape_index": {"0": -1, "1": 0}, "blendshape_confidence": {"0": 0.9471761584281921, "1": 0.7616352438926697}}}
|
| 18 |
+
{"participant_id": "P16", "condition": "Ours", "text_prompt": "amazing", "prompt_category": "zero_shot_emotion", "prediction": {"blendshape_names": {"Eyes": "笑い", "Eye Brow": "browArcDown"}, "blendshape_index": {"0": 1, "1": 6}, "blendshape_confidence": {"0": 0.9528500437736511, "1": 0.9657498002052307}}}
|
| 19 |
+
{"participant_id": "P16", "condition": "Ours", "text_prompt": "awesome", "prompt_category": "zero_shot_emotion", "prediction": {"blendshape_names": {"Eyes": "irisSwap", "Eye Brow": "browDownAngry"}, "blendshape_index": {"0": 5, "1": 7}, "blendshape_confidence": {"0": 0.8296573162078857, "1": 0.511085569858551}}}
|
| 20 |
+
{"participant_id": "P16", "condition": "Ours", "text_prompt": "hate", "prompt_category": "zero_shot_emotion", "prediction": {"blendshape_names": {"Eyes": "まばたき", "Eye Brow": "browDownAngry"}, "blendshape_index": {"0": 0, "1": 7}, "blendshape_confidence": {"0": 0.6370428204536438, "1": 0.970213770866394}}}
|
| 21 |
+
{"participant_id": "P16", "condition": "Ours", "text_prompt": "fear", "prompt_category": "zero_shot_emotion", "prediction": {"blendshape_names": {"Eyes": "irisShrink", "Eye Brow": "怒り"}, "blendshape_index": {"0": 6, "1": 2}, "blendshape_confidence": {"0": 0.9422263503074646, "1": 0.5305290222167969}}}
|
| 22 |
+
{"participant_id": "P16", "condition": "Ours", "text_prompt": "pain", "prompt_category": "zero_shot_emotion", "prediction": {"blendshape_names": {"Eyes": "まばたき", "Eye Brow": "browDownAngry"}, "blendshape_index": {"0": 0, "1": 7}, "blendshape_confidence": {"0": 0.6359920501708984, "1": 0.9706328511238098}}}
|
| 23 |
+
{"participant_id": "P16", "condition": "Ours", "text_prompt": "bored", "prompt_category": "zero_shot_emotion", "prediction": {"blendshape_names": {"Eyes": "笑い", "Eye Brow": "browArcDown"}, "blendshape_index": {"0": 1, "1": 6}, "blendshape_confidence": {"0": 0.9406657814979553, "1": 0.9443497657775879}}}
|
| 24 |
+
{"participant_id": "P16", "condition": "Ours", "text_prompt": "empty", "prompt_category": "zero_shot_emotion", "prediction": {"blendshape_names": {"Eyes": "まばたき", "Eye Brow": "browDownAngry"}, "blendshape_index": {"0": 0, "1": 7}, "blendshape_confidence": {"0": 0.48001936078071594, "1": 0.9590783715248108}}}
|
| 25 |
+
{"participant_id": "P16", "condition": "Ours", "text_prompt": "resigned", "prompt_category": "zero_shot_emotion", "prediction": {"blendshape_names": {"Eyes": "じと目", "Eye Brow": "browArcDown"}, "blendshape_index": {"0": 4, "1": 6}, "blendshape_confidence": {"0": 0.9802145957946777, "1": 0.2746669352054596}}}
|
| 26 |
+
{"participant_id": "P16", "condition": "Ours", "text_prompt": "peace", "prompt_category": "zero_shot_emotion", "prediction": {"blendshape_names": {"Eyes": "none", "Eye Brow": "真面目"}, "blendshape_index": {"0": -1, "1": 0}, "blendshape_confidence": {"0": 0.9481146335601807, "1": 0.713408350944519}}}
|
| 27 |
+
{"participant_id": "P16", "condition": "Ours", "text_prompt": "rest", "prompt_category": "zero_shot_emotion", "prediction": {"blendshape_names": {"Eyes": "none", "Eye Brow": "にこり"}, "blendshape_index": {"0": -1, "1": 3}, "blendshape_confidence": {"0": 0.9580990076065063, "1": 0.22329644858837128}}}
|
| 28 |
+
{"participant_id": "P16", "condition": "Ours", "text_prompt": "dream", "prompt_category": "zero_shot_emotion", "prediction": {"blendshape_names": {"Eyes": "none", "Eye Brow": "真面目"}, "blendshape_index": {"0": -1, "1": 0}, "blendshape_confidence": {"0": 0.9551511406898499, "1": 0.22201047837734222}}}
|
results/P16/w_o_HitL/P16_w_o_HitL_all_predictions.jsonl
ADDED
|
@@ -0,0 +1,28 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
{"participant_id": "P16", "condition": "w_o_HitL", "text_prompt": "happy", "prompt_category": "basic_emotion", "prediction": {"blendshape_names": {"Eyes": "none", "Eye Brow": "none"}, "blendshape_index": {"0": -1, "1": -1}, "blendshape_confidence": {"0": 0.962712287902832, "1": 0.359679639339447}}}
|
| 2 |
+
{"participant_id": "P16", "condition": "w_o_HitL", "text_prompt": "sad", "prompt_category": "basic_emotion", "prediction": {"blendshape_names": {"Eyes": "irisSwap", "Eye Brow": "none"}, "blendshape_index": {"0": 5, "1": -1}, "blendshape_confidence": {"0": 0.986799955368042, "1": 0.3524633049964905}}}
|
| 3 |
+
{"participant_id": "P16", "condition": "w_o_HitL", "text_prompt": "angry", "prompt_category": "basic_emotion", "prediction": {"blendshape_names": {"Eyes": "まばたき", "Eye Brow": "browDownAngry"}, "blendshape_index": {"0": 0, "1": 7}, "blendshape_confidence": {"0": 0.9771600365638733, "1": 0.9556713700294495}}}
|
| 4 |
+
{"participant_id": "P16", "condition": "w_o_HitL", "text_prompt": "surprised", "prompt_category": "basic_emotion", "prediction": {"blendshape_names": {"Eyes": "じと目", "Eye Brow": "browArcDown"}, "blendshape_index": {"0": 4, "1": 6}, "blendshape_confidence": {"0": 0.8247701525688171, "1": 0.5974222421646118}}}
|
| 5 |
+
{"participant_id": "P16", "condition": "w_o_HitL", "text_prompt": "disgusted", "prompt_category": "basic_emotion", "prediction": {"blendshape_names": {"Eyes": "じと目", "Eye Brow": "browArcDown"}, "blendshape_index": {"0": 4, "1": 6}, "blendshape_confidence": {"0": 0.8438608646392822, "1": 0.7930833697319031}}}
|
| 6 |
+
{"participant_id": "P16", "condition": "w_o_HitL", "text_prompt": "fearful", "prompt_category": "basic_emotion", "prediction": {"blendshape_names": {"Eyes": "びっくり", "Eye Brow": "下"}, "blendshape_index": {"0": 3, "1": 5}, "blendshape_confidence": {"0": 0.9271237254142761, "1": 0.9049108624458313}}}
|
| 7 |
+
{"participant_id": "P16", "condition": "w_o_HitL", "text_prompt": "neutral", "prompt_category": "basic_emotion", "prediction": {"blendshape_names": {"Eyes": "none", "Eye Brow": "none"}, "blendshape_index": {"0": -1, "1": -1}, "blendshape_confidence": {"0": 0.9651304483413696, "1": 0.3202117681503296}}}
|
| 8 |
+
{"participant_id": "P16", "condition": "w_o_HitL", "text_prompt": "contempt", "prompt_category": "basic_emotion", "prediction": {"blendshape_names": {"Eyes": "まばたき", "Eye Brow": "browDownAngry"}, "blendshape_index": {"0": 0, "1": 7}, "blendshape_confidence": {"0": 0.9764460325241089, "1": 0.9679782390594482}}}
|
| 9 |
+
{"participant_id": "P16", "condition": "w_o_HitL", "text_prompt": "a little funny", "prompt_category": "nuanced_emotion", "prediction": {"blendshape_names": {"Eyes": "まばたき", "Eye Brow": "browArcDown"}, "blendshape_index": {"0": 0, "1": 6}, "blendshape_confidence": {"0": 0.9438269138336182, "1": 0.9780333638191223}}}
|
| 10 |
+
{"participant_id": "P16", "condition": "w_o_HitL", "text_prompt": "a little happy", "prompt_category": "nuanced_emotion", "prediction": {"blendshape_names": {"Eyes": "まばたき", "Eye Brow": "browArcDown"}, "blendshape_index": {"0": 0, "1": 6}, "blendshape_confidence": {"0": 0.9387567043304443, "1": 0.9782640933990479}}}
|
| 11 |
+
{"participant_id": "P16", "condition": "w_o_HitL", "text_prompt": "disappointed", "prompt_category": "nuanced_emotion", "prediction": {"blendshape_names": {"Eyes": "irisSwap", "Eye Brow": "none"}, "blendshape_index": {"0": 5, "1": -1}, "blendshape_confidence": {"0": 0.9834548234939575, "1": 0.3410274386405945}}}
|
| 12 |
+
{"participant_id": "P16", "condition": "w_o_HitL", "text_prompt": "shocked", "prompt_category": "nuanced_emotion", "prediction": {"blendshape_names": {"Eyes": "じと目", "Eye Brow": "browArcDown"}, "blendshape_index": {"0": 4, "1": 6}, "blendshape_confidence": {"0": 0.8236276507377625, "1": 0.5127918124198914}}}
|
| 13 |
+
{"participant_id": "P16", "condition": "w_o_HitL", "text_prompt": "very angry", "prompt_category": "nuanced_emotion", "prediction": {"blendshape_names": {"Eyes": "びっくり", "Eye Brow": "browDownAngry"}, "blendshape_index": {"0": 3, "1": 7}, "blendshape_confidence": {"0": 0.9570594429969788, "1": 0.9309858679771423}}}
|
| 14 |
+
{"participant_id": "P16", "condition": "w_o_HitL", "text_prompt": "very funny", "prompt_category": "nuanced_emotion", "prediction": {"blendshape_names": {"Eyes": "びっくり", "Eye Brow": "にこり"}, "blendshape_index": {"0": 3, "1": 3}, "blendshape_confidence": {"0": 0.9934462904930115, "1": 0.35580042004585266}}}
|
| 15 |
+
{"participant_id": "P16", "condition": "w_o_HitL", "text_prompt": "very happy", "prompt_category": "nuanced_emotion", "prediction": {"blendshape_names": {"Eyes": "びっくり", "Eye Brow": "にこり"}, "blendshape_index": {"0": 3, "1": 3}, "blendshape_confidence": {"0": 0.9950509667396545, "1": 0.36536848545074463}}}
|
| 16 |
+
{"participant_id": "P16", "condition": "w_o_HitL", "text_prompt": "very shocked", "prompt_category": "nuanced_emotion", "prediction": {"blendshape_names": {"Eyes": "じと目", "Eye Brow": "browArcDown"}, "blendshape_index": {"0": 4, "1": 6}, "blendshape_confidence": {"0": 0.8097712397575378, "1": 0.32667437195777893}}}
|
| 17 |
+
{"participant_id": "P16", "condition": "w_o_HitL", "text_prompt": "success", "prompt_category": "zero_shot_emotion", "prediction": {"blendshape_names": {"Eyes": "none", "Eye Brow": "none"}, "blendshape_index": {"0": -1, "1": -1}, "blendshape_confidence": {"0": 0.9648783802986145, "1": 0.3616655766963959}}}
|
| 18 |
+
{"participant_id": "P16", "condition": "w_o_HitL", "text_prompt": "amazing", "prompt_category": "zero_shot_emotion", "prediction": {"blendshape_names": {"Eyes": "びっくり", "Eye Brow": "none"}, "blendshape_index": {"0": 3, "1": -1}, "blendshape_confidence": {"0": 0.9918829202651978, "1": 0.3112771809101105}}}
|
| 19 |
+
{"participant_id": "P16", "condition": "w_o_HitL", "text_prompt": "awesome", "prompt_category": "zero_shot_emotion", "prediction": {"blendshape_names": {"Eyes": "びっくり", "Eye Brow": "にこり"}, "blendshape_index": {"0": 3, "1": 3}, "blendshape_confidence": {"0": 0.9917681217193604, "1": 0.319681316614151}}}
|
| 20 |
+
{"participant_id": "P16", "condition": "w_o_HitL", "text_prompt": "hate", "prompt_category": "zero_shot_emotion", "prediction": {"blendshape_names": {"Eyes": "まばたき", "Eye Brow": "browDownAngry"}, "blendshape_index": {"0": 0, "1": 7}, "blendshape_confidence": {"0": 0.9771487712860107, "1": 0.9566535353660583}}}
|
| 21 |
+
{"participant_id": "P16", "condition": "w_o_HitL", "text_prompt": "fear", "prompt_category": "zero_shot_emotion", "prediction": {"blendshape_names": {"Eyes": "irisSwap", "Eye Brow": "none"}, "blendshape_index": {"0": 5, "1": -1}, "blendshape_confidence": {"0": 0.984332799911499, "1": 0.3501189649105072}}}
|
| 22 |
+
{"participant_id": "P16", "condition": "w_o_HitL", "text_prompt": "pain", "prompt_category": "zero_shot_emotion", "prediction": {"blendshape_names": {"Eyes": "まばたき", "Eye Brow": "browDownAngry"}, "blendshape_index": {"0": 0, "1": 7}, "blendshape_confidence": {"0": 0.9765784740447998, "1": 0.9544554948806763}}}
|
| 23 |
+
{"participant_id": "P16", "condition": "w_o_HitL", "text_prompt": "bored", "prompt_category": "zero_shot_emotion", "prediction": {"blendshape_names": {"Eyes": "irisSwap", "Eye Brow": "none"}, "blendshape_index": {"0": 5, "1": -1}, "blendshape_confidence": {"0": 0.9830050468444824, "1": 0.29630428552627563}}}
|
| 24 |
+
{"participant_id": "P16", "condition": "w_o_HitL", "text_prompt": "empty", "prompt_category": "zero_shot_emotion", "prediction": {"blendshape_names": {"Eyes": "まばたき", "Eye Brow": "browDownAngry"}, "blendshape_index": {"0": 0, "1": 7}, "blendshape_confidence": {"0": 0.9766973257064819, "1": 0.9696959853172302}}}
|
| 25 |
+
{"participant_id": "P16", "condition": "w_o_HitL", "text_prompt": "resigned", "prompt_category": "zero_shot_emotion", "prediction": {"blendshape_names": {"Eyes": "まばたき", "Eye Brow": "browDownAngry"}, "blendshape_index": {"0": 0, "1": 7}, "blendshape_confidence": {"0": 0.975721001625061, "1": 0.947089672088623}}}
|
| 26 |
+
{"participant_id": "P16", "condition": "w_o_HitL", "text_prompt": "peace", "prompt_category": "zero_shot_emotion", "prediction": {"blendshape_names": {"Eyes": "none", "Eye Brow": "none"}, "blendshape_index": {"0": -1, "1": -1}, "blendshape_confidence": {"0": 0.965904951095581, "1": 0.3756828010082245}}}
|
| 27 |
+
{"participant_id": "P16", "condition": "w_o_HitL", "text_prompt": "rest", "prompt_category": "zero_shot_emotion", "prediction": {"blendshape_names": {"Eyes": "irisSwap", "Eye Brow": "none"}, "blendshape_index": {"0": 5, "1": -1}, "blendshape_confidence": {"0": 0.9824476838111877, "1": 0.31615200638771057}}}
|
| 28 |
+
{"participant_id": "P16", "condition": "w_o_HitL", "text_prompt": "dream", "prompt_category": "zero_shot_emotion", "prediction": {"blendshape_names": {"Eyes": "none", "Eye Brow": "none"}, "blendshape_index": {"0": -1, "1": -1}, "blendshape_confidence": {"0": 0.9665331840515137, "1": 0.38752350211143494}}}
|
results/P16/w_o_Proto_Loss/P16_w_o_Proto_Loss_all_predictions.jsonl
ADDED
|
@@ -0,0 +1,28 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
{"participant_id": "P16", "condition": "w_o_Proto_Loss", "text_prompt": "happy", "prompt_category": "basic_emotion", "prediction": {"blendshape_names": {"Eyes": "none", "Eye Brow": "真面目"}, "blendshape_index": {"0": -1, "1": 0}, "blendshape_confidence": {"0": 0.9195575714111328, "1": 0.9566390514373779}}}
|
| 2 |
+
{"participant_id": "P16", "condition": "w_o_Proto_Loss", "text_prompt": "sad", "prompt_category": "basic_emotion", "prediction": {"blendshape_names": {"Eyes": "irisSwap", "Eye Brow": "browArcDown"}, "blendshape_index": {"0": 5, "1": 6}, "blendshape_confidence": {"0": 0.9952162504196167, "1": 0.8618800640106201}}}
|
| 3 |
+
{"participant_id": "P16", "condition": "w_o_Proto_Loss", "text_prompt": "angry", "prompt_category": "basic_emotion", "prediction": {"blendshape_names": {"Eyes": "まばたき", "Eye Brow": "browDownAngry"}, "blendshape_index": {"0": 0, "1": 7}, "blendshape_confidence": {"0": 0.6777116060256958, "1": 0.6453943252563477}}}
|
| 4 |
+
{"participant_id": "P16", "condition": "w_o_Proto_Loss", "text_prompt": "surprised", "prompt_category": "basic_emotion", "prediction": {"blendshape_names": {"Eyes": "irisShrink", "Eye Brow": "下"}, "blendshape_index": {"0": 6, "1": 5}, "blendshape_confidence": {"0": 0.7684522867202759, "1": 0.6743249893188477}}}
|
| 5 |
+
{"participant_id": "P16", "condition": "w_o_Proto_Loss", "text_prompt": "disgusted", "prompt_category": "basic_emotion", "prediction": {"blendshape_names": {"Eyes": "irisShrink", "Eye Brow": "下"}, "blendshape_index": {"0": 6, "1": 5}, "blendshape_confidence": {"0": 0.7175862789154053, "1": 0.6777569055557251}}}
|
| 6 |
+
{"participant_id": "P16", "condition": "w_o_Proto_Loss", "text_prompt": "fearful", "prompt_category": "basic_emotion", "prediction": {"blendshape_names": {"Eyes": "まばたき", "Eye Brow": "browDownAngry"}, "blendshape_index": {"0": 0, "1": 7}, "blendshape_confidence": {"0": 0.5352120399475098, "1": 0.9596059918403625}}}
|
| 7 |
+
{"participant_id": "P16", "condition": "w_o_Proto_Loss", "text_prompt": "neutral", "prompt_category": "basic_emotion", "prediction": {"blendshape_names": {"Eyes": "none", "Eye Brow": "困る"}, "blendshape_index": {"0": -1, "1": 1}, "blendshape_confidence": {"0": 0.9288369417190552, "1": 0.3153211176395416}}}
|
| 8 |
+
{"participant_id": "P16", "condition": "w_o_Proto_Loss", "text_prompt": "contempt", "prompt_category": "basic_emotion", "prediction": {"blendshape_names": {"Eyes": "まばたき", "Eye Brow": "browDownAngry"}, "blendshape_index": {"0": 0, "1": 7}, "blendshape_confidence": {"0": 0.6675456166267395, "1": 0.9299483895301819}}}
|
| 9 |
+
{"participant_id": "P16", "condition": "w_o_Proto_Loss", "text_prompt": "a little funny", "prompt_category": "nuanced_emotion", "prediction": {"blendshape_names": {"Eyes": "笑い", "Eye Brow": "none"}, "blendshape_index": {"0": 1, "1": -1}, "blendshape_confidence": {"0": 0.9993659853935242, "1": 0.9439524412155151}}}
|
| 10 |
+
{"participant_id": "P16", "condition": "w_o_Proto_Loss", "text_prompt": "a little happy", "prompt_category": "nuanced_emotion", "prediction": {"blendshape_names": {"Eyes": "なごみ", "Eye Brow": "none"}, "blendshape_index": {"0": 2, "1": -1}, "blendshape_confidence": {"0": 0.7111021280288696, "1": 0.24300743639469147}}}
|
| 11 |
+
{"participant_id": "P16", "condition": "w_o_Proto_Loss", "text_prompt": "disappointed", "prompt_category": "nuanced_emotion", "prediction": {"blendshape_names": {"Eyes": "じと目", "Eye Brow": "browArcDown"}, "blendshape_index": {"0": 4, "1": 6}, "blendshape_confidence": {"0": 0.9648445248603821, "1": 0.9141896367073059}}}
|
| 12 |
+
{"participant_id": "P16", "condition": "w_o_Proto_Loss", "text_prompt": "shocked", "prompt_category": "nuanced_emotion", "prediction": {"blendshape_names": {"Eyes": "irisShrink", "Eye Brow": "下"}, "blendshape_index": {"0": 6, "1": 5}, "blendshape_confidence": {"0": 0.7670702934265137, "1": 0.68238765001297}}}
|
| 13 |
+
{"participant_id": "P16", "condition": "w_o_Proto_Loss", "text_prompt": "very angry", "prompt_category": "nuanced_emotion", "prediction": {"blendshape_names": {"Eyes": "irisSwap", "Eye Brow": "browDownAngry"}, "blendshape_index": {"0": 5, "1": 7}, "blendshape_confidence": {"0": 0.8232160210609436, "1": 0.9902864694595337}}}
|
| 14 |
+
{"participant_id": "P16", "condition": "w_o_Proto_Loss", "text_prompt": "very funny", "prompt_category": "nuanced_emotion", "prediction": {"blendshape_names": {"Eyes": "笑い", "Eye Brow": "browArcDown"}, "blendshape_index": {"0": 1, "1": 6}, "blendshape_confidence": {"0": 0.9973451495170593, "1": 0.7104917168617249}}}
|
| 15 |
+
{"participant_id": "P16", "condition": "w_o_Proto_Loss", "text_prompt": "very happy", "prompt_category": "nuanced_emotion", "prediction": {"blendshape_names": {"Eyes": "びっくり", "Eye Brow": "browArcDown"}, "blendshape_index": {"0": 3, "1": 6}, "blendshape_confidence": {"0": 0.9923366904258728, "1": 0.8447840809822083}}}
|
| 16 |
+
{"participant_id": "P16", "condition": "w_o_Proto_Loss", "text_prompt": "very shocked", "prompt_category": "nuanced_emotion", "prediction": {"blendshape_names": {"Eyes": "irisShrink", "Eye Brow": "browArcDown"}, "blendshape_index": {"0": 6, "1": 6}, "blendshape_confidence": {"0": 0.9778264760971069, "1": 0.9932977557182312}}}
|
| 17 |
+
{"participant_id": "P16", "condition": "w_o_Proto_Loss", "text_prompt": "success", "prompt_category": "zero_shot_emotion", "prediction": {"blendshape_names": {"Eyes": "none", "Eye Brow": "真面目"}, "blendshape_index": {"0": -1, "1": 0}, "blendshape_confidence": {"0": 0.9354007244110107, "1": 0.933943510055542}}}
|
| 18 |
+
{"participant_id": "P16", "condition": "w_o_Proto_Loss", "text_prompt": "amazing", "prompt_category": "zero_shot_emotion", "prediction": {"blendshape_names": {"Eyes": "none", "Eye Brow": "真面目"}, "blendshape_index": {"0": -1, "1": 0}, "blendshape_confidence": {"0": 0.9203710556030273, "1": 0.9566336870193481}}}
|
| 19 |
+
{"participant_id": "P16", "condition": "w_o_Proto_Loss", "text_prompt": "awesome", "prompt_category": "zero_shot_emotion", "prediction": {"blendshape_names": {"Eyes": "none", "Eye Brow": "真面目"}, "blendshape_index": {"0": -1, "1": 0}, "blendshape_confidence": {"0": 0.9252161979675293, "1": 0.9491269588470459}}}
|
| 20 |
+
{"participant_id": "P16", "condition": "w_o_Proto_Loss", "text_prompt": "hate", "prompt_category": "zero_shot_emotion", "prediction": {"blendshape_names": {"Eyes": "まばたき", "Eye Brow": "browDownAngry"}, "blendshape_index": {"0": 0, "1": 7}, "blendshape_confidence": {"0": 0.6805888414382935, "1": 0.6035733222961426}}}
|
| 21 |
+
{"participant_id": "P16", "condition": "w_o_Proto_Loss", "text_prompt": "fear", "prompt_category": "zero_shot_emotion", "prediction": {"blendshape_names": {"Eyes": "irisShrink", "Eye Brow": "下"}, "blendshape_index": {"0": 6, "1": 5}, "blendshape_confidence": {"0": 0.736305296421051, "1": 0.6783642768859863}}}
|
| 22 |
+
{"participant_id": "P16", "condition": "w_o_Proto_Loss", "text_prompt": "pain", "prompt_category": "zero_shot_emotion", "prediction": {"blendshape_names": {"Eyes": "まばたき", "Eye Brow": "browDownAngry"}, "blendshape_index": {"0": 0, "1": 7}, "blendshape_confidence": {"0": 0.683143675327301, "1": 0.6321362257003784}}}
|
| 23 |
+
{"participant_id": "P16", "condition": "w_o_Proto_Loss", "text_prompt": "bored", "prompt_category": "zero_shot_emotion", "prediction": {"blendshape_names": {"Eyes": "irisSwap", "Eye Brow": "browArcDown"}, "blendshape_index": {"0": 5, "1": 6}, "blendshape_confidence": {"0": 0.9956795573234558, "1": 0.8425622582435608}}}
|
| 24 |
+
{"participant_id": "P16", "condition": "w_o_Proto_Loss", "text_prompt": "empty", "prompt_category": "zero_shot_emotion", "prediction": {"blendshape_names": {"Eyes": "none", "Eye Brow": "真面目"}, "blendshape_index": {"0": -1, "1": 0}, "blendshape_confidence": {"0": 0.9181281328201294, "1": 0.9338735342025757}}}
|
| 25 |
+
{"participant_id": "P16", "condition": "w_o_Proto_Loss", "text_prompt": "resigned", "prompt_category": "zero_shot_emotion", "prediction": {"blendshape_names": {"Eyes": "まばたき", "Eye Brow": "browDownAngry"}, "blendshape_index": {"0": 0, "1": 7}, "blendshape_confidence": {"0": 0.6549135446548462, "1": 0.56524258852005}}}
|
| 26 |
+
{"participant_id": "P16", "condition": "w_o_Proto_Loss", "text_prompt": "peace", "prompt_category": "zero_shot_emotion", "prediction": {"blendshape_names": {"Eyes": "none", "Eye Brow": "真面目"}, "blendshape_index": {"0": -1, "1": 0}, "blendshape_confidence": {"0": 0.9213952422142029, "1": 0.9570997357368469}}}
|
| 27 |
+
{"participant_id": "P16", "condition": "w_o_Proto_Loss", "text_prompt": "rest", "prompt_category": "zero_shot_emotion", "prediction": {"blendshape_names": {"Eyes": "none", "Eye Brow": "真面目"}, "blendshape_index": {"0": -1, "1": 0}, "blendshape_confidence": {"0": 0.9274438619613647, "1": 0.9359365105628967}}}
|
| 28 |
+
{"participant_id": "P16", "condition": "w_o_Proto_Loss", "text_prompt": "dream", "prompt_category": "zero_shot_emotion", "prediction": {"blendshape_names": {"Eyes": "none", "Eye Brow": "真面目"}, "blendshape_index": {"0": -1, "1": 0}, "blendshape_confidence": {"0": 0.9186090230941772, "1": 0.956093966960907}}}
|
results/P16/w_o_Tuning/P16_w_o_Tuning_all_predictions.jsonl
ADDED
|
@@ -0,0 +1,28 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
{"participant_id": "P16", "condition": "w_o_Tuning", "text_prompt": "happy", "prompt_category": "basic_emotion", "prediction": {"blendshape_names": {"Eyes": "irisSwap", "Eye Brow": "下"}, "blendshape_index": {"0": 5, "1": 5}, "blendshape_confidence": {"0": 0.9481315612792969, "1": 0.3444276452064514}}}
|
| 2 |
+
{"participant_id": "P16", "condition": "w_o_Tuning", "text_prompt": "sad", "prompt_category": "basic_emotion", "prediction": {"blendshape_names": {"Eyes": "none", "Eye Brow": "下"}, "blendshape_index": {"0": -1, "1": 5}, "blendshape_confidence": {"0": 0.5000121593475342, "1": 0.17329074442386627}}}
|
| 3 |
+
{"participant_id": "P16", "condition": "w_o_Tuning", "text_prompt": "angry", "prompt_category": "basic_emotion", "prediction": {"blendshape_names": {"Eyes": "じと目", "Eye Brow": "怒り"}, "blendshape_index": {"0": 4, "1": 2}, "blendshape_confidence": {"0": 0.9552088975906372, "1": 0.18724988400936127}}}
|
| 4 |
+
{"participant_id": "P16", "condition": "w_o_Tuning", "text_prompt": "surprised", "prompt_category": "basic_emotion", "prediction": {"blendshape_names": {"Eyes": "none", "Eye Brow": "困る"}, "blendshape_index": {"0": -1, "1": 1}, "blendshape_confidence": {"0": 0.3981679379940033, "1": 0.15328086912631989}}}
|
| 5 |
+
{"participant_id": "P16", "condition": "w_o_Tuning", "text_prompt": "disgusted", "prompt_category": "basic_emotion", "prediction": {"blendshape_names": {"Eyes": "irisShrink", "Eye Brow": "browDownAngry"}, "blendshape_index": {"0": 6, "1": 7}, "blendshape_confidence": {"0": 0.7845066785812378, "1": 0.9812286496162415}}}
|
| 6 |
+
{"participant_id": "P16", "condition": "w_o_Tuning", "text_prompt": "fearful", "prompt_category": "basic_emotion", "prediction": {"blendshape_names": {"Eyes": "なごみ", "Eye Brow": "にこり"}, "blendshape_index": {"0": 2, "1": 3}, "blendshape_confidence": {"0": 0.9942188262939453, "1": 0.6948028802871704}}}
|
| 7 |
+
{"participant_id": "P16", "condition": "w_o_Tuning", "text_prompt": "neutral", "prompt_category": "basic_emotion", "prediction": {"blendshape_names": {"Eyes": "なごみ", "Eye Brow": "にこり"}, "blendshape_index": {"0": 2, "1": 3}, "blendshape_confidence": {"0": 0.9778452515602112, "1": 0.578363835811615}}}
|
| 8 |
+
{"participant_id": "P16", "condition": "w_o_Tuning", "text_prompt": "contempt", "prompt_category": "basic_emotion", "prediction": {"blendshape_names": {"Eyes": "なごみ", "Eye Brow": "にこり"}, "blendshape_index": {"0": 2, "1": 3}, "blendshape_confidence": {"0": 0.4883831739425659, "1": 0.4669913053512573}}}
|
| 9 |
+
{"participant_id": "P16", "condition": "w_o_Tuning", "text_prompt": "a little funny", "prompt_category": "nuanced_emotion", "prediction": {"blendshape_names": {"Eyes": "irisSwap", "Eye Brow": "下"}, "blendshape_index": {"0": 5, "1": 5}, "blendshape_confidence": {"0": 0.9328472018241882, "1": 0.26155993342399597}}}
|
| 10 |
+
{"participant_id": "P16", "condition": "w_o_Tuning", "text_prompt": "a little happy", "prompt_category": "nuanced_emotion", "prediction": {"blendshape_names": {"Eyes": "じと目", "Eye Brow": "怒り"}, "blendshape_index": {"0": 4, "1": 2}, "blendshape_confidence": {"0": 0.6503470540046692, "1": 0.16144150495529175}}}
|
| 11 |
+
{"participant_id": "P16", "condition": "w_o_Tuning", "text_prompt": "disappointed", "prompt_category": "nuanced_emotion", "prediction": {"blendshape_names": {"Eyes": "none", "Eye Brow": "にこり"}, "blendshape_index": {"0": -1, "1": 3}, "blendshape_confidence": {"0": 0.5511922240257263, "1": 0.5314074158668518}}}
|
| 12 |
+
{"participant_id": "P16", "condition": "w_o_Tuning", "text_prompt": "shocked", "prompt_category": "nuanced_emotion", "prediction": {"blendshape_names": {"Eyes": "none", "Eye Brow": "真面目"}, "blendshape_index": {"0": -1, "1": 0}, "blendshape_confidence": {"0": 0.5949457883834839, "1": 0.15164656937122345}}}
|
| 13 |
+
{"participant_id": "P16", "condition": "w_o_Tuning", "text_prompt": "very angry", "prompt_category": "nuanced_emotion", "prediction": {"blendshape_names": {"Eyes": "irisSwap", "Eye Brow": "browDownAngry"}, "blendshape_index": {"0": 5, "1": 7}, "blendshape_confidence": {"0": 0.46064361929893494, "1": 0.9522056579589844}}}
|
| 14 |
+
{"participant_id": "P16", "condition": "w_o_Tuning", "text_prompt": "very funny", "prompt_category": "nuanced_emotion", "prediction": {"blendshape_names": {"Eyes": "irisShrink", "Eye Brow": "上"}, "blendshape_index": {"0": 6, "1": 4}, "blendshape_confidence": {"0": 0.6141073107719421, "1": 0.5987728834152222}}}
|
| 15 |
+
{"participant_id": "P16", "condition": "w_o_Tuning", "text_prompt": "very happy", "prompt_category": "nuanced_emotion", "prediction": {"blendshape_names": {"Eyes": "irisShrink", "Eye Brow": "browDownAngry"}, "blendshape_index": {"0": 6, "1": 7}, "blendshape_confidence": {"0": 0.7866084575653076, "1": 0.8924419283866882}}}
|
| 16 |
+
{"participant_id": "P16", "condition": "w_o_Tuning", "text_prompt": "very shocked", "prompt_category": "nuanced_emotion", "prediction": {"blendshape_names": {"Eyes": "irisSwap", "Eye Brow": "にこり"}, "blendshape_index": {"0": 5, "1": 3}, "blendshape_confidence": {"0": 0.582662045955658, "1": 0.24059106409549713}}}
|
| 17 |
+
{"participant_id": "P16", "condition": "w_o_Tuning", "text_prompt": "success", "prompt_category": "zero_shot_emotion", "prediction": {"blendshape_names": {"Eyes": "irisSwap", "Eye Brow": "にこり"}, "blendshape_index": {"0": 5, "1": 3}, "blendshape_confidence": {"0": 0.9540913701057434, "1": 0.3064473271369934}}}
|
| 18 |
+
{"participant_id": "P16", "condition": "w_o_Tuning", "text_prompt": "amazing", "prompt_category": "zero_shot_emotion", "prediction": {"blendshape_names": {"Eyes": "irisShrink", "Eye Brow": "browArcDown"}, "blendshape_index": {"0": 6, "1": 6}, "blendshape_confidence": {"0": 0.9611456394195557, "1": 0.4031837582588196}}}
|
| 19 |
+
{"participant_id": "P16", "condition": "w_o_Tuning", "text_prompt": "awesome", "prompt_category": "zero_shot_emotion", "prediction": {"blendshape_names": {"Eyes": "none", "Eye Brow": "browDownAngry"}, "blendshape_index": {"0": -1, "1": 7}, "blendshape_confidence": {"0": 0.6316651105880737, "1": 0.4412817358970642}}}
|
| 20 |
+
{"participant_id": "P16", "condition": "w_o_Tuning", "text_prompt": "hate", "prompt_category": "zero_shot_emotion", "prediction": {"blendshape_names": {"Eyes": "irisSwap", "Eye Brow": "上"}, "blendshape_index": {"0": 5, "1": 4}, "blendshape_confidence": {"0": 0.9551994204521179, "1": 0.44521796703338623}}}
|
| 21 |
+
{"participant_id": "P16", "condition": "w_o_Tuning", "text_prompt": "fear", "prompt_category": "zero_shot_emotion", "prediction": {"blendshape_names": {"Eyes": "なごみ", "Eye Brow": "にこり"}, "blendshape_index": {"0": 2, "1": 3}, "blendshape_confidence": {"0": 0.5650838017463684, "1": 0.5936198234558105}}}
|
| 22 |
+
{"participant_id": "P16", "condition": "w_o_Tuning", "text_prompt": "pain", "prompt_category": "zero_shot_emotion", "prediction": {"blendshape_names": {"Eyes": "なごみ", "Eye Brow": "にこり"}, "blendshape_index": {"0": 2, "1": 3}, "blendshape_confidence": {"0": 0.9921459555625916, "1": 0.6525947451591492}}}
|
| 23 |
+
{"participant_id": "P16", "condition": "w_o_Tuning", "text_prompt": "bored", "prompt_category": "zero_shot_emotion", "prediction": {"blendshape_names": {"Eyes": "none", "Eye Brow": "にこり"}, "blendshape_index": {"0": -1, "1": 3}, "blendshape_confidence": {"0": 0.6731842756271362, "1": 0.3886412978172302}}}
|
| 24 |
+
{"participant_id": "P16", "condition": "w_o_Tuning", "text_prompt": "empty", "prompt_category": "zero_shot_emotion", "prediction": {"blendshape_names": {"Eyes": "irisSwap", "Eye Brow": "browDownAngry"}, "blendshape_index": {"0": 5, "1": 7}, "blendshape_confidence": {"0": 0.6628652215003967, "1": 0.9546783566474915}}}
|
| 25 |
+
{"participant_id": "P16", "condition": "w_o_Tuning", "text_prompt": "resigned", "prompt_category": "zero_shot_emotion", "prediction": {"blendshape_names": {"Eyes": "irisSwap", "Eye Brow": "にこり"}, "blendshape_index": {"0": 5, "1": 3}, "blendshape_confidence": {"0": 0.8161370158195496, "1": 0.22297778725624084}}}
|
| 26 |
+
{"participant_id": "P16", "condition": "w_o_Tuning", "text_prompt": "peace", "prompt_category": "zero_shot_emotion", "prediction": {"blendshape_names": {"Eyes": "irisShrink", "Eye Brow": "none"}, "blendshape_index": {"0": 6, "1": -1}, "blendshape_confidence": {"0": 0.9511870741844177, "1": 0.2891601324081421}}}
|
| 27 |
+
{"participant_id": "P16", "condition": "w_o_Tuning", "text_prompt": "rest", "prompt_category": "zero_shot_emotion", "prediction": {"blendshape_names": {"Eyes": "なごみ", "Eye Brow": "にこり"}, "blendshape_index": {"0": 2, "1": 3}, "blendshape_confidence": {"0": 0.9888344407081604, "1": 0.6265195608139038}}}
|
| 28 |
+
{"participant_id": "P16", "condition": "w_o_Tuning", "text_prompt": "dream", "prompt_category": "zero_shot_emotion", "prediction": {"blendshape_names": {"Eyes": "なごみ", "Eye Brow": "真面目"}, "blendshape_index": {"0": 2, "1": 0}, "blendshape_confidence": {"0": 0.4330196976661682, "1": 0.23035599291324615}}}
|