Skip to content
Projects
Groups
Snippets
Help
Loading...
Sign in / Register
Toggle navigation
O
opencv
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Packages
Packages
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
submodule
opencv
Commits
8b5f061d
Commit
8b5f061d
authored
6 years ago
by
Dmitry Kurtaev
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Replace std::vector<char> to std::vector<uchar> for Java bindings of dnn importers
parent
d57e5406
Hide whitespace changes
Inline
Side-by-side
Showing
6 changed files
with
82 additions
and
36 deletions
+82
-36
dnn.hpp
modules/dnn/include/opencv2/dnn/dnn.hpp
+8
-8
DnnTensorFlowTest.java
modules/dnn/misc/java/test/DnnTensorFlowTest.java
+54
-17
caffe_importer.cpp
modules/dnn/src/caffe/caffe_importer.cpp
+6
-3
darknet_importer.cpp
modules/dnn/src/darknet/darknet_importer.cpp
+6
-3
dnn.cpp
modules/dnn/src/dnn.cpp
+2
-2
tf_importer.cpp
modules/dnn/src/tensorflow/tf_importer.cpp
+6
-3
No files found.
modules/dnn/include/opencv2/dnn/dnn.hpp
View file @
8b5f061d
...
...
@@ -649,8 +649,8 @@ CV__DNN_EXPERIMENTAL_NS_BEGIN
* @param bufferModel A buffer contains a content of .weights file with learned network.
* @returns Net object.
*/
CV_EXPORTS_W
Net
readNetFromDarknet
(
const
std
::
vector
<
char
>&
bufferCfg
,
const
std
::
vector
<
char
>&
bufferModel
=
std
::
vector
<
char
>
());
CV_EXPORTS_W
Net
readNetFromDarknet
(
const
std
::
vector
<
u
char
>&
bufferCfg
,
const
std
::
vector
<
uchar
>&
bufferModel
=
std
::
vector
<
u
char
>
());
/** @brief Reads a network model stored in <a href="https://pjreddie.com/darknet/">Darknet</a> model files.
* @param bufferCfg A buffer contains a content of .cfg file with text description of the network architecture.
...
...
@@ -674,8 +674,8 @@ CV__DNN_EXPERIMENTAL_NS_BEGIN
* @param bufferModel buffer containing the content of the .caffemodel file
* @returns Net object.
*/
CV_EXPORTS_W
Net
readNetFromCaffe
(
const
std
::
vector
<
char
>&
bufferProto
,
const
std
::
vector
<
char
>&
bufferModel
=
std
::
vector
<
char
>
());
CV_EXPORTS_W
Net
readNetFromCaffe
(
const
std
::
vector
<
u
char
>&
bufferProto
,
const
std
::
vector
<
uchar
>&
bufferModel
=
std
::
vector
<
u
char
>
());
/** @brief Reads a network model stored in Caffe model in memory.
* @details This is an overloaded member function, provided for convenience.
...
...
@@ -703,8 +703,8 @@ CV__DNN_EXPERIMENTAL_NS_BEGIN
* @param bufferConfig buffer containing the content of the pbtxt file
* @returns Net object.
*/
CV_EXPORTS_W
Net
readNetFromTensorflow
(
const
std
::
vector
<
char
>&
bufferModel
,
const
std
::
vector
<
char
>&
bufferConfig
=
std
::
vector
<
char
>
());
CV_EXPORTS_W
Net
readNetFromTensorflow
(
const
std
::
vector
<
u
char
>&
bufferModel
,
const
std
::
vector
<
uchar
>&
bufferConfig
=
std
::
vector
<
u
char
>
());
/** @brief Reads a network model stored in <a href="https://www.tensorflow.org/">TensorFlow</a> framework's format.
* @details This is an overloaded member function, provided for convenience.
...
...
@@ -778,8 +778,8 @@ CV__DNN_EXPERIMENTAL_NS_BEGIN
* @param[in] bufferConfig A buffer with a content of text file contains network configuration.
* @returns Net object.
*/
CV_EXPORTS_W
Net
readNet
(
const
String
&
framework
,
const
std
::
vector
<
char
>&
bufferModel
,
const
std
::
vector
<
char
>&
bufferConfig
=
std
::
vector
<
char
>
());
CV_EXPORTS_W
Net
readNet
(
const
String
&
framework
,
const
std
::
vector
<
u
char
>&
bufferModel
,
const
std
::
vector
<
uchar
>&
bufferConfig
=
std
::
vector
<
u
char
>
());
/** @brief Loads blob which was serialized as torch.Tensor object of Torch7 framework.
* @warning This function has the same limitations as readNetFromTorch().
...
...
This diff is collapsed.
Click to expand it.
modules/dnn/misc/java/test/DnnTensorFlowTest.java
View file @
8b5f061d
package
org
.
opencv
.
test
.
dnn
;
import
java.io.File
;
import
java.io.FileInputStream
;
import
java.io.IOException
;
import
java.util.ArrayList
;
import
java.util.List
;
import
org.opencv.core.Core
;
import
org.opencv.core.Mat
;
import
org.opencv.core.MatOfFloat
;
import
org.opencv.core.MatOfByte
;
import
org.opencv.core.Scalar
;
import
org.opencv.core.Size
;
import
org.opencv.dnn.DictValue
;
...
...
@@ -26,6 +30,15 @@ public class DnnTensorFlowTest extends OpenCVTestCase {
Net
net
;
private
static
void
normAssert
(
Mat
ref
,
Mat
test
)
{
final
double
l1
=
1
e
-
5
;
final
double
lInf
=
1
e
-
4
;
double
normL1
=
Core
.
norm
(
ref
,
test
,
Core
.
NORM_L1
)
/
ref
.
total
();
double
normLInf
=
Core
.
norm
(
ref
,
test
,
Core
.
NORM_INF
)
/
ref
.
total
();
assertTrue
(
normL1
<
l1
);
assertTrue
(
normLInf
<
lInf
);
}
@Override
protected
void
setUp
()
throws
Exception
{
super
.
setUp
();
...
...
@@ -46,7 +59,7 @@ public class DnnTensorFlowTest extends OpenCVTestCase {
File
testDataPath
=
new
File
(
envTestDataPath
);
File
f
=
new
File
(
testDataPath
,
"dnn/
space_shuttle.jp
g"
);
File
f
=
new
File
(
testDataPath
,
"dnn/
grace_hopper_227.pn
g"
);
sourceImageFile
=
f
.
toString
();
if
(!
f
.
exists
())
throw
new
Exception
(
"Test image is missing: "
+
sourceImageFile
);
...
...
@@ -77,31 +90,55 @@ public class DnnTensorFlowTest extends OpenCVTestCase {
}
public
void
testTestNetForward
()
{
Mat
rawImage
=
Imgcodecs
.
imread
(
sourceImageFile
);
assertNotNull
(
"Loading image from file failed!"
,
rawI
mage
);
public
void
checkInceptionNet
(
Net
net
)
{
Mat
image
=
Imgcodecs
.
imread
(
sourceImageFile
);
assertNotNull
(
"Loading image from file failed!"
,
i
mage
);
Mat
image
=
new
Mat
();
Imgproc
.
resize
(
rawImage
,
image
,
new
Size
(
224
,
224
));
Mat
inputBlob
=
Dnn
.
blobFromImage
(
image
);
Mat
inputBlob
=
Dnn
.
blobFromImage
(
image
,
1.0
,
new
Size
(
224
,
224
),
new
Scalar
(
0
),
true
,
true
);
assertNotNull
(
"Converting image to blob failed!"
,
inputBlob
);
Mat
inputBlobP
=
new
Mat
();
Core
.
subtract
(
inputBlob
,
new
Scalar
(
117.0
),
inputBlobP
);
net
.
setInput
(
inputBlobP
,
"input"
);
Mat
result
=
net
.
forward
();
net
.
setInput
(
inputBlob
,
"input"
);
Mat
result
=
new
Mat
();
try
{
net
.
setPreferableBackend
(
Dnn
.
DNN_BACKEND_OPENCV
);
result
=
net
.
forward
(
"softmax2"
);
}
catch
(
Exception
e
)
{
fail
(
"DNN forward failed: "
+
e
.
getMessage
());
}
assertNotNull
(
"Net returned no result!"
,
result
);
Core
.
MinMaxLocResult
minmax
=
Core
.
minMaxLoc
(
result
.
reshape
(
1
,
1
));
result
=
result
.
reshape
(
1
,
1
);
Core
.
MinMaxLocResult
minmax
=
Core
.
minMaxLoc
(
result
);
assertEquals
(
"Wrong prediction"
,
(
int
)
minmax
.
maxLoc
.
x
,
866
);
Mat
top5RefScores
=
new
MatOfFloat
(
new
float
[]
{
0.63032645f
,
0.2561979f
,
0.032181446f
,
0.015721032f
,
0.014785315f
}).
reshape
(
1
,
1
);
assertTrue
(
"No image recognized!"
,
minmax
.
maxVal
>
0.9
);
Core
.
sort
(
result
,
result
,
Core
.
SORT_DESCENDING
);
normAssert
(
result
.
colRange
(
0
,
5
),
top5RefScores
);
}
public
void
testTestNetForward
()
{
checkInceptionNet
(
net
);
}
public
void
testReadFromBuffer
()
{
File
modelFile
=
new
File
(
modelFileName
);
byte
[]
modelBuffer
=
new
byte
[
(
int
)
modelFile
.
length
()
];
try
{
FileInputStream
fis
=
new
FileInputStream
(
modelFile
);
fis
.
read
(
modelBuffer
);
fis
.
close
();
}
catch
(
IOException
e
)
{
fail
(
"Failed to read a model: "
+
e
.
getMessage
());
}
net
=
Dnn
.
readNetFromTensorflow
(
new
MatOfByte
(
modelBuffer
));
checkInceptionNet
(
net
);
}
}
This diff is collapsed.
Click to expand it.
modules/dnn/src/caffe/caffe_importer.cpp
View file @
8b5f061d
...
...
@@ -453,10 +453,13 @@ Net readNetFromCaffe(const char *bufferProto, size_t lenProto,
return
net
;
}
Net
readNetFromCaffe
(
const
std
::
vector
<
char
>&
bufferProto
,
const
std
::
vector
<
char
>&
bufferModel
)
Net
readNetFromCaffe
(
const
std
::
vector
<
uchar
>&
bufferProto
,
const
std
::
vector
<
u
char
>&
bufferModel
)
{
return
readNetFromCaffe
(
&
bufferProto
[
0
],
bufferProto
.
size
(),
bufferModel
.
empty
()
?
NULL
:
&
bufferModel
[
0
],
bufferModel
.
size
());
const
char
*
bufferProtoPtr
=
reinterpret_cast
<
const
char
*>
(
&
bufferProto
[
0
]);
const
char
*
bufferModelPtr
=
bufferModel
.
empty
()
?
NULL
:
reinterpret_cast
<
const
char
*>
(
&
bufferModel
[
0
]);
return
readNetFromCaffe
(
bufferProtoPtr
,
bufferProto
.
size
(),
bufferModelPtr
,
bufferModel
.
size
());
}
#endif //HAVE_PROTOBUF
...
...
This diff is collapsed.
Click to expand it.
modules/dnn/src/darknet/darknet_importer.cpp
View file @
8b5f061d
...
...
@@ -242,10 +242,13 @@ Net readNetFromDarknet(const char *bufferCfg, size_t lenCfg, const char *bufferM
return
readNetFromDarknet
(
cfgStream
);
}
Net
readNetFromDarknet
(
const
std
::
vector
<
char
>&
bufferCfg
,
const
std
::
vector
<
char
>&
bufferModel
)
Net
readNetFromDarknet
(
const
std
::
vector
<
uchar
>&
bufferCfg
,
const
std
::
vector
<
u
char
>&
bufferModel
)
{
return
readNetFromDarknet
(
&
bufferCfg
[
0
],
bufferCfg
.
size
(),
bufferModel
.
empty
()
?
NULL
:
&
bufferModel
[
0
],
bufferModel
.
size
());
const
char
*
bufferCfgPtr
=
reinterpret_cast
<
const
char
*>
(
&
bufferCfg
[
0
]);
const
char
*
bufferModelPtr
=
bufferModel
.
empty
()
?
NULL
:
reinterpret_cast
<
const
char
*>
(
&
bufferModel
[
0
]);
return
readNetFromDarknet
(
bufferCfgPtr
,
bufferCfg
.
size
(),
bufferModelPtr
,
bufferModel
.
size
());
}
CV__DNN_EXPERIMENTAL_NS_END
...
...
This diff is collapsed.
Click to expand it.
modules/dnn/src/dnn.cpp
View file @
8b5f061d
...
...
@@ -3047,8 +3047,8 @@ Net readNet(const String& _model, const String& _config, const String& _framewor
model
+
(
config
.
empty
()
?
""
:
", "
+
config
));
}
Net
readNet
(
const
String
&
_framework
,
const
std
::
vector
<
char
>&
bufferModel
,
const
std
::
vector
<
char
>&
bufferConfig
)
Net
readNet
(
const
String
&
_framework
,
const
std
::
vector
<
u
char
>&
bufferModel
,
const
std
::
vector
<
u
char
>&
bufferConfig
)
{
String
framework
=
_framework
.
toLowerCase
();
if
(
framework
==
"caffe"
)
...
...
This diff is collapsed.
Click to expand it.
modules/dnn/src/tensorflow/tf_importer.cpp
View file @
8b5f061d
...
...
@@ -1856,10 +1856,13 @@ Net readNetFromTensorflow(const char* bufferModel, size_t lenModel,
return
net
;
}
Net
readNetFromTensorflow
(
const
std
::
vector
<
char
>&
bufferModel
,
const
std
::
vector
<
char
>&
bufferConfig
)
Net
readNetFromTensorflow
(
const
std
::
vector
<
uchar
>&
bufferModel
,
const
std
::
vector
<
u
char
>&
bufferConfig
)
{
return
readNetFromCaffe
(
&
bufferModel
[
0
],
bufferModel
.
size
(),
bufferConfig
.
empty
()
?
NULL
:
&
bufferConfig
[
0
],
bufferConfig
.
size
());
const
char
*
bufferModelPtr
=
reinterpret_cast
<
const
char
*>
(
&
bufferModel
[
0
]);
const
char
*
bufferConfigPtr
=
bufferConfig
.
empty
()
?
NULL
:
reinterpret_cast
<
const
char
*>
(
&
bufferConfig
[
0
]);
return
readNetFromTensorflow
(
bufferModelPtr
,
bufferModel
.
size
(),
bufferConfigPtr
,
bufferConfig
.
size
());
}
CV__DNN_EXPERIMENTAL_NS_END
...
...
This diff is collapsed.
Click to expand it.
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment