-
Notifications
You must be signed in to change notification settings - Fork 205
Expand file tree
/
Copy pathinstall_dependencies.sh
More file actions
executable file
·277 lines (244 loc) · 8.24 KB
/
install_dependencies.sh
File metadata and controls
executable file
·277 lines (244 loc) · 8.24 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
#!/bin/bash
trap 'RET=$? ; echo -e >&2 "\n\x1b[31mFailed installing dependencies. Could be a bug in the installer or unsupported platform. Open a bug report over at https://github.com/luxonis/depthai - exited with status $RET at line $LINENO \x1b[0m\n" ;
exit $RET' ERR
readonly linux_pkgs=(
python3
python3-pip
udev
cmake
git
python3-numpy
)
readonly debian_pkgs=(
${linux_pkgs[@]}
# https://docs.opencv.org/master/d7/d9f/tutorial_linux_install.html
build-essential
libgtk2.0-dev
pkg-config
libavcodec-dev
libavformat-dev
libswscale-dev
python3-dev
libtbb-dev
libjpeg-dev
libpng-dev
libtiff-dev
# https://stackoverflow.com/questions/55313610
ffmpeg
libsm6
libxext6
python3-pyqt5
python3-pyqt5.qtquick
qml-module-qtquick-controls2
qml-module-qt-labs-platform
qtdeclarative5-dev
qml-module-qtquick2
qtbase5-dev
qtchooser
qt5-qmake
qtbase5-dev-tools
qml-module-qtquick-layouts
qml-module-qtquick-window2
)
readonly debian_arm_pkgs=(
${linux_pkgs[@]}
# https://docs.opencv.org/master/d7/d9f/tutorial_linux_install.html
build-essential
libgtk2.0-dev
pkg-config
libavcodec-dev
libavformat-dev
libswscale-dev
python3-dev
libtbb-dev
libjpeg-dev
libpng-dev
libtiff-dev
# https://stackoverflow.com/questions/55313610
ffmpeg
libsm6
libxext6
python3-pyqt5
python3-pyqt5.qtquick
qml-module-qtquick-controls2
qml-module-qt-labs-platform
qtdeclarative5-dev
qml-module-qtquick2
qtbase5-dev
qtchooser
qt5-qmake
qtbase5-dev-tools
qml-module-qtquick-layouts
qml-module-qtquick-window2
# https://stackoverflow.com/a/53402396/5494277
libhdf5-dev
libhdf5-dev
libatlas-base-dev
# https://github.com/EdjeElectronics/TensorFlow-Object-Detection-on-the-Raspberry-Pi/issues/18#issuecomment-433953426
libilmbase-dev
libopenexr-dev
libgstreamer1.0-dev
)
readonly debian_pkgs_pre22_04=(
libdc1394-22-dev
libgl1-mesa-glx
libtbb2
)
readonly debian_pkgs_post22_04=(
libdc1394-dev
libgl1-mesa-glx
libtbbmalloc2
)
readonly debian_pkgs_23=(
libdc1394-dev
libgl1-mesa-dev
libtbbmalloc2
)
readonly fedora_pkgs=(
${linux_pkgs[@]}
gtk2-devel
# Fedora uses pkgconf instead of pkg-config
tbb-devel
libjpeg-turbo-devel
libpng-devel
libtiff-devel
libdc1394-devel
# TODO(PM): ffmpeg requires enabling rpmfusion-free-updates
# TODO(PM): libavcodec-dev libavformat-dev libswscale-dev python-dev libtbb2
# libsm6 libxext6 libgl1-mesa-glx
)
print_action () {
green="\e[0;32m"
reset="\e[0;0m"
printf "\n$green >>$reset $*\n"
}
print_and_exec () {
print_action $*
$*
}
version_lte() {
[[ "$1" == "$(echo -e "$1\n$2" | sort -V | head -n1)" ]]
}
declare -A debian_versions=(
["trixie/sid"]="13"
["bookworm/sid"]="12"
["bullseye/sid"]="11"
["buster/sid"]="10"
["stretch/sid"]="9"
["jessie/sid"]="8"
["wheezy/sid"]="7"
["squeeze/sid"]="6"
)
# Function to lookup and print Debian version number
lookup_debian_version_number() {
debian_version_string="$1"
version_number="${debian_versions[$debian_version_string]}"
if [ -n "$version_number" ]; then
echo "$version_number"
else
echo "None"
fi
}
if [[ $(uname) == "Darwin" ]]; then
if ! command -v brew &> /dev/null; then
echo "During Homebrew install, certain commands need 'sudo'. Requesting access..."
sudo true
homebrew_install_url="https://raw.githubusercontent.com/Homebrew/install/master/install.sh"
print_action "Installing Homebrew from $homebrew_install_url"
# CI=1 will skip some interactive prompts
CI=1 /bin/bash -c "$(curl -fsSL $homebrew_install_url)"
echo
echo "=== Installed successfully! IMPORTANT: For changes to take effect,"
echo "please close and reopen the terminal window, or run: exec \$SHELL"
else
echo "Homebrew is already installed."
fi
if ! command -v git &> /dev/null; then
echo "Git not found, installing using Homebrew..."
print_and_exec brew install git
else
echo "Git Already installed.."
fi
elif [ -f /etc/os-release ]; then
source /etc/os-release
if [ -f /etc/debian_version ]; then
output=$(cat /etc/debian_version)
echo $output
if [[ $output == *sid ]]; then
version=$(lookup_debian_version_number $output)
else
version=$output
fi
# Correctly determine if the architecture is ARM or aarch64
IS_ARM=false
if [[ $(uname -m) =~ ^arm* || $(uname -m) == "aarch64" ]]; then
IS_ARM=true
fi
echo "$version"
echo "$IS_ARM"
if [ $IS_ARM ]; then
sudo DEBIAN_FRONTEND=noninteractive apt install -y "${debian_arm_pkgs[@]}"
if [[ $version == 13* ]]; then
echo "Detected ARM Debian 13"
sudo apt install -y "${debian_pkgs_23[@]}"
elif version_lte "$version" "11.99"; then
echo "Using pre-22.04 ARM package list"
sudo apt-get install -y ${debian_pkgs_pre22_04[@]}
# Check for uvcdynctrl package and recommend removal if found
if dpkg -s uvcdynctrl &> /dev/null; then
echo -e "\033[33mWe detected 'uvcdynctrl' installed on your system.\033[0m"
# Instructions for removal
echo -e "\033[33m$ sudo apt remove uvcdynctrl uvcdynctrl-data\033[0m"
echo -e "\033[33m$ sudo rm -f /var/log/uvcdynctrl-udev.log\033[0m"
fi
else
echo "Using post-22.04 ARM package list"
sudo apt-get install -y ${debian_pkgs_post22_04[@]}
fi
# Add libjasper-dev for ARM but not aarch64
[[ $(uname -m) =~ ^arm* ]] && { sudo apt install -y libjasper-dev; }
else
sudo DEBIAN_FRONTEND=noninteractive apt install -y "${debian_pkgs[@]}"
if [[ $version == 13* ]]; then
echo "Detected Debian 13"
sudo apt install -y "${debian_pkgs_23[@]}"
elif version_lte "$version" "11.99"; then
echo "Using pre-22.04 package list"
sudo apt-get install -y "${debian_pkgs_pre22_04[@]}"
else
echo "Using post-22.04 package list"
sudo apt-get install -y "${debian_pkgs_post22_04[@]}"
fi
fi
# Check for uvcdynctrl package and recommend removal if found
if dpkg -s uvcdynctrl &> /dev/null; then
echo -e "\033[33mWe detected 'uvcdynctrl' installed on your system.\033[0m"
# Instructions for removal
echo -e "\033[33m$ sudo apt remove uvcdynctrl uvcdynctrl-data\033[0m"
echo -e "\033[33m$ sudo rm -f /var/log/uvcdynctrl-udev.log\033[0m"
fi
if [ "$VERSION_ID" == "21.04" ]; then
echo -e "\033[33mThere are known issues with running our demo script on Ubuntu 21.04, due to package \"python3-pyqt5.sip\" not being in a correct version (>=12.9)\033[0m"
echo -e "\033[33mWe recommend installing the updated version manually using the following commands\033[0m"
echo -e "\033[33m$ wget http://mirrors.kernel.org/ubuntu/pool/universe/p/pyqt5-sip/python3-pyqt5.sip_12.9.0-1_amd64.deb\033[0m"
echo -e "\033[33m$ sudo dpkg -i python3-pyqt5.sip_12.9.0-1_amd64.deb\033[0m"
echo ""
fi
elif [[ "$ID" == "fedora" ]]; then
sudo dnf update -y
sudo dnf install -y "${fedora_pkgs[@]}"
sudo dnf groupinstall -y "Development Tools" "Development Libraries"
python3 -m pip install --upgrade pip
else
echo "ERROR: Distribution not supported"
exit 99
fi
# Allow all users to read and write to Myriad X devices
echo "Installing udev rules..."
echo 'SUBSYSTEM=="usb", ATTRS{idVendor}=="03e7", MODE="0666"' | sudo tee /etc/udev/rules.d/80-movidius.rules > /dev/null
sudo udevadm control --reload-rules && sudo udevadm trigger
else
echo "ERROR: Host not supported"
exit 99
fi
echo "Finished installing global libraries."