-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathsetup
More file actions
executable file
Β·417 lines (364 loc) Β· 16.5 KB
/
setup
File metadata and controls
executable file
Β·417 lines (364 loc) Β· 16.5 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
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
#!/bin/bash
# BrightSign Python CV Extension - Setup Script
# Automates Steps 0-1: Prerequisites, clone, and source download
set -e
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
# Default Configuration
BRIGHTSIGN_OS_MAJOR_VERSION=${BRIGHTSIGN_OS_MAJOR_VERSION:-9.1}
BRIGHTSIGN_OS_MINOR_VERSION=${BRIGHTSIGN_OS_MINOR_VERSION:-52}
usage() {
echo "Usage: $0 [OPTIONS]"
echo "Setup BrightSign Python CV Extension development environment"
echo ""
echo "Options:"
echo " -y, --yes Skip confirmation prompt"
echo " -v, --version VERSION Set BrightSign OS version (e.g., 9.1.52)"
echo " --major VERSION Set major.minor version (e.g., 9.1)"
echo " --minor VERSION Set minor version number (e.g., 52)"
echo " -h, --help Show this help message"
echo ""
echo "Examples:"
echo " $0 # Interactive setup with default version"
echo " $0 -y # Automatic setup, no prompts"
echo " $0 -v 9.1.53 # Setup with specific OS version"
echo " $0 --major 9.2 --minor 1 # Setup with version 9.2.1"
echo ""
echo "Default BrightSign OS version: ${BRIGHTSIGN_OS_MAJOR_VERSION}.${BRIGHTSIGN_OS_MINOR_VERSION}"
}
# Parse command line arguments
AUTO_YES=false
while [[ "$#" -gt 0 ]]; do
case $1 in
-y|--yes) AUTO_YES=true; shift ;;
-v|--version)
if [[ $2 =~ ^[0-9]+\.[0-9]+\.[0-9]+$ ]]; then
# Format: major.minor.patch
BRIGHTSIGN_OS_MAJOR_VERSION="${2%.*}"
BRIGHTSIGN_OS_MINOR_VERSION="${2##*.}"
elif [[ $2 =~ ^[0-9]+\.[0-9]+$ ]]; then
# Format: major.minor
BRIGHTSIGN_OS_MAJOR_VERSION="$2"
BRIGHTSIGN_OS_MINOR_VERSION="0"
else
echo "Invalid version format: $2. Use major.minor or major.minor.patch"
exit 1
fi
shift 2 ;;
--major)
BRIGHTSIGN_OS_MAJOR_VERSION="$2"; shift 2 ;;
--minor)
BRIGHTSIGN_OS_MINOR_VERSION="$2"; shift 2 ;;
-h|--help)
usage
exit 0
;;
*) echo "Unknown parameter: $1"; usage; exit 1 ;;
esac
done
# Set the full version string
BRIGHTSIGN_OS_VERSION=${BRIGHTSIGN_OS_MAJOR_VERSION}.${BRIGHTSIGN_OS_MINOR_VERSION}
# Colors for output
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
NC='\033[0m' # No Color
log() {
echo -e "${BLUE}[$(date +'%T')] $1${NC}"
}
warn() {
echo -e "${YELLOW}β οΈ $1${NC}"
}
error() {
echo -e "${RED}β $1${NC}"
exit 1
}
success() {
echo -e "${GREEN}β
$1${NC}"
}
# Prerequisites check
check_prerequisites() {
echo ""
echo "βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ"
log "π Checking prerequisites..."
echo "βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ"
echo ""
# Check architecture
echo "Checking system architecture..."
if [[ "$(uname -m)" != "x86_64" ]]; then
error "This build requires x86_64 architecture. Current: $(uname -m)
π‘ Solution: Use an x86_64 system or cloud VM (AWS, Google Cloud, Azure)
Apple Silicon (M1/M2/M3) is NOT compatible with RKNN toolkit"
fi
success "Architecture: x86_64 β"
echo ""
# Check Docker
echo "Checking Docker installation..."
if ! command -v docker &> /dev/null; then
error "Docker is required but not installed.
π‘ Install Docker:
β’ Linux: https://docs.docker.com/engine/install/
β’ Mac: https://docs.docker.com/docker-for-mac/install/
β’ Windows: https://docs.docker.com/docker-for-windows/install/"
fi
success "Docker: installed β"
echo ""
# Check Docker daemon
echo "Checking Docker daemon..."
if ! docker info &> /dev/null; then
error "Docker daemon is not running.
π‘ Start Docker:
β’ Linux: sudo systemctl start docker
β’ Mac/Windows: Start Docker Desktop application"
fi
success "Docker daemon: running β"
echo ""
# Check required tools
echo "Checking required tools..."
for tool in wget tar git; do
if ! command -v $tool &> /dev/null; then
error "$tool is required but not installed.
π‘ Install $tool:
β’ Debian/Ubuntu: sudo apt-get install $tool
β’ Fedora/RHEL: sudo dnf install $tool
β’ macOS: brew install $tool"
fi
done
success "Required tools (wget, tar, git): installed β"
echo ""
# Check disk space (need ~25GB)
echo "Checking disk space..."
available_space=$(df . | awk 'NR==2 {print $4}')
required_space=$((25 * 1024 * 1024)) # 25GB in KB
if [[ $available_space -lt $required_space ]]; then
warn "Warning: Less than 25GB free space available. Build may fail."
warn "Available: $(($available_space / 1024 / 1024))GB, Recommended: 25GB+"
echo ""
echo "π‘ Free up space by:"
echo " β’ Removing unused Docker images: docker system prune -a"
echo " β’ Clearing package caches"
echo " β’ Moving project to larger disk"
else
success "Disk space: $(($available_space / 1024 / 1024))GB available β"
fi
echo ""
echo "βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ"
success "β
All prerequisites satisfied"
echo "βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ"
echo ""
}
# Setup Docker build environment
setup_docker() {
echo "βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ"
log "π³ Setting up Docker build environment..."
echo "βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ"
echo ""
# Download Dockerfile if not present
if [[ ! -f "Dockerfile" ]]; then
log "π₯ Downloading Dockerfile..."
wget "https://raw.githubusercontent.com/brightsign/extension-template/refs/heads/main/Dockerfile" || \
error "Failed to download Dockerfile
π‘ Troubleshooting:
β’ Check internet connection
β’ Try downloading manually from:
https://github.com/brightsign/extension-template/blob/main/Dockerfile"
fi
success "Dockerfile ready β"
echo ""
# Build Docker image
log "π¨ Building Docker image..."
echo "β±οΈ This will take 5-10 minutes (downloads BrightSign OS source)"
echo "π‘ Progress: Watch for 'Step X/Y' messages below"
echo ""
docker build --rm \
--build-arg USER_ID=$(id -u) \
--build-arg GROUP_ID=$(id -g) \
--build-arg BRIGHTSIGN_OS_VERSION=${BRIGHTSIGN_OS_VERSION} \
--ulimit memlock=-1:-1 \
-t bsoe-build . || error "Failed to build Docker image
π‘ Common issues:
β’ Docker daemon not running β Start Docker service
β’ Insufficient disk space β Free up at least 25GB
β’ Network timeout β Retry with better internet connection
β’ Permission denied β Ensure user is in 'docker' group:
sudo usermod -aG docker \$USER && newgrp docker"
success "Docker image built β"
echo ""
# Create srv directory
log "π Creating workspace directories..."
mkdir -p srv
success "Workspace directories created β"
echo ""
echo "βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ"
success "β
Docker environment ready"
echo "βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ"
echo ""
}
# Clone rknn-toolkit2 repository
clone_rknn_toolkit() {
echo "βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ"
log "π¦ Cloning rknn-toolkit2 repository..."
echo "βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ"
echo ""
# Create toolkit directory if it doesn't exist
mkdir -p toolkit
# Clone or update rknn-toolkit2
if [[ -d "toolkit/rknn-toolkit2" ]]; then
log "π rknn-toolkit2 already exists, updating..."
cd toolkit/rknn-toolkit2
git fetch || warn "β οΈ Failed to fetch updates (using existing version)"
git checkout v2.3.2 || warn "β οΈ Failed to checkout v2.3.2 tag (using current version)"
cd ../..
else
log "π₯ Cloning rknn-toolkit2 from GitHub..."
echo "β±οΈ This may take 2-3 minutes depending on your connection"
echo ""
cd toolkit
git clone https://github.com/airockchip/rknn-toolkit2.git || error "Failed to clone rknn-toolkit2
π‘ Troubleshooting:
β’ Check internet connection
β’ Verify GitHub is accessible
β’ Try cloning manually:
cd toolkit
git clone https://github.com/airockchip/rknn-toolkit2.git"
cd rknn-toolkit2
git checkout v2.3.2 || error "Failed to checkout v2.3.2 tag"
cd ../..
success "rknn-toolkit2 cloned successfully β"
fi
echo ""
# Verify the wheel file exists (v2.3.2)
log "π Verifying wheel file..."
WHEEL_PATH="toolkit/rknn-toolkit2/rknn-toolkit-lite2/packages/rknn_toolkit_lite2-2.3.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl"
if [[ -f "$WHEEL_PATH" ]]; then
success "rknn-toolkit-lite2 wheel file found β"
else
error "Expected wheel file not found at: $WHEEL_PATH
π‘ This usually means the repository was not cloned correctly.
Try removing and re-cloning:
rm -rf toolkit/rknn-toolkit2
./setup"
fi
echo ""
echo "βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ"
success "β
rknn-toolkit2 ready"
echo "βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ"
echo ""
}
# Clone rknn_model_zoo repository
clone_rknn_model_zoo() {
echo "βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ"
log "π¦ Cloning rknn_model_zoo repository..."
echo "βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ"
echo ""
# Clone or update rknn_model_zoo
if [[ -d "toolkit/rknn_model_zoo" ]]; then
log "π rknn_model_zoo already exists, updating..."
cd toolkit/rknn_model_zoo
git fetch || warn "β οΈ Failed to fetch updates (using existing version)"
git checkout v2.3.2 || warn "β οΈ Failed to checkout v2.3.2 tag (using current version)"
cd ../..
else
log "π₯ Cloning rknn_model_zoo from GitHub..."
echo "β±οΈ This may take 2-3 minutes depending on your connection"
echo ""
cd toolkit
git clone https://github.com/airockchip/rknn_model_zoo.git || error "Failed to clone rknn_model_zoo
π‘ Troubleshooting:
β’ Check internet connection
β’ Verify GitHub is accessible
β’ Try cloning manually:
cd toolkit
git clone https://github.com/airockchip/rknn_model_zoo.git"
cd rknn_model_zoo
git checkout v2.3.2 || error "Failed to checkout v2.3.2 tag"
cd ../..
success "rknn_model_zoo cloned successfully β"
fi
echo ""
# Verify yolox example exists
log "π Verifying model zoo examples..."
YOLOX_PATH="toolkit/rknn_model_zoo/examples/yolox/python"
if [[ -d "$YOLOX_PATH" ]]; then
success "rknn_model_zoo examples found β"
else
error "Expected yolox example not found at: $YOLOX_PATH
π‘ This usually means the repository was not cloned correctly.
Try removing and re-cloning:
rm -rf toolkit/rknn_model_zoo
./setup"
fi
echo ""
echo "βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ"
success "β
rknn_model_zoo ready (50+ NPU-optimized models available)"
echo "βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ"
echo ""
}
# Main setup function
main() {
echo "BrightSign Python CV Extension - Setup Script"
echo "============================================="
echo "This script will:"
echo "1. Check prerequisites"
echo "2. Setup Docker build environment"
echo "3. Clone rknn-toolkit2 repository"
echo "4. Clone rknn_model_zoo repository"
echo "5. Download BrightSign OS source (~2-3 GB) inside Docker container"
echo ""
echo "Building for BrightSign OS version: ${BRIGHTSIGN_OS_VERSION}"
echo ""
# Confirm execution if AUTO_YES is not set
if [[ "$AUTO_YES" != true ]]; then
read -p "Continue? [y/N] " -n 1 -r
echo
if [[ ! $REPLY =~ ^[Yy]$ ]]; then
echo "Setup cancelled."
exit 0
fi
else
log "Automatic mode: skipping confirmation prompt"
fi
start_time=$(date +%s)
check_prerequisites
setup_docker
clone_rknn_toolkit
clone_rknn_model_zoo
end_time=$(date +%s)
duration=$((end_time - start_time))
echo ""
echo "βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ"
echo "π SETUP COMPLETE"
echo "βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ"
success "Completed in $(($duration / 60))m $(($duration % 60))s"
echo ""
echo "π Next Steps:"
echo ""
echo "1. Build the SDK (30-60 minutes):"
echo " ./build --extract-sdk"
echo ""
echo "2. Package the extension (5 minutes):"
echo " ./package"
echo ""
echo "3. Deploy to player:"
echo " See docs/deployment.md for complete instructions"
echo ""
echo "4. Test with Model Zoo:"
echo " See docs/model-zoo-guide.md for NPU inference examples"
echo ""
echo "π Documentation:"
echo " β’ Quick start: QUICKSTART.md"
echo " β’ Command reference: WORKFLOWS.md"
echo " β’ FAQ: FAQ.md"
echo " β’ Getting started guide: docs/getting-started.md"
echo ""
echo "π‘ Environment variables:"
echo " export BRIGHTSIGN_OS_VERSION=${BRIGHTSIGN_OS_VERSION}"
echo " export project_root=$(pwd)"
echo ""
echo "βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ"
echo ""
}
# Run main function if script is executed directly
if [[ "${BASH_SOURCE[0]}" == "${0}" ]]; then
main "$@"
fi