From 11f12f0b63767b4db133f0032d8a7ee009b41105 Mon Sep 17 00:00:00 2001 From: Filip Jeretina <59307111+zrezke@users.noreply.github.com> Date: Fri, 4 Aug 2023 21:15:32 +0200 Subject: [PATCH] Update launcher to let the user choose between running the Depthai Demo or Depthai Viewer (#1068) * Prompt user to choose between launching depthai demo or depthai viewer when using launcher * Add back signal that I accidentally deleted in merge conflict * Close launcher on choose app dialog cancellation * Change demo card to use the old logo, update the viewer card to include new and beta. Fix initial resize to be symmetric * close splash screen properly, move demo dependency installation into the else branch - how to show splash screen when installing depthai-viewer dependencies? * Ensure that splashScreen.close gets called from the main thread - this fixes NSWindow crashes on macos --- launcher/choose_app_dialog.py | 86 +++++++++++++++ launcher/demo_card.png | Bin 0 -> 46339 bytes launcher/launcher.py | 159 +++++++++++++++++++-------- launcher/viewer_card.png | Bin 0 -> 58591 bytes launcher/windows/installer_win64.iss | 5 +- 5 files changed, 205 insertions(+), 45 deletions(-) create mode 100644 launcher/choose_app_dialog.py create mode 100644 launcher/demo_card.png create mode 100644 launcher/viewer_card.png diff --git a/launcher/choose_app_dialog.py b/launcher/choose_app_dialog.py new file mode 100644 index 000000000..f9a54dbac --- /dev/null +++ b/launcher/choose_app_dialog.py @@ -0,0 +1,86 @@ +from PyQt5 import QtCore, QtWidgets +import os +from pathlib import Path + + +class ImageButton(QtWidgets.QPushButton): + def __init__(self, icon_path, parent=None): + super().__init__(parent) + icon_path = icon_path.replace('\\', '/') + self.setStyleSheet(f""" + QPushButton {{ + border: none; + border-image: url({icon_path}) 0 0 0 0 stretch stretch; + }} + QPushButton:hover {{ + border-image: url({icon_path}) 0 0 0 0 stretch stretch; + border: 3px solid #999999; + }} + """) + + +class CardWidget(QtWidgets.QWidget): + clicked = QtCore.pyqtSignal() + + def __init__(self, title, image_path: Path, parent=None): + super(CardWidget, self).__init__(parent) + + # Create an image button with the given card image + path = os.path.normpath(image_path) + button = ImageButton(path, self) + + # Make the button fill all available space + button.setSizePolicy( + QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Expanding + ) + + # Add the widget to the UI + layout = QtWidgets.QVBoxLayout(self) + layout.addWidget(button) + + # Connect button to signal + button.clicked.connect(self.clicked) + + def resizeEvent(self, event): + # Resize the widget to keep the aspect ratio of the image + width = self.width() + new_height = width * 64 // 177 # Adjust height based on width + self.resize(width, int(new_height)) + + +class ChooseAppDialog(QtWidgets.QDialog): + viewerChosen: bool = False + + def __init__(self, parent: QtWidgets.QWidget=None): + super(ChooseAppDialog, self).__init__(parent) + self.setWindowTitle("Choose an application") + + hbox = QtWidgets.QHBoxLayout() + hbox.setContentsMargins(0, 0, 0, 0) + file_path = Path(os.path.abspath(os.path.dirname(__file__))) + demo_image_path = file_path / "demo_card.png" + viewer_image_path = file_path / "viewer_card.png" + demo_card = CardWidget("DepthAI Demo", demo_image_path) + viewer_card = CardWidget("DepthAI Viewer", viewer_image_path) + hbox.addWidget(demo_card) + hbox.addWidget(viewer_card) + self.setLayout(hbox) + + demo_card.clicked.connect(self.runDemo) + viewer_card.clicked.connect(self.runViewer) + + # Get screen dimensions + screen = QtWidgets.QApplication.instance().primaryScreen() + screen_size = screen.size() + width = screen_size.width() // 2 + height = width // 2 * 64 // 177 + self.resize(width, height) + + @QtCore.pyqtSlot() + def runDemo(self): + self.accept() + + @QtCore.pyqtSlot() + def runViewer(self): + self.viewerChosen = True + self.accept() diff --git a/launcher/demo_card.png b/launcher/demo_card.png new file mode 100644 index 0000000000000000000000000000000000000000..7b8094630db372886958a4f28bb1730429cead6c GIT binary patch literal 46339 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 x1v(-R2}kJS-hVItI|={Y3IC;n|6f$Fer3 literal 0 HcmV?d00001 diff --git a/launcher/launcher.py b/launcher/launcher.py index fa8a25b3d..c967be123 100644 --- a/launcher/launcher.py +++ b/launcher/launcher.py @@ -14,6 +14,8 @@ # PyQt5 from PyQt5 import QtCore, QtGui, QtWidgets +from choose_app_dialog import ChooseAppDialog + # Constants SCRIPT_DIRECTORY=Path(os.path.abspath(os.path.dirname(__file__))) DEPTHAI_DEMO_SCRIPT='depthai_demo.py' @@ -69,11 +71,11 @@ def flush(self): # Create splash screen splashScreen = SplashScreen(str(SCRIPT_DIRECTORY/'splash2.png')) -def closeSplash(): - splashScreen.hide() class Worker(QtCore.QThread): signalUpdateQuestion = QtCore.pyqtSignal(str, str) + signalChooseApp = QtCore.pyqtSignal() + signalCloseSplash = QtCore.pyqtSignal() sigInfo = QtCore.pyqtSignal(str, str) sigCritical = QtCore.pyqtSignal(str, str) sigWarning = QtCore.pyqtSignal(str, str) @@ -89,6 +91,22 @@ def updateQuestion(self, title, message): else: self.shouldUpdate = False return False + + @QtCore.pyqtSlot() + def chooseApp(self) -> None: + """ + Until Depthai Viewer is in beta, allow the user to choose between running the demo or the viewer. + """ + # If the dialog is rejected, the user has clicked exit - so we exit + dialog = ChooseAppDialog(splashScreen) + if dialog.exec_() == QtWidgets.QDialog.Accepted: + self.viewerChosen = dialog.viewerChosen + else: + raise RuntimeError("User cancelled app choice dialog") + + @QtCore.pyqtSlot() + def closeSplash(self): + splashScreen.close() @QtCore.pyqtSlot(str,str) def showInformation(self, title, message): @@ -105,6 +123,8 @@ def showCritical(self, title, message): def __init__(self, parent = None): QtCore.QThread.__init__(self, parent) self.signalUpdateQuestion[str, str].connect(self.updateQuestion, QtCore.Qt.BlockingQueuedConnection) + self.signalChooseApp.connect(self.chooseApp, QtCore.Qt.BlockingQueuedConnection) + self.signalCloseSplash.connect(self.closeSplash, QtCore.Qt.BlockingQueuedConnection) self.sigInfo[str, str].connect(self.showInformation, QtCore.Qt.BlockingQueuedConnection) self.sigCritical[str, str].connect(self.showCritical, QtCore.Qt.BlockingQueuedConnection) self.sigWarning[str, str].connect(self.showWarning, QtCore.Qt.BlockingQueuedConnection) @@ -306,58 +326,110 @@ def run(self): self.sigWarning.emit(title, message) try: + self.signalChooseApp.emit() # Set to quit splash screen a little after subprocess is ran skipSplashQuitFirstTime = False def removeSplash(): time.sleep(2.5) if not skipSplashQuitFirstTime: - closeSplash() + self.signalCloseSplash.emit() quitThread = threading.Thread(target=removeSplash) quitThread.start() + if self.viewerChosen: + print("Depthai Viewer chosen, checking if depthai-viewer is installed.") + # Check if depthai-viewer is installed + is_viewer_installed_cmd = [sys.executable, "-m", "pip", "show", "depthai-viewer"] + viewer_available_ret = subprocess.run(is_viewer_installed_cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE) + if viewer_available_ret.returncode != 0: + splashScreen.updateSplashMessage('Installing Depthai Viewer ...') + splashScreen.enableHeartbeat(True) + print("Depthai Viewer not installed, installing...") + # Depthai Viewer isn't installed, install it + # First upgrade pip + subprocess.run([sys.executable, "-m", "pip", "install", "-U", "pip"], check=True) + # Install depthai-viewer - Don't check, it can error out because of dependency conflicts but still install successfully + subprocess.run([sys.executable, "-m", "pip", "install", "depthai-viewer"]) + # Check again if depthai-viewer is installed + viewer_available_ret = subprocess.run(is_viewer_installed_cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE) + if viewer_available_ret.returncode != 0: + raise RuntimeError("Depthai Viewer failed to install.") + splashScreen.updateSplashMessage('') + splashScreen.enableHeartbeat(False) - # All ready, run the depthai_demo.py as a separate process - ret = subprocess.run([sys.executable, f'{pathToDepthaiRepository}/{DEPTHAI_DEMO_SCRIPT}'], cwd=pathToDepthaiRepository, stderr=subprocess.PIPE) - - # Print out stderr first - sys.stderr.write(ret.stderr.decode()) - - print(f'DepthAI Demo ret code: {ret.returncode}') - # Install dependencies if demo signaled missing dependencies - if ret.returncode == 42: - skipSplashQuitFirstTime = True - print(f'Dependency issue raised. Retrying by installing requirements and restarting demo.') - - # present message of installing dependencies - splashScreen.updateSplashMessage('Installing DepthAI Requirements ...') - splashScreen.enableHeartbeat(True) + viewer_version = version.parse(viewer_available_ret.stdout.decode().splitlines()[1].split(" ")[1].strip()) + print(f"Installed Depthai Viewer version: {viewer_version}") + # Get latest depthai-viewer version + latest_ret = subprocess.run([sys.executable, "-m", "pip", "index", "versions", "depthai-viewer"], stdout=subprocess.PIPE, stderr=subprocess.PIPE) + if latest_ret.returncode != 0: + raise RuntimeError("Couldn't get latest depthai-viewer version.") + latest_viewer_version = version.parse(latest_ret.stdout.decode().split("LATEST:")[1].strip()) + print(f"Latest Depthai Viewer version: {latest_viewer_version}") + if latest_viewer_version > viewer_version: + # Update is available, ask user if they want to update + title = 'DepthAI Viewer update available' + message = f'Version {str(latest_viewer_version)} of depthai-viewer is available, current version {str(viewer_version)}. Would you like to update?' + self.signalUpdateQuestion.emit(title, message) + if self.shouldUpdate: + splashScreen.updateSplashMessage(f'Updating Depthai Viewer to version {latest_viewer_version} ...') + splashScreen.enableHeartbeat(True) + # Update depthai-viewer + subprocess.run([sys.executable, "-m", "pip", "install", "-U", "depthai-viewer"]) + # Test again to see if viewer is installed and updated + viewer_available_ret = subprocess.run(is_viewer_installed_cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE) + if viewer_available_ret.returncode != 0: + raise RuntimeError(f"Installing version {latest_viewer_version} failed.") + viewer_version = version.parse(viewer_available_ret.stdout.decode().splitlines()[1].split(" ")[1].strip()) + if latest_viewer_version > viewer_version: + raise RuntimeError("Depthai Viewer failed to update.") + splashScreen.updateSplashMessage('') + splashScreen.enableHeartbeat(False) + + # All ready, run the depthai-viewer as a seperate process + ret = subprocess.run([sys.executable, "-m", "depthai_viewer"]) + else: + # All ready, run the depthai_demo.py as a separate process + ret = subprocess.run([sys.executable, f'{pathToDepthaiRepository}/{DEPTHAI_DEMO_SCRIPT}'], cwd=pathToDepthaiRepository, stderr=subprocess.PIPE) - # Install requirements for depthai_demo.py - MAX_RETRY_COUNT = 3 - installReqCall = None - for retry in range(0, MAX_RETRY_COUNT): - installReqCall = subprocess.run([sys.executable, f'{pathToDepthaiRepository}/{DEPTHAI_INSTALL_REQUIREMENTS_SCRIPT}'], cwd=pathToDepthaiRepository, stderr=subprocess.PIPE) - if installReqCall.returncode == 0: - break - if installReqCall.returncode != 0: - # Some error happened. Notify user - title = 'Error Installing DepthAI Requirements' - message = f"Couldn't install DepthAI requirements. Check internet connection and try again. Log available at: {LOG_FILE_PATH}" - print(f'Message Box ({title}): {message}') - print(f'Install dependencies call failed with return code: {installReqCall.returncode}, message: {installReqCall.stderr.decode()}') - self.sigCritical.emit(title, message) - raise Exception(title) + # Print out stderr first + sys.stderr.write(ret.stderr.decode()) - # Remove message and animation - splashScreen.updateSplashMessage('') - splashScreen.enableHeartbeat(False) + print(f'DepthAI Demo ret code: {ret.returncode}') + # Install dependencies if demo signaled missing dependencies + if ret.returncode == 42: + skipSplashQuitFirstTime = True + print(f'Dependency issue raised. Retrying by installing requirements and restarting demo.') - quitThread.join() - skipSplashQuitFirstTime = False - quitThread = threading.Thread(target=removeSplash) - quitThread.start() + # present message of installing dependencies + splashScreen.updateSplashMessage('Installing DepthAI Requirements ...') + splashScreen.enableHeartbeat(True) - # All ready, run the depthai_demo.py as a separate process - subprocess.run([sys.executable, f'{pathToDepthaiRepository}/{DEPTHAI_DEMO_SCRIPT}'], cwd=pathToDepthaiRepository) + # Install requirements for depthai_demo.py + MAX_RETRY_COUNT = 3 + installReqCall = None + for retry in range(0, MAX_RETRY_COUNT): + installReqCall = subprocess.run([sys.executable, f'{pathToDepthaiRepository}/{DEPTHAI_INSTALL_REQUIREMENTS_SCRIPT}'], cwd=pathToDepthaiRepository, stderr=subprocess.PIPE) + if installReqCall.returncode == 0: + break + if installReqCall.returncode != 0: + # Some error happened. Notify user + title = 'Error Installing DepthAI Requirements' + message = f"Couldn't install DepthAI requirements. Check internet connection and try again. Log available at: {LOG_FILE_PATH}" + print(f'Message Box ({title}): {message}') + print(f'Install dependencies call failed with return code: {installReqCall.returncode}, message: {installReqCall.stderr.decode()}') + self.sigCritical.emit(title, message) + raise Exception(title) + + # Remove message and animation + splashScreen.updateSplashMessage('') + splashScreen.enableHeartbeat(False) + + quitThread.join() + skipSplashQuitFirstTime = False + quitThread = threading.Thread(target=removeSplash) + quitThread.start() + + # All ready, run the depthai_demo.py as a separate process + subprocess.run([sys.executable, f'{pathToDepthaiRepository}/{DEPTHAI_DEMO_SCRIPT}'], cwd=pathToDepthaiRepository) except: pass finally: @@ -368,8 +440,7 @@ def removeSplash(): print(f'Unknown error occured ({ex}), exiting...') finally: # At the end quit anyway - closeSplash() - splashScreen.close() + self.signalCloseSplash.emit() qApp.exit() qApp.worker = Worker() diff --git a/launcher/viewer_card.png b/launcher/viewer_card.png new file mode 100644 index 0000000000000000000000000000000000000000..aa562e68b8e9d57085a342c15df5158182a7e6e1 GIT binary patch literal 58591 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 AvH$=8 literal 0 HcmV?d00001 diff --git a/launcher/windows/installer_win64.iss b/launcher/windows/installer_win64.iss index 01a1ee2dd..80dbf2556 100644 --- a/launcher/windows/installer_win64.iss +++ b/launcher/windows/installer_win64.iss @@ -95,7 +95,10 @@ Source: "..\{#MyAppIconName}"; DestDir: "{app}"; Flags: ignoreversion ; Source: "..\launcher.py"; DestDir: "{app}"; Flags: ignoreversion ; Source: "..\requirements.txt"; DestDir: "{app}"; Flags: ignoreversion ; Source: "..\splash2.png"; DestDir: "{app}"; Flags: ignoreversion +; Source: "..\demo_card.png"; DestDir: "{app}"; Flags: ignoreversion +; Source: "..\viewer_card.png"; DestDir: "{app}"; Flags: ignoreversion ; Source: "..\splash_screen.py"; DestDir: "{app}"; Flags: ignoreversion +; Source: "..\choose_app_dialog.py"; DestDir: "{app}"; Flags: ignoreversion ; ; NOTE: Don't use "Flags: ignoreversion" on any shared system files [Icons] @@ -208,4 +211,4 @@ end; [UninstallDelete] -Type: filesandordirs; Name: "{app}" \ No newline at end of file +Type: filesandordirs; Name: "{app}"