Spaces:
Sleeping
Sleeping
refactor: classes
Browse files
app.py
CHANGED
|
@@ -37,6 +37,21 @@ import ssl
|
|
| 37 |
# Fix SSL error for model download (macOS specific)
|
| 38 |
ssl._create_default_https_context = ssl._create_unverified_context
|
| 39 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 40 |
class ImageSimilarityLeaderboard:
|
| 41 |
def __init__(self, reference_image_path="label2.jpg", data_file="leaderboard.json"):
|
| 42 |
self.reference_image_path = reference_image_path
|
|
@@ -431,93 +446,43 @@ class ImageSimilarityLeaderboard:
|
|
| 431 |
self.leaderboard_data = []
|
| 432 |
self.save_leaderboard()
|
| 433 |
return "β
리λ보λκ° μ΄κΈ°νλμμ΅λλ€.", pd.DataFrame(columns=['μμ', 'μ¬μ©μλͺ
', 'μ μ', 'λ μ§'])
|
| 434 |
-
|
| 435 |
|
| 436 |
-
|
| 437 |
-
|
| 438 |
-
|
| 439 |
-
|
| 440 |
-
|
| 441 |
-
|
| 442 |
-
|
| 443 |
-
|
| 444 |
-
|
| 445 |
-
def
|
| 446 |
-
"""
|
| 447 |
-
return leaderboards[
|
| 448 |
-
|
| 449 |
-
def
|
| 450 |
-
"""
|
| 451 |
-
return leaderboards[
|
| 452 |
-
|
| 453 |
-
def
|
| 454 |
-
"""
|
| 455 |
-
|
| 456 |
-
|
| 457 |
-
|
| 458 |
-
"""BCEλ° μ¬μ©μ μ΄λ―Έμ§ μ²λ¦¬ ν¨μ"""
|
| 459 |
-
return leaderboards['bce'].process_image(image, username)
|
| 460 |
-
|
| 461 |
-
def get_current_leaderboard_respect():
|
| 462 |
-
"""Respectλ° νμ¬ λ¦¬λ보λ λ°ν"""
|
| 463 |
-
return leaderboards['respect'].get_leaderboard_df()
|
| 464 |
-
|
| 465 |
-
def get_current_leaderboard_challenge():
|
| 466 |
-
"""Challengeλ° νμ¬ λ¦¬λ보λ λ°ν"""
|
| 467 |
-
return leaderboards['challenge'].get_leaderboard_df()
|
| 468 |
-
|
| 469 |
-
def get_current_leaderboard_originality():
|
| 470 |
-
"""Originalityλ° νμ¬ λ¦¬λ보λ λ°ν"""
|
| 471 |
-
return leaderboards['originality'].get_leaderboard_df()
|
| 472 |
-
|
| 473 |
-
def get_current_leaderboard_bce():
|
| 474 |
-
"""BCEλ° νμ¬ λ¦¬λ보λ λ°ν"""
|
| 475 |
-
return leaderboards['bce'].get_leaderboard_df()
|
| 476 |
-
|
| 477 |
-
def check_and_update_leaderboard_respect():
|
| 478 |
-
"""Respectλ° λ¦¬λ보λ μ
λ°μ΄νΈ νμΈ λ° λ°ν"""
|
| 479 |
-
leaderboards['respect'].check_for_updates()
|
| 480 |
-
return leaderboards['respect'].get_leaderboard_df()
|
| 481 |
-
|
| 482 |
-
def check_and_update_leaderboard_challenge():
|
| 483 |
-
"""Challengeλ° λ¦¬λ보λ μ
λ°μ΄νΈ νμΈ λ° λ°ν"""
|
| 484 |
-
leaderboards['challenge'].check_for_updates()
|
| 485 |
-
return leaderboards['challenge'].get_leaderboard_df()
|
| 486 |
-
|
| 487 |
-
def check_and_update_leaderboard_originality():
|
| 488 |
-
"""Originalityλ° λ¦¬λ보λ μ
λ°μ΄νΈ νμΈ λ° λ°ν"""
|
| 489 |
-
leaderboards['originality'].check_for_updates()
|
| 490 |
-
return leaderboards['originality'].get_leaderboard_df()
|
| 491 |
-
|
| 492 |
-
def check_and_update_leaderboard_bce():
|
| 493 |
-
"""BCEλ° λ¦¬λ보λ μ
λ°μ΄νΈ νμΈ λ° λ°ν"""
|
| 494 |
-
leaderboards['bce'].check_for_updates()
|
| 495 |
-
return leaderboards['bce'].get_leaderboard_df()
|
| 496 |
-
|
| 497 |
-
def process_user_image_practice(image, username):
|
| 498 |
-
"""μ°μ΅ ν μ¬μ©μ μ΄λ―Έμ§ μ²λ¦¬ ν¨μ"""
|
| 499 |
-
return leaderboards['practice'].process_image(image, username)
|
| 500 |
-
|
| 501 |
-
def get_current_leaderboard_practice():
|
| 502 |
-
"""μ°μ΅ ν νμ¬ λ¦¬λ보λ λ°ν"""
|
| 503 |
-
return leaderboards['practice'].get_leaderboard_df()
|
| 504 |
-
|
| 505 |
-
def check_and_update_leaderboard_practice():
|
| 506 |
-
"""μ°μ΅ ν 리λ보λ μ
λ°μ΄νΈ νμΈ λ° λ°ν"""
|
| 507 |
-
leaderboards['practice'].check_for_updates()
|
| 508 |
-
return leaderboards['practice'].get_leaderboard_df()
|
| 509 |
|
| 510 |
def create_interface():
|
| 511 |
-
"""Gradio μΈν°νμ΄μ€ μμ±"""
|
| 512 |
with gr.Blocks(title="λΉμ·ν μ΄λ―Έμ§λ₯Ό λ§λ€μ΄μ£ΌμΈμ!", theme=gr.themes.Soft()) as demo:
|
| 513 |
gr.Markdown("""
|
| 514 |
# π λ‘―λ° λΉμ μ€νλμ€ λ¦¬λ보λ
|
| 515 |
""")
|
| 516 |
|
|
|
|
|
|
|
| 517 |
|
| 518 |
# ν μμ±
|
| 519 |
with gr.Tabs():
|
| 520 |
-
# μ°μ΅ ν (
|
| 521 |
with gr.Tab("π μ°μ΅"):
|
| 522 |
gr.Markdown("### π‘ μ°μ΅μ© ν (λ©μΈ)")
|
| 523 |
gr.Markdown("μ
λ‘λ λ° μ΄λ―Έμ§ μ μ¬λλ₯Ό ν
μ€νΈν΄λ³Ό μ μλ μ°μ΅ 곡κ°μ
λλ€.")
|
|
@@ -553,204 +518,75 @@ def create_interface():
|
|
| 553 |
interactive=False
|
| 554 |
)
|
| 555 |
|
|
|
|
|
|
|
| 556 |
# μ°μ΅ ν μ΄λ²€νΈ νΈλ€λ¬
|
| 557 |
submit_btn_practice.click(
|
| 558 |
-
fn=
|
| 559 |
inputs=[image_input_practice, username_input_practice],
|
| 560 |
outputs=[result_output_practice, leaderboard_output_practice]
|
| 561 |
)
|
| 562 |
|
| 563 |
-
#
|
| 564 |
-
|
| 565 |
-
|
| 566 |
-
|
| 567 |
-
|
| 568 |
-
|
| 569 |
-
|
| 570 |
-
|
| 571 |
-
|
| 572 |
-
|
| 573 |
-
|
| 574 |
-
|
| 575 |
-
|
| 576 |
-
|
| 577 |
-
|
| 578 |
-
|
| 579 |
-
|
| 580 |
-
|
| 581 |
-
|
| 582 |
-
|
| 583 |
-
|
| 584 |
-
|
| 585 |
-
|
| 586 |
-
|
| 587 |
-
|
| 588 |
-
|
| 589 |
-
|
| 590 |
-
|
| 591 |
-
|
| 592 |
-
|
| 593 |
-
|
| 594 |
-
|
| 595 |
-
|
| 596 |
-
|
| 597 |
-
|
| 598 |
-
|
| 599 |
-
|
| 600 |
-
|
| 601 |
-
|
| 602 |
-
|
| 603 |
-
|
| 604 |
-
|
| 605 |
-
|
| 606 |
-
|
| 607 |
-
|
| 608 |
-
|
| 609 |
-
|
| 610 |
-
|
| 611 |
-
)
|
| 612 |
-
username_input_challenge = gr.Textbox(
|
| 613 |
-
label="μ¬μ©μ μ΄λ¦",
|
| 614 |
-
placeholder="μ΄λ¦μ μ
λ ₯νμΈμ",
|
| 615 |
-
max_lines=1
|
| 616 |
-
)
|
| 617 |
-
submit_btn_challenge = gr.Button("π μ μ κ³μ° λ° λ±λ‘", variant="primary", size="lg")
|
| 618 |
-
|
| 619 |
-
with gr.Column(scale=1):
|
| 620 |
-
gr.Markdown("### π κ²°κ³Ό (Challengeλ°)")
|
| 621 |
-
result_output_challenge = gr.Textbox(
|
| 622 |
-
label="κ³μ° κ²°κ³Ό",
|
| 623 |
-
lines=10,
|
| 624 |
-
interactive=False
|
| 625 |
-
)
|
| 626 |
|
| 627 |
-
gr.Markdown("### π
Challengeλ° λ¦¬λ보λ")
|
| 628 |
-
leaderboard_output_challenge = gr.Dataframe(
|
| 629 |
-
headers=["μμ", "μ¬μ©μλͺ
", "μ μ", "λ μ§"],
|
| 630 |
-
datatype=["number", "str", "number", "str"],
|
| 631 |
-
interactive=False
|
| 632 |
-
)
|
| 633 |
-
|
| 634 |
-
# Challengeλ° μ΄λ²€νΈ νΈλ€λ¬
|
| 635 |
-
submit_btn_challenge.click(
|
| 636 |
-
fn=process_user_image_challenge,
|
| 637 |
-
inputs=[image_input_challenge, username_input_challenge],
|
| 638 |
-
outputs=[result_output_challenge, leaderboard_output_challenge]
|
| 639 |
-
)
|
| 640 |
-
|
| 641 |
-
# Originalityλ° ν
|
| 642 |
-
with gr.Tab("π¨ Originalityλ°"):
|
| 643 |
-
with gr.Row():
|
| 644 |
-
with gr.Column(scale=1):
|
| 645 |
-
gr.Markdown("### π€ μ΄λ―Έμ§ μ
λ‘λ (Originalityλ°)")
|
| 646 |
-
image_input_originality = gr.Image(
|
| 647 |
-
label="λΉκ΅ν μ΄λ―Έμ§λ₯Ό μ
λ‘λνμΈμ",
|
| 648 |
-
type="pil",
|
| 649 |
-
height=300
|
| 650 |
-
)
|
| 651 |
-
username_input_originality = gr.Textbox(
|
| 652 |
-
label="μ¬μ©μ μ΄λ¦",
|
| 653 |
-
placeholder="μ΄λ¦μ μ
λ ₯νμΈμ",
|
| 654 |
-
max_lines=1
|
| 655 |
-
)
|
| 656 |
-
submit_btn_originality = gr.Button("π μ μ κ³μ° λ° λ±λ‘", variant="primary", size="lg")
|
| 657 |
-
|
| 658 |
-
with gr.Column(scale=1):
|
| 659 |
-
gr.Markdown("### π κ²°κ³Ό (Originalityλ°)")
|
| 660 |
-
result_output_originality = gr.Textbox(
|
| 661 |
-
label="κ³μ° κ²°κ³Ό",
|
| 662 |
-
lines=10,
|
| 663 |
-
interactive=False
|
| 664 |
-
)
|
| 665 |
-
|
| 666 |
-
gr.Markdown("### π
Originalityλ° λ¦¬λ보λ")
|
| 667 |
-
leaderboard_output_originality = gr.Dataframe(
|
| 668 |
-
headers=["μμ", "μ¬μ©μλͺ
", "μ μ", "λ μ§"],
|
| 669 |
-
datatype=["number", "str", "number", "str"],
|
| 670 |
-
interactive=False
|
| 671 |
-
)
|
| 672 |
-
|
| 673 |
-
# Originalityλ° μ΄λ²€νΈ νΈλ€λ¬
|
| 674 |
-
submit_btn_originality.click(
|
| 675 |
-
fn=process_user_image_originality,
|
| 676 |
-
inputs=[image_input_originality, username_input_originality],
|
| 677 |
-
outputs=[result_output_originality, leaderboard_output_originality]
|
| 678 |
-
)
|
| 679 |
-
|
| 680 |
-
# BCEλ° ν
|
| 681 |
-
with gr.Tab("π₯ BCEλ°"):
|
| 682 |
-
with gr.Row():
|
| 683 |
-
with gr.Column(scale=1):
|
| 684 |
-
gr.Markdown("### π€ μ΄λ―Έμ§ μ
λ‘λ (BCEλ°)")
|
| 685 |
-
image_input_bce = gr.Image(
|
| 686 |
-
label="λΉκ΅ν μ΄λ―Έμ§λ₯Ό μ
λ‘λνμΈμ",
|
| 687 |
-
type="pil",
|
| 688 |
-
height=300
|
| 689 |
-
)
|
| 690 |
-
username_input_bce = gr.Textbox(
|
| 691 |
-
label="μ¬μ©μ μ΄λ¦",
|
| 692 |
-
placeholder="μ΄λ¦μ μ
λ ₯νμΈμ",
|
| 693 |
-
max_lines=1
|
| 694 |
-
)
|
| 695 |
-
submit_btn_bce = gr.Button("π μ μ κ³μ° λ° λ±λ‘", variant="primary", size="lg")
|
| 696 |
-
|
| 697 |
-
with gr.Column(scale=1):
|
| 698 |
-
gr.Markdown("### π κ²°κ³Ό (BCEλ°)")
|
| 699 |
-
result_output_bce = gr.Textbox(
|
| 700 |
-
label="κ³μ° κ²°κ³Ό",
|
| 701 |
-
lines=10,
|
| 702 |
-
interactive=False
|
| 703 |
-
)
|
| 704 |
-
|
| 705 |
-
gr.Markdown("### π
BCEλ° λ¦¬λ보λ")
|
| 706 |
-
leaderboard_output_bce = gr.Dataframe(
|
| 707 |
-
headers=["μμ", "μ¬μ©μλͺ
", "μ μ", "λ μ§"],
|
| 708 |
-
datatype=["number", "str", "number", "str"],
|
| 709 |
-
interactive=False
|
| 710 |
-
)
|
| 711 |
-
|
| 712 |
-
# BCEλ° μ΄λ²€νΈ νΈλ€λ¬
|
| 713 |
-
submit_btn_bce.click(
|
| 714 |
-
fn=process_user_image_bce,
|
| 715 |
-
inputs=[image_input_bce, username_input_bce],
|
| 716 |
-
outputs=[result_output_bce, leaderboard_output_bce]
|
| 717 |
-
)
|
| 718 |
-
|
| 719 |
# νμ΄μ§ λ‘λ μ λͺ¨λ 리λ보λ νμ
|
| 720 |
demo.load(
|
| 721 |
-
fn=lambda: (
|
| 722 |
-
|
| 723 |
-
get_current_leaderboard_respect(),
|
| 724 |
-
get_current_leaderboard_challenge(),
|
| 725 |
-
# get_current_leaderboard_originality(),
|
| 726 |
-
# get_current_leaderboard_bce()
|
| 727 |
-
),
|
| 728 |
-
outputs=[
|
| 729 |
-
leaderboard_output_practice,
|
| 730 |
-
leaderboard_output_respect,
|
| 731 |
-
leaderboard_output_challenge,
|
| 732 |
-
# leaderboard_output_originality,
|
| 733 |
-
# leaderboard_output_bce,
|
| 734 |
-
]
|
| 735 |
)
|
| 736 |
|
| 737 |
# μ€μκ° μ
λ°μ΄νΈ (10μ΄λ§λ€ - λͺ¨λ ν μ
λ°μ΄νΈ)
|
| 738 |
timer = gr.Timer(value=10)
|
| 739 |
timer.tick(
|
| 740 |
-
fn=lambda: (
|
| 741 |
-
|
| 742 |
-
get_current_leaderboard_respect(),
|
| 743 |
-
get_current_leaderboard_challenge(),
|
| 744 |
-
# get_current_leaderboard_originality(),
|
| 745 |
-
# get_current_leaderboard_bce()
|
| 746 |
-
),
|
| 747 |
-
outputs=[
|
| 748 |
-
leaderboard_output_practice,
|
| 749 |
-
leaderboard_output_respect,
|
| 750 |
-
leaderboard_output_challenge,
|
| 751 |
-
# leaderboard_output_originality,
|
| 752 |
-
# leaderboard_output_bce,
|
| 753 |
-
]
|
| 754 |
)
|
| 755 |
|
| 756 |
return demo
|
|
@@ -760,11 +596,10 @@ def main():
|
|
| 760 |
print("π μ΄λ―Έμ§ μ μ¬λ 리λ보λ μμ€ν
μ μμν©λλ€...")
|
| 761 |
print("π μ°Έμ‘° μ΄λ―Έμ§: label2.jpg")
|
| 762 |
print("πΎ λ°μ΄ν° νμΌ:")
|
| 763 |
-
|
| 764 |
-
|
| 765 |
-
|
| 766 |
-
print(" β’
|
| 767 |
-
print(" β’ μ°μ΅: practice.json")
|
| 768 |
|
| 769 |
# κ° λ°λ³ λ©λͺ¨λ¦¬ μ¬μ©λ 체ν¬
|
| 770 |
for class_name, lb in leaderboards.items():
|
|
@@ -784,7 +619,7 @@ def main():
|
|
| 784 |
print(" β’ λμμ± μ μ΄ νμ±ν")
|
| 785 |
print(" β’ λ©λͺ¨λ¦¬ μ 리 μλν")
|
| 786 |
print(" β’ μ€μκ° μ
λ°μ΄νΈ: 10μ΄ κ°κ²©")
|
| 787 |
-
print(" β’
|
| 788 |
|
| 789 |
# μΈλΆ 곡μ μ°μ μλ
|
| 790 |
print("\nπ μΈλΆ μ κ·Ό μλ μ€...")
|
|
|
|
| 37 |
# Fix SSL error for model download (macOS specific)
|
| 38 |
ssl._create_default_https_context = ssl._create_unverified_context
|
| 39 |
|
| 40 |
+
# ========== μ¬κΈ°λ§ μμ νλ©΄ νμ΄ λμ μΌλ‘ λ°μλ©λλ€ ==========
|
| 41 |
+
# μμ: ["Responseλ°", "Challengeλ°"] β μ°μ΅ ν + 2κ° λ° = μ΄ 3κ° ν
|
| 42 |
+
# μμ: ["206νΈ", "207νΈ", "305νΈ"] β μ°μ΅ ν + 3κ° λ° = μ΄ 4κ° ν
|
| 43 |
+
CLASSES = ["Respectλ°", "Challengeλ°", "Originalityλ°", "BCEλ°"]
|
| 44 |
+
# ============================================================
|
| 45 |
+
|
| 46 |
+
# ν μμ΄μ½ μλ λ°°μ
|
| 47 |
+
_TAB_ICONS = ["π―", "β‘", "π¨", "π₯", "π", "π", "π", "π‘", "π
", "β¨"]
|
| 48 |
+
|
| 49 |
+
def _class_key(name):
|
| 50 |
+
"""λ° μ΄λ¦μ json νμΌλͺ
/λμ
λ리 ν€λ‘ λ³ν (μ: 'Respectλ°' β 'respect')"""
|
| 51 |
+
# νκΈ 'λ°' μ κ±°, 곡백βμΈλμ€μ½μ΄, μλ¬Έμ
|
| 52 |
+
return name.replace("λ°", "").replace("νΈ", "").strip().lower().replace(" ", "_")
|
| 53 |
+
|
| 54 |
+
|
| 55 |
class ImageSimilarityLeaderboard:
|
| 56 |
def __init__(self, reference_image_path="label2.jpg", data_file="leaderboard.json"):
|
| 57 |
self.reference_image_path = reference_image_path
|
|
|
|
| 446 |
self.leaderboard_data = []
|
| 447 |
self.save_leaderboard()
|
| 448 |
return "β
리λ보λκ° μ΄κΈ°νλμμ΅λλ€.", pd.DataFrame(columns=['μμ', 'μ¬μ©μλͺ
', 'μ μ', 'λ μ§'])
|
|
|
|
| 449 |
|
| 450 |
+
|
| 451 |
+
# ββ μ μ 리λ보λ μΈμ€ν΄μ€ (CLASSES κΈ°λ° λμ μμ± + μ°μ΅) ββ
|
| 452 |
+
leaderboards = {}
|
| 453 |
+
for _cls in CLASSES:
|
| 454 |
+
leaderboards[_class_key(_cls)] = ImageSimilarityLeaderboard("label2.jpg", f"{_class_key(_cls)}.json")
|
| 455 |
+
leaderboards['practice'] = ImageSimilarityLeaderboard("label2.jpg", "practice.json")
|
| 456 |
+
|
| 457 |
+
|
| 458 |
+
# ββ λ²μ© μ²λ¦¬ ν¨μ ββ
|
| 459 |
+
def process_user_image(class_key, image, username):
|
| 460 |
+
"""μ΄λ―Έμ§ μ²λ¦¬ (λͺ¨λ λ° κ³΅μ©)"""
|
| 461 |
+
return leaderboards[class_key].process_image(image, username)
|
| 462 |
+
|
| 463 |
+
def get_current_leaderboard(class_key):
|
| 464 |
+
"""νμ¬ λ¦¬λ보λ λ°ν (λͺ¨λ λ° κ³΅μ©)"""
|
| 465 |
+
return leaderboards[class_key].get_leaderboard_df()
|
| 466 |
+
|
| 467 |
+
def check_and_update_leaderboard(class_key):
|
| 468 |
+
"""리λ보λ μ
λ°μ΄νΈ νμΈ λ° λ°ν (λͺ¨λ λ° κ³΅μ©)"""
|
| 469 |
+
leaderboards[class_key].check_for_updates()
|
| 470 |
+
return leaderboards[class_key].get_leaderboard_df()
|
| 471 |
+
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 472 |
|
| 473 |
def create_interface():
|
| 474 |
+
"""Gradio μΈν°νμ΄μ€ μμ± (CLASSES κΈ°λ° λμ ν)"""
|
| 475 |
with gr.Blocks(title="λΉμ·ν μ΄λ―Έμ§λ₯Ό λ§λ€μ΄μ£ΌμΈμ!", theme=gr.themes.Soft()) as demo:
|
| 476 |
gr.Markdown("""
|
| 477 |
# π λ‘―λ° λΉμ μ€νλμ€ λ¦¬λ보λ
|
| 478 |
""")
|
| 479 |
|
| 480 |
+
# λͺ¨λ 리λ보λ μΆλ ₯ μμ ―μ λͺ¨μλ λμ
λ리
|
| 481 |
+
leaderboard_outputs = {}
|
| 482 |
|
| 483 |
# ν μμ±
|
| 484 |
with gr.Tabs():
|
| 485 |
+
# ββ μ°μ΅ ν (νμ 첫 λ²μ§Έ) ββ
|
| 486 |
with gr.Tab("π μ°μ΅"):
|
| 487 |
gr.Markdown("### π‘ μ°μ΅μ© ν (λ©μΈ)")
|
| 488 |
gr.Markdown("μ
λ‘λ λ° μ΄λ―Έμ§ μ μ¬λλ₯Ό ν
μ€νΈν΄λ³Ό μ μλ μ°μ΅ 곡κ°μ
λλ€.")
|
|
|
|
| 518 |
interactive=False
|
| 519 |
)
|
| 520 |
|
| 521 |
+
leaderboard_outputs['practice'] = leaderboard_output_practice
|
| 522 |
+
|
| 523 |
# μ°μ΅ ν μ΄λ²€νΈ νΈλ€λ¬
|
| 524 |
submit_btn_practice.click(
|
| 525 |
+
fn=lambda img, name: process_user_image('practice', img, name),
|
| 526 |
inputs=[image_input_practice, username_input_practice],
|
| 527 |
outputs=[result_output_practice, leaderboard_output_practice]
|
| 528 |
)
|
| 529 |
|
| 530 |
+
# ββ λ°λ³ ν (CLASSES κΈ°λ° λμ μμ±) ββ
|
| 531 |
+
for idx, class_name in enumerate(CLASSES):
|
| 532 |
+
icon = _TAB_ICONS[idx % len(_TAB_ICONS)]
|
| 533 |
+
key = _class_key(class_name)
|
| 534 |
+
|
| 535 |
+
with gr.Tab(f"{icon} {class_name}"):
|
| 536 |
+
with gr.Row():
|
| 537 |
+
with gr.Column(scale=1):
|
| 538 |
+
gr.Markdown(f"### π€ μ΄λ―Έμ§ μ
λ‘λ ({class_name})")
|
| 539 |
+
image_input = gr.Image(
|
| 540 |
+
label="λΉκ΅ν μ΄λ―Έμ§λ₯Ό μ
λ‘λνμΈμ",
|
| 541 |
+
type="pil",
|
| 542 |
+
height=300
|
| 543 |
+
)
|
| 544 |
+
username_input = gr.Textbox(
|
| 545 |
+
label="μ¬μ©μ μ΄λ¦",
|
| 546 |
+
placeholder="μ΄λ¦μ μ
λ ₯νμΈμ",
|
| 547 |
+
max_lines=1
|
| 548 |
+
)
|
| 549 |
+
submit_btn = gr.Button("π μ μ κ³μ° λ° λ±λ‘", variant="primary", size="lg")
|
| 550 |
+
|
| 551 |
+
with gr.Column(scale=1):
|
| 552 |
+
gr.Markdown(f"### π κ²°κ³Ό ({class_name})")
|
| 553 |
+
result_output = gr.Textbox(
|
| 554 |
+
label="κ³μ° κ²°κ³Ό",
|
| 555 |
+
lines=10,
|
| 556 |
+
interactive=False
|
| 557 |
+
)
|
| 558 |
+
|
| 559 |
+
gr.Markdown(f"### π
{class_name} 리λ보λ")
|
| 560 |
+
leaderboard_output = gr.Dataframe(
|
| 561 |
+
headers=["μμ", "μ¬μ©μλͺ
", "μ μ", "λ μ§"],
|
| 562 |
+
datatype=["number", "str", "number", "str"],
|
| 563 |
+
interactive=False
|
| 564 |
+
)
|
| 565 |
+
|
| 566 |
+
leaderboard_outputs[key] = leaderboard_output
|
| 567 |
+
|
| 568 |
+
# ν΄λ‘μ μμ key κ°μ μΊ‘μ²νκΈ° μν΄ default argument μ¬μ©
|
| 569 |
+
submit_btn.click(
|
| 570 |
+
fn=lambda img, name, k=key: process_user_image(k, img, name),
|
| 571 |
+
inputs=[image_input, username_input],
|
| 572 |
+
outputs=[result_output, leaderboard_output]
|
| 573 |
+
)
|
| 574 |
+
|
| 575 |
+
# ββ λͺ¨λ ν€ μμ (practice λ¨Όμ , μ΄ν CLASSES μμ) ββ
|
| 576 |
+
all_keys = ['practice'] + [_class_key(c) for c in CLASSES]
|
| 577 |
+
all_outputs = [leaderboard_outputs[k] for k in all_keys]
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 578 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 579 |
# νμ΄μ§ λ‘λ μ λͺ¨λ 리λ보λ νμ
|
| 580 |
demo.load(
|
| 581 |
+
fn=lambda: tuple(get_current_leaderboard(k) for k in all_keys),
|
| 582 |
+
outputs=all_outputs
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 583 |
)
|
| 584 |
|
| 585 |
# μ€μκ° μ
λ°μ΄νΈ (10μ΄λ§λ€ - λͺ¨λ ν μ
λ°μ΄νΈ)
|
| 586 |
timer = gr.Timer(value=10)
|
| 587 |
timer.tick(
|
| 588 |
+
fn=lambda: tuple(check_and_update_leaderboard(k) for k in all_keys),
|
| 589 |
+
outputs=all_outputs
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 590 |
)
|
| 591 |
|
| 592 |
return demo
|
|
|
|
| 596 |
print("π μ΄λ―Έμ§ μ μ¬λ 리λ보λ μμ€ν
μ μμν©λλ€...")
|
| 597 |
print("π μ°Έμ‘° μ΄λ―Έμ§: label2.jpg")
|
| 598 |
print("πΎ λ°μ΄ν° νμΌ:")
|
| 599 |
+
for cls in CLASSES:
|
| 600 |
+
key = _class_key(cls)
|
| 601 |
+
print(f" β’ {cls}: {key}.json")
|
| 602 |
+
print(f" β’ μ°μ΅: practice.json")
|
|
|
|
| 603 |
|
| 604 |
# κ° λ°λ³ λ©λͺ¨λ¦¬ μ¬μ©λ 체ν¬
|
| 605 |
for class_name, lb in leaderboards.items():
|
|
|
|
| 619 |
print(" β’ λμμ± μ μ΄ νμ±ν")
|
| 620 |
print(" β’ λ©λͺ¨λ¦¬ μ 리 μλν")
|
| 621 |
print(" β’ μ€μκ° μ
λ°μ΄νΈ: 10μ΄ κ°κ²©")
|
| 622 |
+
print(f" β’ {len(CLASSES)+1}κ° νλ³ λ
립 리λ보λ μ΄μ ({len(CLASSES)}κ° λ° + μ°μ΅)")
|
| 623 |
|
| 624 |
# μΈλΆ 곡μ μ°μ μλ
|
| 625 |
print("\nπ μΈλΆ μ κ·Ό μλ μ€...")
|