diff options
| author | Chris Dimich <Chris.Dimich@boundarydevices.com> | 2021-03-01 16:27:43 -0800 |
|---|---|---|
| committer | Otavio Salvador <otavio@ossystems.com.br> | 2021-03-02 18:34:38 -0300 |
| commit | dc6bebac65d3733548de568f31ca5bfbf9e8a8a5 (patch) | |
| tree | 3f3fa5ca7fb86aae9e04850f6fe781086e1e0d7c | |
| parent | 9de81869018e78b8b861513735b85c2dbc33ca0b (diff) | |
| download | meta-freescale-dc6bebac65d3733548de568f31ca5bfbf9e8a8a5.tar.gz | |
opencv_4.4.0.imx: add recipe
Add recipe to support additional machine learning demos and tiny dnn.
Signed-off-by: Chris Dimich <Chris.Dimich@boundarydevices.com>
10 files changed, 901 insertions, 0 deletions
diff --git a/recipes-support/opencv/opencv/0001-3rdparty-ippicv-Use-pre-downloaded-ipp.patch b/recipes-support/opencv/opencv/0001-3rdparty-ippicv-Use-pre-downloaded-ipp.patch new file mode 100644 index 000000000..9e6a61371 --- /dev/null +++ b/recipes-support/opencv/opencv/0001-3rdparty-ippicv-Use-pre-downloaded-ipp.patch | |||
| @@ -0,0 +1,36 @@ | |||
| 1 | From 9b4959b97d2e95d4b49cf6ca2a3fce3cdb484f2d Mon Sep 17 00:00:00 2001 | ||
| 2 | From: Ricardo Ribalda Delgado <ricardo.ribalda@gmail.com> | ||
| 3 | Date: Thu, 31 Mar 2016 00:20:15 +0200 | ||
| 4 | Subject: [PATCH] 3rdparty/ippicv: Use pre-downloaded ipp | ||
| 5 | |||
| 6 | Signed-off-by: Ricardo Ribalda Delgado <ricardo.ribalda@gmail.com> | ||
| 7 | Signed-off-by: Ismo Puustinen <ismo.puustinen@intel.com> | ||
| 8 | |||
| 9 | --- | ||
| 10 | 3rdparty/ippicv/ippicv.cmake | 15 +-------------- | ||
| 11 | 1 file changed, 1 insertion(+), 14 deletions(-) | ||
| 12 | |||
| 13 | diff --git a/3rdparty/ippicv/ippicv.cmake b/3rdparty/ippicv/ippicv.cmake | ||
| 14 | index 257af6fcc6..f88460450f 100644 | ||
| 15 | --- a/3rdparty/ippicv/ippicv.cmake | ||
| 16 | +++ b/3rdparty/ippicv/ippicv.cmake | ||
| 17 | @@ -34,18 +34,5 @@ function(download_ippicv root_var) | ||
| 18 | endif() | ||
| 19 | |||
| 20 | set(THE_ROOT "${OpenCV_BINARY_DIR}/3rdparty/ippicv") | ||
| 21 | - ocv_download(FILENAME ${OPENCV_ICV_NAME} | ||
| 22 | - HASH ${OPENCV_ICV_HASH} | ||
| 23 | - URL | ||
| 24 | - "${OPENCV_IPPICV_URL}" | ||
| 25 | - "$ENV{OPENCV_IPPICV_URL}" | ||
| 26 | - "https://raw.githubusercontent.com/opencv/opencv_3rdparty/${IPPICV_COMMIT}/ippicv/" | ||
| 27 | - DESTINATION_DIR "${THE_ROOT}" | ||
| 28 | - ID IPPICV | ||
| 29 | - STATUS res | ||
| 30 | - UNPACK RELATIVE_URL) | ||
| 31 | - | ||
| 32 | - if(res) | ||
| 33 | - set(${root_var} "${THE_ROOT}/${OPENCV_ICV_PACKAGE_SUBDIR}" PARENT_SCOPE) | ||
| 34 | - endif() | ||
| 35 | + set(${root_var} "${THE_ROOT}/${OPENCV_ICV_PACKAGE_SUBDIR}" PARENT_SCOPE) | ||
| 36 | endfunction() | ||
diff --git a/recipes-support/opencv/opencv/0001-Add-smaller-version-of-download_models.py.patch b/recipes-support/opencv/opencv/0001-Add-smaller-version-of-download_models.py.patch new file mode 100644 index 000000000..0aabee29f --- /dev/null +++ b/recipes-support/opencv/opencv/0001-Add-smaller-version-of-download_models.py.patch | |||
| @@ -0,0 +1,179 @@ | |||
| 1 | From fca4d9eec289f22c081daa2c61a1110e3f268f92 Mon Sep 17 00:00:00 2001 | ||
| 2 | From: Tom Hochstein <tom.hochstein@nxp.com> | ||
| 3 | Date: Tue, 1 Sep 2020 14:57:07 -0500 | ||
| 4 | Subject: [PATCH] Add smaller version of download_models.py | ||
| 5 | |||
| 6 | Signed-off-by: Tom Hochstein <tom.hochstein@nxp.com> | ||
| 7 | --- | ||
| 8 | testdata/dnn/download_models_basic.py | 159 ++++++++++++++++++++++++++ | ||
| 9 | 1 file changed, 159 insertions(+) | ||
| 10 | create mode 100644 testdata/dnn/download_models_basic.py | ||
| 11 | |||
| 12 | diff --git a/testdata/dnn/download_models_basic.py b/testdata/dnn/download_models_basic.py | ||
| 13 | new file mode 100644 | ||
| 14 | index 0000000..5c8a616 | ||
| 15 | --- /dev/null | ||
| 16 | +++ b/testdata/dnn/download_models_basic.py | ||
| 17 | @@ -0,0 +1,159 @@ | ||
| 18 | +#!/usr/bin/env python | ||
| 19 | + | ||
| 20 | +from __future__ import print_function | ||
| 21 | +import hashlib | ||
| 22 | +import sys | ||
| 23 | +import tarfile | ||
| 24 | +if sys.version_info[0] < 3: | ||
| 25 | + from urllib2 import urlopen | ||
| 26 | +else: | ||
| 27 | + from urllib.request import urlopen | ||
| 28 | + | ||
| 29 | + | ||
| 30 | +class Model: | ||
| 31 | + MB = 1024*1024 | ||
| 32 | + BUFSIZE = 10*MB | ||
| 33 | + | ||
| 34 | + def __init__(self, **kwargs): | ||
| 35 | + self.name = kwargs.pop('name') | ||
| 36 | + self.url = kwargs.pop('url', None) | ||
| 37 | + self.filename = kwargs.pop('filename') | ||
| 38 | + self.sha = kwargs.pop('sha', None) | ||
| 39 | + self.archive = kwargs.pop('archive', None) | ||
| 40 | + self.member = kwargs.pop('member', None) | ||
| 41 | + | ||
| 42 | + def __str__(self): | ||
| 43 | + return 'Model <{}>'.format(self.name) | ||
| 44 | + | ||
| 45 | + def printRequest(self, r): | ||
| 46 | + def getMB(r): | ||
| 47 | + d = dict(r.info()) | ||
| 48 | + for c in ['content-length', 'Content-Length']: | ||
| 49 | + if c in d: | ||
| 50 | + return int(d[c]) / self.MB | ||
| 51 | + return '<unknown>' | ||
| 52 | + print(' {} {} [{} Mb]'.format(r.getcode(), r.msg, getMB(r))) | ||
| 53 | + | ||
| 54 | + def verify(self): | ||
| 55 | + if not self.sha: | ||
| 56 | + return False | ||
| 57 | + print(' expect {}'.format(self.sha)) | ||
| 58 | + sha = hashlib.sha1() | ||
| 59 | + try: | ||
| 60 | + with open(self.filename, 'rb') as f: | ||
| 61 | + while True: | ||
| 62 | + buf = f.read(self.BUFSIZE) | ||
| 63 | + if not buf: | ||
| 64 | + break | ||
| 65 | + sha.update(buf) | ||
| 66 | + print(' actual {}'.format(sha.hexdigest())) | ||
| 67 | + return self.sha == sha.hexdigest() | ||
| 68 | + except Exception as e: | ||
| 69 | + print(' catch {}'.format(e)) | ||
| 70 | + | ||
| 71 | + def get(self): | ||
| 72 | + if self.verify(): | ||
| 73 | + print(' hash match - skipping') | ||
| 74 | + return True | ||
| 75 | + | ||
| 76 | + if self.archive or self.member: | ||
| 77 | + assert(self.archive and self.member) | ||
| 78 | + print(' hash check failed - extracting') | ||
| 79 | + print(' get {}'.format(self.member)) | ||
| 80 | + self.extract() | ||
| 81 | + else: | ||
| 82 | + assert(self.url) | ||
| 83 | + print(' hash check failed - downloading') | ||
| 84 | + print(' get {}'.format(self.url)) | ||
| 85 | + self.download() | ||
| 86 | + | ||
| 87 | + print(' done') | ||
| 88 | + print(' file {}'.format(self.filename)) | ||
| 89 | + return self.verify() | ||
| 90 | + | ||
| 91 | + def download(self): | ||
| 92 | + try: | ||
| 93 | + r = urlopen(self.url, timeout=60) | ||
| 94 | + self.printRequest(r) | ||
| 95 | + self.save(r) | ||
| 96 | + except Exception as e: | ||
| 97 | + print(' catch {}'.format(e)) | ||
| 98 | + | ||
| 99 | + def extract(self): | ||
| 100 | + try: | ||
| 101 | + with tarfile.open(self.archive) as f: | ||
| 102 | + assert self.member in f.getnames() | ||
| 103 | + self.save(f.extractfile(self.member)) | ||
| 104 | + except Exception as e: | ||
| 105 | + print(' catch {}'.format(e)) | ||
| 106 | + | ||
| 107 | + def save(self, r): | ||
| 108 | + with open(self.filename, 'wb') as f: | ||
| 109 | + print(' progress ', end='') | ||
| 110 | + sys.stdout.flush() | ||
| 111 | + while True: | ||
| 112 | + buf = r.read(self.BUFSIZE) | ||
| 113 | + if not buf: | ||
| 114 | + break | ||
| 115 | + f.write(buf) | ||
| 116 | + print('>', end='') | ||
| 117 | + sys.stdout.flush() | ||
| 118 | + | ||
| 119 | +models = [ | ||
| 120 | + Model( | ||
| 121 | + name='Fcn', | ||
| 122 | + url='http://dl.caffe.berkeleyvision.org/fcn8s-heavy-pascal.caffemodel', | ||
| 123 | + sha='c449ea74dd7d83751d1357d6a8c323fcf4038962', | ||
| 124 | + filename='fcn8s-heavy-pascal.caffemodel'), | ||
| 125 | + Model( | ||
| 126 | + name='SqueezeNet_v1.1', | ||
| 127 | + url='https://raw.githubusercontent.com/DeepScale/SqueezeNet/b5c3f1a23713c8b3fd7b801d229f6b04c64374a5/SqueezeNet_v1.1/squeezenet_v1.1.caffemodel', | ||
| 128 | + sha='3397f026368a45ae236403ccc81cfcbe8ebe1bd0', | ||
| 129 | + filename='squeezenet_v1.1.caffemodel'), | ||
| 130 | + Model( | ||
| 131 | + name='Colorization', | ||
| 132 | + url='https://raw.githubusercontent.com/richzhang/colorization/master/models/colorization_deploy_v2.prototxt', | ||
| 133 | + sha='f528334e386a69cbaaf237a7611d833bef8e5219', | ||
| 134 | + filename='colorization_deploy_v2.prototxt'), | ||
| 135 | + Model( | ||
| 136 | + name='Colorization', | ||
| 137 | + url='http://eecs.berkeley.edu/~rich.zhang/projects/2016_colorization/files/demo_v2/colorization_release_v2.caffemodel', | ||
| 138 | + sha='21e61293a3fa6747308171c11b6dd18a68a26e7f', | ||
| 139 | + filename='colorization_release_v2.caffemodel'), | ||
| 140 | + Model( | ||
| 141 | + name='OpenPose/pose/coco', # https://github.com/CMU-Perceptual-Computing-Lab/openpose | ||
| 142 | + url='http://posefs1.perception.cs.cmu.edu/OpenPose/models/pose/coco/pose_iter_440000.caffemodel', | ||
| 143 | + sha='ac7e97da66f3ab8169af2e601384c144e23a95c1', | ||
| 144 | + filename='openpose_pose_coco.caffemodel'), | ||
| 145 | + Model( | ||
| 146 | + name='YOLOv3', # https://pjreddie.com/darknet/yolo/ | ||
| 147 | + url='https://pjreddie.com/media/files/yolov3.weights', | ||
| 148 | + sha='520878f12e97cf820529daea502acca380f1cb8e', | ||
| 149 | + filename='yolov3.weights'), | ||
| 150 | + Model( | ||
| 151 | + name='EAST', # https://github.com/argman/EAST (a TensorFlow model), https://arxiv.org/abs/1704.03155v2 (a paper) | ||
| 152 | + url='https://www.dropbox.com/s/r2ingd0l3zt8hxs/frozen_east_text_detection.tar.gz?dl=1', | ||
| 153 | + sha='3ca8233d6edd748f7ed23246c8ca24cbf696bb94', | ||
| 154 | + filename='frozen_east_text_detection.tar.gz'), | ||
| 155 | + Model( | ||
| 156 | + name='EAST', | ||
| 157 | + archive='frozen_east_text_detection.tar.gz', | ||
| 158 | + member='frozen_east_text_detection.pb', | ||
| 159 | + sha='fffabf5ac36f37bddf68e34e84b45f5c4247ed06', | ||
| 160 | + filename='frozen_east_text_detection.pb'), | ||
| 161 | +] | ||
| 162 | + | ||
| 163 | +# Note: models will be downloaded to current working directory | ||
| 164 | +# expected working directory is opencv_extra/testdata/dnn | ||
| 165 | +if __name__ == '__main__': | ||
| 166 | + failedModels = [] | ||
| 167 | + for m in models: | ||
| 168 | + print(m) | ||
| 169 | + if not m.get(): | ||
| 170 | + failedModels.append(m.filename) | ||
| 171 | + | ||
| 172 | + if failedModels: | ||
| 173 | + print("Following models have not been downloaded:") | ||
| 174 | + for f in failedModels: | ||
| 175 | + print("* {}".format(f)) | ||
| 176 | + exit(15) | ||
| 177 | -- | ||
| 178 | 2.17.1 | ||
| 179 | |||
diff --git a/recipes-support/opencv/opencv/0001-Dont-use-isystem.patch b/recipes-support/opencv/opencv/0001-Dont-use-isystem.patch new file mode 100644 index 000000000..948a80faf --- /dev/null +++ b/recipes-support/opencv/opencv/0001-Dont-use-isystem.patch | |||
| @@ -0,0 +1,28 @@ | |||
| 1 | From 66e50ee69fa9ee2469d349100e70d8b296c4b4dc Mon Sep 17 00:00:00 2001 | ||
| 2 | From: Khem Raj <raj.khem@gmail.com> | ||
| 3 | Date: Tue, 11 Sep 2018 00:21:18 -0700 | ||
| 4 | Subject: [PATCH] Dont use isystem | ||
| 5 | |||
| 6 | clang really does not like it | ||
| 7 | |||
| 8 | Upstream-Status: Pending | ||
| 9 | |||
| 10 | Signed-off-by: Khem Raj <raj.khem@gmail.com> | ||
| 11 | |||
| 12 | --- | ||
| 13 | cmake/OpenCVPCHSupport.cmake | 2 ++ | ||
| 14 | 1 file changed, 2 insertions(+) | ||
| 15 | |||
| 16 | diff --git a/cmake/OpenCVPCHSupport.cmake b/cmake/OpenCVPCHSupport.cmake | ||
| 17 | index 08cd06def4..46c9c02da3 100644 | ||
| 18 | --- a/cmake/OpenCVPCHSupport.cmake | ||
| 19 | +++ b/cmake/OpenCVPCHSupport.cmake | ||
| 20 | @@ -18,6 +18,8 @@ IF(CV_GCC) | ||
| 21 | SET(PCHSupport_FOUND TRUE) | ||
| 22 | ENDIF() | ||
| 23 | |||
| 24 | + SET(CMAKE_INCLUDE_SYSTEM_FLAG_C "-I") | ||
| 25 | + SET(CMAKE_INCLUDE_SYSTEM_FLAG_CXX "-I") | ||
| 26 | SET(_PCH_include_prefix "-I") | ||
| 27 | SET(_PCH_isystem_prefix "-isystem") | ||
| 28 | SET(_PCH_define_prefix "-D") | ||
diff --git a/recipes-support/opencv/opencv/0001-Make-ts-module-external.patch b/recipes-support/opencv/opencv/0001-Make-ts-module-external.patch new file mode 100644 index 000000000..d56b8ae67 --- /dev/null +++ b/recipes-support/opencv/opencv/0001-Make-ts-module-external.patch | |||
| @@ -0,0 +1,42 @@ | |||
| 1 | From 11bbf909e08594628bd757d989ae34cf1bfe200b Mon Sep 17 00:00:00 2001 | ||
| 2 | From: Mingli Yu <mingli.yu@windriver.com> | ||
| 3 | Date: Thu, 18 Jun 2020 05:51:38 +0000 | ||
| 4 | Subject: [PATCH] Make ts module external | ||
| 5 | |||
| 6 | Make ts module external | ||
| 7 | |||
| 8 | Reference: https://github.com/qbonnard/opencv/commit/6b229c5834cb9a0930425e762a6c7b03244d7abb | ||
| 9 | |||
| 10 | Upstream-Status: Submitted [https://github.com/opencv/opencv/issues/8408] | ||
| 11 | |||
| 12 | Signed-off-by: Mingli Yu <mingli.yu@windriver.com> | ||
| 13 | --- | ||
| 14 | modules/ts/CMakeLists.txt | 5 +---- | ||
| 15 | 1 file changed, 1 insertion(+), 4 deletions(-) | ||
| 16 | |||
| 17 | diff --git a/modules/ts/CMakeLists.txt b/modules/ts/CMakeLists.txt | ||
| 18 | index f95bed0793..66f315bcca 100644 | ||
| 19 | --- a/modules/ts/CMakeLists.txt | ||
| 20 | +++ b/modules/ts/CMakeLists.txt | ||
| 21 | @@ -4,9 +4,6 @@ if(NOT BUILD_opencv_ts AND NOT BUILD_TESTS AND NOT BUILD_PERF_TESTS) | ||
| 22 | ocv_module_disable(ts) | ||
| 23 | endif() | ||
| 24 | |||
| 25 | -set(OPENCV_MODULE_TYPE STATIC) | ||
| 26 | -set(OPENCV_MODULE_IS_PART_OF_WORLD FALSE) | ||
| 27 | - | ||
| 28 | if(WINRT) | ||
| 29 | # WINRT doesn't have access to environment variables | ||
| 30 | # so adding corresponding macros during CMake run | ||
| 31 | @@ -16,7 +13,7 @@ endif() | ||
| 32 | |||
| 33 | ocv_warnings_disable(CMAKE_CXX_FLAGS -Wundef) | ||
| 34 | |||
| 35 | -ocv_add_module(ts INTERNAL opencv_core opencv_imgproc opencv_imgcodecs opencv_videoio opencv_highgui) | ||
| 36 | +ocv_add_module(ts opencv_core opencv_imgproc opencv_imgcodecs opencv_videoio opencv_highgui) | ||
| 37 | |||
| 38 | ocv_glob_module_sources() | ||
| 39 | ocv_module_include_directories() | ||
| 40 | -- | ||
| 41 | 2.24.1 | ||
| 42 | |||
diff --git a/recipes-support/opencv/opencv/0001-Temporarliy-work-around-deprecated-ffmpeg-RAW-functi.patch b/recipes-support/opencv/opencv/0001-Temporarliy-work-around-deprecated-ffmpeg-RAW-functi.patch new file mode 100644 index 000000000..1e47f8b16 --- /dev/null +++ b/recipes-support/opencv/opencv/0001-Temporarliy-work-around-deprecated-ffmpeg-RAW-functi.patch | |||
| @@ -0,0 +1,31 @@ | |||
| 1 | From e4ec6cea72da9e9ae5ba57140fa2f5c63f1f8295 Mon Sep 17 00:00:00 2001 | ||
| 2 | From: Jason Wessel <jason.wessel@windriver.com> | ||
| 3 | Date: Wed, 9 May 2018 13:33:59 -0700 | ||
| 4 | Subject: [PATCH] Temporarliy work around deprecated ffmpeg RAW function | ||
| 5 | compile failure until next uprev | ||
| 6 | |||
| 7 | Signed-off-by: Jason Wessel <jason.wessel@windriver.com> | ||
| 8 | |||
| 9 | --- | ||
| 10 | modules/videoio/src/cap_ffmpeg_impl.hpp | 8 ++++++++ | ||
| 11 | 1 file changed, 8 insertions(+) | ||
| 12 | |||
| 13 | diff --git a/modules/videoio/src/cap_ffmpeg_impl.hpp b/modules/videoio/src/cap_ffmpeg_impl.hpp | ||
| 14 | index 6dca724a89..ae55dd4555 100644 | ||
| 15 | --- a/modules/videoio/src/cap_ffmpeg_impl.hpp | ||
| 16 | +++ b/modules/videoio/src/cap_ffmpeg_impl.hpp | ||
| 17 | @@ -774,6 +774,14 @@ struct ImplMutex::Impl | ||
| 18 | |||
| 19 | #endif | ||
| 20 | |||
| 21 | +/* NOTE This is deprecated in ffmpeg and the code should be removed */ | ||
| 22 | +#ifndef AVFMT_RAWPICTURE | ||
| 23 | +#define AVFMT_RAWPICTURE 0x0020 | ||
| 24 | +#endif /* AVFMT_RAWPICTURE */ | ||
| 25 | +#ifndef CODEC_FLAG_GLOBAL_HEADER | ||
| 26 | +#define CODEC_FLAG_GLOBAL_HEADER AV_CODEC_FLAG_GLOBAL_HEADER | ||
| 27 | +#endif | ||
| 28 | + | ||
| 29 | void ImplMutex::init() | ||
| 30 | { | ||
| 31 | impl = new Impl(); | ||
diff --git a/recipes-support/opencv/opencv/0001-Use-Os-to-compile-tinyxml2.cpp.patch b/recipes-support/opencv/opencv/0001-Use-Os-to-compile-tinyxml2.cpp.patch new file mode 100644 index 000000000..c5a64387f --- /dev/null +++ b/recipes-support/opencv/opencv/0001-Use-Os-to-compile-tinyxml2.cpp.patch | |||
| @@ -0,0 +1,31 @@ | |||
| 1 | From 59fafe6e39759e193b5764b36b4c5a93da352123 Mon Sep 17 00:00:00 2001 | ||
| 2 | From: Khem Raj <raj.khem@gmail.com> | ||
| 3 | Date: Tue, 18 Aug 2020 00:36:49 -0700 | ||
| 4 | Subject: [PATCH] Use -Os to compile tinyxml2.cpp | ||
| 5 | |||
| 6 | This workarounds issue [1] seen on riscv with gcc | ||
| 7 | |||
| 8 | [1] https://github.com/riscv/riscv-gnu-toolchain/issues/624 | ||
| 9 | |||
| 10 | Upstream-Status: Inappropriate [ OE-Specific ] | ||
| 11 | Signed-off-by: Khem Raj <raj.khem@gmail.com> | ||
| 12 | --- | ||
| 13 | modules/datasets/CMakeLists.txt | 2 +- | ||
| 14 | 1 file changed, 1 insertion(+), 1 deletion(-) | ||
| 15 | |||
| 16 | diff --git a/modules/datasets/CMakeLists.txt b/modules/datasets/CMakeLists.txt | ||
| 17 | index 56ca9e310..99b7a33f6 100644 | ||
| 18 | --- a/modules/datasets/CMakeLists.txt | ||
| 19 | +++ b/modules/datasets/CMakeLists.txt | ||
| 20 | @@ -2,7 +2,7 @@ set(the_description "datasets framework") | ||
| 21 | |||
| 22 | set(filter_srcs "${CMAKE_CURRENT_LIST_DIR}/src/tinyxml2/tinyxml2.cpp") | ||
| 23 | if(CMAKE_CXX_COMPILER_ID STREQUAL "GNU") | ||
| 24 | - ocv_append_source_files_cxx_compiler_options(filter_srcs "-Wno-suggest-override") # GCC | ||
| 25 | + ocv_append_source_files_cxx_compiler_options(filter_srcs "-Wno-suggest-override -Os") # GCC | ||
| 26 | elseif(CMAKE_CXX_COMPILER_ID STREQUAL "Clang") | ||
| 27 | ocv_append_source_files_cxx_compiler_options(filter_srcs "-Wno-inconsistent-missing-override") # Clang | ||
| 28 | endif() | ||
| 29 | -- | ||
| 30 | 2.28.0 | ||
| 31 | |||
diff --git a/recipes-support/opencv/opencv/0003-To-fix-errors-as-following.patch b/recipes-support/opencv/opencv/0003-To-fix-errors-as-following.patch new file mode 100644 index 000000000..bb47ef2ba --- /dev/null +++ b/recipes-support/opencv/opencv/0003-To-fix-errors-as-following.patch | |||
| @@ -0,0 +1,70 @@ | |||
| 1 | From f42c9b8c7bafcadc7e95fb25a391707f970eb426 Mon Sep 17 00:00:00 2001 | ||
| 2 | From: Huang Qiyu <huangqy.fnst@cn.fujitsu.com> | ||
| 3 | Date: Fri, 19 May 2017 04:27:50 +0900 | ||
| 4 | Subject: [PATCH] To fix errors as following: | ||
| 5 | |||
| 6 | "test_main.cpp:45: undefined reference to `parseCustomOptions(int, char**)'" | ||
| 7 | "perf_abs.cpp:13: undefined reference to `cvtest::param_seed'" | ||
| 8 | "test_superres.cpp:270: undefined reference to `checkIppStatus()'" | ||
| 9 | |||
| 10 | Signed-off-by: Huang Qiyu <huangqy.fnst@cn.fujitsu.com> | ||
| 11 | |||
| 12 | Also add the visibility changes for certain OpenCL-related functions in | ||
| 13 | ts module. | ||
| 14 | |||
| 15 | Signed-off-by: Ismo Puustinen <ismo.puustinen@intel.com> | ||
| 16 | |||
| 17 | --- | ||
| 18 | modules/ts/include/opencv2/ts.hpp | 4 ++-- | ||
| 19 | modules/ts/include/opencv2/ts/ocl_test.hpp | 2 +- | ||
| 20 | modules/ts/include/opencv2/ts/ts_ext.hpp | 2 +- | ||
| 21 | 3 files changed, 4 insertions(+), 4 deletions(-) | ||
| 22 | |||
| 23 | diff --git a/modules/ts/include/opencv2/ts.hpp b/modules/ts/include/opencv2/ts.hpp | ||
| 24 | index ed7491a89a..80919d13ee 100644 | ||
| 25 | --- a/modules/ts/include/opencv2/ts.hpp | ||
| 26 | +++ b/modules/ts/include/opencv2/ts.hpp | ||
| 27 | @@ -728,7 +728,7 @@ protected: | ||
| 28 | } | ||
| 29 | }; | ||
| 30 | |||
| 31 | -extern uint64 param_seed; | ||
| 32 | +CV_EXPORTS extern uint64 param_seed; | ||
| 33 | |||
| 34 | struct DefaultRngAuto | ||
| 35 | { | ||
| 36 | @@ -791,7 +791,7 @@ private: | ||
| 37 | #endif | ||
| 38 | #endif | ||
| 39 | |||
| 40 | -void parseCustomOptions(int argc, char **argv); | ||
| 41 | +CV_EXPORTS void parseCustomOptions(int argc, char **argv); | ||
| 42 | |||
| 43 | #define CV_TEST_INIT0_NOOP (void)0 | ||
| 44 | |||
| 45 | diff --git a/modules/ts/include/opencv2/ts/ocl_test.hpp b/modules/ts/include/opencv2/ts/ocl_test.hpp | ||
| 46 | index 11572e9f48..438112e2aa 100644 | ||
| 47 | --- a/modules/ts/include/opencv2/ts/ocl_test.hpp | ||
| 48 | +++ b/modules/ts/include/opencv2/ts/ocl_test.hpp | ||
| 49 | @@ -82,7 +82,7 @@ inline UMat ToUMat(InputArray src) | ||
| 50 | return dst; | ||
| 51 | } | ||
| 52 | |||
| 53 | -extern int test_loop_times; | ||
| 54 | +CV_EXPORTS extern int test_loop_times; | ||
| 55 | |||
| 56 | #define MAX_VALUE 357 | ||
| 57 | |||
| 58 | diff --git a/modules/ts/include/opencv2/ts/ts_ext.hpp b/modules/ts/include/opencv2/ts/ts_ext.hpp | ||
| 59 | index b2a4cac241..b94c681c0c 100644 | ||
| 60 | --- a/modules/ts/include/opencv2/ts/ts_ext.hpp | ||
| 61 | +++ b/modules/ts/include/opencv2/ts/ts_ext.hpp | ||
| 62 | @@ -9,7 +9,7 @@ | ||
| 63 | #define OPENCV_TS_EXT_HPP | ||
| 64 | |||
| 65 | namespace cvtest { | ||
| 66 | -void checkIppStatus(); | ||
| 67 | +CV_EXPORTS void checkIppStatus(); | ||
| 68 | extern bool skipUnstableTests; | ||
| 69 | extern bool runBigDataTests; | ||
| 70 | extern int testThreads; | ||
diff --git a/recipes-support/opencv/opencv/OpenCV_DNN_examples.patch b/recipes-support/opencv/opencv/OpenCV_DNN_examples.patch new file mode 100644 index 000000000..569d5b027 --- /dev/null +++ b/recipes-support/opencv/opencv/OpenCV_DNN_examples.patch | |||
| @@ -0,0 +1,148 @@ | |||
| 1 | From 3c4daafb54f961e376104a461ca7ec114ff0331a Mon Sep 17 00:00:00 2001 | ||
| 2 | From: Ludek Slosarcik <ludek.slosarcik@nxp.com> | ||
| 3 | Date: Fri, 14 Feb 2020 15:46:50 +0100 | ||
| 4 | Subject: [PATCH] opencv_dnn: added video device for 2 examples, and change text labels | ||
| 5 | |||
| 6 | Signed-off-by: Ludek Slosarcik <ludek.slosarcik@nxp.com> | ||
| 7 | |||
| 8 | Upstream-Status: Pending | ||
| 9 | --- | ||
| 10 | samples/cpp/logistic_regression.cpp | 2 +- | ||
| 11 | samples/dnn/classification.cpp | 7 ++++--- | ||
| 12 | samples/dnn/object_detection.cpp | 10 +++++----- | ||
| 13 | samples/dnn/segmentation.cpp | 2 +- | ||
| 14 | samples/dnn/text_detection.cpp | 5 +++-- | ||
| 15 | 5 files changed, 14 insertions(+), 12 deletions(-) | ||
| 16 | |||
| 17 | Index: git/samples/cpp/logistic_regression.cpp | ||
| 18 | =================================================================== | ||
| 19 | --- git.orig/samples/cpp/logistic_regression.cpp | ||
| 20 | +++ git/samples/cpp/logistic_regression.cpp | ||
| 21 | @@ -83,7 +83,7 @@ static float calculateAccuracyPercent(co | ||
| 22 | |||
| 23 | int main() | ||
| 24 | { | ||
| 25 | - const String filename = samples::findFile("data01.xml"); | ||
| 26 | + const String filename = samples::findFile("../data/data01.xml"); | ||
| 27 | cout << "**********************************************************************" << endl; | ||
| 28 | cout << filename | ||
| 29 | << " contains digits 0 and 1 of 20 samples each, collected on an Android device" << endl; | ||
| 30 | Index: git/samples/dnn/classification.cpp | ||
| 31 | =================================================================== | ||
| 32 | --- git.orig/samples/dnn/classification.cpp | ||
| 33 | +++ git/samples/dnn/classification.cpp | ||
| 34 | @@ -11,6 +11,7 @@ std::string keys = | ||
| 35 | "{ help h | | Print help message. }" | ||
| 36 | "{ @alias | | An alias name of model to extract preprocessing parameters from models.yml file. }" | ||
| 37 | "{ zoo | models.yml | An optional path to file with preprocessing parameters }" | ||
| 38 | + "{ device | 0 | camera device number. }" | ||
| 39 | "{ input i | | Path to input image or video file. Skip this argument to capture frames from a camera.}" | ||
| 40 | "{ framework f | | Optional name of an origin framework of the model. Detect it automatically if it does not set. }" | ||
| 41 | "{ classes | | Optional path to a text file with names of classes. }" | ||
| 42 | @@ -94,7 +95,7 @@ int main(int argc, char** argv) | ||
| 43 | if (parser.has("input")) | ||
| 44 | cap.open(parser.get<String>("input")); | ||
| 45 | else | ||
| 46 | - cap.open(0); | ||
| 47 | + cap.open(parser.get<int>("device")); | ||
| 48 | //! [Open a video file or an image file or a camera stream] | ||
| 49 | |||
| 50 | // Process frames. | ||
| 51 | @@ -131,13 +132,13 @@ int main(int argc, char** argv) | ||
| 52 | double freq = getTickFrequency() / 1000; | ||
| 53 | double t = net.getPerfProfile(layersTimes) / freq; | ||
| 54 | std::string label = format("Inference time: %.2f ms", t); | ||
| 55 | - putText(frame, label, Point(0, 15), FONT_HERSHEY_SIMPLEX, 0.5, Scalar(0, 255, 0)); | ||
| 56 | + putText(frame, label, Point(0, 20), FONT_HERSHEY_SIMPLEX, 0.8, Scalar(0, 0, 255), 2, 8, false); | ||
| 57 | |||
| 58 | // Print predicted class. | ||
| 59 | label = format("%s: %.4f", (classes.empty() ? format("Class #%d", classId).c_str() : | ||
| 60 | classes[classId].c_str()), | ||
| 61 | confidence); | ||
| 62 | - putText(frame, label, Point(0, 40), FONT_HERSHEY_SIMPLEX, 0.5, Scalar(0, 255, 0)); | ||
| 63 | + putText(frame, label, Point(0, 45), FONT_HERSHEY_SIMPLEX, 0.8, Scalar(0, 0, 255), 2, 8, false); | ||
| 64 | |||
| 65 | imshow(kWinName, frame); | ||
| 66 | } | ||
| 67 | Index: git/samples/dnn/object_detection.cpp | ||
| 68 | =================================================================== | ||
| 69 | --- git.orig/samples/dnn/object_detection.cpp | ||
| 70 | +++ git/samples/dnn/object_detection.cpp | ||
| 71 | @@ -251,13 +251,13 @@ int main(int argc, char** argv) | ||
| 72 | if (predictionsQueue.counter > 1) | ||
| 73 | { | ||
| 74 | std::string label = format("Camera: %.2f FPS", framesQueue.getFPS()); | ||
| 75 | - putText(frame, label, Point(0, 15), FONT_HERSHEY_SIMPLEX, 0.5, Scalar(0, 255, 0)); | ||
| 76 | + putText(frame, label, Point(0, 20), FONT_HERSHEY_SIMPLEX, 0.8, Scalar(0, 0, 255), 2, 8, false); | ||
| 77 | |||
| 78 | label = format("Network: %.2f FPS", predictionsQueue.getFPS()); | ||
| 79 | - putText(frame, label, Point(0, 30), FONT_HERSHEY_SIMPLEX, 0.5, Scalar(0, 255, 0)); | ||
| 80 | + putText(frame, label, Point(0, 45), FONT_HERSHEY_SIMPLEX, 0.8, Scalar(0, 0, 255), 2, 8, false); | ||
| 81 | |||
| 82 | label = format("Skipped frames: %d", framesQueue.counter - predictionsQueue.counter); | ||
| 83 | - putText(frame, label, Point(0, 45), FONT_HERSHEY_SIMPLEX, 0.5, Scalar(0, 255, 0)); | ||
| 84 | + putText(frame, label, Point(0, 70), FONT_HERSHEY_SIMPLEX, 0.8, Scalar(0, 0, 255), 2, 8, false); | ||
| 85 | } | ||
| 86 | imshow(kWinName, frame); | ||
| 87 | } | ||
| 88 | @@ -293,7 +293,7 @@ int main(int argc, char** argv) | ||
| 89 | double freq = getTickFrequency() / 1000; | ||
| 90 | double t = net.getPerfProfile(layersTimes) / freq; | ||
| 91 | std::string label = format("Inference time: %.2f ms", t); | ||
| 92 | - putText(frame, label, Point(0, 15), FONT_HERSHEY_SIMPLEX, 0.5, Scalar(0, 255, 0)); | ||
| 93 | + putText(frame, label, Point(0, 20), FONT_HERSHEY_SIMPLEX, 0.8, Scalar(0, 0, 255), 2, 8, false); | ||
| 94 | |||
| 95 | imshow(kWinName, frame); | ||
| 96 | } | ||
| 97 | @@ -462,7 +462,7 @@ void drawPred(int classId, float conf, i | ||
| 98 | top = max(top, labelSize.height); | ||
| 99 | rectangle(frame, Point(left, top - labelSize.height), | ||
| 100 | Point(left + labelSize.width, top + baseLine), Scalar::all(255), FILLED); | ||
| 101 | - putText(frame, label, Point(left, top), FONT_HERSHEY_SIMPLEX, 0.5, Scalar()); | ||
| 102 | + putText(frame, label, Point(left, top), FONT_HERSHEY_SIMPLEX, 0.8, Scalar()); | ||
| 103 | } | ||
| 104 | |||
| 105 | void callback(int pos, void*) | ||
| 106 | Index: git/samples/dnn/segmentation.cpp | ||
| 107 | =================================================================== | ||
| 108 | --- git.orig/samples/dnn/segmentation.cpp | ||
| 109 | +++ git/samples/dnn/segmentation.cpp | ||
| 110 | @@ -157,7 +157,7 @@ int main(int argc, char** argv) | ||
| 111 | double freq = getTickFrequency() / 1000; | ||
| 112 | double t = net.getPerfProfile(layersTimes) / freq; | ||
| 113 | std::string label = format("Inference time: %.2f ms", t); | ||
| 114 | - putText(frame, label, Point(0, 15), FONT_HERSHEY_SIMPLEX, 0.5, Scalar(0, 255, 0)); | ||
| 115 | + putText(frame, label, Point(0, 20), FONT_HERSHEY_SIMPLEX, 0.8, Scalar(0, 0, 255), 2, 8, false); | ||
| 116 | |||
| 117 | imshow(kWinName, frame); | ||
| 118 | if (!classes.empty()) | ||
| 119 | Index: git/samples/dnn/text_detection.cpp | ||
| 120 | =================================================================== | ||
| 121 | --- git.orig/samples/dnn/text_detection.cpp | ||
| 122 | +++ git/samples/dnn/text_detection.cpp | ||
| 123 | @@ -25,6 +25,7 @@ using namespace cv::dnn; | ||
| 124 | const char* keys = | ||
| 125 | "{ help h | | Print help message. }" | ||
| 126 | "{ input i | | Path to input image or video file. Skip this argument to capture frames from a camera.}" | ||
| 127 | + "{ device | 0 | camera device number. }" | ||
| 128 | "{ model m | | Path to a binary .pb file contains trained detector network.}" | ||
| 129 | "{ ocr | | Path to a binary .pb or .onnx file contains trained recognition network.}" | ||
| 130 | "{ width | 320 | Preprocess input image by resizing to a specific width. It should be multiple by 32. }" | ||
| 131 | @@ -75,7 +76,7 @@ int main(int argc, char** argv) | ||
| 132 | |||
| 133 | // Open a video file or an image file or a camera stream. | ||
| 134 | VideoCapture cap; | ||
| 135 | - bool openSuccess = parser.has("input") ? cap.open(parser.get<String>("input")) : cap.open(0); | ||
| 136 | + bool openSuccess = parser.has("input") ? cap.open(parser.get<String>("input")) : cap.open(parser.get<int>("device")); | ||
| 137 | CV_Assert(openSuccess); | ||
| 138 | |||
| 139 | static const std::string kWinName = "EAST: An Efficient and Accurate Scene Text Detector"; | ||
| 140 | @@ -156,7 +157,7 @@ int main(int argc, char** argv) | ||
| 141 | |||
| 142 | // Put efficiency information. | ||
| 143 | std::string label = format("Inference time: %.2f ms", tickMeter.getTimeMilli()); | ||
| 144 | - putText(frame, label, Point(0, 15), FONT_HERSHEY_SIMPLEX, 0.5, Scalar(0, 255, 0)); | ||
| 145 | + putText(frame, label, Point(0, 20), FONT_HERSHEY_SIMPLEX, 0.8, Scalar(0, 0, 255), 2, 8, false); | ||
| 146 | |||
| 147 | imshow(kWinName, frame); | ||
| 148 | |||
diff --git a/recipes-support/opencv/opencv/download.patch b/recipes-support/opencv/opencv/download.patch new file mode 100644 index 000000000..33ac48312 --- /dev/null +++ b/recipes-support/opencv/opencv/download.patch | |||
| @@ -0,0 +1,41 @@ | |||
| 1 | From b18a280fab06a680d9f831bf8b462647f3cb6214 Mon Sep 17 00:00:00 2001 | ||
| 2 | From: Ross Burton <ross.burton@intel.com> | ||
| 3 | Date: Thu, 9 Jan 2020 16:24:24 +0000 | ||
| 4 | Subject: [PATCH] opencv: abort configure if we need to download | ||
| 5 | |||
| 6 | This CMake module will download files during do_configure. This is bad as it | ||
| 7 | means we can't do offline builds. | ||
| 8 | |||
| 9 | Add an option to disallow downloads by emitting a fatal error. | ||
| 10 | |||
| 11 | Upstream-Status: Pending | ||
| 12 | Signed-off-by: Ross Burton <ross.burton@intel.com> | ||
| 13 | |||
| 14 | --- | ||
| 15 | cmake/OpenCVDownload.cmake | 6 ++++++ | ||
| 16 | 1 file changed, 6 insertions(+) | ||
| 17 | |||
| 18 | diff --git a/cmake/OpenCVDownload.cmake b/cmake/OpenCVDownload.cmake | ||
| 19 | index 63cf6d3238..4acf477f70 100644 | ||
| 20 | --- a/cmake/OpenCVDownload.cmake | ||
| 21 | +++ b/cmake/OpenCVDownload.cmake | ||
| 22 | @@ -14,6 +14,7 @@ | ||
| 23 | # RELATIVE_URL - if set, then URL is treated as a base, and FILENAME will be appended to it | ||
| 24 | # Note: uses OPENCV_DOWNLOAD_PATH folder as cache, default is <opencv>/.cache | ||
| 25 | |||
| 26 | +set(OPENCV_ALLOW_DOWNLOADS ON CACHE BOOL "Allow downloads") | ||
| 27 | set(HELP_OPENCV_DOWNLOAD_PATH "Cache directory for downloaded files") | ||
| 28 | if(DEFINED ENV{OPENCV_DOWNLOAD_PATH}) | ||
| 29 | set(OPENCV_DOWNLOAD_PATH "$ENV{OPENCV_DOWNLOAD_PATH}" CACHE PATH "${HELP_OPENCV_DOWNLOAD_PATH}") | ||
| 30 | @@ -156,6 +157,11 @@ function(ocv_download) | ||
| 31 | |||
| 32 | # Download | ||
| 33 | if(NOT EXISTS "${CACHE_CANDIDATE}") | ||
| 34 | + if(NOT OPENCV_ALLOW_DOWNLOADS) | ||
| 35 | + message(FATAL_ERROR "Not going to download ${DL_FILENAME}") | ||
| 36 | + return() | ||
| 37 | + endif() | ||
| 38 | + | ||
| 39 | ocv_download_log("#cmake_download \"${CACHE_CANDIDATE}\" \"${DL_URL}\"") | ||
| 40 | foreach(try ${OPENCV_DOWNLOAD_TRIES_LIST}) | ||
| 41 | ocv_download_log("#try ${try}") | ||
diff --git a/recipes-support/opencv/opencv_4.4.0.imx.bb b/recipes-support/opencv/opencv_4.4.0.imx.bb new file mode 100644 index 000000000..f50cca8a9 --- /dev/null +++ b/recipes-support/opencv/opencv_4.4.0.imx.bb | |||
| @@ -0,0 +1,295 @@ | |||
| 1 | # This recipe is for the i.MX fork of opencv. For ease of | ||
| 2 | # maintenance, the top section is a verbatim copy of an OE-core | ||
| 3 | # recipe. The second section customizes the recipe for i.MX. | ||
| 4 | |||
| 5 | ########## meta-openembedded copy ########### | ||
| 6 | |||
| 7 | SUMMARY = "Opencv : The Open Computer Vision Library" | ||
| 8 | HOMEPAGE = "http://opencv.org/" | ||
| 9 | SECTION = "libs" | ||
| 10 | |||
| 11 | LICENSE = "BSD-3-Clause" | ||
| 12 | LIC_FILES_CHKSUM = "file://LICENSE;md5=19598330421859a6dd353a4318091ac7" | ||
| 13 | |||
| 14 | ARM_INSTRUCTION_SET_armv4 = "arm" | ||
| 15 | ARM_INSTRUCTION_SET_armv5 = "arm" | ||
| 16 | |||
| 17 | DEPENDS = "libtool swig-native bzip2 zlib glib-2.0 libwebp" | ||
| 18 | |||
| 19 | SRCREV_opencv = "c3bb57afeaf030f10939204d48d7c2a3842f4293" | ||
| 20 | SRCREV_contrib = "5fae4082cc493efa5cb7a7486f9e009618a5198b" | ||
| 21 | SRCREV_ipp = "a56b6ac6f030c312b2dce17430eef13aed9af274" | ||
| 22 | SRCREV_boostdesc = "34e4206aef44d50e6bbcd0ab06354b52e7466d26" | ||
| 23 | SRCREV_vgg = "fccf7cd6a4b12079f73bbfb21745f9babcd4eb1d" | ||
| 24 | SRCREV_face = "8afa57abc8229d611c4937165d20e2a2d9fc5a12" | ||
| 25 | |||
| 26 | def ipp_filename(d): | ||
| 27 | import re | ||
| 28 | arch = d.getVar('TARGET_ARCH') | ||
| 29 | if re.match("i.86$", arch): | ||
| 30 | return "ippicv_2020_lnx_ia32_20191018_general.tgz" | ||
| 31 | else: | ||
| 32 | return "ippicv_2020_lnx_intel64_20191018_general.tgz" | ||
| 33 | |||
| 34 | def ipp_md5sum(d): | ||
| 35 | import re | ||
| 36 | arch = d.getVar('TARGET_ARCH') | ||
| 37 | if re.match("i.86$", arch): | ||
| 38 | return "ad189a940fb60eb71f291321322fe3e8" | ||
| 39 | else: | ||
| 40 | return "7421de0095c7a39162ae13a6098782f9" | ||
| 41 | |||
| 42 | IPP_FILENAME = "${@ipp_filename(d)}" | ||
| 43 | IPP_MD5 = "${@ipp_md5sum(d)}" | ||
| 44 | |||
| 45 | SRCREV_FORMAT = "opencv_contrib_ipp_boostdesc_vgg" | ||
| 46 | SRC_URI = "git://github.com/opencv/opencv.git;name=opencv \ | ||
| 47 | git://github.com/opencv/opencv_contrib.git;destsuffix=contrib;name=contrib \ | ||
| 48 | git://github.com/opencv/opencv_3rdparty.git;branch=ippicv/master_20191018;destsuffix=ipp;name=ipp \ | ||
| 49 | git://github.com/opencv/opencv_3rdparty.git;branch=contrib_xfeatures2d_boostdesc_20161012;destsuffix=boostdesc;name=boostdesc \ | ||
| 50 | git://github.com/opencv/opencv_3rdparty.git;branch=contrib_xfeatures2d_vgg_20160317;destsuffix=vgg;name=vgg \ | ||
| 51 | git://github.com/opencv/opencv_3rdparty.git;branch=contrib_face_alignment_20170818;destsuffix=face;name=face \ | ||
| 52 | file://0001-3rdparty-ippicv-Use-pre-downloaded-ipp.patch \ | ||
| 53 | file://0003-To-fix-errors-as-following.patch \ | ||
| 54 | file://0001-Temporarliy-work-around-deprecated-ffmpeg-RAW-functi.patch \ | ||
| 55 | file://0001-Dont-use-isystem.patch \ | ||
| 56 | file://download.patch \ | ||
| 57 | file://0001-Make-ts-module-external.patch \ | ||
| 58 | " | ||
| 59 | SRC_URI_append_riscv64 = " file://0001-Use-Os-to-compile-tinyxml2.cpp.patch;patchdir=../contrib" | ||
| 60 | |||
| 61 | S = "${WORKDIR}/git" | ||
| 62 | |||
| 63 | # OpenCV wants to download more files during configure. We download these in | ||
| 64 | # do_fetch and construct a source cache in the format it expects | ||
| 65 | OPENCV_DLDIR = "${WORKDIR}/downloads" | ||
| 66 | |||
| 67 | do_unpack_extra() { | ||
| 68 | tar xzf ${WORKDIR}/ipp/ippicv/${IPP_FILENAME} -C ${WORKDIR} | ||
| 69 | |||
| 70 | md5() { | ||
| 71 | # Return the MD5 of $1 | ||
| 72 | echo $(md5sum $1 | cut -d' ' -f1) | ||
| 73 | } | ||
| 74 | cache() { | ||
| 75 | TAG=$1 | ||
| 76 | shift | ||
| 77 | mkdir --parents ${OPENCV_DLDIR}/$TAG | ||
| 78 | for F in $*; do | ||
| 79 | DEST=${OPENCV_DLDIR}/$TAG/$(md5 $F)-$(basename $F) | ||
| 80 | test -e $DEST || ln -s $F $DEST | ||
| 81 | done | ||
| 82 | } | ||
| 83 | cache xfeatures2d/boostdesc ${WORKDIR}/boostdesc/*.i | ||
| 84 | cache xfeatures2d/vgg ${WORKDIR}/vgg/*.i | ||
| 85 | cache data ${WORKDIR}/face/*.dat | ||
| 86 | } | ||
| 87 | addtask unpack_extra after do_unpack before do_patch | ||
| 88 | |||
| 89 | CMAKE_VERBOSE = "VERBOSE=1" | ||
| 90 | |||
| 91 | EXTRA_OECMAKE = "-DOPENCV_EXTRA_MODULES_PATH=${WORKDIR}/contrib/modules \ | ||
| 92 | -DWITH_1394=OFF \ | ||
| 93 | -DENABLE_PRECOMPILED_HEADERS=OFF \ | ||
| 94 | -DCMAKE_SKIP_RPATH=ON \ | ||
| 95 | -DOPENCV_ICV_HASH=${IPP_MD5} \ | ||
| 96 | -DIPPROOT=${WORKDIR}/ippicv_lnx \ | ||
| 97 | -DOPENCV_GENERATE_PKGCONFIG=ON \ | ||
| 98 | -DOPENCV_DOWNLOAD_PATH=${OPENCV_DLDIR} \ | ||
| 99 | -DOPENCV_ALLOW_DOWNLOADS=OFF \ | ||
| 100 | ${@bb.utils.contains("TARGET_CC_ARCH", "-msse3", "-DENABLE_SSE=1 -DENABLE_SSE2=1 -DENABLE_SSE3=1 -DENABLE_SSSE3=1", "", d)} \ | ||
| 101 | ${@bb.utils.contains("TARGET_CC_ARCH", "-msse4.1", "-DENABLE_SSE=1 -DENABLE_SSE2=1 -DENABLE_SSE3=1 -DENABLE_SSSE3=1 -DENABLE_SSE41=1", "", d)} \ | ||
| 102 | ${@bb.utils.contains("TARGET_CC_ARCH", "-msse4.2", "-DENABLE_SSE=1 -DENABLE_SSE2=1 -DENABLE_SSE3=1 -DENABLE_SSSE3=1 -DENABLE_SSE41=1 -DENABLE_SSE42=1", "", d)} \ | ||
| 103 | " | ||
| 104 | EXTRA_OECMAKE_append_x86 = " -DX86=ON" | ||
| 105 | |||
| 106 | PACKAGECONFIG ??= "gapi python3 eigen jpeg png tiff v4l libv4l gstreamer samples tbb gphoto2 \ | ||
| 107 | ${@bb.utils.contains("DISTRO_FEATURES", "x11", "gtk", "", d)} \ | ||
| 108 | ${@bb.utils.contains("LICENSE_FLAGS_WHITELIST", "commercial", "libav", "", d)}" | ||
| 109 | |||
| 110 | PACKAGECONFIG[gapi] = "-DWITH_ADE=ON -Dade_DIR=${STAGING_LIBDIR},-DWITH_ADE=OFF,ade" | ||
| 111 | PACKAGECONFIG[amdblas] = "-DWITH_OPENCLAMDBLAS=ON,-DWITH_OPENCLAMDBLAS=OFF,libclamdblas," | ||
| 112 | PACKAGECONFIG[amdfft] = "-DWITH_OPENCLAMDFFT=ON,-DWITH_OPENCLAMDFFT=OFF,libclamdfft," | ||
| 113 | PACKAGECONFIG[dnn] = "-DBUILD_opencv_dnn=ON -DPROTOBUF_UPDATE_FILES=ON -DBUILD_PROTOBUF=OFF,-DBUILD_opencv_dnn=OFF,protobuf protobuf-native," | ||
| 114 | PACKAGECONFIG[eigen] = "-DWITH_EIGEN=ON,-DWITH_EIGEN=OFF,libeigen gflags glog," | ||
| 115 | PACKAGECONFIG[freetype] = "-DBUILD_opencv_freetype=ON,-DBUILD_opencv_freetype=OFF,freetype," | ||
| 116 | PACKAGECONFIG[gphoto2] = "-DWITH_GPHOTO2=ON,-DWITH_GPHOTO2=OFF,libgphoto2," | ||
| 117 | PACKAGECONFIG[gstreamer] = "-DWITH_GSTREAMER=ON,-DWITH_GSTREAMER=OFF,gstreamer1.0 gstreamer1.0-plugins-base," | ||
| 118 | PACKAGECONFIG[gtk] = "-DWITH_GTK=ON,-DWITH_GTK=OFF,gtk+3," | ||
| 119 | PACKAGECONFIG[jasper] = "-DWITH_JASPER=ON,-DWITH_JASPER=OFF,jasper," | ||
| 120 | PACKAGECONFIG[java] = "-DJAVA_INCLUDE_PATH=${JAVA_HOME}/include -DJAVA_INCLUDE_PATH2=${JAVA_HOME}/include/linux -DJAVA_AWT_INCLUDE_PATH=${JAVA_HOME}/include -DJAVA_AWT_LIBRARY=${JAVA_HOME}/lib/amd64/libjawt.so -DJAVA_JVM_LIBRARY=${JAVA_HOME}/lib/amd64/server/libjvm.so,,ant-native fastjar-native openjdk-8-native," | ||
| 121 | PACKAGECONFIG[jpeg] = "-DWITH_JPEG=ON,-DWITH_JPEG=OFF,jpeg," | ||
| 122 | PACKAGECONFIG[libav] = "-DWITH_FFMPEG=ON,-DWITH_FFMPEG=OFF,libav," | ||
| 123 | PACKAGECONFIG[libv4l] = "-DWITH_LIBV4L=ON,-DWITH_LIBV4L=OFF,v4l-utils," | ||
| 124 | PACKAGECONFIG[opencl] = "-DWITH_OPENCL=ON,-DWITH_OPENCL=OFF,opencl-headers virtual/opencl-icd," | ||
| 125 | PACKAGECONFIG[oracle-java] = "-DJAVA_INCLUDE_PATH=${ORACLE_JAVA_HOME}/include -DJAVA_INCLUDE_PATH2=${ORACLE_JAVA_HOME}/include/linux -DJAVA_AWT_INCLUDE_PATH=${ORACLE_JAVA_HOME}/include -DJAVA_AWT_LIBRARY=${ORACLE_JAVA_HOME}/lib/amd64/libjawt.so -DJAVA_JVM_LIBRARY=${ORACLE_JAVA_HOME}/lib/amd64/server/libjvm.so,,ant-native oracle-jse-jdk oracle-jse-jdk-native," | ||
| 126 | PACKAGECONFIG[png] = "-DWITH_PNG=ON,-DWITH_PNG=OFF,libpng," | ||
| 127 | PACKAGECONFIG[python2] = "-DPYTHON2_NUMPY_INCLUDE_DIRS:PATH=${STAGING_LIBDIR}/${PYTHON_DIR}/site-packages/numpy/core/include,,python-numpy," | ||
| 128 | PACKAGECONFIG[python3] = "-DPYTHON3_NUMPY_INCLUDE_DIRS:PATH=${STAGING_LIBDIR}/${PYTHON_DIR}/site-packages/numpy/core/include,,python3-numpy," | ||
| 129 | PACKAGECONFIG[samples] = "-DBUILD_EXAMPLES=ON -DINSTALL_PYTHON_EXAMPLES=ON,-DBUILD_EXAMPLES=OFF,," | ||
| 130 | PACKAGECONFIG[tbb] = "-DWITH_TBB=ON,-DWITH_TBB=OFF,tbb," | ||
| 131 | PACKAGECONFIG[text] = "-DBUILD_opencv_text=ON,-DBUILD_opencv_text=OFF,tesseract," | ||
| 132 | PACKAGECONFIG[tiff] = "-DWITH_TIFF=ON,-DWITH_TIFF=OFF,tiff," | ||
| 133 | PACKAGECONFIG[v4l] = "-DWITH_V4L=ON,-DWITH_V4L=OFF,v4l-utils," | ||
| 134 | |||
| 135 | inherit pkgconfig cmake | ||
| 136 | |||
| 137 | inherit ${@bb.utils.contains('PACKAGECONFIG', 'python3', 'distutils3-base', '', d)} | ||
| 138 | inherit ${@bb.utils.contains('PACKAGECONFIG', 'python2', 'distutils-base', '', d)} | ||
| 139 | |||
| 140 | export PYTHON_CSPEC="-I${STAGING_INCDIR}/${PYTHON_DIR}" | ||
| 141 | export PYTHON="${STAGING_BINDIR_NATIVE}/${@bb.utils.contains('PACKAGECONFIG', 'python3', 'python3', 'python', d)}" | ||
| 142 | export ORACLE_JAVA_HOME="${STAGING_DIR_NATIVE}/usr/bin/java" | ||
| 143 | export JAVA_HOME="${STAGING_DIR_NATIVE}/usr/lib/jvm/openjdk-8-native" | ||
| 144 | export ANT_DIR="${STAGING_DIR_NATIVE}/usr/share/ant/" | ||
| 145 | |||
| 146 | TARGET_CC_ARCH += "-I${S}/include " | ||
| 147 | |||
| 148 | PACKAGES += "${@bb.utils.contains('PACKAGECONFIG', 'samples', '${PN}-samples', '', d)} \ | ||
| 149 | ${@bb.utils.contains('PACKAGECONFIG', 'oracle-java', '${PN}-java', '', d)} \ | ||
| 150 | ${@bb.utils.contains('PACKAGECONFIG', 'java', '${PN}-java', '', d)} \ | ||
| 151 | ${@bb.utils.contains('PACKAGECONFIG', 'python2', 'python-${BPN}', '', d)} \ | ||
| 152 | ${@bb.utils.contains('PACKAGECONFIG', 'python3', 'python3-${BPN}', '', d)} \ | ||
| 153 | ${PN}-apps" | ||
| 154 | |||
| 155 | python populate_packages_prepend () { | ||
| 156 | cv_libdir = d.expand('${libdir}') | ||
| 157 | do_split_packages(d, cv_libdir, '^lib(.*)\.so$', 'lib%s-dev', 'OpenCV %s development package', extra_depends='${PN}-dev', allow_links=True) | ||
| 158 | do_split_packages(d, cv_libdir, '^lib(.*)\.la$', 'lib%s-dev', 'OpenCV %s development package', extra_depends='${PN}-dev') | ||
| 159 | do_split_packages(d, cv_libdir, '^lib(.*)\.a$', 'lib%s-dev', 'OpenCV %s development package', extra_depends='${PN}-dev') | ||
| 160 | do_split_packages(d, cv_libdir, '^lib(.*)\.so\.*', 'lib%s', 'OpenCV %s library', extra_depends='', allow_links=True) | ||
| 161 | |||
| 162 | pn = d.getVar('PN') | ||
| 163 | metapkg = pn + '-dev' | ||
| 164 | d.setVar('ALLOW_EMPTY_' + metapkg, "1") | ||
| 165 | blacklist = [ metapkg ] | ||
| 166 | metapkg_rdepends = [ ] | ||
| 167 | packages = d.getVar('PACKAGES').split() | ||
| 168 | for pkg in packages[1:]: | ||
| 169 | if not pkg in blacklist and not pkg in metapkg_rdepends and pkg.endswith('-dev'): | ||
| 170 | metapkg_rdepends.append(pkg) | ||
| 171 | d.setVar('RRECOMMENDS_' + metapkg, ' '.join(metapkg_rdepends)) | ||
| 172 | |||
| 173 | metapkg = pn | ||
| 174 | d.setVar('ALLOW_EMPTY_' + metapkg, "1") | ||
| 175 | blacklist = [ metapkg, "libopencv-ts" ] | ||
| 176 | metapkg_rdepends = [ ] | ||
| 177 | for pkg in packages[1:]: | ||
| 178 | if not pkg in blacklist and not pkg in metapkg_rdepends and not pkg.endswith('-dev') and not pkg.endswith('-dbg') and not pkg.endswith('-doc') and not pkg.endswith('-locale') and not pkg.endswith('-staticdev'): | ||
| 179 | metapkg_rdepends.append(pkg) | ||
| 180 | d.setVar('RDEPENDS_' + metapkg, ' '.join(metapkg_rdepends)) | ||
| 181 | } | ||
| 182 | |||
| 183 | PACKAGES_DYNAMIC += "^libopencv-.*" | ||
| 184 | |||
| 185 | FILES_${PN} = "" | ||
| 186 | FILES_${PN}-dbg += "${datadir}/OpenCV/java/.debug/* ${datadir}/OpenCV/samples/bin/.debug/*" | ||
| 187 | FILES_${PN}-dev = "${includedir} ${libdir}/pkgconfig ${libdir}/cmake/opencv4/*.cmake" | ||
| 188 | FILES_${PN}-staticdev += "${libdir}/opencv4/3rdparty/*.a" | ||
| 189 | FILES_${PN}-apps = "${bindir}/* ${datadir}/opencv4 ${datadir}/licenses" | ||
| 190 | FILES_${PN}-java = "${datadir}/OpenCV/java" | ||
| 191 | FILES_${PN}-samples = "${datadir}/opencv4/samples/" | ||
| 192 | |||
| 193 | INSANE_SKIP_${PN}-java = "libdir" | ||
| 194 | INSANE_SKIP_${PN}-dbg = "libdir" | ||
| 195 | |||
| 196 | ALLOW_EMPTY_${PN} = "1" | ||
| 197 | |||
| 198 | SUMMARY_python-opencv = "Python bindings to opencv" | ||
| 199 | FILES_python-opencv = "${PYTHON_SITEPACKAGES_DIR}/*" | ||
| 200 | RDEPENDS_python-opencv = "python-core python-numpy" | ||
| 201 | |||
| 202 | SUMMARY_python3-opencv = "Python bindings to opencv" | ||
| 203 | FILES_python3-opencv = "${PYTHON_SITEPACKAGES_DIR}/*" | ||
| 204 | RDEPENDS_python3-opencv = "python3-core python3-numpy" | ||
| 205 | |||
| 206 | RDEPENDS_${PN}-apps = "bash" | ||
| 207 | |||
| 208 | do_compile_prepend() { | ||
| 209 | # remove the build host info to improve reproducibility | ||
| 210 | if [ -f ${WORKDIR}/build/modules/core/version_string.inc ]; then | ||
| 211 | sed -i "s#${WORKDIR}#/workdir#g" ${WORKDIR}/build/modules/core/version_string.inc | ||
| 212 | fi | ||
| 213 | } | ||
| 214 | |||
| 215 | do_install_append() { | ||
| 216 | # Move Python files into correct library folder (for multilib build) | ||
| 217 | if [ "$libdir" != "/usr/lib" -a -d ${D}/usr/lib ]; then | ||
| 218 | mv ${D}/usr/lib/* ${D}/${libdir}/ | ||
| 219 | rm -rf ${D}/usr/lib | ||
| 220 | fi | ||
| 221 | } | ||
| 222 | |||
| 223 | TOOLCHAIN = "gcc" | ||
| 224 | |||
| 225 | ########## End of meta-openembedded copy ########## | ||
| 226 | |||
| 227 | ########## i.MX overrides ########## | ||
| 228 | |||
| 229 | SUMMARY = "Opencv : The Open Computer Vision Library, i.MX Fork" | ||
| 230 | |||
| 231 | LIC_FILES_CHKSUM = "file://LICENSE;md5=19598330421859a6dd353a4318091ac7" | ||
| 232 | |||
| 233 | SRCREV_opencv = "e39e6eded2d365a5dc370e1a72717e132166cf07" | ||
| 234 | SRCREV_contrib = "5fae4082cc493efa5cb7a7486f9e009618a5198b" | ||
| 235 | SRCREV_extra = "65796edadce27ed013e3deeedb3c081ff527e4ec" | ||
| 236 | SRC_URI[tinydnn.md5sum] = "adb1c512e09ca2c7a6faef36f9c53e59" | ||
| 237 | SRC_URI[tinydnn.sha256sum] = "e2c61ce8c5debaa644121179e9dbdcf83f497f39de853f8dd5175846505aa18b" | ||
| 238 | SRCREV_FORMAT_append = "_extra" | ||
| 239 | |||
| 240 | OPENCV_SRC ?= "git://source.codeaurora.org/external/imx/opencv-imx.git;protocol=https" | ||
| 241 | SRCBRANCH = "4.4.0_imx" | ||
| 242 | SRC_URI = "${OPENCV_SRC};branch=${SRCBRANCH};name=opencv \ | ||
| 243 | git://github.com/opencv/opencv_extra.git;destsuffix=extra;name=extra \ | ||
| 244 | git://github.com/opencv/opencv_contrib.git;destsuffix=contrib;name=contrib \ | ||
| 245 | git://github.com/opencv/opencv_3rdparty.git;branch=ippicv/master_20191018;destsuffix=ipp;name=ipp \ | ||
| 246 | git://github.com/opencv/opencv_3rdparty.git;branch=contrib_xfeatures2d_boostdesc_20161012;destsuffix=boostdesc;name=boostdesc \ | ||
| 247 | git://github.com/opencv/opencv_3rdparty.git;branch=contrib_xfeatures2d_vgg_20160317;destsuffix=vgg;name=vgg \ | ||
| 248 | git://github.com/opencv/opencv_3rdparty.git;branch=contrib_face_alignment_20170818;destsuffix=face;name=face \ | ||
| 249 | https://github.com/tiny-dnn/tiny-dnn/archive/v1.0.0a3.tar.gz;destsuffix=git/3rdparty/tinydnn/tiny-dnn-1.0.0a3;name=tinydnn;unpack=false \ | ||
| 250 | file://0001-3rdparty-ippicv-Use-pre-downloaded-ipp.patch \ | ||
| 251 | file://0003-To-fix-errors-as-following.patch \ | ||
| 252 | file://0001-Temporarliy-work-around-deprecated-ffmpeg-RAW-functi.patch \ | ||
| 253 | file://0001-Dont-use-isystem.patch \ | ||
| 254 | file://download.patch \ | ||
| 255 | file://0001-Make-ts-module-external.patch \ | ||
| 256 | file://OpenCV_DNN_examples.patch \ | ||
| 257 | file://0001-Add-smaller-version-of-download_models.py.patch;patchdir=../extra \ | ||
| 258 | " | ||
| 259 | PV = "4.4.0.imx" | ||
| 260 | |||
| 261 | PACKAGECONFIG_remove = "eigen" | ||
| 262 | PACKAGECONFIG_append_mx8 = " dnn text" | ||
| 263 | PACKAGECONFIG_OPENCL = "" | ||
| 264 | PACKAGECONFIG_OPENCL_mx8 = "opencl" | ||
| 265 | PACKAGECONFIG_OPENCL_mx8dxl = "" | ||
| 266 | PACKAGECONFIG_OPENCL_mx8phantomdxl = "" | ||
| 267 | PACKAGECONFIG_OPENCL_mx8mm = "" | ||
| 268 | PACKAGECONFIG_OPENCL_mx8mnlite = "" | ||
| 269 | PACKAGECONFIG_append = " ${PACKAGECONFIG_OPENCL}" | ||
| 270 | |||
| 271 | PACKAGECONFIG[openvx] = "-DWITH_OPENVX=ON -DOPENVX_ROOT=${STAGING_LIBDIR} -DOPENVX_LIB_CANDIDATES='OpenVX;OpenVXU',-DWITH_OPENVX=OFF,virtual/libopenvx," | ||
| 272 | PACKAGECONFIG[qt5] = "-DWITH_QT=ON -DOE_QMAKE_PATH_EXTERNAL_HOST_BINS=${STAGING_BINDIR_NATIVE} -DCMAKE_PREFIX_PATH=${STAGING_BINDIR_NATIVE}/cmake,-DWITH_QT=OFF,qtbase qtbase-native," | ||
| 273 | PACKAGECONFIG[test] = "-DBUILD_TESTS=ON -DINSTALL_TESTS=ON -DOPENCV_TEST_DATA_PATH=${S}/../extra/testdata, -DBUILD_TESTS=OFF -DINSTALL_TESTS=OFF," | ||
| 274 | |||
| 275 | do_unpack_extra_append() { | ||
| 276 | mkdir -p ${S}/3rdparty/tinydnn/ | ||
| 277 | tar xzf ${WORKDIR}/v1.0.0a3.tar.gz -C ${S}/3rdparty/tinydnn/ | ||
| 278 | } | ||
| 279 | |||
| 280 | do_install_append() { | ||
| 281 | ln -sf opencv4/opencv2 ${D}${includedir}/opencv2 | ||
| 282 | install -d ${D}${datadir}/OpenCV/samples/data | ||
| 283 | cp -r ${S}/samples/data/* ${D}${datadir}/OpenCV/samples/data | ||
| 284 | install -d ${D}${datadir}/OpenCV/samples/bin/ | ||
| 285 | cp -f bin/example_* ${D}${datadir}/OpenCV/samples/bin/ | ||
| 286 | if ${@bb.utils.contains('PACKAGECONFIG', 'test', 'true', 'false', d)}; then | ||
| 287 | cp -r share/opencv4/testdata/cv/face/* ${D}${datadir}/opencv4/testdata/cv/face/ | ||
| 288 | fi | ||
| 289 | } | ||
| 290 | |||
| 291 | FILES_${PN}-samples += "${datadir}/OpenCV/samples" | ||
| 292 | |||
| 293 | COMPATIBLE_MACHINE = "(mx8)" | ||
| 294 | |||
| 295 | ########## End of i.MX overrides ########## | ||
