add julia phase2 files

pull/2582/head
Archit Rungta 5 years ago
parent 0c99a85a98
commit ff581614c8
  1. 1
      modules/julia/CMakeLists.txt
  2. 8
      modules/julia/README.md
  3. 274
      modules/julia/function_list.md
  4. 11
      modules/julia/package/OpenCV/src/OpenCV.jl
  5. 435
      modules/julia/package/OpenCV/src/cv_dnn_wrap.jl
  6. 13
      modules/julia/package/OpenCV/src/cv_wrap.jl
  7. 4
      modules/julia/package/OpenCV/src/types_conversion.jl
  8. 36
      modules/julia/samples/face_detect_dnn.jl
  9. 251
      modules/julia/src/cv2.cpp
  10. 8
      modules/julia/src/jlcv2.hpp
  11. 10
      modules/julia/test/CMakeLists.txt
  12. 33
      modules/julia/test/test_dnn.jl
  13. 118
      modules/julia/test/test_mat.jl
  14. 2
      modules/julia/test/testsuite.jl

@ -65,6 +65,7 @@ ocv_add_module(
opencv_highgui
opencv_features2d
opencv_videoio
opencv_dnn
)
ocv_glob_module_sources()

@ -74,7 +74,7 @@ Another change is that all integer and float constants might need to prefixed wi
Usage
=========
---
This section has some more information about how to use the Julia bindings.
The function signatures are identical to Python bindings except the previously mentioned OOP exception. All functions that will accept a Mat/numpy array in C++/Python signatures will instead accept `OpenCV.InputArray` type in the Julia functions. `OpenCV.InputArray` is a union type between `CxxMat` and `AbstractArray{T, 3}`. As such, you can pass any arrays generated by any Julia function directly into OpenCV. If the AbstractArray is strided and has appropriate strides, the bindings will try to directly pass the memory region to OpenCV functions. However, if that's not possible then the array will first be copied to a `DenseArray` and then passed to OpenCV. The previously mentioned `CxxMat` is a black-box pointer type and should never be needed by users.
@ -82,3 +82,9 @@ The function signatures are identical to Python bindings except the previously m
The output arrays of all OpenCV functions are of the type `OpenCV.Mat{T}`. Currently, all array input and output is restricted to 3D only (2D Mat and an additional dimension for color channels). The `OpenCV.Mat` type inherits from `AbstractArray{T, 3}` and can be directly passed to any Julia function that accepts AbstractArray types. It internally maintains a pointer to the original C++ `Mat` type to make sure that the memory is never deallocated. However, if you copy the `OpenCV.Mat` type object then the pointer is not copied and array moves to a Julia owned memory space.
All other types map directly to the corresponding types on C++. Unlike Python, `Point`, `Size`, `Rect` etc are represented not as tuples but as appropriate objects like `OpenCV.Point{Float32}` and so on. However, `Scalar` types are a tuple of numbers where the tuple has a size of 1-4.
Current Functionality
---
The total functionality implemented till now is restricted to basic image input and operations, windows, VideoCap and some drawing functions. In addition to these, most of the dnn module functionality present in `dnn.hpp` is wrapped aswell. The samples implement most of the availabe functionality but a complete list of function and function prototypes can be found [here](function_list.md).

@ -0,0 +1,274 @@
This is a compilation of the general functions implemented in this module.
```
function KeyPoint(x::Float32, y::Float32, _size::Float32, _angle::Float32, _response::Float32, _octave::Int32, _class_id::Int32)
KeyPoint(x::Float32, y::Float32, _size::Float32; _angle::Float32 = Float32(-1), _response::Float32 = Float32(0), _octave::Int32 = Int32(0), _class_id::Int32 = Int32(-1)) = KeyPoint(x, y, _size, _angle, _response, _octave, _class_id)
function VideoCapture(filename::String, apiPreference::Int32)
VideoCapture(filename::String; apiPreference::Int32 = Int32(CAP_ANY)) = VideoCapture(filename, apiPreference)
function VideoCapture(index::Int32, apiPreference::Int32)
VideoCapture(index::Int32; apiPreference::Int32 = Int32(CAP_ANY)) = VideoCapture(index, apiPreference)
function CascadeClassifier(filename::String)
function detect(cobj::cv_Ptr{T}, image::InputArray, mask::InputArray) where {T <: Feature2D}
detect(cobj::cv_Ptr{T}, image::InputArray; mask::InputArray = (CxxMat())) where {T <: Feature2D} = detect(cobj, image, mask)
function detectMultiScale(cobj::CascadeClassifier, image::InputArray, scaleFactor::Float64, minNeighbors::Int32, flags::Int32, minSize::Size{Int32}, maxSize::Size{Int32})
detectMultiScale(cobj::CascadeClassifier, image::InputArray; scaleFactor::Float64 = Float64(1.1), minNeighbors::Int32 = Int32(3), flags::Int32 = Int32(0), minSize::Size{Int32} = (Size{Int32}(0,0)), maxSize::Size{Int32} = (Size{Int32}(0,0))) = detectMultiScale(cobj, image, scaleFactor, minNeighbors, flags, minSize, maxSize)
function empty(cobj::CascadeClassifier)
function read(cobj::VideoCapture, image::InputArray)
read(cobj::VideoCapture; image::InputArray = (CxxMat())) = read(cobj, image)
function release(cobj::VideoCapture)
function SimpleBlobDetector_create(parameters::SimpleBlobDetector_Params)
SimpleBlobDetector_create(; parameters::SimpleBlobDetector_Params = (SimpleBlobDetector_Params())) = SimpleBlobDetector_create(parameters)
function imread(filename::String, flags::Int32)
imread(filename::String; flags::Int32 = Int32(IMREAD_COLOR)) = imread(filename, flags)
function imshow(winname::String, mat::InputArray)
function namedWindow(winname::String, flags::Int32)
namedWindow(winname::String; flags::Int32 = Int32(WINDOW_AUTOSIZE)) = namedWindow(winname, flags)
function waitKey(delay::Int32)
waitKey(; delay::Int32 = Int32(0)) = waitKey(delay)
function rectangle(img::InputArray, pt1::Point{Int32}, pt2::Point{Int32}, color::Scalar, thickness::Int32, lineType::Int32, shift::Int32)
rectangle(img::InputArray, pt1::Point{Int32}, pt2::Point{Int32}, color::Scalar; thickness::Int32 = Int32(1), lineType::Int32 = Int32(LINE_8), shift::Int32 = Int32(0)) = rectangle(img, pt1, pt2, color, thickness, lineType, shift)
function cvtColor(src::InputArray, code::Int32, dst::InputArray, dstCn::Int32)
cvtColor(src::InputArray, code::Int32; dst::InputArray = (CxxMat()), dstCn::Int32 = Int32(0)) = cvtColor(src, code, dst, dstCn)
function equalizeHist(src::InputArray, dst::InputArray)
equalizeHist(src::InputArray; dst::InputArray = (CxxMat())) = equalizeHist(src, dst)
function destroyAllWindows()
function getTextSize(text::String, fontFace::Int32, fontScale::Float64, thickness::Int32)
function putText(img::InputArray, text::String, org::Point{Int32}, fontFace::Int32, fontScale::Float64, color::Scalar, thickness::Int32, lineType::Int32, bottomLeftOrigin::Bool)
putText(img::InputArray, text::String, org::Point{Int32}, fontFace::Int32, fontScale::Float64, color::Scalar; thickness::Int32 = Int32(1), lineType::Int32 = Int32(LINE_8), bottomLeftOrigin::Bool = (false)) = putText(img, text, org, fontFace, fontScale, color, thickness, lineType, bottomLeftOrigin)
```
This is a list of functions implemented from the `dnn` module.
```
function finalize(cobj::cv_Ptr{T}, inputs::Array{InputArray, 1}, outputs::Array{InputArray, 1}) where {T <: dnn_Layer}
finalize(cobj::cv_Ptr{T}, inputs::Array{InputArray, 1}; outputs::Array{InputArray, 1} = (Array{InputArray, 1}())) where {T <: dnn_Layer} = finalize(cobj, inputs, outputs)
function outputNameToIndex(cobj::cv_Ptr{T}, outputName::String) where {T <: dnn_Layer}
function empty(cobj::dnn_Net)
function dump(cobj::dnn_Net)
function dumpToFile(cobj::dnn_Net, path::String)
function getLayerId(cobj::dnn_Net, layer::String)
function getLayerNames(cobj::dnn_Net)
function getLayer(cobj::dnn_Net, layerId::dnn_LayerId)
function connect(cobj::dnn_Net, outPin::String, inpPin::String)
function setInputsNames(cobj::dnn_Net, inputBlobNames::Array{String, 1})
function setInputShape(cobj::dnn_Net, inputName::String, shape::Array{Int32, 1})
function forward(cobj::dnn_Net, outputName::String)
forward(cobj::dnn_Net; outputName::String = (String())) = forward(cobj, outputName)
function forward(cobj::dnn_Net, outputBlobs::Array{InputArray, 1}, outputName::String)
function forward(cobj::dnn_Net, outBlobNames::Array{String, 1}, outputBlobs::Array{InputArray, 1})
forward(cobj::dnn_Net, outBlobNames::Array{String, 1}; outputBlobs::Array{InputArray, 1} = (Array{InputArray, 1}())) = forward(cobj, outBlobNames, outputBlobs)
function forwardAsync(cobj::dnn_Net, outputName::String)
forwardAsync(cobj::dnn_Net; outputName::String = (String())) = forwardAsync(cobj, outputName)
function setHalideScheduler(cobj::dnn_Net, scheduler::String)
function setPreferableBack(cobj::dnn_Net, backId::Int32)
function setPreferableTarget(cobj::dnn_Net, targetId::Int32)
function setInput(cobj::dnn_Net, blob::InputArray, name::String, scalefactor::Float64, mean::Scalar)
setInput(cobj::dnn_Net, blob::InputArray; name::String = (""), scalefactor::Float64 = Float64(1.0), mean::Scalar = ()) = setInput(cobj, blob, name, scalefactor, mean)
function setParam(cobj::dnn_Net, layer::dnn_LayerId, numParam::Int32, blob::InputArray)
function getParam(cobj::dnn_Net, layer::dnn_LayerId, numParam::Int32)
getParam(cobj::dnn_Net, layer::dnn_LayerId; numParam::Int32 = Int32(0)) = getParam(cobj, layer, numParam)
function getUnconnectedOutLayers(cobj::dnn_Net)
function getUnconnectedOutLayersNames(cobj::dnn_Net)
function getLayersShapes(cobj::dnn_Net, netInputShapes::Array{Array{Int32, 1}, 1})
function getLayersShapes(cobj::dnn_Net, netInputShape::Array{Int32, 1})
function getFLOPS(cobj::dnn_Net, netInputShapes::Array{Array{Int32, 1}, 1})
function getFLOPS(cobj::dnn_Net, netInputShape::Array{Int32, 1})
function getFLOPS(cobj::dnn_Net, layerId::Int32, netInputShapes::Array{Array{Int32, 1}, 1})
function getFLOPS(cobj::dnn_Net, layerId::Int32, netInputShape::Array{Int32, 1})
function getLayerTypes(cobj::dnn_Net)
function getLayersCount(cobj::dnn_Net, layerType::String)
function getMemoryConsumption(cobj::dnn_Net, netInputShape::Array{Int32, 1})
function getMemoryConsumption(cobj::dnn_Net, layerId::Int32, netInputShapes::Array{Array{Int32, 1}, 1})
function getMemoryConsumption(cobj::dnn_Net, layerId::Int32, netInputShape::Array{Int32, 1})
function enableFusion(cobj::dnn_Net, fusion::Bool)
function getPerfProfile(cobj::dnn_Net)
function setInputSize(cobj::dnn_Model, size::Size)
function setInputSize(cobj::dnn_Model, width::Int32, height::Int32)
function setInputMean(cobj::dnn_Model, mean::Scalar)
function setInputScale(cobj::dnn_Model, scale::Float64)
function setInputCrop(cobj::dnn_Model, crop::Bool)
function setInputSwapRB(cobj::dnn_Model, swapRB::Bool)
function setInputParams(cobj::dnn_Model, scale::Float64, size::Size, mean::Scalar, swapRB::Bool, crop::Bool)
setInputParams(cobj::dnn_Model; scale::Float64 = Float64(1.0), size::Size = (SizeOP()), mean::Scalar = (), swapRB::Bool = (false), crop::Bool = (false)) = setInputParams(cobj, scale, size, mean, swapRB, crop)
function predict(cobj::dnn_Model, frame::InputArray, outs::Array{InputArray, 1})
predict(cobj::dnn_Model, frame::InputArray; outs::Array{InputArray, 1} = (Array{InputArray, 1}())) = predict(cobj, frame, outs)
function dnn_Model(model::String, config::String)
dnn_Model(model::String; config::String = ("")) = dnn_Model(model, config)
function dnn_Model(network::dnn_Net)
function classify(cobj::dnn_ClassificationModel, frame::InputArray)
function dnn_ClassificationModel(model::String, config::String)
dnn_ClassificationModel(model::String; config::String = ("")) = dnn_ClassificationModel(model, config)
function dnn_ClassificationModel(network::dnn_Net)
function estimate(cobj::dnn_KeypointsModel, frame::InputArray, thresh::Float32)
estimate(cobj::dnn_KeypointsModel, frame::InputArray; thresh::Float32 = Float32(0.5)) = estimate(cobj, frame, thresh)
function dnn_KeypointsModel(model::String, config::String)
dnn_KeypointsModel(model::String; config::String = ("")) = dnn_KeypointsModel(model, config)
function dnn_KeypointsModel(network::dnn_Net)
function segment(cobj::dnn_SegmentationModel, frame::InputArray, mask::InputArray)
segment(cobj::dnn_SegmentationModel, frame::InputArray; mask::InputArray = (CxxMat())) = segment(cobj, frame, mask)
function dnn_SegmentationModel(model::String, config::String)
dnn_SegmentationModel(model::String; config::String = ("")) = dnn_SegmentationModel(model, config)
function dnn_SegmentationModel(network::dnn_Net)
function detect(cobj::dnn_DetectionModel, frame::InputArray, confThreshold::Float32, nmsThreshold::Float32)
detect(cobj::dnn_DetectionModel, frame::InputArray; confThreshold::Float32 = Float32(0.5), nmsThreshold::Float32 = Float32(0.0)) = detect(cobj, frame, confThreshold, nmsThreshold)
function dnn_DetectionModel(model::String, config::String)
dnn_DetectionModel(model::String; config::String = ("")) = dnn_DetectionModel(model, config)
function dnn_DetectionModel(network::dnn_Net)
function Net_readFromModelOptimizer(xml::String, bin::String)
function Net_readFromModelOptimizer(bufferModelConfig::Array{UInt8, 1}, bufferWeights::Array{UInt8, 1})
function readNetFromDarknet(cfgFile::String, darknetModel::String)
readNetFromDarknet(cfgFile::String; darknetModel::String = (String())) = readNetFromDarknet(cfgFile, darknetModel)
function readNetFromDarknet(bufferCfg::Array{UInt8, 1}, bufferModel::Array{UInt8, 1})
readNetFromDarknet(bufferCfg::Array{UInt8, 1}; bufferModel::Array{UInt8, 1} = (stdggvectoriUInt8kOP())) = readNetFromDarknet(bufferCfg, bufferModel)
function readNetFromCaffe(prototxt::String, caffeModel::String)
readNetFromCaffe(prototxt::String; caffeModel::String = (String())) = readNetFromCaffe(prototxt, caffeModel)
function readNetFromCaffe(bufferProto::Array{UInt8, 1}, bufferModel::Array{UInt8, 1})
readNetFromCaffe(bufferProto::Array{UInt8, 1}; bufferModel::Array{UInt8, 1} = (stdggvectoriUInt8kOP())) = readNetFromCaffe(bufferProto, bufferModel)
function readNetFromTensorflow(model::String, config::String)
readNetFromTensorflow(model::String; config::String = (String())) = readNetFromTensorflow(model, config)
function readNetFromTensorflow(bufferModel::Array{UInt8, 1}, bufferConfig::Array{UInt8, 1})
readNetFromTensorflow(bufferModel::Array{UInt8, 1}; bufferConfig::Array{UInt8, 1} = (stdggvectoriUInt8kOP())) = readNetFromTensorflow(bufferModel, bufferConfig)
function readNetFromTorch(model::String, isBinary::Bool, evaluate::Bool)
readNetFromTorch(model::String; isBinary::Bool = (true), evaluate::Bool = (true)) = readNetFromTorch(model, isBinary, evaluate)
function readNet(model::String, config::String, framework::String)
readNet(model::String; config::String = (""), framework::String = ("")) = readNet(model, config, framework)
function readNet(framework::String, bufferModel::Array{UInt8, 1}, bufferConfig::Array{UInt8, 1})
readNet(framework::String, bufferModel::Array{UInt8, 1}; bufferConfig::Array{UInt8, 1} = (stdggvectoriUInt8kOP())) = readNet(framework, bufferModel, bufferConfig)
function readTorchBlob(filename::String, isBinary::Bool)
readTorchBlob(filename::String; isBinary::Bool = (true)) = readTorchBlob(filename, isBinary)
function readNetFromModelOptimizer(xml::String, bin::String)
function readNetFromModelOptimizer(bufferModelConfig::Array{UInt8, 1}, bufferWeights::Array{UInt8, 1})
function readNetFromONNX(onnxFile::String)
function readNetFromONNX(buffer::Array{UInt8, 1})
function readTensorFromONNX(path::String)
function blobFromImage(image::InputArray, scalefactor::Float64, size::Size, mean::Scalar, swapRB::Bool, crop::Bool, ddepth::Int32)
blobFromImage(image::InputArray; scalefactor::Float64 = Float64(1.0), size::Size = (SizeOP()), mean::Scalar = (), swapRB::Bool = (false), crop::Bool = (false), ddepth::Int32 = Int32(CV_32F)) = blobFromImage(image, scalefactor, size, mean, swapRB, crop, ddepth)
function blobFromImages(images::Array{InputArray, 1}, scalefactor::Float64, size::Size, mean::Scalar, swapRB::Bool, crop::Bool, ddepth::Int32)
blobFromImages(images::Array{InputArray, 1}; scalefactor::Float64 = Float64(1.0), size::Size = (SizeOP()), mean::Scalar = (), swapRB::Bool = (false), crop::Bool = (false), ddepth::Int32 = Int32(CV_32F)) = blobFromImages(images, scalefactor, size, mean, swapRB, crop, ddepth)
function imagesFromBlob(blob_::InputArray, images_::Array{InputArray, 1})
imagesFromBlob(blob_::InputArray; images_::Array{InputArray, 1} = (Array{InputArray, 1}())) = imagesFromBlob(blob_, images_)
function shrinkCaffeModel(src::String, dst::String, layersTypes::Array{String, 1})
shrinkCaffeModel(src::String, dst::String; layersTypes::Array{String, 1} = (stdggvectoriStringkOP())) = shrinkCaffeModel(src, dst, layersTypes)
function writeTextGraph(model::String, output::String)
function NMSBoxes(bboxes::Array{Rect{Float64}, 1}, scores::Array{Float32, 1}, score_threshold::Float32, nms_threshold::Float32, eta::Float32, top_k::Int32)
NMSBoxes(bboxes::Array{Rect{Float64}, 1}, scores::Array{Float32, 1}, score_threshold::Float32, nms_threshold::Float32; eta::Float32 = Float32(1.0), top_k::Int32 = Int32(0)) = NMSBoxes(bboxes, scores, score_threshold, nms_threshold, eta, top_k)
function NMSBoxesRotated(bboxes::Array{RotatedRect, 1}, scores::Array{Float32, 1}, score_threshold::Float32, nms_threshold::Float32, eta::Float32, top_k::Int32)
NMSBoxesRotated(bboxes::Array{RotatedRect, 1}, scores::Array{Float32, 1}, score_threshold::Float32, nms_threshold::Float32; eta::Float32 = Float32(1.0), top_k::Int32 = Int32(0)) = NMSBoxesRotated(bboxes, scores, score_threshold, nms_threshold, eta, top_k)
```

@ -10,7 +10,7 @@ using CxxWrap
function __init__()
@initcxx
end
const Scalar = Union{Tuple{Number}, Tuple{Number, Number}, Tuple{Number, Number, Number}, NTuple{4, Number}}
const Scalar = Union{Tuple{}, Tuple{Number}, Tuple{Number, Number}, Tuple{Number, Number, Number}, NTuple{4, Number}}
include("Mat.jl")
@ -52,6 +52,15 @@ function cpp_to_julia(var::Tuple)
end
return tuple(ret_arr...)
end
function cpp_to_julia(var::CxxBool)
return Bool(var)
end
function julia_to_cpp(var::Bool)
return CxxBool(var)
end
# using StaticArrays
include("cv_wrap.jl")

@ -0,0 +1,435 @@
function Base.getproperty(m::dnn_Layer, s::Symbol)
if s==:blobs
return cpp_to_julia(jlopencv_Layer_get_blobs(m))
end
if s==:name
return cpp_to_julia(jlopencv_Layer_get_name(m))
end
if s==:type
return cpp_to_julia(jlopencv_Layer_get_type(m))
end
if s==:preferableTarget
return cpp_to_julia(jlopencv_Layer_get_preferableTarget(m))
end
return Base.getfield(m, s)
end
function Base.setproperty!(m::dnn_Layer, s::Symbol, v)
if s==:name
jlopencv_Layer_set_name(m, julia_to_cpp(v))
end
if s==:type
jlopencv_Layer_set_type(m, julia_to_cpp(v))
end
if s==:preferableTarget
jlopencv_Layer_set_preferableTarget(m, julia_to_cpp(v))
end
return Base.setfield!(m, s, v)
end
function finalize(cobj::cv_Ptr{T}, inputs::Array{InputArray, 1}, outputs::Array{InputArray, 1}) where {T <: dnn_Layer}
return cpp_to_julia(jlopencv_cv_dnn_cv_dnn_Layer_cv_dnn_Layer_finalize(julia_to_cpp(cobj),julia_to_cpp(inputs),julia_to_cpp(outputs)))
end
finalize(cobj::cv_Ptr{T}, inputs::Array{InputArray, 1}; outputs::Array{InputArray, 1} = (Array{InputArray, 1}())) where {T <: dnn_Layer} = finalize(cobj, inputs, outputs)
# function run(cobj::cv_Ptr{T}, inputs::Array{InputArray, 1}, internals::Array{InputArray, 1}, outputs::Array{InputArray, 1}) where {T <: dnn_Layer}
# return cpp_to_julia(jlopencv_cv_dnn_cv_dnn_Layer_cv_dnn_Layer_run(julia_to_cpp(cobj),julia_to_cpp(inputs),julia_to_cpp(internals),julia_to_cpp(outputs)))
# end
# run(cobj::cv_Ptr{T}, inputs::Array{InputArray, 1}, internals::Array{InputArray, 1}; outputs::Array{InputArray, 1} = (Array{InputArray, 1}())) where {T <: dnn_Layer} = run(cobj, inputs, internals, outputs)
function outputNameToIndex(cobj::cv_Ptr{T}, outputName::String) where {T <: dnn_Layer}
return cpp_to_julia(jlopencv_cv_dnn_cv_dnn_Layer_cv_dnn_Layer_outputNameToIndex(julia_to_cpp(cobj),julia_to_cpp(outputName)))
end
function Base.getproperty(m::dnn_Net, s::Symbol)
return Base.getfield(m, s)
end
function Base.setproperty!(m::dnn_Net, s::Symbol, v)
return Base.setfield!(m, s, v)
end
function empty(cobj::dnn_Net)
return cpp_to_julia(jlopencv_cv_dnn_cv_dnn_Net_cv_dnn_Net_empty(julia_to_cpp(cobj)))
end
function dump(cobj::dnn_Net)
return cpp_to_julia(jlopencv_cv_dnn_cv_dnn_Net_cv_dnn_Net_dump(julia_to_cpp(cobj)))
end
function dumpToFile(cobj::dnn_Net, path::String)
return cpp_to_julia(jlopencv_cv_dnn_cv_dnn_Net_cv_dnn_Net_dumpToFile(julia_to_cpp(cobj),julia_to_cpp(path)))
end
function getLayerId(cobj::dnn_Net, layer::String)
return cpp_to_julia(jlopencv_cv_dnn_cv_dnn_Net_cv_dnn_Net_getLayerId(julia_to_cpp(cobj),julia_to_cpp(layer)))
end
function getLayerNames(cobj::dnn_Net)
return cpp_to_julia(jlopencv_cv_dnn_cv_dnn_Net_cv_dnn_Net_getLayerNames(julia_to_cpp(cobj)))
end
function getLayer(cobj::dnn_Net, layerId::dnn_LayerId)
return cpp_to_julia(jlopencv_cv_dnn_cv_dnn_Net_cv_dnn_Net_getLayer(julia_to_cpp(cobj),julia_to_cpp(layerId)))
end
function connect(cobj::dnn_Net, outPin::String, inpPin::String)
return cpp_to_julia(jlopencv_cv_dnn_cv_dnn_Net_cv_dnn_Net_connect(julia_to_cpp(cobj),julia_to_cpp(outPin),julia_to_cpp(inpPin)))
end
function setInputsNames(cobj::dnn_Net, inputBlobNames::Array{String, 1})
return cpp_to_julia(jlopencv_cv_dnn_cv_dnn_Net_cv_dnn_Net_setInputsNames(julia_to_cpp(cobj),julia_to_cpp(inputBlobNames)))
end
function setInputShape(cobj::dnn_Net, inputName::String, shape::Array{Int32, 1})
return cpp_to_julia(jlopencv_cv_dnn_cv_dnn_Net_cv_dnn_Net_setInputShape(julia_to_cpp(cobj),julia_to_cpp(inputName),julia_to_cpp(shape)))
end
function forward(cobj::dnn_Net, outputName::String)
return cpp_to_julia(jlopencv_cv_dnn_cv_dnn_Net_cv_dnn_Net_forward(julia_to_cpp(cobj),julia_to_cpp(outputName)))
end
forward(cobj::dnn_Net; outputName::String = (String())) = forward(cobj, outputName)
function forward(cobj::dnn_Net, outputBlobs::Array{InputArray, 1}, outputName::String)
return cpp_to_julia(jlopencv_cv_dnn_cv_dnn_Net_cv_dnn_Net_forward(julia_to_cpp(cobj),julia_to_cpp(outputBlobs),julia_to_cpp(outputName)))
end
function forward(cobj::dnn_Net, outBlobNames::Array{String, 1}, outputBlobs::Array{InputArray, 1})
return cpp_to_julia(jlopencv_cv_dnn_cv_dnn_Net_cv_dnn_Net_forward(julia_to_cpp(cobj),julia_to_cpp(outBlobNames),julia_to_cpp(outputBlobs)))
end
forward(cobj::dnn_Net, outBlobNames::Array{String, 1}; outputBlobs::Array{InputArray, 1} = (Array{InputArray, 1}())) = forward(cobj, outBlobNames, outputBlobs)
function forwardAsync(cobj::dnn_Net, outputName::String)
return cpp_to_julia(jlopencv_cv_dnn_cv_dnn_Net_cv_dnn_Net_forwardAsync(julia_to_cpp(cobj),julia_to_cpp(outputName)))
end
forwardAsync(cobj::dnn_Net; outputName::String = (String())) = forwardAsync(cobj, outputName)
function setHalideScheduler(cobj::dnn_Net, scheduler::String)
return cpp_to_julia(jlopencv_cv_dnn_cv_dnn_Net_cv_dnn_Net_setHalideScheduler(julia_to_cpp(cobj),julia_to_cpp(scheduler)))
end
function setPreferableBackend(cobj::dnn_Net, backendId::Int32)
return cpp_to_julia(jlopencv_cv_dnn_cv_dnn_Net_cv_dnn_Net_setPreferableBackend(julia_to_cpp(cobj),julia_to_cpp(backendId)))
end
function setPreferableTarget(cobj::dnn_Net, targetId::Int32)
return cpp_to_julia(jlopencv_cv_dnn_cv_dnn_Net_cv_dnn_Net_setPreferableTarget(julia_to_cpp(cobj),julia_to_cpp(targetId)))
end
function setInput(cobj::dnn_Net, blob::InputArray, name::String, scalefactor::Float64, mean::Scalar)
return cpp_to_julia(jlopencv_cv_dnn_cv_dnn_Net_cv_dnn_Net_setInput(julia_to_cpp(cobj),julia_to_cpp(blob),julia_to_cpp(name),julia_to_cpp(scalefactor),julia_to_cpp(mean)))
end
setInput(cobj::dnn_Net, blob::InputArray; name::String = (""), scalefactor::Float64 = Float64(1.0), mean::Scalar = ()) = setInput(cobj, blob, name, scalefactor, mean)
function setParam(cobj::dnn_Net, layer::dnn_LayerId, numParam::Int32, blob::InputArray)
return cpp_to_julia(jlopencv_cv_dnn_cv_dnn_Net_cv_dnn_Net_setParam(julia_to_cpp(cobj),julia_to_cpp(layer),julia_to_cpp(numParam),julia_to_cpp(blob)))
end
function getParam(cobj::dnn_Net, layer::dnn_LayerId, numParam::Int32)
return cpp_to_julia(jlopencv_cv_dnn_cv_dnn_Net_cv_dnn_Net_getParam(julia_to_cpp(cobj),julia_to_cpp(layer),julia_to_cpp(numParam)))
end
getParam(cobj::dnn_Net, layer::dnn_LayerId; numParam::Int32 = Int32(0)) = getParam(cobj, layer, numParam)
function getUnconnectedOutLayers(cobj::dnn_Net)
return cpp_to_julia(jlopencv_cv_dnn_cv_dnn_Net_cv_dnn_Net_getUnconnectedOutLayers(julia_to_cpp(cobj)))
end
function getUnconnectedOutLayersNames(cobj::dnn_Net)
return cpp_to_julia(jlopencv_cv_dnn_cv_dnn_Net_cv_dnn_Net_getUnconnectedOutLayersNames(julia_to_cpp(cobj)))
end
function getLayersShapes(cobj::dnn_Net, netInputShapes::Array{Array{Int32, 1}, 1})
return cpp_to_julia(jlopencv_cv_dnn_cv_dnn_Net_cv_dnn_Net_getLayersShapes(julia_to_cpp(cobj),julia_to_cpp(netInputShapes)))
end
function getLayersShapes(cobj::dnn_Net, netInputShape::Array{Int32, 1})
return cpp_to_julia(jlopencv_cv_dnn_cv_dnn_Net_cv_dnn_Net_getLayersShapes(julia_to_cpp(cobj),julia_to_cpp(netInputShape)))
end
function getFLOPS(cobj::dnn_Net, netInputShapes::Array{Array{Int32, 1}, 1})
return cpp_to_julia(jlopencv_cv_dnn_cv_dnn_Net_cv_dnn_Net_getFLOPS(julia_to_cpp(cobj),julia_to_cpp(netInputShapes)))
end
function getFLOPS(cobj::dnn_Net, netInputShape::Array{Int32, 1})
return cpp_to_julia(jlopencv_cv_dnn_cv_dnn_Net_cv_dnn_Net_getFLOPS(julia_to_cpp(cobj),julia_to_cpp(netInputShape)))
end
function getFLOPS(cobj::dnn_Net, layerId::Int32, netInputShapes::Array{Array{Int32, 1}, 1})
return cpp_to_julia(jlopencv_cv_dnn_cv_dnn_Net_cv_dnn_Net_getFLOPS(julia_to_cpp(cobj),julia_to_cpp(layerId),julia_to_cpp(netInputShapes)))
end
function getFLOPS(cobj::dnn_Net, layerId::Int32, netInputShape::Array{Int32, 1})
return cpp_to_julia(jlopencv_cv_dnn_cv_dnn_Net_cv_dnn_Net_getFLOPS(julia_to_cpp(cobj),julia_to_cpp(layerId),julia_to_cpp(netInputShape)))
end
function getLayerTypes(cobj::dnn_Net)
return cpp_to_julia(jlopencv_cv_dnn_cv_dnn_Net_cv_dnn_Net_getLayerTypes(julia_to_cpp(cobj)))
end
function getLayersCount(cobj::dnn_Net, layerType::String)
return cpp_to_julia(jlopencv_cv_dnn_cv_dnn_Net_cv_dnn_Net_getLayersCount(julia_to_cpp(cobj),julia_to_cpp(layerType)))
end
function getMemoryConsumption(cobj::dnn_Net, netInputShape::Array{Int32, 1})
return cpp_to_julia(jlopencv_cv_dnn_cv_dnn_Net_cv_dnn_Net_getMemoryConsumption(julia_to_cpp(cobj),julia_to_cpp(netInputShape)))
end
function getMemoryConsumption(cobj::dnn_Net, layerId::Int32, netInputShapes::Array{Array{Int32, 1}, 1})
return cpp_to_julia(jlopencv_cv_dnn_cv_dnn_Net_cv_dnn_Net_getMemoryConsumption(julia_to_cpp(cobj),julia_to_cpp(layerId),julia_to_cpp(netInputShapes)))
end
function getMemoryConsumption(cobj::dnn_Net, layerId::Int32, netInputShape::Array{Int32, 1})
return cpp_to_julia(jlopencv_cv_dnn_cv_dnn_Net_cv_dnn_Net_getMemoryConsumption(julia_to_cpp(cobj),julia_to_cpp(layerId),julia_to_cpp(netInputShape)))
end
function enableFusion(cobj::dnn_Net, fusion::Bool)
return cpp_to_julia(jlopencv_cv_dnn_cv_dnn_Net_cv_dnn_Net_enableFusion(julia_to_cpp(cobj),julia_to_cpp(fusion)))
end
function getPerfProfile(cobj::dnn_Net)
return cpp_to_julia(jlopencv_cv_dnn_cv_dnn_Net_cv_dnn_Net_getPerfProfile(julia_to_cpp(cobj)))
end
function Base.getproperty(m::dnn_Model, s::Symbol)
return Base.getfield(m, s)
end
function Base.setproperty!(m::dnn_Model, s::Symbol, v)
return Base.setfield!(m, s, v)
end
function setInputSize(cobj::dnn_Model, size::Size)
return cpp_to_julia(jlopencv_cv_dnn_cv_dnn_Model_cv_dnn_Model_setInputSize(julia_to_cpp(cobj),julia_to_cpp(size)))
end
function setInputSize(cobj::dnn_Model, width::Int32, height::Int32)
return cpp_to_julia(jlopencv_cv_dnn_cv_dnn_Model_cv_dnn_Model_setInputSize(julia_to_cpp(cobj),julia_to_cpp(width),julia_to_cpp(height)))
end
function setInputMean(cobj::dnn_Model, mean::Scalar)
return cpp_to_julia(jlopencv_cv_dnn_cv_dnn_Model_cv_dnn_Model_setInputMean(julia_to_cpp(cobj),julia_to_cpp(mean)))
end
function setInputScale(cobj::dnn_Model, scale::Float64)
return cpp_to_julia(jlopencv_cv_dnn_cv_dnn_Model_cv_dnn_Model_setInputScale(julia_to_cpp(cobj),julia_to_cpp(scale)))
end
function setInputCrop(cobj::dnn_Model, crop::Bool)
return cpp_to_julia(jlopencv_cv_dnn_cv_dnn_Model_cv_dnn_Model_setInputCrop(julia_to_cpp(cobj),julia_to_cpp(crop)))
end
function setInputSwapRB(cobj::dnn_Model, swapRB::Bool)
return cpp_to_julia(jlopencv_cv_dnn_cv_dnn_Model_cv_dnn_Model_setInputSwapRB(julia_to_cpp(cobj),julia_to_cpp(swapRB)))
end
function setInputParams(cobj::dnn_Model, scale::Float64, size::Size, mean::Scalar, swapRB::Bool, crop::Bool)
return cpp_to_julia(jlopencv_cv_dnn_cv_dnn_Model_cv_dnn_Model_setInputParams(julia_to_cpp(cobj),julia_to_cpp(scale),julia_to_cpp(size),julia_to_cpp(mean),julia_to_cpp(swapRB),julia_to_cpp(crop)))
end
setInputParams(cobj::dnn_Model; scale::Float64 = Float64(1.0), size::Size = (SizeOP()), mean::Scalar = (), swapRB::Bool = (false), crop::Bool = (false)) = setInputParams(cobj, scale, size, mean, swapRB, crop)
function predict(cobj::dnn_Model, frame::InputArray, outs::Array{InputArray, 1})
return cpp_to_julia(jlopencv_cv_dnn_cv_dnn_Model_cv_dnn_Model_predict(julia_to_cpp(cobj),julia_to_cpp(frame),julia_to_cpp(outs)))
end
predict(cobj::dnn_Model, frame::InputArray; outs::Array{InputArray, 1} = (Array{InputArray, 1}())) = predict(cobj, frame, outs)
function dnn_Model(model::String, config::String)
return cpp_to_julia(jlopencv_cv_dnn_cv_dnn_Model_cv_dnn_Model_Model(julia_to_cpp(model),julia_to_cpp(config)))
end
dnn_Model(model::String; config::String = ("")) = dnn_Model(model, config)
function dnn_Model(network::dnn_Net)
return cpp_to_julia(jlopencv_cv_dnn_cv_dnn_Model_cv_dnn_Model_Model(julia_to_cpp(network)))
end
function Base.getproperty(m::dnn_ClassificationModel, s::Symbol)
return Base.getfield(m, s)
end
function Base.setproperty!(m::dnn_ClassificationModel, s::Symbol, v)
return Base.setfield!(m, s, v)
end
function classify(cobj::dnn_ClassificationModel, frame::InputArray)
return cpp_to_julia(jlopencv_cv_dnn_cv_dnn_ClassificationModel_cv_dnn_ClassificationModel_classify(julia_to_cpp(cobj),julia_to_cpp(frame)))
end
function dnn_ClassificationModel(model::String, config::String)
return cpp_to_julia(jlopencv_cv_dnn_cv_dnn_ClassificationModel_cv_dnn_ClassificationModel_ClassificationModel(julia_to_cpp(model),julia_to_cpp(config)))
end
dnn_ClassificationModel(model::String; config::String = ("")) = dnn_ClassificationModel(model, config)
function dnn_ClassificationModel(network::dnn_Net)
return cpp_to_julia(jlopencv_cv_dnn_cv_dnn_ClassificationModel_cv_dnn_ClassificationModel_ClassificationModel(julia_to_cpp(network)))
end
function Base.getproperty(m::dnn_KeypointsModel, s::Symbol)
return Base.getfield(m, s)
end
function Base.setproperty!(m::dnn_KeypointsModel, s::Symbol, v)
return Base.setfield!(m, s, v)
end
function estimate(cobj::dnn_KeypointsModel, frame::InputArray, thresh::Float32)
return cpp_to_julia(jlopencv_cv_dnn_cv_dnn_KeypointsModel_cv_dnn_KeypointsModel_estimate(julia_to_cpp(cobj),julia_to_cpp(frame),julia_to_cpp(thresh)))
end
estimate(cobj::dnn_KeypointsModel, frame::InputArray; thresh::Float32 = Float32(0.5)) = estimate(cobj, frame, thresh)
function dnn_KeypointsModel(model::String, config::String)
return cpp_to_julia(jlopencv_cv_dnn_cv_dnn_KeypointsModel_cv_dnn_KeypointsModel_KeypointsModel(julia_to_cpp(model),julia_to_cpp(config)))
end
dnn_KeypointsModel(model::String; config::String = ("")) = dnn_KeypointsModel(model, config)
function dnn_KeypointsModel(network::dnn_Net)
return cpp_to_julia(jlopencv_cv_dnn_cv_dnn_KeypointsModel_cv_dnn_KeypointsModel_KeypointsModel(julia_to_cpp(network)))
end
function Base.getproperty(m::dnn_SegmentationModel, s::Symbol)
return Base.getfield(m, s)
end
function Base.setproperty!(m::dnn_SegmentationModel, s::Symbol, v)
return Base.setfield!(m, s, v)
end
function segment(cobj::dnn_SegmentationModel, frame::InputArray, mask::InputArray)
return cpp_to_julia(jlopencv_cv_dnn_cv_dnn_SegmentationModel_cv_dnn_SegmentationModel_segment(julia_to_cpp(cobj),julia_to_cpp(frame),julia_to_cpp(mask)))
end
segment(cobj::dnn_SegmentationModel, frame::InputArray; mask::InputArray = (CxxMat())) = segment(cobj, frame, mask)
function dnn_SegmentationModel(model::String, config::String)
return cpp_to_julia(jlopencv_cv_dnn_cv_dnn_SegmentationModel_cv_dnn_SegmentationModel_SegmentationModel(julia_to_cpp(model),julia_to_cpp(config)))
end
dnn_SegmentationModel(model::String; config::String = ("")) = dnn_SegmentationModel(model, config)
function dnn_SegmentationModel(network::dnn_Net)
return cpp_to_julia(jlopencv_cv_dnn_cv_dnn_SegmentationModel_cv_dnn_SegmentationModel_SegmentationModel(julia_to_cpp(network)))
end
function Base.getproperty(m::dnn_DetectionModel, s::Symbol)
return Base.getfield(m, s)
end
function Base.setproperty!(m::dnn_DetectionModel, s::Symbol, v)
return Base.setfield!(m, s, v)
end
function detect(cobj::dnn_DetectionModel, frame::InputArray, confThreshold::Float32, nmsThreshold::Float32)
return cpp_to_julia(jlopencv_cv_dnn_cv_dnn_DetectionModel_cv_dnn_DetectionModel_detect(julia_to_cpp(cobj),julia_to_cpp(frame),julia_to_cpp(confThreshold),julia_to_cpp(nmsThreshold)))
end
detect(cobj::dnn_DetectionModel, frame::InputArray; confThreshold::Float32 = Float32(0.5), nmsThreshold::Float32 = Float32(0.0)) = detect(cobj, frame, confThreshold, nmsThreshold)
function dnn_DetectionModel(model::String, config::String)
return cpp_to_julia(jlopencv_cv_dnn_cv_dnn_DetectionModel_cv_dnn_DetectionModel_DetectionModel(julia_to_cpp(model),julia_to_cpp(config)))
end
dnn_DetectionModel(model::String; config::String = ("")) = dnn_DetectionModel(model, config)
function dnn_DetectionModel(network::dnn_Net)
return cpp_to_julia(jlopencv_cv_dnn_cv_dnn_DetectionModel_cv_dnn_DetectionModel_DetectionModel(julia_to_cpp(network)))
end
# function getAvailableTargets(be::dnn_Backend)
# return cpp_to_julia(jlopencv_cv_dnn_cv_dnn_getAvailableTargets(julia_to_cpp(be)))
# end
function Net_readFromModelOptimizer(xml::String, bin::String)
return cpp_to_julia(jlopencv_cv_dnn_cv_dnn_Net_readFromModelOptimizer(julia_to_cpp(xml),julia_to_cpp(bin)))
end
function Net_readFromModelOptimizer(bufferModelConfig::Array{UInt8, 1}, bufferWeights::Array{UInt8, 1})
return cpp_to_julia(jlopencv_cv_dnn_cv_dnn_Net_readFromModelOptimizer(julia_to_cpp(bufferModelConfig),julia_to_cpp(bufferWeights)))
end
function readNetFromDarknet(cfgFile::String, darknetModel::String)
return cpp_to_julia(jlopencv_cv_dnn_cv_dnn_readNetFromDarknet(julia_to_cpp(cfgFile),julia_to_cpp(darknetModel)))
end
readNetFromDarknet(cfgFile::String; darknetModel::String = (String())) = readNetFromDarknet(cfgFile, darknetModel)
function readNetFromDarknet(bufferCfg::Array{UInt8, 1}, bufferModel::Array{UInt8, 1})
return cpp_to_julia(jlopencv_cv_dnn_cv_dnn_readNetFromDarknet(julia_to_cpp(bufferCfg),julia_to_cpp(bufferModel)))
end
readNetFromDarknet(bufferCfg::Array{UInt8, 1}; bufferModel::Array{UInt8, 1} = (stdggvectoriUInt8kOP())) = readNetFromDarknet(bufferCfg, bufferModel)
function readNetFromCaffe(prototxt::String, caffeModel::String)
return cpp_to_julia(jlopencv_cv_dnn_cv_dnn_readNetFromCaffe(julia_to_cpp(prototxt),julia_to_cpp(caffeModel)))
end
readNetFromCaffe(prototxt::String; caffeModel::String = (String())) = readNetFromCaffe(prototxt, caffeModel)
function readNetFromCaffe(bufferProto::Array{UInt8, 1}, bufferModel::Array{UInt8, 1})
return cpp_to_julia(jlopencv_cv_dnn_cv_dnn_readNetFromCaffe(julia_to_cpp(bufferProto),julia_to_cpp(bufferModel)))
end
readNetFromCaffe(bufferProto::Array{UInt8, 1}; bufferModel::Array{UInt8, 1} = (stdggvectoriUInt8kOP())) = readNetFromCaffe(bufferProto, bufferModel)
function readNetFromTensorflow(model::String, config::String)
return cpp_to_julia(jlopencv_cv_dnn_cv_dnn_readNetFromTensorflow(julia_to_cpp(model),julia_to_cpp(config)))
end
readNetFromTensorflow(model::String; config::String = (String())) = readNetFromTensorflow(model, config)
function readNetFromTensorflow(bufferModel::Array{UInt8, 1}, bufferConfig::Array{UInt8, 1})
return cpp_to_julia(jlopencv_cv_dnn_cv_dnn_readNetFromTensorflow(julia_to_cpp(bufferModel),julia_to_cpp(bufferConfig)))
end
readNetFromTensorflow(bufferModel::Array{UInt8, 1}; bufferConfig::Array{UInt8, 1} = (stdggvectoriUInt8kOP())) = readNetFromTensorflow(bufferModel, bufferConfig)
function readNetFromTorch(model::String, isBinary::Bool, evaluate::Bool)
return cpp_to_julia(jlopencv_cv_dnn_cv_dnn_readNetFromTorch(julia_to_cpp(model),julia_to_cpp(isBinary),julia_to_cpp(evaluate)))
end
readNetFromTorch(model::String; isBinary::Bool = (true), evaluate::Bool = (true)) = readNetFromTorch(model, isBinary, evaluate)
function readNet(model::String, config::String, framework::String)
return cpp_to_julia(jlopencv_cv_dnn_cv_dnn_readNet(julia_to_cpp(model),julia_to_cpp(config),julia_to_cpp(framework)))
end
readNet(model::String; config::String = (""), framework::String = ("")) = readNet(model, config, framework)
function readNet(framework::String, bufferModel::Array{UInt8, 1}, bufferConfig::Array{UInt8, 1})
return cpp_to_julia(jlopencv_cv_dnn_cv_dnn_readNet(julia_to_cpp(framework),julia_to_cpp(bufferModel),julia_to_cpp(bufferConfig)))
end
readNet(framework::String, bufferModel::Array{UInt8, 1}; bufferConfig::Array{UInt8, 1} = (stdggvectoriUInt8kOP())) = readNet(framework, bufferModel, bufferConfig)
function readTorchBlob(filename::String, isBinary::Bool)
return cpp_to_julia(jlopencv_cv_dnn_cv_dnn_readTorchBlob(julia_to_cpp(filename),julia_to_cpp(isBinary)))
end
readTorchBlob(filename::String; isBinary::Bool = (true)) = readTorchBlob(filename, isBinary)
function readNetFromModelOptimizer(xml::String, bin::String)
return cpp_to_julia(jlopencv_cv_dnn_cv_dnn_readNetFromModelOptimizer(julia_to_cpp(xml),julia_to_cpp(bin)))
end
function readNetFromModelOptimizer(bufferModelConfig::Array{UInt8, 1}, bufferWeights::Array{UInt8, 1})
return cpp_to_julia(jlopencv_cv_dnn_cv_dnn_readNetFromModelOptimizer(julia_to_cpp(bufferModelConfig),julia_to_cpp(bufferWeights)))
end
function readNetFromONNX(onnxFile::String)
return cpp_to_julia(jlopencv_cv_dnn_cv_dnn_readNetFromONNX(julia_to_cpp(onnxFile)))
end
function readNetFromONNX(buffer::Array{UInt8, 1})
return cpp_to_julia(jlopencv_cv_dnn_cv_dnn_readNetFromONNX(julia_to_cpp(buffer)))
end
function readTensorFromONNX(path::String)
return cpp_to_julia(jlopencv_cv_dnn_cv_dnn_readTensorFromONNX(julia_to_cpp(path)))
end
function blobFromImage(image::InputArray, scalefactor::Float64, size::Size, mean::Scalar, swapRB::Bool, crop::Bool, ddepth::Int32)
return cpp_to_julia(jlopencv_cv_dnn_cv_dnn_blobFromImage(julia_to_cpp(image),julia_to_cpp(scalefactor),julia_to_cpp(size),julia_to_cpp(mean),julia_to_cpp(swapRB),julia_to_cpp(crop),julia_to_cpp(ddepth)))
end
blobFromImage(image::InputArray; scalefactor::Float64 = Float64(1.0), size::Size = (SizeOP()), mean::Scalar = (), swapRB::Bool = (false), crop::Bool = (false), ddepth::Int32 = Int32(CV_32F)) = blobFromImage(image, scalefactor, size, mean, swapRB, crop, ddepth)
function blobFromImages(images::Array{InputArray, 1}, scalefactor::Float64, size::Size, mean::Scalar, swapRB::Bool, crop::Bool, ddepth::Int32)
return cpp_to_julia(jlopencv_cv_dnn_cv_dnn_blobFromImages(julia_to_cpp(images),julia_to_cpp(scalefactor),julia_to_cpp(size),julia_to_cpp(mean),julia_to_cpp(swapRB),julia_to_cpp(crop),julia_to_cpp(ddepth)))
end
blobFromImages(images::Array{InputArray, 1}; scalefactor::Float64 = Float64(1.0), size::Size = (SizeOP()), mean::Scalar = (), swapRB::Bool = (false), crop::Bool = (false), ddepth::Int32 = Int32(CV_32F)) = blobFromImages(images, scalefactor, size, mean, swapRB, crop, ddepth)
function imagesFromBlob(blob_::InputArray, images_::Array{InputArray, 1})
return cpp_to_julia(jlopencv_cv_dnn_cv_dnn_imagesFromBlob(julia_to_cpp(blob_),julia_to_cpp(images_)))
end
imagesFromBlob(blob_::InputArray; images_::Array{InputArray, 1} = (Array{InputArray, 1}())) = imagesFromBlob(blob_, images_)
function shrinkCaffeModel(src::String, dst::String, layersTypes::Array{String, 1})
return cpp_to_julia(jlopencv_cv_dnn_cv_dnn_shrinkCaffeModel(julia_to_cpp(src),julia_to_cpp(dst),julia_to_cpp(layersTypes)))
end
shrinkCaffeModel(src::String, dst::String; layersTypes::Array{String, 1} = (stdggvectoriStringkOP())) = shrinkCaffeModel(src, dst, layersTypes)
function writeTextGraph(model::String, output::String)
return cpp_to_julia(jlopencv_cv_dnn_cv_dnn_writeTextGraph(julia_to_cpp(model),julia_to_cpp(output)))
end
function NMSBoxes(bboxes::Array{Rect{Float64}, 1}, scores::Array{Float32, 1}, score_threshold::Float32, nms_threshold::Float32, eta::Float32, top_k::Int32)
return cpp_to_julia(jlopencv_cv_dnn_cv_dnn_NMSBoxes(julia_to_cpp(bboxes),julia_to_cpp(scores),julia_to_cpp(score_threshold),julia_to_cpp(nms_threshold),julia_to_cpp(eta),julia_to_cpp(top_k)))
end
NMSBoxes(bboxes::Array{Rect{Float64}, 1}, scores::Array{Float32, 1}, score_threshold::Float32, nms_threshold::Float32; eta::Float32 = Float32(1.0), top_k::Int32 = Int32(0)) = NMSBoxes(bboxes, scores, score_threshold, nms_threshold, eta, top_k)
function NMSBoxesRotated(bboxes::Array{RotatedRect, 1}, scores::Array{Float32, 1}, score_threshold::Float32, nms_threshold::Float32, eta::Float32, top_k::Int32)
return cpp_to_julia(jlopencv_cv_dnn_cv_dnn_NMSBoxes(julia_to_cpp(bboxes),julia_to_cpp(scores),julia_to_cpp(score_threshold),julia_to_cpp(nms_threshold),julia_to_cpp(eta),julia_to_cpp(top_k)))
end
NMSBoxesRotated(bboxes::Array{RotatedRect, 1}, scores::Array{Float32, 1}, score_threshold::Float32, nms_threshold::Float32; eta::Float32 = Float32(1.0), top_k::Int32 = Int32(0)) = NMSBoxesRotated(bboxes, scores, score_threshold, nms_threshold, eta, top_k)

@ -20,7 +20,7 @@ function Base.getproperty(m::KeyPoint, s::Symbol)
return Base.getfield(m, s)
end
function Base.setproperty!(m::KeyPoint, s::Symbol, v)
return Base.setfield(m, s, v)
return Base.setfield!(m, s, v)
end
function KeyPoint(x::Float32, y::Float32, _size::Float32, _angle::Float32, _response::Float32, _octave::Int32, _class_id::Int32)
@ -112,3 +112,14 @@ equalizeHist(src::InputArray; dst::InputArray = (CxxMat())) = equalizeHist(src,
function destroyAllWindows()
return cpp_to_julia(jlopencv_cv_cv_destroyAllWindows())
end
function getTextSize(text::String, fontFace::Int32, fontScale::Float64, thickness::Int32)
return cpp_to_julia(jlopencv_cv_cv_getTextSize(julia_to_cpp(text),julia_to_cpp(fontFace),julia_to_cpp(fontScale),julia_to_cpp(thickness)))
end
function putText(img::InputArray, text::String, org::Point{Int32}, fontFace::Int32, fontScale::Float64, color::Scalar, thickness::Int32, lineType::Int32, bottomLeftOrigin::Bool)
return cpp_to_julia(jlopencv_cv_cv_putText(julia_to_cpp(img),julia_to_cpp(text),julia_to_cpp(org),julia_to_cpp(fontFace),julia_to_cpp(fontScale),julia_to_cpp(color),julia_to_cpp(thickness),julia_to_cpp(lineType),julia_to_cpp(bottomLeftOrigin)))
end
putText(img::InputArray, text::String, org::Point{Int32}, fontFace::Int32, fontScale::Float64, color::Scalar; thickness::Int32 = Int32(1), lineType::Int32 = Int32(LINE_8), bottomLeftOrigin::Bool = (false)) = putText(img, text, org, fontFace, fontScale, color, thickness, lineType, bottomLeftOrigin)
include("cv_dnn_wrap.jl")

@ -8,7 +8,9 @@ function cpp_to_julia(var::CxxVec{T, N}) where {T, N}
end
function julia_to_cpp(sc::Scalar)
if size(sc,1)==1
if size(sc,1)==0
return CxxScalar{Float64}(0,0,0,0)
elseif size(sc, 1) == 1
return CxxScalar{Float64}(Float64(sc[1]), 0, 0, 0)
elseif size(sc,1) == 2
return CxxScalar{Float64}(Float64(sc[1]), Float64(sc[2]), 0, 0)

@ -0,0 +1,36 @@
using OpenCV
const cv = OpenCV
size0 = Int32(300)
# take the model from https://github.com/opencv/opencv_extra/tree/master/testdata/dnn
net = cv.dnn_DetectionModel("opencv_face_detector.pbtxt", "opencv_face_detector_uint8.pb")
cv.setPreferableTarget(net, cv.DNN_TARGET_CPU)
cv.setInputMean(net, (104, 177, 123))
cv.setInputScale(net, 1.)
cv.setInputSize(net, size0, size0)
cap = cv.VideoCapture(Int32(0))
while true
ok, frame = cv.read(cap)
if ok == false
break
end
classIds, confidences, boxes = cv.detect(net, frame, confThreshold=Float32(0.5))
for i in 1:size(boxes,1)
confidence = confidences[i]
x0 = Int32(boxes[i].x)
y0 = Int32(boxes[i].y)
x1 = Int32(boxes[i].x+boxes[i].width)
y1 = Int32(boxes[i].y+boxes[i].height)
cv.rectangle(frame, cv.Point{Int32}(x0, y0), cv.Point{Int32}(x1, y1), (100, 255, 100); thickness = Int32(5))
label = "face: " * string(confidence)
lsize, bl = cv.getTextSize(label, cv.FONT_HERSHEY_SIMPLEX, 0.5, Int32(1))
cv.rectangle(frame, cv.Point{Int32}(x0,y0), cv.Point{Int32}(x0+lsize.width, y0+lsize.height+bl), (100,255,100); thickness = Int32(-1))
cv.putText(frame, label, cv.Point{Int32}(x0, y0 + lsize.height),
cv.FONT_HERSHEY_SIMPLEX, 0.5, (0, 0, 0); thickness = Int32(1), lineType = cv.LINE_AA)
end
cv.imshow("detections", frame)
if cv.waitKey(Int32(30)) >= 0
break
end
end

@ -16,8 +16,9 @@
#include <opencv2/core/utility.hpp>
#include <opencv2/objdetect.hpp>
#include <opencv2/imgproc.hpp>
#include "opencv2/highgui.hpp"
#include "opencv2/videoio.hpp"
#include "opencv2/dnn.hpp"
using namespace cv;
using namespace std;
@ -27,40 +28,79 @@ using namespace jlcxx;
namespace jlcxx
{
template <typename T>
struct IsSmartPointerType<cv::Ptr<T>> : std::true_type
{
};
template <typename T>
struct ConstructorPointerType<cv::Ptr<T>>
{
typedef T *type;
};
template <typename T>
struct IsSmartPointerType<cv::Ptr<T>> : std::true_type
{
};
template <typename T>
struct ConstructorPointerType<cv::Ptr<T>>
{
typedef T *type;
};
template <typename T, int Val>
struct BuildParameterList<cv::Vec<T, Val>>
{
typedef ParameterList<T, std::integral_constant<int, Val>> type;
};
template <>
struct SuperType<cv::Feature2D>
{
typedef cv::Algorithm type;
};
template <>
struct SuperType<cv::SimpleBlobDetector>
{
typedef cv::Feature2D type;
};
}
template <typename T, int Val>
struct BuildParameterList<cv::Vec<T, Val>>
{
typedef ParameterList<T, std::integral_constant<int, Val>> type;
};
template <>
struct SuperType<cv::Feature2D>
{
typedef cv::Algorithm type;
};
template <>
struct SuperType<cv::SimpleBlobDetector>
{
typedef cv::Feature2D type;
};
// Needed to prevent documentation warning
template <>
struct SuperType<cv::dnn::Layer>
{
typedef cv::Algorithm type;
};
template <>
struct SuperType<cv::dnn::Model>
{
typedef cv::dnn::Net type;
};
namespace cv { namespace julia {
void initJulia(int, char**) {}
}}
template <>
struct SuperType<cv::dnn::ClassificationModel>
{
typedef cv::dnn::Model type;
};
template <>
struct SuperType<cv::dnn::KeypointsModel>
{
typedef cv::dnn::Model type;
};
template <>
struct SuperType<cv::dnn::SegmentationModel>
{
typedef cv::dnn::Model type;
};
template <>
struct SuperType<cv::dnn::DetectionModel>
{
typedef cv::dnn::Model type;
};
} // namespace jlcxx
// Needed to prevent documentation warning
namespace cv
{
namespace julia
{
void initJulia(int, char **) {}
} // namespace julia
} // namespace cv
JLCXX_MODULE cv_wrap(jlcxx::Module &mod)
{
@ -130,7 +170,11 @@ JLCXX_MODULE cv_wrap(jlcxx::Module &mod)
mod.method("jlopencv_cv_cv_imshow", [](string &winname, Mat &mat) { cv::imshow(winname, mat); ; });
mod.method("jlopencv_cv_cv_namedWindow", [](string &winname, int &flags) { cv::namedWindow(winname, flags); ; });
mod.method("jlopencv_cv_cv_waitKey", [](int &delay) { auto retval = cv::waitKey(delay); return retval; });
mod.method("jlopencv_cv_cv_getTextSize", [](string &text, int &fontFace, double &fontScale, int &thickness) {int baseLine; auto retval = cv::getTextSize(text, fontFace, fontScale, thickness, &baseLine); return make_tuple(move(retval),move(baseLine)); });
mod.method("jlopencv_cv_cv_putText", [](Mat &img, string &text, Point &org, int &fontFace, double &fontScale, Scalar &color, int &thickness, int &lineType, bool bottomLeftOrigin) { cv::putText(img, text, org, fontFace, fontScale, color, thickness, lineType, bottomLeftOrigin); return img; });
mod.method("jlopencv_cv_cv_rectangle", [](Mat &img, Point &pt1, Point &pt2, Scalar &color, int &thickness, int &lineType, int &shift) { cv::rectangle(img, pt1, pt2, color, thickness, lineType, shift); return img; });
mod.method("jlopencv_cv_cv_cvtColor", [](Mat &src, int &code, Mat &dst, int &dstCn) { cv::cvtColor(src, dst, code, dstCn); return dst; });
mod.method("jlopencv_cv_cv_equalizeHist", [](Mat &src, Mat &dst) { cv::equalizeHist(src, dst); return dst; });
mod.method("jlopencv_cv_cv_destroyAllWindows", []() { cv::destroyAllWindows(); ; });
@ -432,4 +476,151 @@ JLCXX_MODULE cv_wrap(jlcxx::Module &mod)
mod.set_const("COLOR_M_RGBA2RGBA", (int)cv::COLOR_mRGBA2RGBA);
mod.set_const("CAP_ANY", (int)cv::CAP_ANY);
mod.set_const("FONT_HERSHEY_COMPLEX", (int)cv::FONT_HERSHEY_COMPLEX);
mod.set_const("FONT_HERSHEY_COMPLEX_SMALL", (int)cv::FONT_HERSHEY_COMPLEX_SMALL);
mod.set_const("FONT_HERSHEY_DUPLEX", (int)cv::FONT_HERSHEY_DUPLEX);
mod.set_const("FONT_HERSHEY_PLAIN", (int)cv::FONT_HERSHEY_PLAIN);
mod.set_const("FONT_HERSHEY_SCRIPT_COMPLEX", (int)cv::FONT_HERSHEY_SCRIPT_COMPLEX);
mod.set_const("FONT_HERSHEY_SCRIPT_SIMPLEX", (int)cv::FONT_HERSHEY_SCRIPT_SIMPLEX);
mod.set_const("FONT_HERSHEY_SIMPLEX", (int)cv::FONT_HERSHEY_SIMPLEX);
mod.set_const("FONT_HERSHEY_TRIPLEX", (int)cv::FONT_HERSHEY_TRIPLEX);
mod.set_const("FONT_ITALIC", (int)cv::FONT_ITALIC);
// DNN Module
using namespace cv::dnn;
mod.add_type<cv::dnn::Layer>("dnn_Layer", jlcxx::julia_base_type<cv::Algorithm>());
mod.add_type<cv::dnn::Net>("dnn_Net");
mod.add_type<cv::dnn::Model>("dnn_Model", jlcxx::julia_base_type<cv::dnn::Net>());
mod.add_type<cv::dnn::ClassificationModel>("dnn_ClassificationModel", jlcxx::julia_base_type<cv::dnn::Model>());
mod.add_type<cv::dnn::KeypointsModel>("dnn_KeypointsModel", jlcxx::julia_base_type<cv::dnn::Model>());
mod.add_type<cv::dnn::SegmentationModel>("dnn_SegmentationModel", jlcxx::julia_base_type<cv::dnn::Model>());
mod.add_type<cv::dnn::DetectionModel>("dnn_DetectionModel", jlcxx::julia_base_type<cv::dnn::Model>());
mod.add_type<LayerId>("dnn_LayerId");
mod.add_type<AsyncArray>("AsyncArray");
mod.method("jlopencv_Layer_set_blobs", [](cv::Ptr<cv::dnn::Layer> cobj, const vector_Mat &v) { cobj->blobs = (vector_Mat)v; });
mod.method("jlopencv_Layer_get_blobs", [](const cv::Ptr<cv::dnn::Layer> &cobj) { return cobj->blobs; });
mod.method("jlopencv_Layer_get_name", [](const cv::Ptr<cv::dnn::Layer> &cobj) { return cobj->name; });
mod.method("jlopencv_Layer_get_type", [](const cv::Ptr<cv::dnn::Layer> &cobj) { return cobj->type; });
mod.method("jlopencv_Layer_get_preferableTarget", [](const cv::Ptr<cv::dnn::Layer> &cobj) { return cobj->preferableTarget; });
mod.method("jlopencv_cv_dnn_cv_dnn_Layer_cv_dnn_Layer_finalize", [](cv::Ptr<cv::dnn::Layer> &cobj, vector<Mat> &inputs, vector<Mat> &outputs) { cobj->finalize(inputs, outputs); return outputs; });
// mod.method("jlopencv_cv_dnn_cv_dnn_Layer_cv_dnn_Layer_run", [](cv::Ptr<cv::dnn::Layer> &cobj, vector<Mat> &inputs, vector<Mat> &internals, vector<Mat> &outputs) { cobj->run(inputs, outputs, internals); return make_tuple(move(outputs),move(internals)); });
mod.method("jlopencv_cv_dnn_cv_dnn_Layer_cv_dnn_Layer_outputNameToIndex", [](cv::Ptr<cv::dnn::Layer> &cobj, string &outputName) { auto retval = cobj->outputNameToIndex(outputName); return retval; });
mod.method("jlopencv_cv_dnn_cv_dnn_Net_cv_dnn_Net_Net", []() { return jlcxx::create<cv::dnn::Net>(); });
mod.method("jlopencv_cv_dnn_cv_dnn_Net_cv_dnn_Net_empty", [](cv::dnn::Net &cobj) { auto retval = cobj.empty(); return retval; });
mod.method("jlopencv_cv_dnn_cv_dnn_Net_cv_dnn_Net_dump", [](cv::dnn::Net &cobj) { auto retval = cobj.dump(); return retval; });
mod.method("jlopencv_cv_dnn_cv_dnn_Net_cv_dnn_Net_dumpToFile", [](cv::dnn::Net &cobj, string &path) { cobj.dumpToFile(path); ; });
mod.method("jlopencv_cv_dnn_cv_dnn_Net_cv_dnn_Net_getLayerId", [](cv::dnn::Net &cobj, string &layer) { auto retval = cobj.getLayerId(layer); return retval; });
mod.method("jlopencv_cv_dnn_cv_dnn_Net_cv_dnn_Net_getLayerNames", [](cv::dnn::Net &cobj) { auto retval = cobj.getLayerNames(); return retval; });
mod.method("jlopencv_cv_dnn_cv_dnn_Net_cv_dnn_Net_getLayer", [](cv::dnn::Net &cobj, LayerId &layerId) { auto retval = cobj.getLayer(layerId); return retval; });
mod.method("jlopencv_cv_dnn_cv_dnn_Net_cv_dnn_Net_connect", [](cv::dnn::Net &cobj, string &outPin, string &inpPin) { cobj.connect(outPin, inpPin); ; });
mod.method("jlopencv_cv_dnn_cv_dnn_Net_cv_dnn_Net_setInputsNames", [](cv::dnn::Net &cobj, vector<string> &inputBlobNames) { cobj.setInputsNames(inputBlobNames); ; });
mod.method("jlopencv_cv_dnn_cv_dnn_Net_cv_dnn_Net_setInputShape", [](cv::dnn::Net &cobj, string &inputName, MatShape &shape) { cobj.setInputShape(inputName, shape); ; });
mod.method("jlopencv_cv_dnn_cv_dnn_Net_cv_dnn_Net_forward", [](cv::dnn::Net &cobj, string &outputName) { auto retval = cobj.forward(outputName); return retval; });
mod.method("jlopencv_cv_dnn_cv_dnn_Net_cv_dnn_Net_forward", [](cv::dnn::Net &cobj, vector<Mat> &outputBlobs, string &outputName) { cobj.forward(outputBlobs, outputName); return outputBlobs; });
mod.method("jlopencv_cv_dnn_cv_dnn_Net_cv_dnn_Net_forward", [](cv::dnn::Net &cobj, vector<string> &outBlobNames, vector<Mat> &outputBlobs) { cobj.forward(outputBlobs, outBlobNames); return outputBlobs; });
mod.method("jlopencv_cv_dnn_cv_dnn_Net_cv_dnn_Net_forward", [](cv::dnn::Net &cobj, vector<string> &outBlobNames) {vector<vector<Mat>> outputBlobs; cobj.forward(outputBlobs, outBlobNames); return outputBlobs; });
mod.method("jlopencv_cv_dnn_cv_dnn_Net_cv_dnn_Net_forwardAsync", [](cv::dnn::Net &cobj, string &outputName) { auto retval = cobj.forwardAsync(outputName); return retval; });
mod.method("jlopencv_cv_dnn_cv_dnn_Net_cv_dnn_Net_setHalideScheduler", [](cv::dnn::Net &cobj, string &scheduler) { cobj.setHalideScheduler(scheduler); ; });
mod.method("jlopencv_cv_dnn_cv_dnn_Net_cv_dnn_Net_setPreferableBackend", [](cv::dnn::Net &cobj, int &backendId) { cobj.setPreferableBackend(backendId); ; });
mod.method("jlopencv_cv_dnn_cv_dnn_Net_cv_dnn_Net_setPreferableTarget", [](cv::dnn::Net &cobj, int &targetId) { cobj.setPreferableTarget(targetId); ; });
mod.method("jlopencv_cv_dnn_cv_dnn_Net_cv_dnn_Net_setInput", [](cv::dnn::Net &cobj, Mat &blob, string &name, double &scalefactor, Scalar &mean) { cobj.setInput(blob, name, scalefactor, mean); ; });
mod.method("jlopencv_cv_dnn_cv_dnn_Net_cv_dnn_Net_setParam", [](cv::dnn::Net &cobj, LayerId &layer, int &numParam, Mat &blob) { cobj.setParam(layer, numParam, blob); ; });
mod.method("jlopencv_cv_dnn_cv_dnn_Net_cv_dnn_Net_getParam", [](cv::dnn::Net &cobj, LayerId &layer, int &numParam) { auto retval = cobj.getParam(layer, numParam); return retval; });
mod.method("jlopencv_cv_dnn_cv_dnn_Net_cv_dnn_Net_getUnconnectedOutLayers", [](cv::dnn::Net &cobj) { auto retval = cobj.getUnconnectedOutLayers(); return retval; });
mod.method("jlopencv_cv_dnn_cv_dnn_Net_cv_dnn_Net_getUnconnectedOutLayersNames", [](cv::dnn::Net &cobj) { auto retval = cobj.getUnconnectedOutLayersNames(); return retval; });
mod.method("jlopencv_cv_dnn_cv_dnn_Net_cv_dnn_Net_getLayersShapes", [](cv::dnn::Net &cobj, vector<MatShape> &netInputShapes) {vector<int> layersIds;vector<vector<MatShape>> inLayersShapes;vector<vector<MatShape>> outLayersShapes; cobj.getLayersShapes(netInputShapes, layersIds, inLayersShapes, outLayersShapes); return make_tuple(move(layersIds),move(inLayersShapes),move(outLayersShapes)); });
mod.method("jlopencv_cv_dnn_cv_dnn_Net_cv_dnn_Net_getLayersShapes", [](cv::dnn::Net &cobj, MatShape &netInputShape) {vector<int> layersIds;vector<vector<MatShape>> inLayersShapes;vector<vector<MatShape>> outLayersShapes; cobj.getLayersShapes(netInputShape, layersIds, inLayersShapes, outLayersShapes); return make_tuple(move(layersIds),move(inLayersShapes),move(outLayersShapes)); });
mod.method("jlopencv_cv_dnn_cv_dnn_Net_cv_dnn_Net_getFLOPS", [](cv::dnn::Net &cobj, vector<MatShape> &netInputShapes) { auto retval = cobj.getFLOPS(netInputShapes); return retval; });
mod.method("jlopencv_cv_dnn_cv_dnn_Net_cv_dnn_Net_getFLOPS", [](cv::dnn::Net &cobj, MatShape &netInputShape) { auto retval = cobj.getFLOPS(netInputShape); return retval; });
mod.method("jlopencv_cv_dnn_cv_dnn_Net_cv_dnn_Net_getFLOPS", [](cv::dnn::Net &cobj, int &layerId, vector<MatShape> &netInputShapes) { auto retval = cobj.getFLOPS(layerId, netInputShapes); return retval; });
mod.method("jlopencv_cv_dnn_cv_dnn_Net_cv_dnn_Net_getFLOPS", [](cv::dnn::Net &cobj, int &layerId, MatShape &netInputShape) { auto retval = cobj.getFLOPS(layerId, netInputShape); return retval; });
mod.method("jlopencv_cv_dnn_cv_dnn_Net_cv_dnn_Net_getLayerTypes", [](cv::dnn::Net &cobj) {vector<string> layersTypes; cobj.getLayerTypes(layersTypes); return layersTypes; });
mod.method("jlopencv_cv_dnn_cv_dnn_Net_cv_dnn_Net_getLayersCount", [](cv::dnn::Net &cobj, string &layerType) { auto retval = cobj.getLayersCount(layerType); return retval; });
mod.method("jlopencv_cv_dnn_cv_dnn_Net_cv_dnn_Net_getMemoryConsumption", [](cv::dnn::Net &cobj, MatShape &netInputShape) {size_t weights;size_t blobs; cobj.getMemoryConsumption(netInputShape, weights, blobs); return make_tuple(move(weights),move(blobs)); });
mod.method("jlopencv_cv_dnn_cv_dnn_Net_cv_dnn_Net_getMemoryConsumption", [](cv::dnn::Net &cobj, int &layerId, vector<MatShape> &netInputShapes) {size_t weights;size_t blobs; cobj.getMemoryConsumption(layerId, netInputShapes, weights, blobs); return make_tuple(move(weights),move(blobs)); });
mod.method("jlopencv_cv_dnn_cv_dnn_Net_cv_dnn_Net_getMemoryConsumption", [](cv::dnn::Net &cobj, int &layerId, MatShape &netInputShape) {size_t weights;size_t blobs; cobj.getMemoryConsumption(layerId, netInputShape, weights, blobs); return make_tuple(move(weights),move(blobs)); });
mod.method("jlopencv_cv_dnn_cv_dnn_Net_cv_dnn_Net_enableFusion", [](cv::dnn::Net &cobj, bool &fusion) { cobj.enableFusion(fusion); ; });
mod.method("jlopencv_cv_dnn_cv_dnn_Net_cv_dnn_Net_getPerfProfile", [](cv::dnn::Net &cobj) {vector<double> timings; auto retval = cobj.getPerfProfile(timings); return make_tuple(move(retval),move(timings)); });
mod.method("jlopencv_cv_dnn_cv_dnn_Model_cv_dnn_Model_Model", [](string &model, string &config) { return jlcxx::create<cv::dnn::Model>(model, config); });
mod.method("jlopencv_cv_dnn_cv_dnn_Model_cv_dnn_Model_Model", [](Net &network) { return jlcxx::create<cv::dnn::Model>(network); });
mod.method("jlopencv_cv_dnn_cv_dnn_Model_cv_dnn_Model_setInputSize", [](cv::dnn::Model &cobj, Size &size) { auto retval = cobj.setInputSize(size); return retval; });
mod.method("jlopencv_cv_dnn_cv_dnn_Model_cv_dnn_Model_setInputSize", [](cv::dnn::Model &cobj, int &width, int &height) { auto retval = cobj.setInputSize(width, height); return retval; });
mod.method("jlopencv_cv_dnn_cv_dnn_Model_cv_dnn_Model_setInputMean", [](cv::dnn::Model &cobj, Scalar &mean) { auto retval = cobj.setInputMean(mean); return retval; });
mod.method("jlopencv_cv_dnn_cv_dnn_Model_cv_dnn_Model_setInputScale", [](cv::dnn::Model &cobj, double &scale) { auto retval = cobj.setInputScale(scale); return retval; });
mod.method("jlopencv_cv_dnn_cv_dnn_Model_cv_dnn_Model_setInputCrop", [](cv::dnn::Model &cobj, bool &crop) { auto retval = cobj.setInputCrop(crop); return retval; });
mod.method("jlopencv_cv_dnn_cv_dnn_Model_cv_dnn_Model_setInputSwapRB", [](cv::dnn::Model &cobj, bool &swapRB) { auto retval = cobj.setInputSwapRB(swapRB); return retval; });
mod.method("jlopencv_cv_dnn_cv_dnn_Model_cv_dnn_Model_setInputParams", [](cv::dnn::Model &cobj, double &scale, Size &size, Scalar &mean, bool &swapRB, bool &crop) { cobj.setInputParams(scale, size, mean, swapRB, crop); ; });
mod.method("jlopencv_cv_dnn_cv_dnn_Model_cv_dnn_Model_predict", [](cv::dnn::Model &cobj, Mat &frame, vector<Mat> &outs) { cobj.predict(frame, outs); return outs; });
mod.method("jlopencv_cv_dnn_cv_dnn_ClassificationModel_cv_dnn_ClassificationModel_ClassificationModel", [](string &model, string &config) { return jlcxx::create<cv::dnn::ClassificationModel>(model, config); });
mod.method("jlopencv_cv_dnn_cv_dnn_ClassificationModel_cv_dnn_ClassificationModel_ClassificationModel", [](Net &network) { return jlcxx::create<cv::dnn::ClassificationModel>(network); });
mod.method("jlopencv_cv_dnn_cv_dnn_ClassificationModel_cv_dnn_ClassificationModel_classify", [](cv::dnn::ClassificationModel &cobj, Mat &frame) {int classId;float conf; cobj.classify(frame, classId, conf); return make_tuple(move(classId),move(conf)); });
mod.method("jlopencv_cv_dnn_cv_dnn_KeypointsModel_cv_dnn_KeypointsModel_KeypointsModel", [](string &model, string &config) { return jlcxx::create<cv::dnn::KeypointsModel>(model, config); });
mod.method("jlopencv_cv_dnn_cv_dnn_KeypointsModel_cv_dnn_KeypointsModel_KeypointsModel", [](Net &network) { return jlcxx::create<cv::dnn::KeypointsModel>(network); });
mod.method("jlopencv_cv_dnn_cv_dnn_KeypointsModel_cv_dnn_KeypointsModel_estimate", [](cv::dnn::KeypointsModel &cobj, Mat &frame, float &thresh) { auto retval = cobj.estimate(frame, thresh); return retval; });
mod.method("jlopencv_cv_dnn_cv_dnn_SegmentationModel_cv_dnn_SegmentationModel_SegmentationModel", [](string &model, string &config) { return jlcxx::create<cv::dnn::SegmentationModel>(model, config); });
mod.method("jlopencv_cv_dnn_cv_dnn_SegmentationModel_cv_dnn_SegmentationModel_SegmentationModel", [](Net &network) { return jlcxx::create<cv::dnn::SegmentationModel>(network); });
mod.method("jlopencv_cv_dnn_cv_dnn_SegmentationModel_cv_dnn_SegmentationModel_segment", [](cv::dnn::SegmentationModel &cobj, Mat &frame, Mat &mask) { cobj.segment(frame, mask); return mask; });
mod.method("jlopencv_cv_dnn_cv_dnn_DetectionModel_cv_dnn_DetectionModel_DetectionModel", [](string &model, string &config) { return jlcxx::create<cv::dnn::DetectionModel>(model, config); });
mod.method("jlopencv_cv_dnn_cv_dnn_DetectionModel_cv_dnn_DetectionModel_DetectionModel", [](Net &network) { return jlcxx::create<cv::dnn::DetectionModel>(network); });
mod.method("jlopencv_cv_dnn_cv_dnn_DetectionModel_cv_dnn_DetectionModel_detect", [](cv::dnn::DetectionModel &cobj, Mat &frame, float &confThreshold, float &nmsThreshold) {vector<int> classIds;vector<float> confidences;vector<Rect> boxes; cobj.detect(frame, classIds, confidences, boxes, confThreshold, nmsThreshold); return make_tuple(move(classIds),move(confidences),move(boxes)); });
// Fix later int-enum auto conversion
// mod.method("jlopencv_cv_dnn_cv_dnn_getAvailableTargets", [](dnn_Backend &be) { auto retval = cv::dnn::getAvailableTargets(be); return retval; });
mod.method("jlopencv_cv_dnn_cv_dnn_Net_readFromModelOptimizer", [](string &xml, string &bin) { auto retval = cv::dnn::Net::readFromModelOptimizer(xml, bin); return retval; });
mod.method("jlopencv_cv_dnn_cv_dnn_Net_readFromModelOptimizer", [](vector<uchar> &bufferModelConfig, vector<uchar> &bufferWeights) { auto retval = cv::dnn::Net::readFromModelOptimizer(bufferModelConfig, bufferWeights); return retval; });
mod.method("jlopencv_cv_dnn_cv_dnn_readNetFromDarknet", [](string &cfgFile, string &darknetModel) { auto retval = cv::dnn::readNetFromDarknet(cfgFile, darknetModel); return retval; });
mod.method("jlopencv_cv_dnn_cv_dnn_readNetFromDarknet", [](vector<uchar> &bufferCfg, vector<uchar> &bufferModel) { auto retval = cv::dnn::readNetFromDarknet(bufferCfg, bufferModel); return retval; });
mod.method("jlopencv_cv_dnn_cv_dnn_readNetFromCaffe", [](string &prototxt, string &caffeModel) { auto retval = cv::dnn::readNetFromCaffe(prototxt, caffeModel); return retval; });
mod.method("jlopencv_cv_dnn_cv_dnn_readNetFromCaffe", [](vector<uchar> &bufferProto, vector<uchar> &bufferModel) { auto retval = cv::dnn::readNetFromCaffe(bufferProto, bufferModel); return retval; });
mod.method("jlopencv_cv_dnn_cv_dnn_readNetFromTensorflow", [](string &model, string &config) { auto retval = cv::dnn::readNetFromTensorflow(model, config); return retval; });
mod.method("jlopencv_cv_dnn_cv_dnn_readNetFromTensorflow", [](vector<uchar> &bufferModel, vector<uchar> &bufferConfig) { auto retval = cv::dnn::readNetFromTensorflow(bufferModel, bufferConfig); return retval; });
mod.method("jlopencv_cv_dnn_cv_dnn_readNetFromTorch", [](string &model, bool &isBinary, bool &evaluate) { auto retval = cv::dnn::readNetFromTorch(model, isBinary, evaluate); return retval; });
mod.method("jlopencv_cv_dnn_cv_dnn_readNet", [](string &model, string &config, string &framework) { auto retval = cv::dnn::readNet(model, config, framework); return retval; });
mod.method("jlopencv_cv_dnn_cv_dnn_readNet", [](string &framework, vector<uchar> &bufferModel, vector<uchar> &bufferConfig) { auto retval = cv::dnn::readNet(framework, bufferModel, bufferConfig); return retval; });
mod.method("jlopencv_cv_dnn_cv_dnn_readTorchBlob", [](string &filename, bool &isBinary) { auto retval = cv::dnn::readTorchBlob(filename, isBinary); return retval; });
mod.method("jlopencv_cv_dnn_cv_dnn_readNetFromModelOptimizer", [](string &xml, string &bin) { auto retval = cv::dnn::readNetFromModelOptimizer(xml, bin); return retval; });
mod.method("jlopencv_cv_dnn_cv_dnn_readNetFromModelOptimizer", [](vector<uchar> &bufferModelConfig, vector<uchar> &bufferWeights) { auto retval = cv::dnn::readNetFromModelOptimizer(bufferModelConfig, bufferWeights); return retval; });
mod.method("jlopencv_cv_dnn_cv_dnn_readNetFromONNX", [](string &onnxFile) { auto retval = cv::dnn::readNetFromONNX(onnxFile); return retval; });
mod.method("jlopencv_cv_dnn_cv_dnn_readNetFromONNX", [](vector<uchar> &buffer) { auto retval = cv::dnn::readNetFromONNX(buffer); return retval; });
mod.method("jlopencv_cv_dnn_cv_dnn_readTensorFromONNX", [](string &path) { auto retval = cv::dnn::readTensorFromONNX(path); return retval; });
mod.method("jlopencv_cv_dnn_cv_dnn_blobFromImage", [](Mat &image, double &scalefactor, Size &size, Scalar &mean, bool &swapRB, bool &crop, int &ddepth) { auto retval = cv::dnn::blobFromImage(image, scalefactor, size, mean, swapRB, crop, ddepth); return retval; });
mod.method("jlopencv_cv_dnn_cv_dnn_blobFromImages", [](vector<Mat> &images, double &scalefactor, Size &size, Scalar &mean, bool &swapRB, bool &crop, int &ddepth) { auto retval = cv::dnn::blobFromImages(images, scalefactor, size, mean, swapRB, crop, ddepth); return retval; });
mod.method("jlopencv_cv_dnn_cv_dnn_imagesFromBlob", [](Mat &blob_, vector<Mat> &images_) { cv::dnn::imagesFromBlob(blob_, images_); return images_; });
mod.method("jlopencv_cv_dnn_cv_dnn_shrinkCaffeModel", [](string &src, string &dst, vector<string> &layersTypes) { cv::dnn::shrinkCaffeModel(src, dst, layersTypes); ; });
mod.method("jlopencv_cv_dnn_cv_dnn_writeTextGraph", [](string &model, string &output) { cv::dnn::writeTextGraph(model, output); ; });
mod.method("jlopencv_cv_dnn_cv_dnn_NMSBoxes", [](vector<Rect2d> &bboxes, vector<float> &scores, float &score_threshold, float &nms_threshold, float &eta, int &top_k) {vector<int> indices; cv::dnn::NMSBoxes(bboxes, scores, score_threshold, nms_threshold, indices, eta, top_k); return indices; });
mod.method("jlopencv_cv_dnn_cv_dnn_NMSBoxes", [](vector<RotatedRect> &bboxes, vector<float> &scores, float &score_threshold, float &nms_threshold, float &eta, int &top_k) {vector<int> indices; cv::dnn::NMSBoxes(bboxes, scores, score_threshold, nms_threshold, indices, eta, top_k); return indices; });
mod.set_const("DNN_BACKEND_CUDA", (int)cv::dnn::DNN_BACKEND_CUDA);
mod.set_const("DNN_BACKEND_DEFAULT", (int)cv::dnn::DNN_BACKEND_DEFAULT);
mod.set_const("DNN_BACKEND_HALIDE", (int)cv::dnn::DNN_BACKEND_HALIDE);
mod.set_const("DNN_BACKEND_INFERENCE_ENGINE", (int)cv::dnn::DNN_BACKEND_INFERENCE_ENGINE);
mod.set_const("DNN_BACKEND_OPENCV", (int)cv::dnn::DNN_BACKEND_OPENCV);
mod.set_const("DNN_BACKEND_VKCOM", (int)cv::dnn::DNN_BACKEND_VKCOM);
mod.set_const("DNN_TARGET_CPU", (int)cv::dnn::DNN_TARGET_CPU);
mod.set_const("DNN_TARGET_CUDA", (int)cv::dnn::DNN_TARGET_CUDA);
mod.set_const("DNN_TARGET_CUDA_FP16", (int)cv::dnn::DNN_TARGET_CUDA_FP16);
mod.set_const("DNN_TARGET_FPGA", (int)cv::dnn::DNN_TARGET_FPGA);
mod.set_const("DNN_TARGET_MYRIAD", (int)cv::dnn::DNN_TARGET_MYRIAD);
mod.set_const("DNN_TARGET_OPENCL", (int)cv::dnn::DNN_TARGET_OPENCL);
mod.set_const("DNN_TARGET_OPENCL_FP16", (int)cv::dnn::DNN_TARGET_OPENCL_FP16);
mod.set_const("DNN_TARGET_VULKAN", (int)cv::dnn::DNN_TARGET_VULKAN);
// Hack for more complex default parameters
mod.method("stdggvectoriStringkOP", [](){return std::vector<String>();});
mod.method("stdggvectoriucharkOP", [](){return std::vector<uchar>();});
mod.method("SizeOP", [](){return Size();});
}

@ -50,6 +50,12 @@ typedef cv::flann::IndexParams flann_IndexParams;
typedef cv::flann::SearchParams flann_SearchParams;
#endif
#ifdef HAVE_OPENCV_DNN
typedef cv::dnn::DictValue LayerId;
typedef cv::dnn::Backend dnn_Backend;
#endif
using namespace cv;
using namespace std;
using namespace jlcxx;
@ -86,4 +92,6 @@ struct force_enum_int{
using Type = typename force_enum<T, std::is_enum<T>::value>::Type;
};
typedef std::vector<Mat> vector_Mat;
#include "jlcv2_types.hpp"

@ -5,10 +5,12 @@ file(REMOVE ${JULIA_TEST_PROXY})
# call the python executable to generate the julia gateways
add_custom_command(
OUTPUT ${JULIA_TEST_PROXY}
COMMAND ${CMAKE_COMMAND} -E copy_if_different ${CMAKE_CURRENT_SOURCE_DIR}/testsuite.jl ${CMAKE_CURRENT_BINARY_DIR}
COMMAND ${CMAKE_COMMAND} -E copy_if_different ${CMAKE_CURRENT_SOURCE_DIR}/test_feature2d.jl ${CMAKE_CURRENT_BINARY_DIR}
COMMAND ${CMAKE_COMMAND} -E copy_if_different ${CMAKE_CURRENT_SOURCE_DIR}/test_objdetect.jl ${CMAKE_CURRENT_BINARY_DIR}
COMMAND ${CMAKE_COMMAND} -E copy_if_different ${CMAKE_CURRENT_SOURCE_DIR}/test_imgproc.jl ${CMAKE_CURRENT_BINARY_DIR}
COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_SOURCE_DIR}/testsuite.jl ${CMAKE_CURRENT_BINARY_DIR}
COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_SOURCE_DIR}/test_feature2d.jl ${CMAKE_CURRENT_BINARY_DIR}
COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_SOURCE_DIR}/test_objdetect.jl ${CMAKE_CURRENT_BINARY_DIR}
COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_SOURCE_DIR}/test_imgproc.jl ${CMAKE_CURRENT_BINARY_DIR}
COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_SOURCE_DIR}/test_mat.jl ${CMAKE_CURRENT_BINARY_DIR}
COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_SOURCE_DIR}/test_dnn.jl ${CMAKE_CURRENT_BINARY_DIR}
COMMAND ${CMAKE_COMMAND} -E touch ${JULIA_TEST_PROXY}
COMMENT "Building Julia tests"
)

@ -0,0 +1,33 @@
function IOU(boxA, boxB)
xA = max(boxA[1], boxB[1])
yA = max(boxA[2], boxB[2])
xB = min(boxA[3], boxB[3])
yB = min(boxA[4], boxB[4])
interArea = max(0, xB - xA + 1) * max(0, yB - yA + 1)
boxAArea = (boxA[3] - boxA[1] + 1) * (boxA[4] - boxA[2] + 1)
boxBArea = (boxB[3] - boxB[1] + 1) * (boxB[4] - boxB[2] + 1)
iou = interArea / float(boxAArea + boxBArea - interArea)
return iou
end
const cv = OpenCV
net = cv.dnn_DetectionModel(joinpath(ENV["OPENCV_TEST_DATA_PATH"], "dnn", "opencv_face_detector.pbtxt"),joinpath(ENV["OPENCV_TEST_DATA_PATH"], "dnn", "opencv_face_detector_uint8.pb"))
size0 = Int32(300)
cv.setPreferableTarget(net, cv.DNN_TARGET_CPU)
cv.setInputMean(net, (104, 177, 123))
cv.setInputScale(net, 1.)
cv.setInputSize(net, size0, size0)
img = OpenCV.imread(joinpath(test_dir, "cascadeandhog", "images", "mona-lisa.png"))
classIds, confidences, boxes = cv.detect(net, img, confThreshold=Float32(0.5))
box = (boxes[1].x, boxes[1].y, boxes[1].x+boxes[1].width, boxes[1].y+boxes[1].height)
expected_rect = (185,101,129+185,169+101)
@test IOU(box, expected_rect) > 0.8
print("dnn test passed\n")

@ -0,0 +1,118 @@
# This file is adapted from test/abstractarray.jl from Julia.
# This file is a part of Julia. License is MIT: https://julialang.org/license
A_abs = rand(5,4,3)
A = OpenCV.Mat(A_abs)
@testset "Bounds checking" begin
@test checkbounds(Bool, A, 1, 1, 1) == true
@test checkbounds(Bool, A, 5, 4, 3) == true
@test checkbounds(Bool, A, 0, 1, 1) == false
@test checkbounds(Bool, A, 1, 0, 1) == false
@test checkbounds(Bool, A, 1, 1, 0) == false
@test checkbounds(Bool, A, 6, 4, 3) == false
@test checkbounds(Bool, A, 5, 5, 3) == false
@test checkbounds(Bool, A, 5, 4, 4) == false
@test checkbounds(Bool, A, 1) == true # linear indexing
@test checkbounds(Bool, A, 60) == true
@test checkbounds(Bool, A, 61) == false
@test checkbounds(Bool, A, 2, 2, 2, 1) == true # extra indices
@test checkbounds(Bool, A, 2, 2, 2, 2) == false
@test checkbounds(Bool, A, 1, 1) == false
@test checkbounds(Bool, A, 1, 12) == false
@test checkbounds(Bool, A, 5, 12) == false
@test checkbounds(Bool, A, 1, 13) == false
@test checkbounds(Bool, A, 6, 12) == false
end
@testset "single CartesianIndex" begin
@test checkbounds(Bool, A, CartesianIndex((1, 1, 1))) == true
@test checkbounds(Bool, A, CartesianIndex((5, 4, 3))) == true
@test checkbounds(Bool, A, CartesianIndex((0, 1, 1))) == false
@test checkbounds(Bool, A, CartesianIndex((1, 0, 1))) == false
@test checkbounds(Bool, A, CartesianIndex((1, 1, 0))) == false
@test checkbounds(Bool, A, CartesianIndex((6, 4, 3))) == false
@test checkbounds(Bool, A, CartesianIndex((5, 5, 3))) == false
@test checkbounds(Bool, A, CartesianIndex((5, 4, 4))) == false
@test checkbounds(Bool, A, CartesianIndex((1,))) == false
@test checkbounds(Bool, A, CartesianIndex((60,))) == false
@test checkbounds(Bool, A, CartesianIndex((61,))) == false
@test checkbounds(Bool, A, CartesianIndex((2, 2, 2, 1,))) == true
@test checkbounds(Bool, A, CartesianIndex((2, 2, 2, 2,))) == false
@test checkbounds(Bool, A, CartesianIndex((1, 1,))) == false
@test checkbounds(Bool, A, CartesianIndex((1, 12,))) == false
@test checkbounds(Bool, A, CartesianIndex((5, 12,))) == false
@test checkbounds(Bool, A, CartesianIndex((1, 13,))) == false
@test checkbounds(Bool, A, CartesianIndex((6, 12,))) == false
end
@testset "mix of CartesianIndex and Int" begin
@test checkbounds(Bool, A, CartesianIndex((1,)), 1, CartesianIndex((1,))) == true
@test checkbounds(Bool, A, CartesianIndex((5, 4)), 3) == true
@test checkbounds(Bool, A, CartesianIndex((0, 1)), 1) == false
@test checkbounds(Bool, A, 1, CartesianIndex((0, 1))) == false
@test checkbounds(Bool, A, 1, 1, CartesianIndex((0,))) == false
@test checkbounds(Bool, A, 6, CartesianIndex((4, 3))) == false
@test checkbounds(Bool, A, 5, CartesianIndex((5,)), 3) == false
@test checkbounds(Bool, A, CartesianIndex((5,)), CartesianIndex((4,)), CartesianIndex((4,))) == false
end
@testset "vector indices" begin
@test checkbounds(Bool, A, 1:5, 1:4, 1:3) == true
@test checkbounds(Bool, A, 0:5, 1:4, 1:3) == false
@test checkbounds(Bool, A, 1:5, 0:4, 1:3) == false
@test checkbounds(Bool, A, 1:5, 1:4, 0:3) == false
@test checkbounds(Bool, A, 1:6, 1:4, 1:3) == false
@test checkbounds(Bool, A, 1:5, 1:5, 1:3) == false
@test checkbounds(Bool, A, 1:5, 1:4, 1:4) == false
@test checkbounds(Bool, A, 1:60) == true
@test checkbounds(Bool, A, 1:61) == false
@test checkbounds(Bool, A, 2, 2, 2, 1:1) == true # extra indices
@test checkbounds(Bool, A, 2, 2, 2, 1:2) == false
@test checkbounds(Bool, A, 1:5, 1:4) == false
@test checkbounds(Bool, A, 1:5, 1:12) == false
@test checkbounds(Bool, A, 1:5, 1:13) == false
@test checkbounds(Bool, A, 1:6, 1:12) == false
end
@testset "logical" begin
@test checkbounds(Bool, A, trues(5), trues(4), trues(3)) == true
@test checkbounds(Bool, A, trues(6), trues(4), trues(3)) == false
@test checkbounds(Bool, A, trues(5), trues(5), trues(3)) == false
@test checkbounds(Bool, A, trues(5), trues(4), trues(4)) == false
@test checkbounds(Bool, A, trues(60)) == true
@test checkbounds(Bool, A, trues(61)) == false
@test checkbounds(Bool, A, 2, 2, 2, trues(1)) == true # extra indices
@test checkbounds(Bool, A, 2, 2, 2, trues(2)) == false
@test checkbounds(Bool, A, trues(5), trues(12)) == false
@test checkbounds(Bool, A, trues(5), trues(13)) == false
@test checkbounds(Bool, A, trues(6), trues(12)) == false
@test checkbounds(Bool, A, trues(5, 4, 3)) == true
@test checkbounds(Bool, A, trues(5, 4, 2)) == false
@test checkbounds(Bool, A, trues(5, 12)) == false
@test checkbounds(Bool, A, trues(1, 5), trues(1, 4, 1), trues(1, 1, 3)) == false
@test checkbounds(Bool, A, trues(1, 5), trues(1, 4, 1), trues(1, 1, 2)) == false
@test checkbounds(Bool, A, trues(1, 5), trues(1, 5, 1), trues(1, 1, 3)) == false
@test checkbounds(Bool, A, trues(1, 5), :, 2) == false
end
@testset "array of CartesianIndex" begin
@test checkbounds(Bool, A, [CartesianIndex((1, 1, 1))]) == true
@test checkbounds(Bool, A, [CartesianIndex((5, 4, 3))]) == true
@test checkbounds(Bool, A, [CartesianIndex((0, 1, 1))]) == false
@test checkbounds(Bool, A, [CartesianIndex((1, 0, 1))]) == false
@test checkbounds(Bool, A, [CartesianIndex((1, 1, 0))]) == false
@test checkbounds(Bool, A, [CartesianIndex((6, 4, 3))]) == false
@test checkbounds(Bool, A, [CartesianIndex((5, 5, 3))]) == false
@test checkbounds(Bool, A, [CartesianIndex((5, 4, 4))]) == false
@test checkbounds(Bool, A, [CartesianIndex((1, 1))], 1) == true
@test checkbounds(Bool, A, [CartesianIndex((5, 4))], 3) == true
@test checkbounds(Bool, A, [CartesianIndex((0, 1))], 1) == false
@test checkbounds(Bool, A, [CartesianIndex((1, 0))], 1) == false
@test checkbounds(Bool, A, [CartesianIndex((1, 1))], 0) == false
@test checkbounds(Bool, A, [CartesianIndex((6, 4))], 3) == false
@test checkbounds(Bool, A, [CartesianIndex((5, 5))], 3) == false
@test checkbounds(Bool, A, [CartesianIndex((5, 4))], 4) == false
end
println("OpenCV.Mat tests passed")

@ -6,8 +6,10 @@ using Test
test_dir = joinpath(ENV["OPENCV_TEST_DATA_PATH"], "cv")
include("test_mat.jl")
include("test_feature2d.jl")
include("test_imgproc.jl")
include("test_objdetect.jl")
include("test_dnn.jl")
exit(0)

Loading…
Cancel
Save