1
0
mirror of https://github.com/opencv/opencv.git synced 2026-07-30 07:43:03 +04:00

Merge branch 4.x

This commit is contained in:
Alexander Smorkalov
2025-05-27 16:48:22 +03:00
167 changed files with 7028 additions and 4687 deletions
+41 -6
View File
@@ -18,6 +18,7 @@ endforeach(m)
# header blacklist
ocv_list_filterout(opencv_hdrs "modules/.*.h$")
ocv_list_filterout(opencv_hdrs "modules/core/include/opencv2/core/fast_math.hpp")
ocv_list_filterout(opencv_hdrs "modules/core/.*/cuda")
ocv_list_filterout(opencv_hdrs "modules/core/.*/opencl")
ocv_list_filterout(opencv_hdrs "modules/core/include/opencv2/core/opengl.hpp")
@@ -30,7 +31,14 @@ ocv_list_filterout(opencv_hdrs "modules/core/include/opencv2/core/utils/*.privat
ocv_list_filterout(opencv_hdrs "modules/core/include/opencv2/core/utils/instrumentation.hpp")
ocv_list_filterout(opencv_hdrs "modules/core/include/opencv2/core/utils/trace*")
ocv_update_file("${CMAKE_CURRENT_BINARY_DIR}/headers.txt" "${opencv_hdrs}")
set(config_json_headers_list "")
foreach(header IN LISTS opencv_hdrs)
if(NOT config_json_headers_list STREQUAL "")
set(config_json_headers_list "${config_json_headers_list},\n\"${header}\"")
else()
set(config_json_headers_list "\"${header}\"")
endif()
endforeach()
set(bindings_cpp "${OPENCV_JS_BINDINGS_DIR}/gen/bindings.cpp")
@@ -55,16 +63,42 @@ else()
message(STATUS "Use autogenerated whitelist ${OPENCV_JS_WHITELIST_FILE}")
endif()
include("${OpenCV_SOURCE_DIR}/cmake/OpenCVBindingsPreprocessorDefinitions.cmake")
ocv_bindings_generator_populate_preprocessor_definitions(
OPENCV_MODULES_BUILD
opencv_preprocessor_defs
)
set(__config_str
"{
\"headers\": [
${config_json_headers_list}
],
\"preprocessor_definitions\": {
${opencv_preprocessor_defs}
},
\"core_bindings_file_path\": \"${JS_SOURCE_DIR}/src/core_bindings.cpp\"
}")
set(JSON_CONFIG_FILE_PATH "${CMAKE_CURRENT_BINARY_DIR}/gen_js_config.json")
if(EXISTS "${JSON_CONFIG_FILE_PATH}")
file(READ "${JSON_CONFIG_FILE_PATH}" __content)
else()
set(__content "")
endif()
if(NOT "${__content}" STREQUAL "${__config_str}")
file(WRITE "${JSON_CONFIG_FILE_PATH}" "${__config_str}")
endif()
unset(__config_str)
add_custom_command(
OUTPUT ${bindings_cpp} "${OPENCV_DEPHELPER}/gen_opencv_js_source"
COMMAND
${PYTHON_DEFAULT_EXECUTABLE}
"${CMAKE_CURRENT_SOURCE_DIR}/embindgen.py"
"${scripts_hdr_parser}"
"${bindings_cpp}"
"${CMAKE_CURRENT_BINARY_DIR}/headers.txt"
"${JS_SOURCE_DIR}/src/core_bindings.cpp"
"${OPENCV_JS_WHITELIST_FILE}"
--parser "${scripts_hdr_parser}"
--output_file "${bindings_cpp}"
--config "${JSON_CONFIG_FILE_PATH}"
--whitelist "${OPENCV_JS_WHITELIST_FILE}"
COMMAND
${CMAKE_COMMAND} -E touch "${OPENCV_DEPHELPER}/gen_opencv_js_source"
WORKING_DIRECTORY
@@ -73,6 +107,7 @@ add_custom_command(
${JS_SOURCE_DIR}/src/core_bindings.cpp
${CMAKE_CURRENT_SOURCE_DIR}/embindgen.py
${CMAKE_CURRENT_SOURCE_DIR}/templates.py
${JSON_CONFIG_FILE_PATH}
"${OPENCV_JS_WHITELIST_FILE}"
${scripts_hdr_parser}
#(not needed - generated by CMake) ${CMAKE_CURRENT_BINARY_DIR}/headers.txt
+53 -23
View File
@@ -319,7 +319,7 @@ class Namespace(object):
class JSWrapperGenerator(object):
def __init__(self):
def __init__(self, preprocessor_definitions=None):
self.bindings = []
self.wrapper_funcs = []
@@ -328,7 +328,9 @@ class JSWrapperGenerator(object):
self.namespaces = {}
self.enums = {} # FIXIT 'enums' should belong to 'namespaces'
self.parser = hdr_parser.CppHeaderParser()
self.parser = hdr_parser.CppHeaderParser(
preprocessor_definitions=preprocessor_definitions
)
self.class_idx = 0
def add_class(self, stype, name, decl):
@@ -962,41 +964,69 @@ class JSWrapperGenerator(object):
if __name__ == "__main__":
if len(sys.argv) < 5:
print("Usage:\n", \
os.path.basename(sys.argv[0]), \
"<full path to hdr_parser.py> <bindings.cpp> <headers.txt> <core_bindings.cpp> <whitelist.json or opencv_js.config.py>")
print("Current args are: ", ", ".join(["'"+a+"'" for a in sys.argv]))
exit(1)
import argparse
dstdir = "."
hdr_parser_path = os.path.abspath(sys.argv[1])
arg_parser = argparse.ArgumentParser(
description="OpenCV JavaScript bindings generator"
)
arg_parser.add_argument(
"-p", "--parser",
required=True,
help="Full path to OpenCV header parser `hdr_parser.py`"
)
arg_parser.add_argument(
"-o", "--output_file",
dest="output_file_path",
required=True,
help="Path to output file containing js bindings"
)
arg_parser.add_argument(
"-c", "--config",
dest="config_json_path",
required=True,
help="Path to generator configuration file in .json format"
)
arg_parser.add_argument(
"--whitelist",
dest="whitelist_file_path",
required=True,
help="Path to whitelist.js or opencv_js.config.py"
)
args = arg_parser.parse_args()
# import header parser
hdr_parser_path = os.path.abspath(args.parser)
if hdr_parser_path.endswith(".py"):
hdr_parser_path = os.path.dirname(hdr_parser_path)
sys.path.append(hdr_parser_path)
import hdr_parser
bindingsCpp = sys.argv[2]
headers = open(sys.argv[3], 'r').read().split(';')
coreBindings = sys.argv[4]
whiteListFile = sys.argv[5]
with open(args.config_json_path, "r") as fh:
config_json = json.load(fh)
headers = config_json.get("headers", ())
if whiteListFile.endswith(".json") or whiteListFile.endswith(".JSON"):
with open(whiteListFile) as f:
bindings_cpp = args.output_file_path
core_bindings_path = config_json["core_bindings_file_path"]
whitelist_file_path = args.whitelist_file_path
if whitelist_file_path.endswith(".json") or whitelist_file_path.endswith(".JSON"):
with open(whitelist_file_path) as f:
gen_dict = json.load(f)
f.close()
white_list = makeWhiteListJson(gen_dict)
namespace_prefix_override = makeNamespacePrefixOverride(gen_dict)
elif whiteListFile.endswith(".py") or whiteListFile.endswith(".PY"):
exec(open(whiteListFile).read())
assert(white_list)
elif whitelist_file_path.endswith(".py") or whitelist_file_path.endswith(".PY"):
with open(whitelist_file_path) as fh:
exec(fh.read())
assert white_list
namespace_prefix_override = {
'dnn' : '',
'aruco' : '',
}
else:
print("Unexpected format of OpenCV config file", whiteListFile)
print("Unexpected format of OpenCV config file", whitelist_file_path)
exit(1)
generator = JSWrapperGenerator()
generator.gen(bindingsCpp, headers, coreBindings)
generator = JSWrapperGenerator(
preprocessor_definitions=config_json.get("preprocessor_definitions", None)
)
generator.gen(bindings_cpp, headers, core_bindings_path)
+3 -1
View File
@@ -466,7 +466,8 @@ EMSCRIPTEN_BINDINGS(binding_utils)
register_vector<double>("DoubleVector");
register_vector<std::string>("StringVector");
register_vector<cv::Point>("PointVector");
register_vector<cv::Point3f>("Point3fVector");
register_vector<cv::Point2f>("Point2fVector");
register_vector<cv::Point3_<float>>("Point3fVector");
register_vector<cv::Mat>("MatVector");
register_vector<cv::Rect>("RectVector");
register_vector<cv::KeyPoint>("KeyPointVector");
@@ -612,6 +613,7 @@ EMSCRIPTEN_BINDINGS(binding_utils)
EMSCRIPTEN_CV_RECT(int, "Rect")
EMSCRIPTEN_CV_RECT(float, "Rect2f")
EMSCRIPTEN_CV_RECT(double, "Rect2d")
emscripten::value_object<cv::RotatedRect>("RotatedRect")
.field("center", &cv::RotatedRect::center)
+3
View File
@@ -197,6 +197,8 @@ QUnit.test('Charuco detector', function (assert) {
board.generateImage(new cv.Size(300, 500), board_image);
assert.ok(!board_image.empty());
let chess_corners = board.getChessboardCorners();
detector.detectBoard(board_image, corners, ids);
assert.ok(!corners.empty());
assert.ok(!ids.empty());
@@ -211,5 +213,6 @@ QUnit.test('Charuco detector', function (assert) {
detector.delete();
corners.delete();
ids.delete();
chess_corners.delete();
}
});