DawnC commited on
Commit
27687e0
·
verified ·
1 Parent(s): 6197eab

Upload 2 files

Browse files

fixed display issues

Files changed (2) hide show
  1. app.py +32 -8
  2. ui_manager.py +2 -1
app.py CHANGED
@@ -583,12 +583,13 @@ def handle_video_upload(video_input, video_url, input_type, model_name,
583
  process_interval: 處理間隔(每N幀處理一次)
584
 
585
  Returns:
586
- Tuple: (output_video_path, summary_html, formatted_stats)
587
  """
588
  if video_processor is None:
589
  error_msg = "Error: Video processor not initialized."
590
  error_html = f"<div class='video-summary-content-wrapper'><pre>{error_msg}</pre></div>"
591
- return None, error_html, {"error": "Video processor not available"}
 
592
 
593
  video_path = None
594
 
@@ -601,12 +602,14 @@ def handle_video_upload(video_input, video_url, input_type, model_name,
601
  video_path, error_msg = download_video_from_url(video_url)
602
  if error_msg:
603
  error_html = f"<div class='video-summary-content-wrapper'><pre>{error_msg}</pre></div>"
604
- return None, error_html, {"error": error_msg}
 
605
 
606
  if not video_path:
607
  error_msg = "Please provide a video file or valid URL."
608
  error_html = f"<div class='video-summary-content-wrapper'><pre>{error_msg}</pre></div>"
609
- return None, error_html, {"error": "No video input provided"}
 
610
 
611
  print(f"Starting practical video analysis: model={model_name}, confidence={confidence_threshold}, interval={process_interval}")
612
 
@@ -625,7 +628,8 @@ def handle_video_upload(video_input, video_url, input_type, model_name,
625
  if output_video_path is None:
626
  error_msg = analysis_results.get("error", "Unknown error occurred during video processing")
627
  error_html = f"<div class='video-summary-content-wrapper'><pre>Processing failed: {error_msg}</pre></div>"
628
- return None, error_html, analysis_results
 
629
 
630
  # 生成摘要,直接用統計數據
631
  basic_summary = generate_basic_video_summary(analysis_results)
@@ -644,14 +648,34 @@ def handle_video_upload(video_input, video_url, input_type, model_name,
644
  summary_content = '\n'.join(summary_lines)
645
  summary_html = f"<div class='video-summary-content-wrapper'><pre>{summary_content}</pre></div>"
646
 
647
- return output_video_path, summary_html, analysis_results
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
648
 
649
  except Exception as e:
650
  print(f"Error in handle_video_upload: {e}")
651
  traceback.print_exc()
652
- error_msg = f"影片處理失敗: {str(e)}"
653
  error_html = f"<div class='video-summary-content-wrapper'><pre>{error_msg}</pre></div>"
654
- return None, error_html, {"error": str(e)}
 
655
 
656
  def main():
657
  """主函數,初始化並啟動Gradio"""
 
583
  process_interval: 處理間隔(每N幀處理一次)
584
 
585
  Returns:
586
+ Tuple: (output_video_path, summary_html, formatted_stats, object_details)
587
  """
588
  if video_processor is None:
589
  error_msg = "Error: Video processor not initialized."
590
  error_html = f"<div class='video-summary-content-wrapper'><pre>{error_msg}</pre></div>"
591
+ empty_object_details = {}
592
+ return None, error_html, {"error": "Video processor not available"}, empty_object_details
593
 
594
  video_path = None
595
 
 
602
  video_path, error_msg = download_video_from_url(video_url)
603
  if error_msg:
604
  error_html = f"<div class='video-summary-content-wrapper'><pre>{error_msg}</pre></div>"
605
+ empty_object_details = {}
606
+ return None, error_html, {"error": error_msg}, empty_object_details
607
 
608
  if not video_path:
609
  error_msg = "Please provide a video file or valid URL."
610
  error_html = f"<div class='video-summary-content-wrapper'><pre>{error_msg}</pre></div>"
611
+ empty_object_details = {}
612
+ return None, error_html, {"error": "No video input provided"}, empty_object_details
613
 
614
  print(f"Starting practical video analysis: model={model_name}, confidence={confidence_threshold}, interval={process_interval}")
615
 
 
628
  if output_video_path is None:
629
  error_msg = analysis_results.get("error", "Unknown error occurred during video processing")
630
  error_html = f"<div class='video-summary-content-wrapper'><pre>Processing failed: {error_msg}</pre></div>"
631
+ empty_object_details = {}
632
+ return None, error_html, analysis_results, empty_object_details
633
 
634
  # 生成摘要,直接用統計數據
635
  basic_summary = generate_basic_video_summary(analysis_results)
 
648
  summary_content = '\n'.join(summary_lines)
649
  summary_html = f"<div class='video-summary-content-wrapper'><pre>{summary_content}</pre></div>"
650
 
651
+ # 提取物體詳情數據用於第四個輸出組件
652
+ timeline_analysis = analysis_results.get("timeline_analysis", {})
653
+ object_appearances = timeline_analysis.get("object_appearances", {})
654
+
655
+ # 格式化物體詳情數據以便在JSON組件中顯示
656
+ object_details_formatted = {}
657
+ for obj_name, details in object_appearances.items():
658
+ object_details_formatted[obj_name] = {
659
+ "Estimated Count": details.get("estimated_count", 0),
660
+ "First Appearance": details.get("first_appearance", "Unknown"),
661
+ "Last Seen": details.get("last_seen", "Unknown"),
662
+ "Duration in Video": details.get("duration_in_video", "Unknown"),
663
+ "Detection Confidence": details.get("detection_confidence", 0.0),
664
+ "First Appearance (seconds)": details.get("first_appearance_seconds", 0),
665
+ "Duration (seconds)": details.get("duration_seconds", 0)
666
+ }
667
+
668
+ print(f"Extracted object details for {len(object_details_formatted)} object types")
669
+
670
+ return output_video_path, summary_html, analysis_results, object_details_formatted
671
 
672
  except Exception as e:
673
  print(f"Error in handle_video_upload: {e}")
674
  traceback.print_exc()
675
+ error_msg = f"Video processing failed: {str(e)}"
676
  error_html = f"<div class='video-summary-content-wrapper'><pre>{error_msg}</pre></div>"
677
+ empty_object_details = {}
678
+ return None, error_html, {"error": str(e)}, empty_object_details
679
 
680
  def main():
681
  """主函數,初始化並啟動Gradio"""
ui_manager.py CHANGED
@@ -749,6 +749,7 @@ class UIManager:
749
  outputs=[
750
  video_components['video_output'],
751
  video_components['video_summary_text'],
752
- video_components['video_stats_json']
 
753
  ]
754
  )
 
749
  outputs=[
750
  video_components['video_output'],
751
  video_components['video_summary_text'],
752
+ video_components['video_stats_json'],
753
+ video_components['video_object_details']
754
  ]
755
  )