diff --git a/samples/ObjectDetection/cmake/aarch64-toolchain.cmake b/samples/ObjectDetection/cmake/aarch64-toolchain.cmake
new file mode 100644
index 0000000..bdd02f8
--- /dev/null
+++ b/samples/ObjectDetection/cmake/aarch64-toolchain.cmake
@@ -0,0 +1,20 @@
+# Copyright © 2020 Arm Ltd and Contributors. All rights reserved.
+# SPDX-License-Identifier: MIT
+
+# specify the cross compiler
+set(GNU_MACHINE "aarch64-linux-gnu")
+set(CROSS_PREFIX "aarch64-linux-gnu-")
+
+set(CMAKE_C_COMPILER   ${CROSS_PREFIX}gcc)
+set(CMAKE_CXX_COMPILER ${CROSS_PREFIX}g++)
+set(CMAKE_AR           ${CROSS_PREFIX}ar)
+set(CMAKE_STRIP        ${CROSS_PREFIX}strip)
+set(CMAKE_LINKER       ${CROSS_PREFIX}ld)
+
+set(CMAKE_CROSSCOMPILING true)
+set(CMAKE_SYSTEM_NAME Linux)
+
+set(CMAKE_SYSTEM_PROCESSOR aarch64)
+
+set(OPENCV_EXTRA_ARGS   "-DENABLE_NEON=ON"
+                        "-DCMAKE_TOOLCHAIN_FILE=platforms/linux/aarch64-gnu.toolchain.cmake")
\ No newline at end of file
diff --git a/samples/ObjectDetection/cmake/arm-linux-gnueabihf-toolchain.cmake b/samples/ObjectDetection/cmake/arm-linux-gnueabihf-toolchain.cmake
new file mode 100644
index 0000000..f66b964
--- /dev/null
+++ b/samples/ObjectDetection/cmake/arm-linux-gnueabihf-toolchain.cmake
@@ -0,0 +1,20 @@
+# Copyright © 2020 Arm Ltd and Contributors. All rights reserved.
+# SPDX-License-Identifier: MIT
+
+# specify the cross compiler
+set(GNU_MACHINE "arm-linux-gnueabihf")
+set(CROSS_PREFIX "arm-linux-gnueabihf-")
+
+set(CMAKE_C_COMPILER   ${CROSS_PREFIX}gcc)
+set(CMAKE_CXX_COMPILER ${CROSS_PREFIX}g++)
+set(CMAKE_AR           ${CROSS_PREFIX}ar)
+set(CMAKE_STRIP        ${CROSS_PREFIX}strip)
+set(CMAKE_LINKER       ${CROSS_PREFIX}ld)
+
+set(CMAKE_CROSSCOMPILING true)
+set(CMAKE_SYSTEM_NAME Linux)
+
+set(CMAKE_SYSTEM_PROCESSOR arm)
+
+set(OPENCV_EXTRA_ARGS   "-DENABLE_NEON=ON"
+                        "-DCMAKE_TOOLCHAIN_FILE=platforms/linux/arm.toolchain.cmake")
\ No newline at end of file
diff --git a/samples/ObjectDetection/cmake/find_armnn.cmake b/samples/ObjectDetection/cmake/find_armnn.cmake
new file mode 100644
index 0000000..289e912
--- /dev/null
+++ b/samples/ObjectDetection/cmake/find_armnn.cmake
@@ -0,0 +1,35 @@
+# Copyright © 2020 Arm Ltd and Contributors. All rights reserved.
+# SPDX-License-Identifier: MIT
+# Search for ArmNN built libraries in user-provided path first, then current repository, then system
+
+set(ARMNN_LIB_NAMES "libarmnn.so"
+    "libarmnnTfLiteParser.so")
+
+set(ARMNN_LIBS "")
+
+get_filename_component(PARENT_DIR ${PROJECT_SOURCE_DIR} DIRECTORY)
+get_filename_component(REPO_DIR ${PARENT_DIR} DIRECTORY)
+
+foreach(armnn_lib ${ARMNN_LIB_NAMES})
+    find_library(ARMNN_${armnn_lib}
+        NAMES
+            ${armnn_lib}
+        HINTS
+            ${ARMNN_LIB_DIR} ${REPO_DIR}
+        PATHS
+            ${ARMNN_LIB_DIR} ${REPO_DIR}
+        PATH_SUFFIXES
+            "lib"
+            "lib64")
+    if(ARMNN_${armnn_lib})
+        message("Found library ${ARMNN_${armnn_lib}}")
+        list(APPEND ARMNN_LIBS ${ARMNN_${armnn_lib}})
+        get_filename_component(LIB_DIR ${ARMNN_${armnn_lib}} DIRECTORY)
+        get_filename_component(LIB_PARENT_DIR ${LIB_DIR} DIRECTORY)
+        set(ARMNN_INCLUDE_DIR ${LIB_PARENT_DIR}/include)
+    endif()
+endforeach()
+
+if(NOT ARMNN_LIBS)
+    message(FATAL_ERROR "Could not find ArmNN libraries ${ARMNN_LIB_NAMES}")
+endif()
diff --git a/samples/ObjectDetection/cmake/find_catch.cmake b/samples/ObjectDetection/cmake/find_catch.cmake
new file mode 100644
index 0000000..584b807
--- /dev/null
+++ b/samples/ObjectDetection/cmake/find_catch.cmake
@@ -0,0 +1,16 @@
+# Copyright © 2020 Arm Ltd and Contributors. All rights reserved.
+# SPDX-License-Identifier: MIT
+
+#Test TPIP
+set(TEST_TPIP ${DEPENDENCIES_DIR}/test)
+file(MAKE_DIRECTORY ${TEST_TPIP})
+set(TEST_TPIP_INCLUDE ${TEST_TPIP}/include)
+file(MAKE_DIRECTORY ${TEST_TPIP_INCLUDE})
+
+ExternalProject_Add(catch2-headers
+    URL https://github.com/catchorg/Catch2/releases/download/v2.11.1/catch.hpp
+    DOWNLOAD_NO_EXTRACT 1
+    CONFIGURE_COMMAND ""
+    BUILD_COMMAND ${CMAKE_COMMAND} -E copy <DOWNLOAD_DIR>/catch.hpp ${TEST_TPIP_INCLUDE}
+    INSTALL_COMMAND ""
+    )
\ No newline at end of file
diff --git a/samples/ObjectDetection/cmake/find_opencv.cmake b/samples/ObjectDetection/cmake/find_opencv.cmake
new file mode 100644
index 0000000..4d26953
--- /dev/null
+++ b/samples/ObjectDetection/cmake/find_opencv.cmake
@@ -0,0 +1,204 @@
+# Copyright © 2020 Arm Ltd and Contributors. All rights reserved.
+# SPDX-License-Identifier: MIT
+
+set(OPENCV_VERSION 4.0.0)
+set(FFMPEG_VERSION 4.2.1)
+set(LIBX264_VERSION stable)
+
+set(OPENCV_LIB OpenCV${OPENCV_VERSION})
+set(FFMPEG_LIB ffmpeg${FFMPEG_VERSION})
+set(X264_LIB   x264${LIBX264_VERSION})
+
+set(OPENCV_NAMES
+    libopencv_core.so.${OPENCV_VERSION}
+    libopencv_imgproc.so.${OPENCV_VERSION}
+    libopencv_imgcodecs.so.${OPENCV_VERSION}
+    libopencv_videoio.so.${OPENCV_VERSION}
+    libopencv_video.so.${OPENCV_VERSION}
+    libopencv_highgui.so.${OPENCV_VERSION})
+
+set(OPENCV_LIBS)
+set(FFMPEG_LIBS)
+
+foreach(opencv_lib ${OPENCV_NAMES})
+    find_library(OPENCV_${opencv_lib}
+        NAMES
+            ${opencv_lib}
+        HINTS
+            ${OPENCV_LIB_DIR}
+        PATHS
+            ${OPENCV_LIB_DIR}
+        PATH_SUFFIXES
+            "lib"
+            "lib64")
+    if(OPENCV_${opencv_lib})
+        message("Found library ${OPENCV_${opencv_lib}}")
+        list(APPEND OPENCV_LIBS ${OPENCV_${opencv_lib}})
+        get_filename_component(OPENCV_LIB_DIR ${OPENCV_${opencv_lib}} DIRECTORY)
+        get_filename_component(OPENCV_ROOT_DIR ${OPENCV_LIB_DIR} DIRECTORY)
+        set(OPENCV_INCLUDE_DIR ${OPENCV_ROOT_DIR}/include/opencv4)
+    endif()
+endforeach()
+
+if(OPENCV_LIBS)
+    message("OpenCV libraries found")
+    set(OPENCV_LIBS_FOUND TRUE)
+else()
+    set(OPENCV_ROOT_DIR ${DEPENDENCIES_DIR}/opencv)
+    set(OPENCV_DEPENDENCIES_ARGS)
+    set(OPENCV_EXTRA_LINKER_ARGS)
+    set(OPENCV_PKGCONFIG)
+
+    if(CMAKE_CROSSCOMPILING)
+        set(FFMPEG_ROOT_DIR ${DEPENDENCIES_DIR}/ffmpeg)
+        set(LIBX264_ROOT_DIR ${DEPENDENCIES_DIR}/x264)
+
+        if (CMAKE_BUILD_TYPE STREQUAL Debug)
+            set(CONFIGURE_DEBUG --enable-debug)
+            set(OPENCV_DEBUG "-DBUILD_WITH_DEBUG_INFO=ON")
+        endif()
+
+
+        ExternalProject_Add(${X264_LIB}
+            URL "https://code.videolan.org/videolan/x264/-/archive/${LIBX264_VERSION}/x264-${LIBX264_VERSION}.tar.gz"
+            URL_HASH MD5=07eae2352f6ba201999be45fece0c26c
+            DOWNLOAD_DIR ${LIBX264_ROOT_DIR}
+            PREFIX ${LIBX264_ROOT_DIR}
+            CONFIGURE_COMMAND <SOURCE_DIR>/configure
+            --host=${GNU_MACHINE}
+            --enable-static
+            --enable-shared
+            --cross-prefix=${CROSS_PREFIX}
+            --prefix=${CMAKE_BINARY_DIR}
+            --extra-ldflags=-static-libstdc++
+            --extra-cflags=-fPIC
+            ${CONFIGURE_DEBUG}
+            INSTALL_DIR ${CMAKE_BINARY_DIR}
+            BUILD_COMMAND $(MAKE)
+            INSTALL_COMMAND $(MAKE) install
+            )
+
+        set(FFMPEG_Config
+            --enable-shared
+            --enable-cross-compile
+            --cross-prefix=${CROSS_PREFIX}
+            --arch=${CMAKE_SYSTEM_PROCESSOR}
+            --target-os=linux
+            --prefix=${CMAKE_BINARY_DIR}
+            --enable-gpl
+            --enable-nonfree
+            --enable-libx264
+            --extra-cflags=-I${CMAKE_BINARY_DIR}/include
+            --extra-cflags=-fPIC
+            --extra-ldflags=-L${CMAKE_BINARY_DIR}/lib
+            --extra-libs=-ldl
+            --extra-libs=-static-libstdc++
+        )
+
+        ExternalProject_Add(${FFMPEG_LIB}
+            URL "https://github.com/FFmpeg/FFmpeg/archive/n${FFMPEG_VERSION}.tar.gz"
+            URL_HASH MD5=05792c611d1e3ebdf2c7003ff4467390
+            DOWNLOAD_DIR ${FFMPEG_ROOT_DIR}
+            PREFIX ${FFMPEG_ROOT_DIR}
+            CONFIGURE_COMMAND <SOURCE_DIR>/configure ${FFMPEG_Config} ${CONFIGURE_DEBUG}
+            INSTALL_DIR ${CMAKE_BINARY_DIR}
+            BUILD_COMMAND $(MAKE) VERBOSE=1
+            INSTALL_COMMAND $(MAKE) install
+        )
+
+        set(OPENCV_DEPENDENCIES_ARGS "-static-libstdc++ -Wl,-rpath,${CMAKE_BINARY_DIR}/lib")
+        set(OPENCV_EXTRA_LINKER_ARGS "-DOPENCV_EXTRA_EXE_LINKER_FLAGS=${OPENCV_DEPENDENCIES_ARGS}")
+
+        set(OPENCV_PKGCONFIG "PKG_CONFIG_LIBDIR=${CMAKE_BINARY_DIR}/lib/pkgconfig")
+
+        set(FFMPEG_NAMES
+            libavcodec.so
+            libavformat.so
+            libavutil.so
+            libswscale.so
+            )
+
+        foreach(ffmpeg_lib ${FFMPEG_NAMES})
+            add_library(FFMPEG_${ffmpeg_lib} SHARED IMPORTED)
+            set_target_properties(FFMPEG_${ffmpeg_lib} PROPERTIES IMPORTED_LOCATION ${CMAKE_BINARY_DIR}/lib/${ffmpeg_lib})
+            list(APPEND OPENCV_LIBS FFMPEG_${ffmpeg_lib})
+        endforeach()
+
+        add_library(X264_lib264.so SHARED IMPORTED)
+        set_target_properties(X264_lib264.so PROPERTIES IMPORTED_LOCATION ${CMAKE_BINARY_DIR}/lib/libx264.so)
+        list(APPEND OPENCV_LIBS X264_lib264.so)
+    endif()
+
+    set(OPENCV_CMAKE_ARGS
+        -DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE}
+        -DCMAKE_C_FLAGS=-fPIC
+        -DCMAKE_CXX_FLAGS=-fPIC
+        -DWITH_GTK=OFF
+        -DWITH_JPEG=ON
+        -DWITH_IPP=OFF
+        -DBUILD_opencv_java_bindings_generator=OFF
+        -DBUILD_opencv_ml=OFF
+        -DBUILD_opencv_objdetect=OFF
+        -DBUILD_opencv_photo=OFF
+        -DBUILD_opencv_python_bindings_generator=OFF
+        -DBUILD_opencv_stitching=OFF
+        -DBUILD_opencv_gapi=OFF
+        -DBUILD_opencv_features2d=OFF
+        -DBUILD_opencv_dnn=OFF
+        -DBUILD_opencv_flann=OFF
+        -DBUILD_opencv_calib3d=OFF
+        -DBUILD_opencv_python2=OFF
+        -DBUILD_opencv_python3=OFF
+        -DBUILD_opencv_java=OFF
+        -DBUILD_opencv_js=OFF
+        -DBUILD_opencv_ts=OFF
+        -DBUILD_JPEG=ON
+        -DBUILD_JPEG_TURBO_DISABLE=ON
+        -DBUILD_PNG=ON
+        -DBUILD_TIFF=ON
+        -DZLIB_FOUND=OFF
+        -DBUILD_ZLIB=ON
+        -DBUILD_PERF_TESTS=OFF
+        -DBUILD_TESTS=OFF
+        -DBUILD_DOCS=OFF
+        -DBUILD_opencv_apps=OFF
+        -DBUILD_EXAMPLES=OFF
+        -DWITH_V4L=ON
+        -DWITH_LIBV4L=OFF
+        -DWITH_FFMPEG=ON
+        -DCMAKE_INSTALL_PREFIX=${CMAKE_BINARY_DIR}
+        -DCMAKE_CXX_COMPILER=${CMAKE_CXX_COMPILER}
+        -DCMAKE_C_COMPILER=${CMAKE_C_COMPILER}
+        -DCMAKE_INSTALL_RPATH=\$ORIGIN:\$ORIGIN/lib:\$ORIGIN/../lib
+        -DCMAKE_SHARED_LINKER_FLAGS=-static-libstdc++
+        ${OPENCV_DEBUG}
+        )
+
+    ExternalProject_Add(${OPENCV_LIB}
+        URL "https://codeload.github.com/opencv/opencv/tar.gz/${OPENCV_VERSION}"
+        URL_HASH MD5=f051c1ff7b327b60123d71b53801b316
+        DOWNLOAD_DIR ${OPENCV_ROOT_DIR}
+        PREFIX ${OPENCV_ROOT_DIR}
+        CONFIGURE_COMMAND ${OPENCV_PKGCONFIG}
+        ${CMAKE_COMMAND} ${OPENCV_CMAKE_ARGS} ${OPENCV_EXTRA_ARGS}
+        ${OPENCV_EXTRA_LINKER_ARGS} ${OPENCV_ROOT_DIR}/src/${OPENCV_LIB}
+        INSTALL_DIR ${CMAKE_BINARY_DIR}
+        BUILD_COMMAND $(MAKE)
+        INSTALL_COMMAND $(MAKE) install
+        )
+
+    if(CMAKE_CROSSCOMPILING)
+        ExternalProject_Add_StepDependencies(${FFMPEG_LIB} build ${X264_LIB})
+        ExternalProject_Add_StepDependencies(${OPENCV_LIB} build ${FFMPEG_LIB})
+    endif()
+
+    set(OPENCV_INCLUDE_DIR ${CMAKE_BINARY_DIR}/include/opencv4)
+    set(OPENCV_LIB_DIR ${CMAKE_BINARY_DIR}/lib)
+
+    foreach(opencv_lib ${OPENCV_NAMES})
+        add_library(OPENCV_${opencv_lib} SHARED IMPORTED)
+        set_target_properties(OPENCV_${opencv_lib} PROPERTIES IMPORTED_LOCATION ${OPENCV_LIB_DIR}/${opencv_lib})
+        list(APPEND OPENCV_LIBS OPENCV_${opencv_lib})
+    endforeach()
+
+endif()
\ No newline at end of file
diff --git a/samples/ObjectDetection/cmake/unit_tests.cmake b/samples/ObjectDetection/cmake/unit_tests.cmake
new file mode 100644
index 0000000..dcfa512
--- /dev/null
+++ b/samples/ObjectDetection/cmake/unit_tests.cmake
@@ -0,0 +1,65 @@
+# Copyright © 2020 Arm Ltd and Contributors. All rights reserved.
+# SPDX-License-Identifier: MIT
+
+set(TEST_RESOURCES_DIR ${CMAKE_SOURCE_DIR}/test/resources)
+add_definitions (-DTEST_RESOURCE_DIR="${TEST_RESOURCES_DIR}")
+set(TEST_TARGET_NAME "${CMAKE_PROJECT_NAME}-tests")
+
+file(GLOB TEST_SOURCES "test/*")
+
+include(cmake/find_catch.cmake)
+
+file(DOWNLOAD "https://storage.googleapis.com/download.tensorflow.org/models/tflite/coco_ssd_mobilenet_v1_1.0_quant_2018_06_29.zip"
+        ${CMAKE_CURRENT_SOURCE_DIR}/test/resources/models.zip SHOW_PROGRESS)
+
+# Extract
+execute_process(
+        COMMAND ${CMAKE_COMMAND} -E tar xf models.zip
+        WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/test/resources/
+        RESULT_VARIABLE return_code
+)
+
+ExternalProject_Add(basketball-image
+        URL https://raw.githubusercontent.com/opencv/opencv/4.0.0/samples/data/basketball1.png
+        DOWNLOAD_NO_EXTRACT 1
+        CONFIGURE_COMMAND ""
+        BUILD_COMMAND ${CMAKE_COMMAND} -E copy <DOWNLOAD_DIR>/basketball1.png ${CMAKE_CURRENT_SOURCE_DIR}/test/resources
+        INSTALL_COMMAND ""
+)
+
+ExternalProject_Add(messi
+        URL https://raw.githubusercontent.com/opencv/opencv/4.0.0/samples/data/messi5.jpg
+        DOWNLOAD_NO_EXTRACT 1
+        CONFIGURE_COMMAND ""
+        BUILD_COMMAND ${CMAKE_COMMAND} -E copy <DOWNLOAD_DIR>/messi5.jpg ${CMAKE_CURRENT_SOURCE_DIR}/test/resources
+        INSTALL_COMMAND ""
+        )
+
+ExternalProject_Add(vtest
+        URL https://raw.githubusercontent.com/opencv/opencv/4.0.0/samples/data/Megamind.avi
+        DOWNLOAD_NO_EXTRACT 1
+        CONFIGURE_COMMAND ""
+        BUILD_COMMAND ${CMAKE_COMMAND} -E copy <DOWNLOAD_DIR>/Megamind.avi ${CMAKE_CURRENT_SOURCE_DIR}/test/resources
+        INSTALL_COMMAND ""
+        )
+
+add_executable("${TEST_TARGET_NAME}" ${SOURCES} ${TEST_SOURCES})
+
+add_dependencies(
+    "${TEST_TARGET_NAME}"
+    "catch2-headers"
+    "vtest"
+    "messi"
+    "basketball-image"
+)
+
+if (NOT OPENCV_LIBS_FOUND)
+    message("Building OpenCV libs")
+    add_dependencies("${TEST_TARGET_NAME}" "${OPENCV_LIB}")
+endif()
+
+target_include_directories("${TEST_TARGET_NAME}" PUBLIC ${TEST_TPIP_INCLUDE}
+    ${ARMNN_INCLUDE_DIR}
+    ${OPENCV_INCLUDE_DIR} ${DEPENDENCIES_DIR} ${TEST_RESOURCES_DIR})
+
+target_link_libraries("${TEST_TARGET_NAME}" PUBLIC ${ARMNN_LIBS} ${OPENCV_LIBS} ${FFMPEG_LIBS})
\ No newline at end of file
