diff --git a/BUILD_INSTRUCTIONS.md b/BUILD_INSTRUCTIONS.md deleted file mode 100644 index 287e1f8..0000000 --- a/BUILD_INSTRUCTIONS.md +++ /dev/null @@ -1,119 +0,0 @@ -# Building Orisys Sensor Demo Executable and Installer - -This guide explains how to package `camera_gui.py` into a standalone executable (.exe) and create an installer. - -## Prerequisites - -1. **Python 3.8+** installed -2. **All dependencies** installed: - ```bash - pip install -r requirements.txt - pip install PyQt5 pyqtgraph PyInstaller - ``` - -3. **For creating installer (.exe installer)**: - - Download and install [Inno Setup](https://jrsoftware.org/isdl.php) (free, open-source) - -## Method 1: Using PyInstaller (Simple) - -### Option A: Using the spec file (Recommended) - -1. Build the executable: - ```bash - pyinstaller camera_gui.spec - ``` - -2. The executable will be in the `dist` folder: `dist\camera_gui.exe` - -### Option B: Using the build script - -1. Run the build script: - ```bash - python build_exe.py - ``` - -2. The executable will be in the `dist` folder: `dist\camera_gui.exe` - -### Option C: Manual PyInstaller command - -```bash -pyinstaller --name=camera_gui --onefile --windowed --icon=orisys_logo_notext.png --add-data="orisys_logo_notext.png;." camera_gui.py -``` - -## Method 2: Creating an Installer (.exe installer) - -### Using Inno Setup - -1. **Build the executable first** using Method 1 above - -2. **Open Inno Setup Compiler** - -3. **Open the script file**: `build_installer.iss` - -4. **Compile the installer**: - - Click "Build" → "Compile" - - Or press F9 - -5. **The installer will be created** in the `installer` folder: `installer\OrisysSensorDemo_Setup.exe` - -### Customizing the Installer - -Edit `build_installer.iss` to customize: -- App name and version -- Installation directory -- Start menu shortcuts -- Desktop icons -- License file -- Additional files to include - -## Troubleshooting - -### Common Issues - -1. **"Module not found" errors**: - - Add missing modules to `hiddenimports` in `camera_gui.spec` - - Or use `--hidden-import=module_name` in PyInstaller command - -2. **Large executable size**: - - This is normal - PyInstaller bundles Python interpreter and all dependencies - - Consider using `--onedir` instead of `--onefile` for faster startup - -3. **Missing DLL files**: - - Ensure Visual C++ Redistributable is installed on target machines - - Include required DLLs using `--add-binary` option - -4. **OpenCV/CUDA issues**: - - If using CUDA, ensure CUDA DLLs are available - - May need to add CUDA paths to `pathex` in spec file - -### Testing the Executable - -1. Test on a clean Windows machine (without Python installed) -2. Ensure all required DLLs are included -3. Test camera functionality -4. Test file saving functionality - -## File Structure - -After building, you should have: - -``` -dist/ - └── camera_gui.exe # Standalone executable - -installer/ - └── OrisysSensorDemo_Setup.exe # Installer (after compiling with Inno Setup) -``` - -## Distribution - -- **Standalone executable**: Just distribute `dist\camera_gui.exe` -- **Installer**: Distribute `installer\OrisysSensorDemo_Setup.exe` for easier installation - -## Notes - -- The executable is large (~100-200MB) because it includes Python interpreter and all dependencies -- First launch may be slower as files are extracted -- Antivirus software may flag PyInstaller executables - this is a false positive -- Consider code signing for production releases - diff --git a/build.bat b/build.bat deleted file mode 100644 index c85c78c..0000000 --- a/build.bat +++ /dev/null @@ -1,65 +0,0 @@ -@echo off -REM Build script for Windows -REM Creates executable and optionally installer - -echo ======================================== -echo Building Orisys Sensor Demo -echo ======================================== -echo. - -REM Check if Python is available -python --version >nul 2>&1 -if errorlevel 1 ( - echo ERROR: Python is not installed or not in PATH - pause - exit /b 1 -) - -REM Install/upgrade PyInstaller if needed -echo Installing/upgrading PyInstaller... -pip install --upgrade PyInstaller - -echo. -echo Building executable... -echo. - -REM Build using spec file -pyinstaller camera_gui.spec - -if errorlevel 1 ( - echo. - echo ERROR: Build failed! - pause - exit /b 1 -) - -echo. -echo ======================================== -echo Build successful! -echo Executable: dist\camera_gui.exe -echo ======================================== -echo. - -REM Ask if user wants to create installer -set /p CREATE_INSTALLER="Create installer? (y/n): " -if /i "%CREATE_INSTALLER%"=="y" ( - echo. - echo Creating installer... - echo Please ensure Inno Setup Compiler is installed. - echo Opening Inno Setup script... - - REM Try to find Inno Setup Compiler - if exist "C:\Program Files (x86)\Inno Setup 6\ISCC.exe" ( - "C:\Program Files (x86)\Inno Setup 6\ISCC.exe" build_installer.iss - ) else if exist "C:\Program Files\Inno Setup 6\ISCC.exe" ( - "C:\Program Files\Inno Setup 6\ISCC.exe" build_installer.iss - ) else ( - echo Inno Setup Compiler not found in default locations. - echo Please compile build_installer.iss manually using Inno Setup Compiler. - ) -) - -echo. -echo Done! -pause - diff --git a/build_exe.py b/build_exe.py deleted file mode 100644 index 09196f9..0000000 --- a/build_exe.py +++ /dev/null @@ -1,52 +0,0 @@ -""" -Build script for creating camera_gui.exe using PyInstaller -""" -import PyInstaller.__main__ -import os -import sys - -# Add PyQt5 and pyqtgraph to requirements if not present -requirements = [ - 'PyInstaller>=5.0', - 'PyQt5>=5.15.0', - 'pyqtgraph>=0.12.0', -] - -def build_exe(): - """Build the executable""" - - # PyInstaller arguments - args = [ - 'camera_gui.py', - '--name=camera_gui', - '--onefile', # Create a single executable file - '--windowed', # No console window (GUI app) - '--icon=orisys_logo_notext.png', # Use logo as icon - '--add-data=orisys_logo_notext.png;.', # Include logo file - '--hidden-import=PyQt5.QtCore', - '--hidden-import=PyQt5.QtGui', - '--hidden-import=PyQt5.QtWidgets', - '--hidden-import=pyqtgraph', - '--hidden-import=orisys', - '--hidden-import=cv2', - '--hidden-import=numpy', - '--collect-all=pyqtgraph', # Collect all pyqtgraph data - '--collect-all=PyQt5', # Collect all PyQt5 data - '--collect-all=cv2', # Collect all OpenCV data - ] - - # Add orisys package if it's a local package - if os.path.exists('src/orisys'): - args.append('--paths=src') - - print("Building executable...") - print("Command: PyInstaller " + " ".join(args)) - - PyInstaller.__main__.run(args) - - print("\nBuild complete! Executable is in the 'dist' folder.") - print("You can now create an installer using Inno Setup or NSIS.") - -if __name__ == '__main__': - build_exe() - diff --git a/build_installer.iss b/build_installer.iss deleted file mode 100644 index b9667f4..0000000 --- a/build_installer.iss +++ /dev/null @@ -1,52 +0,0 @@ -; Inno Setup Script for camera_gui installer -; Compile this script using Inno Setup Compiler -; Download from: https://jrsoftware.org/isdl.php - -[Setup] -AppName=Orisys Sensor Demo -AppVersion=1.0.0 -AppPublisher=Orisys -AppPublisherURL=https://orisys.com -DefaultDirName={autopf}\Orisys\SensorDemo -DefaultGroupName=Orisys Sensor Demo -AllowNoIcons=yes -LicenseFile= -OutputDir=installer -OutputBaseFilename=OrisysSensorDemo_Setup -Compression=lzma -SolidCompression=yes -WizardStyle=modern -PrivilegesRequired=admin -ArchitecturesInstallIn64BitMode=x64 - -[Languages] -Name: "english"; MessagesFile: "compiler:Default.isl" -Name: "chinese"; MessagesFile: "compiler:Languages\ChineseSimplified.isl" - -[Tasks] -Name: "desktopicon"; Description: "{cm:CreateDesktopIcon}"; GroupDescription: "{cm:AdditionalIcons}"; Flags: unchecked -Name: "quicklaunchicon"; Description: "{cm:CreateQuickLaunchIcon}"; GroupDescription: "{cm:AdditionalIcons}"; Flags: unchecked; OnlyBelowVersion: 6.1; Check: not IsAdminInstallMode - -[Files] -Source: "dist\camera_gui.exe"; DestDir: "{app}"; Flags: ignoreversion -Source: "orisys_logo_notext.png"; DestDir: "{app}"; Flags: ignoreversion -; Add any other required files here -; Source: "config\*"; DestDir: "{app}\config"; Flags: ignoreversion recursesubdirs createallsubdirs - -[Icons] -Name: "{group}\Orisys Sensor Demo"; Filename: "{app}\camera_gui.exe"; IconFilename: "{app}\orisys_logo_notext.png" -Name: "{group}\{cm:UninstallProgram,Orisys Sensor Demo}"; Filename: "{uninstallexe}" -Name: "{autodesktop}\Orisys Sensor Demo"; Filename: "{app}\camera_gui.exe"; IconFilename: "{app}\orisys_logo_notext.png"; Tasks: desktopicon -Name: "{userappdata}\Microsoft\Internet Explorer\Quick Launch\Orisys Sensor Demo"; Filename: "{app}\camera_gui.exe"; IconFilename: "{app}\orisys_logo_notext.png"; Tasks: quicklaunchicon - -[Run] -Filename: "{app}\camera_gui.exe"; Description: "{cm:LaunchProgram,Orisys Sensor Demo}"; Flags: nowait postinstall skipifsilent - -[Code] -function InitializeSetup(): Boolean; -begin - Result := True; - // Check if Visual C++ Redistributable is installed (if needed) - // Add checks here if required -end; - diff --git a/camera_gui.spec b/camera_gui.spec deleted file mode 100644 index 78191ed..0000000 --- a/camera_gui.spec +++ /dev/null @@ -1,83 +0,0 @@ -# -*- mode: python ; coding: utf-8 -*- -""" -PyInstaller spec file for camera_gui -Run: pyinstaller camera_gui.spec -""" - -import os -from PyInstaller.utils.hooks import collect_data_files, collect_submodules - -block_cipher = None - -# Collect data files -pyqtgraph_datas = collect_data_files('pyqtgraph') -pyqt5_datas = collect_data_files('PyQt5') -cv2_datas = collect_data_files('cv2') - -# Collect hidden imports -hiddenimports = [ - 'PyQt5.QtCore', - 'PyQt5.QtGui', - 'PyQt5.QtWidgets', - 'pyqtgraph', - 'pyqtgraph.graphicsItems', - 'pyqtgraph.widgets', - 'orisys', - 'cv2', - 'numpy', - 'scipy', -] - -# Add orisys submodules if available -try: - orisys_submodules = collect_submodules('orisys') - hiddenimports.extend(orisys_submodules) -except: - pass - -a = Analysis( - ['camera_gui.py'], - pathex=[], - binaries=[], - datas=[ - ('orisys_logo_notext.png', '.'), - *pyqtgraph_datas, - *pyqt5_datas, - *cv2_datas, - ], - hiddenimports=hiddenimports, - hookspath=[], - hooksconfig={}, - runtime_hooks=[], - excludes=[], - win_no_prefer_redirects=False, - win_private_assemblies=False, - cipher=block_cipher, - noarchive=False, -) - -pyz = PYZ(a.pure, a.zipped_data, cipher=block_cipher) - -exe = EXE( - pyz, - a.scripts, - a.binaries, - a.zipfiles, - a.datas, - [], - name='camera_gui', - debug=False, - bootloader_ignore_signals=False, - strip=False, - upx=True, - upx_exclude=[], - runtime_tmpdir=None, - console=False, # No console window - disable_windowed_traceback=False, - argv_emulation=False, - target_arch=None, - codesign_identity=None, - entitlements_file=None, - icon='orisys_logo_notext.png', -) - diff --git a/config/compound_eye.png b/config/compound_eye.png index 91675f5..380ef4b 100644 Binary files a/config/compound_eye.png and b/config/compound_eye.png differ