174 lines
5.7 KiB
Bash
Executable File
174 lines
5.7 KiB
Bash
Executable File
#!/bin/bash
|
|
|
|
# Function to create virtual environment, install the wheel, and copy assets and libs
|
|
install_and_setup() {
|
|
echo "Creating virtual environment at the root..."
|
|
python3.10 -m venv "$ROOT_DIR/venv" >/dev/null 2>&1
|
|
if [ $? -ne 0 ]; then
|
|
echo "Failed to create virtual environment."
|
|
exit 1
|
|
fi
|
|
|
|
echo "Activating virtual environment..."
|
|
source "$ROOT_DIR/venv/bin/activate"
|
|
|
|
echo "Installing the wheel..."
|
|
pip install "$BUILD_DIR"/ultimateAlprSdk-*.whl >/dev/null 2>&1
|
|
if [ $? -ne 0 ]; then
|
|
echo "Failed to install the wheel."
|
|
exit 1
|
|
fi
|
|
|
|
echo "Deactivating virtual environment..."
|
|
deactivate
|
|
|
|
echo "Copying assets and libs folders to the root directory..."
|
|
cp -r "$BUILD_DIR/assets" "$ROOT_DIR"
|
|
cp -r "$BUILD_DIR/libs" "$ROOT_DIR"
|
|
|
|
if [ -f "$ROOT_DIR/requirements.txt" ]; then
|
|
echo "Installing requirements..."
|
|
source "$ROOT_DIR/venv/bin/activate"
|
|
pip install -r "$ROOT_DIR/requirements.txt" >/dev/null 2>&1
|
|
if [ $? -ne 0 ]; then
|
|
echo "Failed to install requirements."
|
|
exit 1
|
|
fi
|
|
deactivate
|
|
fi
|
|
|
|
rm -rf "$BUILD_DIR"
|
|
|
|
echo "Virtual environment created and wheel installed successfully."
|
|
echo "Assets and libs folders copied to the root directory."
|
|
|
|
echo "Setup completed."
|
|
}
|
|
|
|
# Function to prompt user for auto setup choice
|
|
prompt_auto_setup() {
|
|
read -r -p "Do you want to automatically create a new virtual environment, install the wheel and copy the assets and libs? (y/n): " choice
|
|
case "$choice" in
|
|
y|Y ) install_and_setup;;
|
|
n|N ) echo "Setup completed.";;
|
|
* ) echo "Invalid choice. Please run the script again and choose y or n.";;
|
|
esac
|
|
}
|
|
|
|
# Directories
|
|
ROOT_DIR=$(pwd)
|
|
BUILD_DIR="$ROOT_DIR/tmp-build-env"
|
|
SDK_ZIP_URL="https://github.com/DoubangoTelecom/ultimateALPR-SDK/archive/8130c76140fe8edc60fe20f875796121a8d22fed.zip"
|
|
SDK_ZIP="$BUILD_DIR/temp-sdk.zip"
|
|
SDK_DIR="$BUILD_DIR/temp-sdk"
|
|
BIN_DIR="$SDK_DIR/binaries/linux/x86_64"
|
|
|
|
# Create build environment
|
|
mkdir -p "$BUILD_DIR"
|
|
cd "$BUILD_DIR" || exit
|
|
|
|
# Clone SDK
|
|
echo "Downloading SDK..."
|
|
wget "$SDK_ZIP_URL" -O "$SDK_ZIP" >/dev/null 2>&1
|
|
if [ $? -ne 0 ]; then
|
|
echo "Failed to download SDK."
|
|
exit 1
|
|
fi
|
|
|
|
echo "Unzipping SDK..."
|
|
unzip "$SDK_ZIP" >/dev/null 2>&1
|
|
rm "$SDK_ZIP"
|
|
mkdir "$SDK_DIR"
|
|
mv ultimateALPR-SDK*/* "$SDK_DIR"
|
|
rm -r ultimateALPR-SDK*
|
|
|
|
# Create environment to build ultimatealpr-sdk for Python
|
|
echo "Creating virtual environment for building SDK..."
|
|
python3.10 -m venv "$BUILD_DIR/venv" >/dev/null 2>&1
|
|
if [ $? -ne 0 ]; then
|
|
echo "Failed to create virtual environment."
|
|
exit 1
|
|
fi
|
|
|
|
echo "Activating virtual environment..."
|
|
source "$BUILD_DIR/venv/bin/activate"
|
|
|
|
echo "Installing build dependencies..."
|
|
pip install setuptools wheel Cython >/dev/null 2>&1
|
|
if [ $? -ne 0 ]; then
|
|
echo "Failed to install build dependencies."
|
|
exit 1
|
|
fi
|
|
|
|
# Move folders to simplify build
|
|
mkdir -p "$BIN_DIR/c++"
|
|
mv "$SDK_DIR/c++"/* "$BIN_DIR/c++"
|
|
mv "$SDK_DIR/python"/* "$BIN_DIR/"
|
|
|
|
# Edit setup.py to simplify build
|
|
echo "Editing setup.py for simplified build..."
|
|
cd "$BIN_DIR" || exit
|
|
sed -i "s|sources=\[os.path.abspath('../../../python/ultimateALPR-SDK-API-PUBLIC-SWIG_python.cxx')\]|sources=[os.path.abspath('ultimateALPR-SDK-API-PUBLIC-SWIG_python.cxx')]|g" setup.py
|
|
sed -i "s|include_dirs=\['../../../c++'\]|include_dirs=['c++']|g" setup.py
|
|
sed -i "s|library_dirs=\['.'\]|library_dirs=['libs']|g" setup.py
|
|
|
|
# Move all .so files into libs folder
|
|
mkdir "$BIN_DIR/libs"
|
|
mv "$BIN_DIR/"*.so* "$BIN_DIR/libs"
|
|
|
|
# Download TensorFlow
|
|
read -r -p "Do you want TensorFlow for CPU or GPU? (cpu/gpu): " tf_choice
|
|
mkdir -p "$BIN_DIR/tensorflow"
|
|
if [ "$tf_choice" == "gpu" ]; then
|
|
echo "Downloading TensorFlow GPU..."
|
|
wget https://storage.googleapis.com/tensorflow/libtensorflow/libtensorflow-gpu-linux-x86_64-2.6.0.tar.gz >/dev/null 2>&1
|
|
if [ $? -ne 0 ]; then
|
|
echo "Failed to download TensorFlow GPU."
|
|
exit 1
|
|
fi
|
|
echo "Extracting TensorFlow GPU..."
|
|
tar -xf libtensorflow-gpu-linux-x86_64-2.6.0.tar.gz -C "$BIN_DIR/tensorflow" >/dev/null 2>&1
|
|
else
|
|
echo "Downloading TensorFlow CPU..."
|
|
wget https://storage.googleapis.com/tensorflow/libtensorflow/libtensorflow-cpu-linux-x86_64-2.6.0.tar.gz >/dev/null 2>&1
|
|
if [ $? -ne 0 ]; then
|
|
echo "Failed to download TensorFlow CPU."
|
|
exit 1
|
|
fi
|
|
echo "Extracting TensorFlow CPU..."
|
|
tar -xf libtensorflow-cpu-linux-x86_64-2.6.0.tar.gz -C "$BIN_DIR/tensorflow" >/dev/null 2>&1
|
|
fi
|
|
|
|
mv "$BIN_DIR/tensorflow/lib/"* "$BIN_DIR/libs/"
|
|
cp "$BIN_DIR/libs/libtensorflow.so.2" "$BIN_DIR/libs/libtensorflow.so.1"
|
|
|
|
# Build the wheel
|
|
echo "Building the wheel..."
|
|
python "$BIN_DIR/setup.py" bdist_wheel -v >/dev/null 2>&1
|
|
if [ $? -ne 0 ]; then
|
|
echo "Failed to build the wheel."
|
|
exit 1
|
|
fi
|
|
|
|
# Move the built wheel and the libs back to the root directory
|
|
mv "$BIN_DIR/dist/"*.whl "$BUILD_DIR"
|
|
mv "$BIN_DIR/libs" "$BUILD_DIR"
|
|
mv "$BIN_DIR/plugins.xml" "$BUILD_DIR/libs"
|
|
|
|
# Move the assets to the root directory
|
|
mv "$SDK_DIR/assets" "$BUILD_DIR/assets"
|
|
|
|
# Deactivate and clean up the build virtual environment
|
|
echo "Deactivating and cleaning up virtual environment..."
|
|
deactivate
|
|
cd "$ROOT_DIR" || exit
|
|
rm -rf "$BUILD_DIR/venv"
|
|
rm -rf "$SDK_DIR"
|
|
|
|
# Inform the user of the successful build
|
|
echo "UltimateALPR SDK built and setup successfully."
|
|
echo "You can now create a virtual environment, install the wheel and copy the assets and libs and start developing. Say 'y' to the next prompt to do this automatically (recommended)."
|
|
echo "Tip: Look at the assets folder as you might not need all the models depending on your platform/use case."
|
|
# Prompt user for auto setup choice
|
|
prompt_auto_setup
|