├── README.md ├── release ├── install_opencv.sh ├── install_requires_related2leptonica.sh ├── install_requires_related2opencv.sh ├── install_requires_related2tesseract.sh └── install_tesseract.sh └── setup ├── 019_checkinstall.sh ├── 030_build_opencv.sh ├── 031_install_opencv.sh └── 032_update_deps.sh /README.md: -------------------------------------------------------------------------------- 1 | # OpenCV for Raspberry Pi 3 2 | 3 | A prebuilt binary debian package of OpenCV 4.0.1 for Raspberry Pi 3. It depends on Tesseract 4 and VC4CL by doe300. 4 | 5 | ## How to Install 6 | 7 | First, install rpi3-vc4cl binary packages which describes in https://github.com/thortex/rpi3-vc4cl/ . 8 | 9 | Then, Install Leptonica, Tesseract OCR, and OpenCV debian packages by typing the following steps: 10 | ``` 11 | git clone https://github.com/thortex/rpi3-opencv.git 12 | cd rpi3-opencv/release 13 | ./install_requires_related2leptonica.sh 14 | ./install_requires_related2tesseract.sh 15 | ./install_requires_related2opencv.sh 16 | ./install_tesseract.sh 17 | ./install_opencv.sh 18 | ``` 19 | 20 | ## BUild Options 21 | 22 | | Option | Support | 23 | |:---------------|:-----------| 24 | | Build Type | Release | 25 | | Install Prefix | /usr/local | 26 | | Eigen | ON | 27 | | gstreamer | ON | 28 | | GTK | ON | 29 | | Jasper | ON | 30 | | JPEG | ON | 31 | | OpenEXR | ON | 32 | | PNG | ON | 33 | | TIFF | ON | 34 | | V4L | ON | 35 | | LIBV4L | ON | 36 | | VTK | ON | 37 | | LAPACK | ON | 38 | | LAPACKE | ON | 39 | | protobuf | ON | 40 | | 1394 | ON | 41 | | ffmpeg | ON | 42 | | gphoto2 | ON | 43 | | Qt | ON | 44 | | TBB | ON | 45 | | WebP | ON | 46 | | unicap | ON | 47 | | cxx11 | ON | 48 | | NEON | ON | 49 | | VFPV3 | ON | 50 | | OpenMP | ON | 51 | | OpenCL | ON | 52 | | OpenGL | OFF | 53 | | OpenNI | OFF | 54 | | GDAL | OFF | 55 | | CUDA | OFF | 56 | | XINE | OFF | 57 | 58 | ## Supported Hardwares 59 | 60 | | Board | Support | 61 | |:----------------------|:--------| 62 | | 3 Model B+ | May Yes | 63 | | 3 Model B | Yes | 64 | | 2 Model B v1.2 | May Yes | 65 | | 2 Model B | No | 66 | | 1 Model B+ | No | 67 | | 1 Model B | No | 68 | | Model A | No | 69 | | Model A+ | No | 70 | | Zero | No | 71 | | Zero W | No | 72 | | Computer Module 1 | No | 73 | | Computer Module 3 | May Yes | 74 | | Computer Module 3 Lite| May Yes | 75 | 76 | 77 | ## How to Build 78 | 79 | ``` 80 | sudo apt-get update 81 | sudo apt-get upgrade -y 82 | ./setup/019_checkinstall.sh 83 | ./setup/030_build_opencv.sh 84 | ./setup/031_install_opencv.sh 85 | ./setup/032_update_deps.sh 86 | ``` 87 | 88 | ### CXXFLAGS 89 | 90 | | Option | Value | 91 | |:-------|:---------------------| 92 | |-mtune | cortex-a53 | 93 | |-march | armv8-a+crc | 94 | |-mcpu | cortex-a53 | 95 | |-mfpu | crypto-neon-fp-armv8 | 96 | 97 | 98 | 99 | -------------------------------------------------------------------------------- /release/install_opencv.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh -x 2 | U=https://github.com/thortex/rpi3-opencv/releases/download/ 3 | R=v4.0.1 4 | V=4.0.1 5 | D=20190209 6 | F=opencv_${V}-${D}_armhf.deb 7 | 8 | X=${U}${R}/$F 9 | wget -c $X 10 | sudo dpkg -i $F 11 | sudo ldconfig 12 | -------------------------------------------------------------------------------- /release/install_requires_related2leptonica.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh -x 2 | sudo apt-get install \ 3 | libc6 \ 4 | libgif7 \ 5 | libjbig0 \ 6 | libjpeg62-turbo \ 7 | liblzma5 \ 8 | libopenjp2-7 \ 9 | libpng16-16 \ 10 | libtiff5 \ 11 | libwebp6 \ 12 | raspi-copies-and-fills \ 13 | zlib1g \ 14 | 15 | -------------------------------------------------------------------------------- /release/install_requires_related2opencv.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh -x 2 | sudo apt-get install \ 3 | liblept5 \ 4 | libaec0 \ 5 | libatlas3-base \ 6 | libatomic1 \ 7 | libavcodec57 \ 8 | libavformat57 \ 9 | libavresample3 \ 10 | libavutil55 \ 11 | libbluray1 \ 12 | libbsd0 \ 13 | libbz2-1.0 \ 14 | libc6 \ 15 | libcairo2 \ 16 | libchromaprint1 \ 17 | libcomerr2 \ 18 | libdc1394-22 \ 19 | libdouble-conversion1 \ 20 | libdrm2 \ 21 | libexif12 \ 22 | libexpat1 \ 23 | libffi6 \ 24 | libfontconfig1 \ 25 | libfreetype6 \ 26 | libgcc1 \ 27 | libgcrypt20 \ 28 | libgflags2v5 \ 29 | libgfortran3 \ 30 | libglapi-mesa \ 31 | libgles2-mesa \ 32 | libglib2.0-0 \ 33 | libgme0 \ 34 | libgmp10 \ 35 | libgnutls30 \ 36 | libgomp1 \ 37 | libgoogle-glog0v5 \ 38 | libgpg-error0 \ 39 | libgphoto2-6 \ 40 | libgphoto2-port12 \ 41 | libgraphite2-3 \ 42 | libgsm1 \ 43 | libgssapi-krb5-2 \ 44 | libgstreamer1.0-0 \ 45 | libgstreamer-plugins-base1.0-0 \ 46 | libharfbuzz0b \ 47 | libhdf5-100 \ 48 | libhogweed4 \ 49 | libicu57 \ 50 | libidn11 \ 51 | libilmbase12 \ 52 | libjasper1 \ 53 | libjbig0 \ 54 | libjpeg62-turbo \ 55 | libk5crypto3 \ 56 | libkeyutils1 \ 57 | libkrb5-3 \ 58 | libkrb5support0 \ 59 | libltdl7 \ 60 | liblzma5 \ 61 | libmp3lame0 \ 62 | libmpg123-0 \ 63 | libnettle6 \ 64 | libogg0 \ 65 | libopenblas-base \ 66 | libopenexr22 \ 67 | libopenjp2-7 \ 68 | libopenmpt0 \ 69 | libopus0 \ 70 | liborc-0.4-0 \ 71 | libp11-kit0 \ 72 | libpcre16-3 \ 73 | libpcre3 \ 74 | libpixman-1-0 \ 75 | libpng16-16 \ 76 | libqt5concurrent5 \ 77 | libqt5core5a \ 78 | libqt5gui5 \ 79 | libqt5test5 \ 80 | libqt5widgets5 \ 81 | libraspberrypi0 \ 82 | libraw1394-11 \ 83 | libshine3 \ 84 | libsnappy1v5 \ 85 | libsoxr0 \ 86 | libspeex1 \ 87 | libssh-gcrypt-4 \ 88 | libstdc++6 \ 89 | libswresample2 \ 90 | libswscale4 \ 91 | libsz2 \ 92 | libtasn1-6 \ 93 | libtbb2 \ 94 | libtheora0 \ 95 | libtiff5 \ 96 | libtwolame0 \ 97 | libudev1 \ 98 | libusb-1.0-0 \ 99 | libva1 \ 100 | libva-drm1 \ 101 | libva-x11-1 \ 102 | libvdpau1 \ 103 | libvorbis0a \ 104 | libvorbisenc2 \ 105 | libvorbisfile3 \ 106 | libvpx4 \ 107 | libwavpack1 \ 108 | libwebp6 \ 109 | libwebpmux2 \ 110 | libx11-6 \ 111 | libx264-148 \ 112 | libx265-95 \ 113 | libxau6 \ 114 | libxcb1 \ 115 | libxcb-render0 \ 116 | libxcb-shm0 \ 117 | libxdmcp6 \ 118 | libxext6 \ 119 | libxfixes3 \ 120 | libxml2 \ 121 | libxrender1 \ 122 | libxvidcore4 \ 123 | libzvbi0 \ 124 | ocl-icd-libopencl1 \ 125 | raspi-copies-and-fills \ 126 | tesseract-ocr \ 127 | zlib1g \ 128 | 129 | -------------------------------------------------------------------------------- /release/install_requires_related2tesseract.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh -x 2 | sudo apt-get install \ 3 | libc6 \ 4 | libgcc1 \ 5 | libgif7 \ 6 | libgomp1 \ 7 | libjbig0 \ 8 | libjpeg62-turbo \ 9 | liblzma5 \ 10 | libopenjp2-7 \ 11 | libpng16-16 \ 12 | libstdc++6 \ 13 | libtiff5 \ 14 | libwebp6 \ 15 | raspi-copies-and-fills \ 16 | zlib1g \ 17 | 18 | -------------------------------------------------------------------------------- /release/install_tesseract.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh -x 2 | # Versions 3 | R=4.0.0 4 | LEPT_VER=1.77.0 5 | TESS_VER=4.0.0 6 | # base url. 7 | U=https://github.com/thortex/rpi3-tesseract/releases/download/ 8 | # Install Leptonica 9 | F=leptonica_${LEPT_VER}-1_armhf.deb 10 | wget -c $U/$R/$F 11 | sudo dpkg -i $F 12 | 13 | # Install Tesseract 4 14 | FO=tesseract-ocr_${TESS_VER}-1_armhf.deb 15 | FD=tesseract-data_${TESS_VER}-1_armhf.deb 16 | FS=tesseract-script-data_${TESS_VER}-1_armhf.deb 17 | wget -c $U/$R/$FO 18 | wget -c $U/$R/$FD 19 | wget -c $U/$R/$FS 20 | sudo dpkg -i $FO $FD $FS 21 | -------------------------------------------------------------------------------- /setup/019_checkinstall.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh -x 2 | 3 | sudo apt-get remove checkinstall 4 | 5 | git clone https://github.com/giuliomoro/checkinstall 6 | cd checkinstall 7 | sudo make install 8 | -------------------------------------------------------------------------------- /setup/030_build_opencv.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh -x 2 | 3 | V=4.0.1 4 | TESS_INC_DIR=/usr/local/include/tesseract 5 | TESS_LIBRARY=/usr/local/lib/libtesseract.so.4 6 | 7 | sudo pip3 install numpy 8 | 9 | sudo apt-get install -y \ 10 | build-essential \ 11 | gettext \ 12 | ccache \ 13 | cmake \ 14 | pkg-config \ 15 | libpng-dev \ 16 | libpng++-dev \ 17 | libjpeg-dev \ 18 | libtiff5-dev \ 19 | libjasper-dev \ 20 | libavcodec-dev \ 21 | libavformat-dev \ 22 | libavresample-dev \ 23 | libswresample-dev \ 24 | libavutil-dev \ 25 | libswscale-dev \ 26 | libv4l-dev \ 27 | libxvidcore-dev \ 28 | libx264-dev \ 29 | libgtk-3-dev \ 30 | libgdk-pixbuf2.0-dev \ 31 | libpango1.0-dev \ 32 | libcairo2-dev \ 33 | libfontconfig1-dev \ 34 | libatlas-base-dev \ 35 | liblapack-dev \ 36 | liblapacke-dev \ 37 | libblas-dev \ 38 | libopenblas-dev \ 39 | gfortran \ 40 | python-pip \ 41 | python3-pip \ 42 | python-numpy \ 43 | python-dev \ 44 | python3-dev \ 45 | libeigen2-dev \ 46 | libeigen3-dev \ 47 | libopenexr-dev \ 48 | libgstreamer1.0-dev \ 49 | libgstreamermm-1.0-dev \ 50 | libgoogle-glog-dev \ 51 | libgflags-dev \ 52 | libprotobuf-c-dev \ 53 | libprotobuf-dev \ 54 | protobuf-c-compiler \ 55 | protobuf-compiler \ 56 | libgphoto2-dev \ 57 | qt5-default \ 58 | libvtk6-dev \ 59 | libvtk6-qt-dev \ 60 | libhdf5-dev \ 61 | freeglut3-dev \ 62 | libgtkglext1-dev \ 63 | libgtkglextmm-x11-1.2-dev \ 64 | libwebp-dev \ 65 | libtbb-dev \ 66 | libdc1394-22-dev \ 67 | libunicap2-dev \ 68 | ffmpeg 69 | 70 | 71 | git clone --depth=1 -b ${V} --single-branch https://github.com/opencv/opencv.git 72 | git clone --depth=1 -b ${V} --single-branch https://github.com/opencv/opencv_contrib.git 73 | cd opencv 74 | mkdir -p build 75 | cd build 76 | 77 | export CXXFLAGS='-mtune=cortex-a53 -march=armv8-a+crc -mcpu=cortex-a53 -mfpu=crypto-neon-fp-armv8' 78 | 79 | cmake -D CMAKE_BUILD_TYPE=RELEASE \ 80 | -D CMAKE_INSTALL_PREFIX=/usr/local \ 81 | -D OPENCV_EXTRA_MODULES_PATH=../../opencv_contrib/modules \ 82 | -D BUILD_SHARED_LIBS=ON \ 83 | -D BUILD_CUDA_STUBS=ON \ 84 | -D BUILD_DOCS=OFF \ 85 | -D BUILD_ZLIB=OFF \ 86 | -D BUILD_TIFF=OFF \ 87 | -D BUILD_JPEG=OFF \ 88 | -D BUILD_JASPER=OFF \ 89 | -D BUILD_PNG=OFF \ 90 | -D BUILD_OPENEXR=OFF \ 91 | -D BUILD_PERF_TESTS=OFF \ 92 | -D BUILD_TBB=OFF \ 93 | -D BUILD_WEBP=OFF \ 94 | -D BUILD_TESTS=OFF \ 95 | -D BUILD_EXAMPLES=OFF \ 96 | -D BUILD_JAVA=OFF \ 97 | -D WITH_EIGEN=ON \ 98 | -D WITH_GSTREAMER=ON \ 99 | -D WITH_GTK=ON \ 100 | -D WITH_JASPER=ON \ 101 | -D WITH_JPEG=ON \ 102 | -D WITH_OPENEXR=ON \ 103 | -D WITH_PNG=ON \ 104 | -D WITH_TIFF=ON \ 105 | -D WITH_V4L=ON \ 106 | -D WITH_LIBV4L=ON \ 107 | -D WITH_VTK=ON \ 108 | -D WITH_LAPACK=ON \ 109 | -D WITH_LAPACKE=ON \ 110 | -D WITH_PROTOBUF=ON \ 111 | -D WITH_1394=ON \ 112 | -D WITH_EIGEN=ON \ 113 | -D WITH_FFMPEG=ON \ 114 | -D WITH_GPHOTO2=ON \ 115 | -D WITH_OPENGL=OFF \ 116 | -D WITH_QT=ON \ 117 | -D WITH_TBB=ON \ 118 | -D WITH_WEBP=ON \ 119 | -D WITH_UNICAP=ON \ 120 | -D WITH_OPENNI=OFF \ 121 | -D WITH_GDAL=OFF \ 122 | -D WITH_CUBLAS=OFF \ 123 | -D WITH_NVCUVID=OFF \ 124 | -D WITH_CUDA=OFF \ 125 | -D WITH_CUFFT=OFF \ 126 | -D WITH_IPP=OFF \ 127 | -D WITH_IPP_A=OFF \ 128 | -D WITH_OPENMP=ON \ 129 | -D WITH_PTHREADS_PF=OFF \ 130 | -D WITH_PVAPI=OFF \ 131 | -D WITH_MATLAB=OFF \ 132 | -D WITH_XIMEA=OFF \ 133 | -D WITH_XINE=OFF \ 134 | -D WITH_OPENCL=ON \ 135 | -D WITH_OPENCLAMDBLAS=OFF \ 136 | -D WITH_OPENCLAMDFFT=OFF \ 137 | -D WITH_OPENCL_SVM=OFF \ 138 | -D INSTALL_PYTHON_EXAMPLES=ON \ 139 | -D ENABLE_CXX11=ON \ 140 | -D ENABLE_CCACHE=ON \ 141 | -D ENABLE_FAST_MATH=ON \ 142 | -D ENABLE_NEON=ON \ 143 | -D ENABLE_VFPV3=ON \ 144 | -D ENABLE_OMIT_FRAME_POINTER=ON \ 145 | -D BUILD_opencv_apps=ON \ 146 | -D BUILD_opencv_aruco=ON \ 147 | -D BUILD_opencv_bgsegm=ON \ 148 | -D BUILD_opencv_calib3d=ON \ 149 | -D BUILD_opencv_bioinspired=ON \ 150 | -D BUILD_opencv_dnn=ON \ 151 | -D BUILD_opencv_dpm=ON \ 152 | -D BUILD_opencv_core=ON \ 153 | -D BUILD_opencv_face=ON \ 154 | -D BUILD_opencv_features2d=ON \ 155 | -D BUILD_opencv_flann=ON \ 156 | -D BUILD_opencv_freetype=ON \ 157 | -D BUILD_opencv_fuzzy=ON \ 158 | -D BUILD_opencv_hfs=ON \ 159 | -D BUILD_opencv_highgui=ON \ 160 | -D BUILD_opencv_imgcodecs=ON \ 161 | -D BUILD_opencv_imgproc=ON \ 162 | -D BUILD_opencv_ml=ON \ 163 | -D BUILD_opencv_objdetect=ON \ 164 | -D BUILD_opencv_optflow=ON \ 165 | -D BUILD_opencv_phase_unwrapping=ON \ 166 | -D BUILD_opencv_photo=ON \ 167 | -D BUILD_opencv_plot=ON \ 168 | -D BUILD_opencv_python2=ON \ 169 | -D BUILD_opencv_python3=ON \ 170 | -D BUILD_opencv_reg=ON \ 171 | -D BUILD_opencv_rgbd=ON \ 172 | -D BUILD_opencv_saliency=ON \ 173 | -D BUILD_opencv_shape=ON \ 174 | -D BUILD_opencv_stereo=ON \ 175 | -D BUILD_opencv_stitching=ON \ 176 | -D BUILD_opencv_superres=ON \ 177 | -D BUILD_opencv_surface_matching=ON \ 178 | -D BUILD_opencv_text=ON \ 179 | -D BUILD_opencv_tracking=ON \ 180 | -D BUILD_opencv_ts=ON \ 181 | -D BUILD_opencv_video=ON \ 182 | -D BUILD_opencv_videoio=ON \ 183 | -D BUILD_opencv_videostab=ON \ 184 | -D BUILD_opencv_viz=OFF \ 185 | -D BUILD_opencv_world=OFF \ 186 | -D BUILD_opencv_xfeature2d=ON \ 187 | -D BUILD_opencv_ximgproc=ON \ 188 | -D BUILD_opencv_xobjdetect=ON \ 189 | -D BUILD_opencv_xphoto=ON \ 190 | -D BUILD_opencv_java=OFF \ 191 | -D BUILD_opencv_cudaarithm=OFF \ 192 | -D BUILD_opencv_cudabgsegm=OFF \ 193 | -D BUILD_opencv_cudacodec=OFF \ 194 | -D BUILD_opencv_cudafeatures2d=OFF \ 195 | -D BUILD_opencv_cudafilters=OFF \ 196 | -D BUILD_opencv_cudaimgproc=OFF \ 197 | -D BUILD_opencv_cudalegacy=OFF \ 198 | -D BUILD_opencv_cudaobjdetect=OFF \ 199 | -D BUILD_opencv_cudaoptflow=OFF \ 200 | -D BUILD_opencv_cudastereo=OFF \ 201 | -D BUILD_opencv_cudawarping=OFF \ 202 | -D BUILD_opencv_cudev=OFF \ 203 | -D Tesseract_INCLUDE_DIR=$TESS_INC_DIR \ 204 | -D Tesseract_LIBRARY=$TESS_LIBRARY \ 205 | -D OPENCL_INCLUDE_DIR=/usr/include \ 206 | -D OPENCL_LIBRARY=/usr/lib/arm-linux-gnueabihf/libOpenCL.so \ 207 | .. && make 208 | 209 | author=thortex 210 | 211 | R=`date "+%Y%m%d"` 212 | GCC_VER=`gcc --version | head -1` 213 | 214 | cat << EOF > description-pak 215 | OpenCV for Raspberry Pi with OpenCL features. 216 | Built with $GCC_VER 217 | EOF 218 | 219 | export PATH="/usr/lib/gcc/arm-linux-gnueabihf/6:$PATH" 220 | 221 | sudo dpkg --purge opencv 222 | 223 | sudo -E checkinstall --type=debian \ 224 | --install=no \ 225 | --default \ 226 | --pkgname=opencv \ 227 | --pkgversion=$V \ 228 | --pkgrelease=$R \ 229 | --maintainer=$author \ 230 | --provides=opencv \ 231 | --summary="OpenCV for Raspberry Pi" 232 | 233 | 234 | 235 | 236 | -------------------------------------------------------------------------------- /setup/031_install_opencv.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash -x 2 | YMD=20190209 3 | V=4.0.1 4 | D=opencv/build/ 5 | F=opencv_${YMD}_armhf.deb 6 | P=${F/opencv_/opencv_$V-} 7 | 8 | if [ -f "${D}${P}" ] ; then 9 | mv ${D}${P} ./release/${P} 10 | fi 11 | 12 | sudo dpkg -i ./release/${P} 13 | sudo ldconfig 14 | 15 | -------------------------------------------------------------------------------- /setup/032_update_deps.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | FILES=`dpkg -L opencv | \ 4 | grep -v man | \ 5 | grep -v doc | \ 6 | grep -v include | \ 7 | grep -v '\.py$' | \ 8 | grep -v share | \ 9 | grep -v '\.so\.3\.4$' | \ 10 | grep -v '\.so\.3\.4\.1$' | \ 11 | grep -v pkgconfig | \ 12 | grep '\.so$'` 13 | 14 | D=deps.tmp 15 | echo -n '' > $D 16 | for file in $FILES 17 | do 18 | echo "Checking [$file] .." 19 | ldd $file >> $D 20 | done 21 | 22 | DEPS=`cat $D | \ 23 | perl -pe 's/^.*? => //; s/\(0x.*?\)//; s/ //g; s/\t//g;' | \ 24 | sort -u | \ 25 | grep -v linux-vdso.so.1` 26 | rm -f $D 27 | 28 | R=requires.tmp 29 | for dep in $DEPS 30 | do 31 | echo "Checking [$dep] .." 32 | dpkg -S $dep >> $R 33 | done 34 | 35 | RESULT=release/install_requires_related2opencv.sh 36 | echo '#!/bin/sh -x' > $RESULT 37 | echo 'sudo apt-get install \' >> $RESULT 38 | chmod +x $RESULT 39 | 40 | cat ${R} | \ 41 | grep -v ^opencv | \ 42 | perl -pe 's/:.*?$//;' | \ 43 | sort -u | \ 44 | sed -e 's/$/ \\/;' >> $RESULT 45 | 46 | echo ' ' >> $RESULT 47 | 48 | rm -f ${R} 49 | --------------------------------------------------------------------------------