.ONESHELL: .PHONY: test deps download build clean astyle cmds docker # OpenCV version to use. OPENCV_VERSION?=4.1.2 # Go version to use when building Docker image GOVERSION?=1.13.1 # Temporary directory to put files into. TMP_DIR?=/tmp/ # Package list for each well-known Linux distribution RPMS=cmake curl git gtk2-devel libpng-devel libjpeg-devel libtiff-devel tbb tbb-devel libdc1394-devel unzip DEBS=unzip build-essential cmake curl git libgtk2.0-dev pkg-config libavcodec-dev libavformat-dev libswscale-dev libtbb2 libtbb-dev libjpeg-dev libpng-dev libtiff-dev libdc1394-22-dev # Detect Linux distribution distro_deps= ifneq ($(shell which dnf 2>/dev/null),) distro_deps=deps_fedora else ifneq ($(shell which apt-get 2>/dev/null),) distro_deps=deps_debian else ifneq ($(shell which yum 2>/dev/null),) distro_deps=deps_rh_centos endif endif endif # Install all necessary dependencies. deps: $(distro_deps) deps_rh_centos: sudo yum -y install pkgconfig $(RPMS) deps_fedora: sudo dnf -y install pkgconf-pkg-config $(RPMS) deps_debian: sudo apt-get -y update sudo apt-get -y install $(DEBS) # Download OpenCV source tarballs. download: rm -rf $(TMP_DIR)opencv mkdir $(TMP_DIR)opencv cd $(TMP_DIR)opencv curl -Lo opencv.zip https://github.com/opencv/opencv/archive/$(OPENCV_VERSION).zip unzip -q opencv.zip curl -Lo opencv_contrib.zip https://github.com/opencv/opencv_contrib/archive/$(OPENCV_VERSION).zip unzip -q opencv_contrib.zip rm opencv.zip opencv_contrib.zip cd - # Build OpenCV. build: cd $(TMP_DIR)opencv/opencv-$(OPENCV_VERSION) mkdir build cd build cmake -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/usr/local -D OPENCV_EXTRA_MODULES_PATH=$(TMP_DIR)opencv/opencv_contrib-$(OPENCV_VERSION)/modules -D BUILD_DOCS=OFF -D BUILD_EXAMPLES=OFF -D BUILD_TESTS=OFF -D BUILD_PERF_TESTS=OFF -D BUILD_opencv_java=NO -D BUILD_opencv_python=NO -D BUILD_opencv_python2=NO -D BUILD_opencv_python3=NO -D WITH_JASPER=OFF -DOPENCV_GENERATE_PKGCONFIG=ON .. $(MAKE) -j $(shell nproc --all) $(MAKE) preinstall cd - # Build OpenCV on Raspbian with ARM hardware optimizations. build_raspi: cd $(TMP_DIR)opencv/opencv-$(OPENCV_VERSION) mkdir build cd build cmake -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/usr/local -D OPENCV_EXTRA_MODULES_PATH=$(TMP_DIR)opencv/opencv_contrib-$(OPENCV_VERSION)/modules -D BUILD_DOCS=OFF -D BUILD_EXAMPLES=OFF -D BUILD_TESTS=OFF -D BUILD_PERF_TESTS=OFF -D BUILD_opencv_java=OFF -D BUILD_opencv_python=NO -D BUILD_opencv_python2=NO -D BUILD_opencv_python3=NO -D ENABLE_NEON=ON -D ENABLE_VFPV3=ON -D WITH_JASPER=OFF -D OPENCV_GENERATE_PKGCONFIG=ON .. $(MAKE) -j $(shell nproc --all) $(MAKE) preinstall cd - # Build OpenCV with non-free contrib modules. build_nonfree: cd $(TMP_DIR)opencv/opencv-$(OPENCV_VERSION) mkdir build cd build cmake -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/usr/local -D OPENCV_EXTRA_MODULES_PATH=$(TMP_DIR)opencv/opencv_contrib-$(OPENCV_VERSION)/modules -D BUILD_DOCS=OFF -D BUILD_EXAMPLES=OFF -D BUILD_TESTS=OFF -D BUILD_PERF_TESTS=OFF -D BUILD_opencv_java=NO -D BUILD_opencv_python=NO -D BUILD_opencv_python2=NO -D BUILD_opencv_python3=NO -D WITH_JASPER=OFF -DOPENCV_GENERATE_PKGCONFIG=ON -DOPENCV_ENABLE_NONFREE=ON .. $(MAKE) -j $(shell nproc --all) $(MAKE) preinstall cd - # Build OpenCV with cuda. build_cuda: cd $(TMP_DIR)opencv/opencv-$(OPENCV_VERSION) mkdir build cd build cmake -j $(shell nproc --all) -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/usr/local -D OPENCV_EXTRA_MODULES_PATH=$(TMP_DIR)opencv/opencv_contrib-$(OPENCV_VERSION)/modules -D BUILD_DOCS=OFF -D BUILD_EXAMPLES=OFF -D BUILD_TESTS=OFF -D BUILD_PERF_TESTS=OFF -D BUILD_opencv_java=NO -D BUILD_opencv_python=NO -D BUILD_opencv_python2=NO -D BUILD_opencv_python3=NO -D WITH_JASPER=OFF -DOPENCV_GENERATE_PKGCONFIG=ON -DWITH_CUDA=ON -DENABLE_FAST_MATH=1 -DCUDA_FAST_MATH=1 -DWITH_CUBLAS=1 -DCUDA_TOOLKIT_ROOT_DIR=/usr/local/cuda/ -DBUILD_opencv_cudacodec=OFF .. $(MAKE) -j $(shell nproc --all) $(MAKE) preinstall cd - # Cleanup temporary build files. clean: go clean --cache rm -rf $(TMP_DIR)opencv # Do everything. install: deps download build sudo_install clean verify # Do everything on Raspbian. install_raspi: deps download build_raspi sudo_install clean verify # Do everything with cuda. install_cuda: deps download build_cuda sudo_install clean verify # Install system wide. sudo_install: cd $(TMP_DIR)opencv/opencv-$(OPENCV_VERSION)/build sudo $(MAKE) install sudo ldconfig cd - # Build a minimal Go app to confirm gocv works. verify: go run ./cmd/version/main.go # Runs tests. # This assumes env.sh was already sourced. # pvt is not tested here since it requires additional depenedences. test: go test . ./contrib docker: docker build --build-arg OPENCV_VERSION=$(OPENCV_VERSION) --build-arg GOVERSION=$(GOVERSION) . astyle: astyle --project=.astylerc --recursive *.cpp,*.h CMDS=basic-drawing caffe-classifier captest capwindow counter faceblur facedetect find-circles hand-gestures img-similarity mjpeg-streamer motion-detect pose saveimage savevideo showimage ssd-facedetect tf-classifier tracking version cmds: for cmd in $(CMDS) ; do \ go build -o build/$$cmd cmd/$$cmd/main.go ; done ; \