haepada commited on
Commit
57c75c6
·
verified ·
1 Parent(s): aebc790

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +27 -59
app.py CHANGED
@@ -332,17 +332,30 @@ def generate_detailed_prompt(text, emotions, text_sentiment):
332
  "차분/진지": "차분한 남색과 깊은 보라"
333
  }
334
 
 
 
 
 
 
 
 
 
 
 
 
335
  if emotions["intensity"] > 70:
336
- visual_style = "역동적인 붓질과 강한 대비"
337
  elif emotions["intensity"] > 40:
338
- visual_style = "균형잡힌 구도와 중간 톤의 조화"
339
  else:
340
- visual_style = "부드러운 그라데이션과 차분한 "
341
 
342
- prompt = f"사이키델릭 민화, 네오민화 스타일의 추상화, {emotion_colors.get(emotions['primary'], '자연스러운 색상')} 기반. "
343
- prompt += f"{visual_style} 표현된 {emotions['primary']} 감정. "
344
- prompt += f"음성의 특징({', '.join(emotions['characteristics'])})을 화면의 동적 요소로 표현. "
345
- prompt += f"발화 내용 '{text}'에서 느껴지는 감정({text_sentiment['label']} - 점수: {text_sentiment['score']:.2f})을 은유적 이미지로 담아내기."
 
 
346
 
347
  return prompt
348
 
@@ -687,8 +700,8 @@ def create_interface():
687
  with gr.Column(visible=True) as analysis_section:
688
  analysis_status = gr.Markdown("")
689
  loading_icon = gr.HTML("""
690
- <div id="loading" style="display:none; text-align:center;">
691
- <img src="https://i.gifer.com/ZKZx.gif" alt="loading..." style="width:50px; height:50px;">
692
  </div>
693
  """)
694
  voice_features = gr.Textbox(
@@ -718,6 +731,7 @@ def create_interface():
718
  )
719
 
720
  try:
 
721
  features = calculate_baseline_features(audio)
722
  if features is None:
723
  return (
@@ -736,7 +750,6 @@ def create_interface():
736
 
737
  voice_features_text = f"""
738
  🎭 음성 특성 분석:
739
-
740
  • 에너지 레벨: {baseline_emotion['details']['energy_level']}
741
  • 말하기 속도: {baseline_emotion['details']['speech_rate']}
742
  • 음높이 변화: {baseline_emotion['details']['pitch_variation']}
@@ -745,7 +758,6 @@ def create_interface():
745
 
746
  sentiment_text = f"""
747
  💫 기본 감정 상태:
748
-
749
  • 주요 감정: {baseline_emotion['primary']}
750
  • 감정 강도: {baseline_emotion['intensity']:.1f}%
751
  • 특징: {', '.join(baseline_emotion['characteristics'])}
@@ -756,11 +768,12 @@ def create_interface():
756
  결과를 확인하신 후 아래의 '다음 단계로' 버튼을 눌러주세요.
757
  """
758
 
759
- new_state = safe_state_update(state, {
 
760
  "baseline_features": features,
761
  "baseline_emotion": baseline_emotion,
762
  "analysis_complete": True
763
- })
764
 
765
  return (
766
  new_state,
@@ -778,7 +791,7 @@ def create_interface():
778
  print(f"Error in handle_blessing_complete: {str(e)}")
779
  return (
780
  state,
781
- f"❌ 오류가 발생했습니다: {str(e)}",
782
  gr.update(visible=False),
783
  gr.update(visible=False),
784
  gr.update(visible=False),
@@ -787,51 +800,6 @@ def create_interface():
787
  gr.update(visible=True),
788
  gr.update(visible=False)
789
  )
790
-
791
- def next_section():
792
- return (
793
- gr.update(visible=False), # blessing_section
794
- gr.update(visible=True) # entry_guide_section
795
- )
796
-
797
- # UI 구성
798
- blessing_section = gr.Column(visible=False)
799
- with blessing_section:
800
- gr.Markdown("### 축원의식을 시작하겠습니다")
801
- gr.Markdown("'명짐 복짐 짊어지고 안가태평하시기를 비도발원 축원 드립니다'")
802
-
803
- with gr.Column() as recording_section:
804
- baseline_audio = gr.Audio(
805
- label="축원 문장 녹음하기",
806
- sources=["microphone"],
807
- type="numpy",
808
- streaming=False
809
- )
810
-
811
- with gr.Column() as analysis_section:
812
- set_baseline_btn = gr.Button("축원 마치기", variant="primary")
813
- analysis_status = gr.Markdown("")
814
- loading_icon = gr.HTML("""
815
- <div style="display:flex;justify-content:center;align-items:center;height:50px;overflow:hidden;">
816
- <div class="loader" style="width:30px;height:30px;"></div>
817
- </div>
818
- """)
819
- voice_features = gr.Textbox(
820
- label="음성 특성 분석",
821
- interactive=False,
822
- visible=False
823
- )
824
- text_sentiment = gr.Textbox(
825
- label="기본 감정 상태",
826
- interactive=False,
827
- visible=False
828
- )
829
- analysis_result = gr.Markdown(visible=False)
830
- next_button = gr.Button( # next_step_btn을 next_button으로 변경
831
- "다음 단계로",
832
- variant="primary",
833
- visible=False
834
- )
835
 
836
  # 4단계: 굿판 입장 안내
837
  entry_guide_section = gr.Column(visible=False)
 
332
  "차분/진지": "차분한 남색과 깊은 보라"
333
  }
334
 
335
+ abstract_elements = {
336
+ "기쁨/열정": "상승하는 나선형과 빛나는 입자들",
337
+ "분노/강조": "날카로운 지그재그와 폭발하는 형태",
338
+ "놀람/흥분": "물결치는 동심원과 반짝이는 점들",
339
+ "관심/호기심": "부드럽게 흐르는 곡선과 floating shapes",
340
+ "슬픔/우울": "하강하는 흐름과 흐릿한 그림자",
341
+ "피로/무기력": "느리게 흐르는 물결과 흐려지는 형태",
342
+ "평온/안정": "부드러운 원형과 조화로운 기하학적 패턴",
343
+ "차분/진지": "균형잡힌 수직선과 안정적인 구조"
344
+ }
345
+
346
  if emotions["intensity"] > 70:
347
+ visual_style = "역동적인 붓질과 강한 대비의 추상적 구성"
348
  elif emotions["intensity"] > 40:
349
+ visual_style = "균형잡힌 구도와 중간 톤의 기하학적 패턴"
350
  else:
351
+ visual_style = "부드러운 그라데이션과 미니멀한 추상 형태"
352
 
353
+ prompt = f"abstract ethereal art, {emotion_colors.get(emotions['primary'], '자연스러운 색상')} 기반, "
354
+ prompt += f"{visual_style}, {abstract_elements.get(emotions['primary'], '유기적 형태')}. "
355
+ prompt += f"감정의 시각화: {emotions['characteristics'][0] if emotions['characteristics'] else '평온한 상태'}, "
356
+ prompt += "minimalistic composition, korean traditional art influence, no human figures, no faces. "
357
+ prompt += "geometric patterns, flowing energy, mystical atmosphere, ethereal lighting. "
358
+ prompt += "digital art, high detail, luminescent effects, --ar 2:3"
359
 
360
  return prompt
361
 
 
700
  with gr.Column(visible=True) as analysis_section:
701
  analysis_status = gr.Markdown("")
702
  loading_icon = gr.HTML("""
703
+ <div style="display:flex;justify-content:center;align-items:center;height:50px;overflow:hidden;">
704
+ <div class="loader" style="width:30px;height:30px;"></div>
705
  </div>
706
  """)
707
  voice_features = gr.Textbox(
 
731
  )
732
 
733
  try:
734
+ # 간소화된 분석 과정
735
  features = calculate_baseline_features(audio)
736
  if features is None:
737
  return (
 
750
 
751
  voice_features_text = f"""
752
  🎭 음성 특성 분석:
 
753
  • 에너지 레벨: {baseline_emotion['details']['energy_level']}
754
  • 말하기 속도: {baseline_emotion['details']['speech_rate']}
755
  • 음높이 변화: {baseline_emotion['details']['pitch_variation']}
 
758
 
759
  sentiment_text = f"""
760
  💫 기본 감정 상태:
 
761
  • 주요 감정: {baseline_emotion['primary']}
762
  • 감정 강도: {baseline_emotion['intensity']:.1f}%
763
  • 특징: {', '.join(baseline_emotion['characteristics'])}
 
768
  결과를 확인하신 후 아래의 '다음 단계로' 버튼을 눌러주세요.
769
  """
770
 
771
+ new_state = {
772
+ **state,
773
  "baseline_features": features,
774
  "baseline_emotion": baseline_emotion,
775
  "analysis_complete": True
776
+ }
777
 
778
  return (
779
  new_state,
 
791
  print(f"Error in handle_blessing_complete: {str(e)}")
792
  return (
793
  state,
794
+ f"❌ 오류가 발생했습니다. 다시 시도해주세요.",
795
  gr.update(visible=False),
796
  gr.update(visible=False),
797
  gr.update(visible=False),
 
800
  gr.update(visible=True),
801
  gr.update(visible=False)
802
  )
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
803
 
804
  # 4단계: 굿판 입장 안내
805
  entry_guide_section = gr.Column(visible=False)