74 lines
3.0 KiB
Python
74 lines
3.0 KiB
Python
import os
|
|
import tempfile
|
|
import cv2
|
|
import numpy as np
|
|
from PyQt5.QtWidgets import (QWidget, QVBoxLayout, QHBoxLayout, QLabel,
|
|
QPushButton, QComboBox, QRadioButton, QButtonGroup,
|
|
QFileDialog, QTextEdit, QProgressBar, QFrame,
|
|
QScrollArea, QGroupBox, QGridLayout, QSlider,
|
|
QSpinBox, QCheckBox, QTabWidget, QSplitter)
|
|
from PyQt5.QtCore import Qt, QThread, pyqtSignal, QTimer, QMutex, QMutexLocker
|
|
from PyQt5.QtGui import QPixmap, QImage, QPalette, QFont, QMovie
|
|
|
|
from motion_app_qt import MotionComparisonAppQt
|
|
from video_display_widget import VideoDisplayWidget
|
|
from similarity_display_widget import SimilarityDisplayWidget
|
|
from control_panel_widget import ControlPanelWidget
|
|
|
|
class MainWidget(QWidget):
|
|
def __init__(self):
|
|
super().__init__()
|
|
self.motion_app = MotionComparisonAppQt()
|
|
self.setup_ui()
|
|
|
|
def setup_ui(self):
|
|
# Main layout - horizontal splitter
|
|
main_splitter = QSplitter(Qt.Horizontal)
|
|
|
|
# Control panel (sidebar) - fixed width
|
|
self.control_panel = ControlPanelWidget(self.motion_app)
|
|
self.control_panel.setMinimumWidth(300)
|
|
self.control_panel.setMaximumWidth(350)
|
|
|
|
# Main content area
|
|
content_widget = QWidget()
|
|
content_layout = QVBoxLayout(content_widget)
|
|
|
|
# Video display area - priority for real-time performance
|
|
self.video_display = VideoDisplayWidget(self.motion_app)
|
|
content_layout.addWidget(self.video_display, stretch=2)
|
|
|
|
# Similarity analysis area - can have latency
|
|
self.similarity_display = SimilarityDisplayWidget(self.motion_app)
|
|
content_layout.addWidget(self.similarity_display, stretch=1)
|
|
|
|
# Add widgets to splitter
|
|
main_splitter.addWidget(self.control_panel)
|
|
main_splitter.addWidget(content_widget)
|
|
main_splitter.setStretchFactor(0, 0) # Control panel fixed
|
|
main_splitter.setStretchFactor(1, 1) # Content area expandable
|
|
|
|
# Main layout
|
|
main_layout = QHBoxLayout(self)
|
|
main_layout.addWidget(main_splitter)
|
|
main_layout.setContentsMargins(0, 0, 0, 0)
|
|
|
|
# Connect signals
|
|
self.setup_connections()
|
|
|
|
def setup_connections(self):
|
|
# Connect control panel signals to main app
|
|
self.control_panel.video_selected.connect(self.video_display.load_video)
|
|
self.control_panel.start_comparison.connect(self.start_comparison)
|
|
self.control_panel.stop_comparison.connect(self.stop_comparison)
|
|
self.control_panel.initialize_system.connect(self.motion_app.initialize_all)
|
|
|
|
def start_comparison(self, video_path):
|
|
self.video_display.start_comparison(video_path)
|
|
self.similarity_display.start_analysis()
|
|
|
|
def stop_comparison(self):
|
|
self.video_display.stop_comparison()
|
|
self.similarity_display.stop_analysis()
|
|
self.motion_app.cleanup()
|