-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathRodSizer_Launcher_Windows.bat
More file actions
181 lines (157 loc) · 5.3 KB
/
Copy pathRodSizer_Launcher_Windows.bat
File metadata and controls
181 lines (157 loc) · 5.3 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
@echo off
cd /d "%~dp0"
setlocal enabledelayedexpansion
set "PROJECT_DIR=%CD%"
set "BACKEND_DIR=%PROJECT_DIR%\backend"
set "VENV_DIR=%PROJECT_DIR%\.venv"
set "VENV_PYTHON=%VENV_DIR%\Scripts\python.exe"
set "APP_URL=http://127.0.0.1:8501"
echo ==================================================
echo RodSizer - Launcher
echo ==================================================
echo.
set "PY_EXE="
REM --- 1. Try 'python' command ---
python --version >nul 2>&1
if %errorlevel% equ 0 set "PY_EXE=python"
if defined PY_EXE goto FOUND_PYTHON
REM --- 2. Try 'py' launcher ---
py --version >nul 2>&1
if !errorlevel! equ 0 set "PY_EXE=py"
if defined PY_EXE goto FOUND_PYTHON
REM --- 3. Try Auto-Detect Common Paths ---
if exist "C:\Python39\python.exe" set "PY_EXE=C:\Python39\python.exe" & goto FOUND_PYTHON
if exist "C:\Python310\python.exe" set "PY_EXE=C:\Python310\python.exe" & goto FOUND_PYTHON
if exist "C:\Python311\python.exe" set "PY_EXE=C:\Python311\python.exe" & goto FOUND_PYTHON
if exist "C:\Program Files\Python39\python.exe" set "PY_EXE=C:\Program Files\Python39\python.exe" & goto FOUND_PYTHON
if exist "C:\Program Files\Python310\python.exe" set "PY_EXE=C:\Program Files\Python310\python.exe" & goto FOUND_PYTHON
if exist "C:\Program Files\Python311\python.exe" set "PY_EXE=C:\Program Files\Python311\python.exe" & goto FOUND_PYTHON
REM --- 4. User Input Fallback ---
:ASK_USER
echo.
echo [ERROR] Could not find Python automatically.
echo.
echo Please locate your 'python.exe' file.
echo TIP: Look in "C:\Program Files\Python3x" or "AppData\Local\Programs\Python"
echo.
echo IMPORTANT: Drag the FILE, not a shortcut.
echo.
set /p "PY_EXE=Drag and Drop python.exe here and press Enter: "
set "PY_EXE=!PY_EXE:"=!"
REM Validate Shortcut
echo "!PY_EXE!" | findstr /i ".lnk" >nul
if %errorlevel% equ 0 (
echo.
echo [ERROR] You provided a Shortcut (.lnk).
echo Please use the real python.exe.
goto ASK_USER
)
:FOUND_PYTHON
echo.
echo [INFO] Using Python: "!PY_EXE!"
REM Verify selected Python
"!PY_EXE!" --version >nul 2>&1
if errorlevel 1 (
echo.
echo [CRITICAL ERROR] Selected python path is invalid.
pause
exit /b 1
)
if not exist "%BACKEND_DIR%\requirements.txt" (
echo.
echo [CRITICAL ERROR] Missing backend\requirements.txt
pause
exit /b 1
)
if not exist "%BACKEND_DIR%\main.py" (
echo.
echo [CRITICAL ERROR] Missing backend\main.py
pause
exit /b 1
)
REM --- 4b. Tesseract OCR (optional) ---
REM Used to auto-read the pixel size / scale bar burned into camera-export
REM images. RodSizer still runs without it (manual calibration remains).
where tesseract >nul 2>&1
if %errorlevel% neq 0 (
if not exist "C:\Program Files\Tesseract-OCR\tesseract.exe" (
where winget >nul 2>&1
if !errorlevel! equ 0 (
echo [INFO] Installing Tesseract OCR for automatic scale-bar reading...
winget install --id UB-Mannheim.TesseractOCR -e --silent --accept-source-agreements --accept-package-agreements >nul 2>&1
) else (
echo [INFO] Tesseract OCR not found and winget unavailable - skipping.
echo Auto scale-bar reading will be off; manual calibration still works.
)
)
)
REM --- 5. Setup Virtual Environment ---
if exist "%VENV_PYTHON%" goto CHECK_ENV
echo.
echo [First Run] Setting up Python environment...
"!PY_EXE!" -m venv "%VENV_DIR%"
if errorlevel 1 (
echo.
echo [CRITICAL ERROR] Failed to create virtual environment.
pause
exit /b 1
)
REM Clear screen to focus attention
cls
echo ==================================================================
echo FIRST RUN SETUP - INSTALLING DEPENDENCIES
echo ==================================================================
echo.
echo Downloading: OpenCV, NumPy, FastAPI, Uvicorn, and others...
echo.
echo PLEASE WAIT: This typically takes 1-3 minutes.
echo You will see download progress below.
echo.
echo (Do not close this window)
echo.
echo ==================================================================
echo.
REM Give user 2 seconds to read before text flies by
timeout /t 2 >nul
"%VENV_PYTHON%" -m pip install --upgrade pip
if errorlevel 1 (
echo.
echo [CRITICAL ERROR] Failed to upgrade pip.
pause
exit /b 1
)
"%VENV_PYTHON%" -m pip install -r "%BACKEND_DIR%\requirements.txt"
if errorlevel 1 (
echo.
echo [CRITICAL ERROR] Dependency installation failed.
echo Please run RodSizer_DEBUG_Windows.bat for a guided repair.
pause
exit /b 1
)
:CHECK_ENV
echo.
echo [INFO] Checking Python environment...
"%VENV_PYTHON%" -c "import cv2, numpy, fastapi, uvicorn, pandas, openpyxl, multipart, tifffile, h5py, skimage, scipy; import ncempy.io" >nul 2>&1
if errorlevel 1 (
echo.
echo [CRITICAL ERROR] The RodSizer environment is incomplete or damaged.
echo Please run RodSizer_DEBUG_Windows.bat to repair it.
pause
exit /b 1
)
echo Activating environment...
REM --- 6. Open Browser ---
echo.
echo Starting Server on PORT 8501...
echo The browser will open in 10 seconds...
echo.
echo IF PAGE FAILS TO LOAD:
echo 1. Keep this window open.
echo 2. Open Chrome/Edge and go to: %APP_URL%
echo.
start "" cmd /c "timeout /t 10 >nul & start %APP_URL%"
REM --- 7. Run Server ---
echo Close this window to stop the app.
cd /d "%BACKEND_DIR%"
"%VENV_PYTHON%" -m uvicorn main:app --reload --host 127.0.0.1 --port 8501
pause