mirror of
https://github.com/opencv/opencv.git
synced 2026-07-29 23:33:05 +04:00
Merge pull request #15371 from Wenzhao-Xiang:gsoc_2019
[GSoC 2019] Improve the performance of JavaScript version of OpenCV (OpenCV.js)
* [GSoC 2019]
Improve the performance of JavaScript version of OpenCV (OpenCV.js):
1. Create the base of OpenCV.js performance test:
This perf test is based on benchmark.js(https://benchmarkjs.com). And first add `cvtColor`, `Resize`, `Threshold` into it.
2. Optimize the OpenCV.js performance by WASM threads:
This optimization is based on Web Worker API and SharedArrayBuffer, so it can be only used in browser.
3. Optimize the OpenCV.js performance by WASM SIMD:
Add WASM SIMD backend for OpenCV Universal Intrinsics. It's experimental as WASM SIMD is still in development.
* [GSoC2019]
1. use short license header
2. fix documentation node issue
3. remove the unused `hasSIMD128()` api
* [GSoC2019]
1. fix emscripten define
2. use fallback function for f16
* [GSoC2019]
Fix rebase issue
This commit is contained in:
committed by
Alexander Alekhin
parent
3cf9185159
commit
c2096771cb
@@ -71,6 +71,18 @@
|
||||
#include <emscripten/bind.h>
|
||||
|
||||
@INCLUDES@
|
||||
#include "../../../modules/core/src/parallel_impl.hpp"
|
||||
|
||||
#ifdef TEST_WASM_INTRIN
|
||||
#include "../../../modules/core/include/opencv2/core/hal/intrin.hpp"
|
||||
#include "../../../modules/core/include/opencv2/core/utils/trace.hpp"
|
||||
#include "../../../modules/ts/include/opencv2/ts/ts_gtest.h"
|
||||
namespace cv {
|
||||
namespace hal {
|
||||
#include "../../../modules/core/test/test_intrin_utils.hpp"
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
using namespace emscripten;
|
||||
using namespace cv;
|
||||
@@ -357,6 +369,51 @@ namespace binding_utils
|
||||
std::string getBuildInformation() {
|
||||
return cv::getBuildInformation();
|
||||
}
|
||||
|
||||
#ifdef TEST_WASM_INTRIN
|
||||
void test_hal_intrin_uint8() {
|
||||
cv::hal::test_hal_intrin_uint8();
|
||||
}
|
||||
void test_hal_intrin_int8() {
|
||||
cv::hal::test_hal_intrin_int8();
|
||||
}
|
||||
void test_hal_intrin_uint16() {
|
||||
cv::hal::test_hal_intrin_uint16();
|
||||
}
|
||||
void test_hal_intrin_int16() {
|
||||
cv::hal::test_hal_intrin_int16();
|
||||
}
|
||||
void test_hal_intrin_uint32() {
|
||||
cv::hal::test_hal_intrin_uint32();
|
||||
}
|
||||
void test_hal_intrin_int32() {
|
||||
cv::hal::test_hal_intrin_int32();
|
||||
}
|
||||
void test_hal_intrin_uint64() {
|
||||
cv::hal::test_hal_intrin_uint64();
|
||||
}
|
||||
void test_hal_intrin_int64() {
|
||||
cv::hal::test_hal_intrin_int64();
|
||||
}
|
||||
void test_hal_intrin_float32() {
|
||||
cv::hal::test_hal_intrin_float32();
|
||||
}
|
||||
void test_hal_intrin_float64() {
|
||||
cv::hal::test_hal_intrin_float64();
|
||||
}
|
||||
void test_hal_intrin_all() {
|
||||
cv::hal::test_hal_intrin_uint8();
|
||||
cv::hal::test_hal_intrin_int8();
|
||||
cv::hal::test_hal_intrin_uint16();
|
||||
cv::hal::test_hal_intrin_int16();
|
||||
cv::hal::test_hal_intrin_uint32();
|
||||
cv::hal::test_hal_intrin_int32();
|
||||
cv::hal::test_hal_intrin_uint64();
|
||||
cv::hal::test_hal_intrin_int64();
|
||||
cv::hal::test_hal_intrin_float32();
|
||||
cv::hal::test_hal_intrin_float64();
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
EMSCRIPTEN_BINDINGS(binding_utils)
|
||||
@@ -531,10 +588,10 @@ EMSCRIPTEN_BINDINGS(binding_utils)
|
||||
.field("distance", &cv::DMatch::distance);
|
||||
|
||||
emscripten::value_array<cv::Scalar_<double>> ("Scalar")
|
||||
.element(index<0>())
|
||||
.element(index<1>())
|
||||
.element(index<2>())
|
||||
.element(index<3>());
|
||||
.element(emscripten::index<0>())
|
||||
.element(emscripten::index<1>())
|
||||
.element(emscripten::index<2>())
|
||||
.element(emscripten::index<3>());
|
||||
|
||||
emscripten::value_object<binding_utils::MinMaxLoc>("MinMaxLoc")
|
||||
.field("minVal", &binding_utils::MinMaxLoc::minVal)
|
||||
@@ -610,6 +667,25 @@ EMSCRIPTEN_BINDINGS(binding_utils)
|
||||
|
||||
function("getBuildInformation", &binding_utils::getBuildInformation);
|
||||
|
||||
#ifdef HAVE_PTHREADS_PF
|
||||
function("parallel_pthreads_set_threads_num", &cv::parallel_pthreads_set_threads_num);
|
||||
function("parallel_pthreads_get_threads_num", &cv::parallel_pthreads_get_threads_num);
|
||||
#endif
|
||||
|
||||
#ifdef TEST_WASM_INTRIN
|
||||
function("test_hal_intrin_uint8", &binding_utils::test_hal_intrin_uint8);
|
||||
function("test_hal_intrin_int8", &binding_utils::test_hal_intrin_int8);
|
||||
function("test_hal_intrin_uint16", &binding_utils::test_hal_intrin_uint16);
|
||||
function("test_hal_intrin_int16", &binding_utils::test_hal_intrin_int16);
|
||||
function("test_hal_intrin_uint32", &binding_utils::test_hal_intrin_uint32);
|
||||
function("test_hal_intrin_int32", &binding_utils::test_hal_intrin_int32);
|
||||
function("test_hal_intrin_uint64", &binding_utils::test_hal_intrin_uint64);
|
||||
function("test_hal_intrin_int64", &binding_utils::test_hal_intrin_int64);
|
||||
function("test_hal_intrin_float32", &binding_utils::test_hal_intrin_float32);
|
||||
function("test_hal_intrin_float64", &binding_utils::test_hal_intrin_float64);
|
||||
function("test_hal_intrin_all", &binding_utils::test_hal_intrin_all);
|
||||
#endif
|
||||
|
||||
constant("CV_8UC1", CV_8UC1);
|
||||
constant("CV_8UC2", CV_8UC2);
|
||||
constant("CV_8UC3", CV_8UC3);
|
||||
|
||||
Reference in New Issue
Block a user