Skip to content

Commit

Permalink
object-detection*: Use SDK to build library libjpeg-turbo
Browse files Browse the repository at this point in the history
  • Loading branch information
pataxis committed Sep 6, 2024
1 parent de79a86 commit 3ef1997
Show file tree
Hide file tree
Showing 4 changed files with 119 additions and 72 deletions.
80 changes: 55 additions & 25 deletions object-detection-cv25/Dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -6,37 +6,67 @@ ARG SDK=acap-native-sdk

FROM ${REPO}/${SDK}:${VERSION}-${ARCH}-ubuntu${UBUNTU_VERSION}

# Build libjpeg-turbo
WORKDIR /opt/build
RUN apt-get update && apt-get install --no-install-recommends -y cmake && \
# Set general arguments
ARG ARCH
ARG SDK_LIB_PATH_BASE=/opt/axis/acapsdk/sysroots/${ARCH}/usr
ARG BUILD_DIR=/opt/build

#-------------------------------------------------------------------------------
# Prepare build environment
#-------------------------------------------------------------------------------

# Install build dependencies for library cross compilation
RUN DEBIAN_FRONTEND=noninteractive \
apt-get update && apt-get install -y -f --no-install-recommends \
cmake && \
apt-get clean && \
rm -rf /var/lib/apt/lists/*
RUN git clone --branch 2.0.6 https://github.com/libjpeg-turbo/libjpeg-turbo.git

WORKDIR /opt/build/libjpeg-turbo/build
RUN CC=/usr/bin/aarch64-linux-gnu-gcc cmake -G"Unix Makefiles" .. && make
#-------------------------------------------------------------------------------
# Build libjpeg-turbo
#-------------------------------------------------------------------------------

# Copy the built libraries to application folder
ARG BUILD_DIR_JPEG=/opt/build/libjpeg-turbo
WORKDIR /opt/app/lib
RUN cp ${BUILD_DIR_JPEG}/build/*.so* .
WORKDIR /opt/app/include
RUN cp ${BUILD_DIR_JPEG}/build/*.h . && \
cp ${BUILD_DIR_JPEG}/*.h .
ARG JPEGTURBO_VERSION=2.0.6
ARG JPEGTURBO_GIT_REPO=https://github.com/libjpeg-turbo/libjpeg-turbo
ARG JPEGTURBO_VERSION_DIR=libjpeg-turbo-${JPEGTURBO_VERSION}
ARG JPEGTURBO_DIR=${BUILD_DIR}/libjpeg-turbo
ARG JPEGTURBO_SRC_DIR=${JPEGTURBO_DIR}/${JPEGTURBO_VERSION_DIR}
ARG JPEGTURBO_BUILD_DIR=${JPEGTURBO_DIR}/build

WORKDIR /opt/app
COPY ./app /opt/app/
WORKDIR ${JPEGTURBO_DIR}
SHELL ["/bin/bash", "-o", "pipefail", "-c"]
RUN curl -fsSL ${JPEGTURBO_GIT_REPO}/releases/download/${JPEGTURBO_VERSION}/${JPEGTURBO_VERSION_DIR}.tar.gz | tar -xz

# Download the labels
RUN mkdir -p label && \
curl -L -o label/labels.txt https://github.com/google-coral/test_data/raw/master/coco_labels.txt
WORKDIR ${JPEGTURBO_SRC_DIR}
RUN . /opt/axis/acapsdk/environment-setup* && \
pwd && ls -la && \
cmake -G"Unix Makefiles" \
-DCMAKE_INSTALL_PREFIX:PATH=${JPEGTURBO_BUILD_DIR} \
. && \
make -j && \
make install

# Setup the model directory and get pretrained models
RUN mkdir -p model && \
curl -o model/converted_model.bin https://acap-ml-model-storage.s3.amazonaws.com/SSD_Mobilenet_Ambarella/ambarella_ssd.bin && \
curl -o model/anchor_boxes.bin https://acap-ml-model-storage.s3.amazonaws.com/SSD_Mobilenet_Ambarella/anchor_boxes.bin
#-------------------------------------------------------------------------------
# Get models and labels
#-------------------------------------------------------------------------------

# Building the ACAP application
RUN cp /opt/app/manifest.json.cv25 /opt/app/manifest.json && \
# Download pretrained models
WORKDIR /opt/app/model
ARG CHIP=cv25
RUN curl -o converted_model.bin https://acap-ml-model-storage.s3.amazonaws.com/SSD_Mobilenet_Ambarella/ambarella_ssd.bin && \
curl -o anchor_boxes.bin https://acap-ml-model-storage.s3.amazonaws.com/SSD_Mobilenet_Ambarella/anchor_boxes.bin

WORKDIR /opt/app/label
RUN curl -L -o labels.txt https://github.com/google-coral/test_data/raw/master/coco_labels.txt

#-------------------------------------------------------------------------------
# Build ACAP application
#-------------------------------------------------------------------------------

WORKDIR /opt/app
COPY ./app .
RUN cp /opt/app/manifest.json.${CHIP} /opt/app/manifest.json && \
. /opt/axis/acapsdk/environment-setup* && acap-build . \
-a 'label/labels.txt' -a 'model/converted_model.bin' -a 'model/anchor_boxes.bin'
-a 'label/labels.txt' \
-a 'model/converted_model.bin' \
-a 'model/anchor_boxes.bin'
15 changes: 9 additions & 6 deletions object-detection-cv25/app/Makefile
Original file line number Diff line number Diff line change
@@ -1,13 +1,14 @@
PROG1 = object_detection
OBJS1 = $(PROG1).c argparse.c imgprovider.c imgutils.c postprocessing.c
PROGS = $(PROG1)
LIBDIR = lib
LIBJPEG_TURBO = /opt/build/libjpeg-turbo/build

PKGS = gio-2.0 vdostream gio-unix-2.0 liblarod
PKGS = gio-2.0 gio-unix-2.0 liblarod vdostream

CFLAGS += -Iinclude

LDLIBS += -lm -ljpeg
LDFLAGS += -L./lib -Wl,-rpath,'$$ORIGIN/lib'
CFLAGS += -I$(LIBJPEG_TURBO)/include
LDLIBS += -ljpeg -lm
LDFLAGS += -L./$(LIBDIR) -Wl,-rpath,'$$ORIGIN/$(LIBDIR)'

CFLAGS += $(shell PKG_CONFIG_PATH=$(PKG_CONFIG_PATH) pkg-config --cflags $(PKGS))
LDLIBS += $(shell PKG_CONFIG_PATH=$(PKG_CONFIG_PATH) pkg-config --libs $(PKGS))
Expand All @@ -17,7 +18,9 @@ CFLAGS += -Wall -DLAROD_API_VERSION_3
all: $(PROGS)

$(PROG1): $(OBJS1)
mkdir -p $(LIBDIR)
cp $(LIBJPEG_TURBO)/lib/*.so* $(LIBDIR)/
$(CC) $(CFLAGS) $(LDFLAGS) $^ $(LDLIBS) -o $@

clean:
rm -f $(PROGS) *.o *.eap lib/* include/* model/* label/*
rm -rf $(PROGS) *.o $(LIBDIR) *.eap* *_LICENSE.txt manifest.json package.conf* param.conf
83 changes: 47 additions & 36 deletions object-detection/Dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -6,42 +6,52 @@ ARG SDK=acap-native-sdk

FROM ${REPO}/${SDK}:${VERSION}-${ARCH}-ubuntu${UBUNTU_VERSION}

# Set general arguments
ARG ARCH
ARG SDK_LIB_PATH_BASE=/opt/axis/acapsdk/sysroots/${ARCH}/usr
ARG BUILD_DIR=/opt/build

WORKDIR /opt/build/libjpeg
ARG ARCH=armv7hf
#-------------------------------------------------------------------------------
# Prepare build environment
#-------------------------------------------------------------------------------

# Build libjpeg-turbo
WORKDIR /opt/build
RUN apt-get update && apt-get install --no-install-recommends -y cmake && \
# Install build dependencies for library cross compilation
RUN DEBIAN_FRONTEND=noninteractive \
apt-get update && apt-get install -y -f --no-install-recommends \
cmake && \
apt-get clean && \
rm -rf /var/lib/apt/lists/*
RUN git clone --branch 2.0.6 https://github.com/libjpeg-turbo/libjpeg-turbo.git

WORKDIR /opt/build/libjpeg-turbo/build
RUN if [ "$ARCH" = armv7hf ]; then \
gCFLAGS=' -O2 -mthumb -mfpu=neon -mfloat-abi=hard -mcpu=cortex-a9 -fomit-frame-pointer' \
CC=arm-linux-gnueabihf-gcc cmake -G"Unix Makefiles" .. && \
make -j; \
elif [ "$ARCH" = aarch64 ]; then \
CC=/usr/bin/aarch64-linux-gnu-gcc cmake -G"Unix Makefiles" .. && \
make ; \
else \
printf "Error: '%s' is not a valid value for the ARCH variable\n", "$ARCH"; \
exit 1; \
fi
#-------------------------------------------------------------------------------
# Build libjpeg-turbo
#-------------------------------------------------------------------------------

# Copy the built libraries to application folder
ARG BUILD_DIR_JPEG=/opt/build/libjpeg-turbo
WORKDIR /opt/app/lib
RUN cp ${BUILD_DIR_JPEG}/build/*.so* .
WORKDIR /opt/app/include
RUN cp ${BUILD_DIR_JPEG}/build/*.h . && \
cp ${BUILD_DIR_JPEG}/*.h .
ARG JPEGTURBO_VERSION=2.0.6
ARG JPEGTURBO_GIT_REPO=https://github.com/libjpeg-turbo/libjpeg-turbo
ARG JPEGTURBO_VERSION_DIR=libjpeg-turbo-${JPEGTURBO_VERSION}
ARG JPEGTURBO_DIR=${BUILD_DIR}/libjpeg-turbo
ARG JPEGTURBO_SRC_DIR=${JPEGTURBO_DIR}/${JPEGTURBO_VERSION_DIR}
ARG JPEGTURBO_BUILD_DIR=${JPEGTURBO_DIR}/build

WORKDIR /opt/app
COPY ./app /opt/app/
WORKDIR ${JPEGTURBO_DIR}
SHELL ["/bin/bash", "-o", "pipefail", "-c"]
RUN curl -fsSL ${JPEGTURBO_GIT_REPO}/releases/download/${JPEGTURBO_VERSION}/${JPEGTURBO_VERSION_DIR}.tar.gz | tar -xz

WORKDIR ${JPEGTURBO_SRC_DIR}
RUN . /opt/axis/acapsdk/environment-setup* && \
pwd && ls -la && \
cmake -G"Unix Makefiles" \
-DCMAKE_INSTALL_PREFIX:PATH=${JPEGTURBO_BUILD_DIR} \
. && \
make -j && \
make install

# Get pretrained models
#-------------------------------------------------------------------------------
# Get models and labels
#-------------------------------------------------------------------------------

# Download pretrained models
WORKDIR /opt/app/model
ARG CHIP=
RUN if [ "$CHIP" = cpu ] || [ "$CHIP" = artpec8 ]; then \
curl -L -o converted_model.tflite \
Expand All @@ -54,15 +64,16 @@ RUN if [ "$CHIP" = cpu ] || [ "$CHIP" = artpec8 ]; then \
exit 1; \
fi

# Download the labels
RUN mkdir -p label && \
curl -L -o label/labels.txt https://github.com/google-coral/test_data/raw/master/coco_labels.txt
WORKDIR /opt/app/label
RUN curl -L -o labels.txt https://github.com/google-coral/test_data/raw/master/coco_labels.txt

# Setup the model directory
RUN mkdir -p model && \
cp converted_model.tflite model/converted_model.tflite
#-------------------------------------------------------------------------------
# Build ACAP application
#-------------------------------------------------------------------------------

# Building the ACAP application
WORKDIR /opt/app
COPY ./app .
RUN cp /opt/app/manifest.json.${CHIP} /opt/app/manifest.json && \
. /opt/axis/acapsdk/environment-setup* && acap-build . \
-a 'label/labels.txt' -a 'model/converted_model.tflite'
-a 'label/labels.txt' \
-a 'model/converted_model.tflite'
13 changes: 8 additions & 5 deletions object-detection/app/Makefile
Original file line number Diff line number Diff line change
@@ -1,13 +1,14 @@
PROG1 = object_detection
OBJS1 = $(PROG1).c argparse.c imgprovider.c imgutils.c
PROGS = $(PROG1)
LIBDIR = lib
LIBJPEG_TURBO = /opt/build/libjpeg-turbo/build

PKGS = gio-2.0 vdostream gio-unix-2.0 liblarod

CFLAGS += -Iinclude
PKGS = gio-2.0 gio-unix-2.0 liblarod vdostream

CFLAGS += -I$(LIBJPEG_TURBO)/include
LDLIBS += -ljpeg
LDFLAGS += -L./lib -Wl,-rpath,'$$ORIGIN/lib'
LDFLAGS += -L./$(LIBDIR) -Wl,-rpath,'$$ORIGIN/$(LIBDIR)'

CFLAGS += $(shell PKG_CONFIG_PATH=$(PKG_CONFIG_PATH) pkg-config --cflags $(PKGS))
LDLIBS += $(shell PKG_CONFIG_PATH=$(PKG_CONFIG_PATH) pkg-config --libs $(PKGS))
Expand All @@ -17,7 +18,9 @@ CFLAGS += -Wall -DLAROD_API_VERSION_3
all: $(PROGS)

$(PROG1): $(OBJS1)
mkdir -p $(LIBDIR)
cp $(LIBJPEG_TURBO)/lib/*.so* $(LIBDIR)/
$(CC) $(CFLAGS) $(LDFLAGS) $^ $(LDLIBS) -o $@

clean:
rm -f $(PROGS) *.o *.eap lib/* include/* model/* label/*
rm -rf $(PROGS) *.o $(LIBDIR) *.eap* *_LICENSE.txt manifest.json package.conf* param.conf

0 comments on commit 3ef1997

Please sign in to comment.