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
Jul 11, 2018
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
Show 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
...
@@ -649,8 +649,8 @@ CV__DNN_EXPERIMENTAL_NS_BEGIN
* @param bufferModel A buffer contains a content of .weights file with learned network.
* @param bufferModel A buffer contains a content of .weights file with learned network.
* @returns Net object.
* @returns Net object.
*/
*/
CV_EXPORTS_W
Net
readNetFromDarknet
(
const
std
::
vector
<
char
>&
bufferCfg
,
CV_EXPORTS_W
Net
readNetFromDarknet
(
const
std
::
vector
<
u
char
>&
bufferCfg
,
const
std
::
vector
<
char
>&
bufferModel
=
std
::
vector
<
char
>
());
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.
/** @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.
* @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
...
@@ -674,8 +674,8 @@ CV__DNN_EXPERIMENTAL_NS_BEGIN
* @param bufferModel buffer containing the content of the .caffemodel file
* @param bufferModel buffer containing the content of the .caffemodel file
* @returns Net object.
* @returns Net object.
*/
*/
CV_EXPORTS_W
Net
readNetFromCaffe
(
const
std
::
vector
<
char
>&
bufferProto
,
CV_EXPORTS_W
Net
readNetFromCaffe
(
const
std
::
vector
<
u
char
>&
bufferProto
,
const
std
::
vector
<
char
>&
bufferModel
=
std
::
vector
<
char
>
());
const
std
::
vector
<
uchar
>&
bufferModel
=
std
::
vector
<
u
char
>
());
/** @brief Reads a network model stored in Caffe model in memory.
/** @brief Reads a network model stored in Caffe model in memory.
* @details This is an overloaded member function, provided for convenience.
* @details This is an overloaded member function, provided for convenience.
...
@@ -703,8 +703,8 @@ CV__DNN_EXPERIMENTAL_NS_BEGIN
...
@@ -703,8 +703,8 @@ CV__DNN_EXPERIMENTAL_NS_BEGIN
* @param bufferConfig buffer containing the content of the pbtxt file
* @param bufferConfig buffer containing the content of the pbtxt file
* @returns Net object.
* @returns Net object.
*/
*/
CV_EXPORTS_W
Net
readNetFromTensorflow
(
const
std
::
vector
<
char
>&
bufferModel
,
CV_EXPORTS_W
Net
readNetFromTensorflow
(
const
std
::
vector
<
u
char
>&
bufferModel
,
const
std
::
vector
<
char
>&
bufferConfig
=
std
::
vector
<
char
>
());
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.
/** @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.
* @details This is an overloaded member function, provided for convenience.
...
@@ -778,8 +778,8 @@ CV__DNN_EXPERIMENTAL_NS_BEGIN
...
@@ -778,8 +778,8 @@ CV__DNN_EXPERIMENTAL_NS_BEGIN
* @param[in] bufferConfig A buffer with a content of text file contains network configuration.
* @param[in] bufferConfig A buffer with a content of text file contains network configuration.
* @returns Net object.
* @returns Net object.
*/
*/
CV_EXPORTS_W
Net
readNet
(
const
String
&
framework
,
const
std
::
vector
<
char
>&
bufferModel
,
CV_EXPORTS_W
Net
readNet
(
const
String
&
framework
,
const
std
::
vector
<
u
char
>&
bufferModel
,
const
std
::
vector
<
char
>&
bufferConfig
=
std
::
vector
<
char
>
());
const
std
::
vector
<
uchar
>&
bufferConfig
=
std
::
vector
<
u
char
>
());
/** @brief Loads blob which was serialized as torch.Tensor object of Torch7 framework.
/** @brief Loads blob which was serialized as torch.Tensor object of Torch7 framework.
* @warning This function has the same limitations as readNetFromTorch().
* @warning This function has the same limitations as readNetFromTorch().
...
...
modules/dnn/misc/java/test/DnnTensorFlowTest.java
View file @
8b5f061d
package
org
.
opencv
.
test
.
dnn
;
package
org
.
opencv
.
test
.
dnn
;
import
java.io.File
;
import
java.io.File
;
import
java.io.FileInputStream
;
import
java.io.IOException
;
import
java.util.ArrayList
;
import
java.util.ArrayList
;
import
java.util.List
;
import
java.util.List
;
import
org.opencv.core.Core
;
import
org.opencv.core.Core
;
import
org.opencv.core.Mat
;
import
org.opencv.core.Mat
;
import
org.opencv.core.MatOfFloat
;
import
org.opencv.core.MatOfByte
;
import
org.opencv.core.Scalar
;
import
org.opencv.core.Scalar
;
import
org.opencv.core.Size
;
import
org.opencv.core.Size
;
import
org.opencv.dnn.DictValue
;
import
org.opencv.dnn.DictValue
;
...
@@ -26,6 +30,15 @@ public class DnnTensorFlowTest extends OpenCVTestCase {
...
@@ -26,6 +30,15 @@ public class DnnTensorFlowTest extends OpenCVTestCase {
Net
net
;
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
@Override
protected
void
setUp
()
throws
Exception
{
protected
void
setUp
()
throws
Exception
{
super
.
setUp
();
super
.
setUp
();
...
@@ -46,7 +59,7 @@ public class DnnTensorFlowTest extends OpenCVTestCase {
...
@@ -46,7 +59,7 @@ public class DnnTensorFlowTest extends OpenCVTestCase {
File
testDataPath
=
new
File
(
envTestDataPath
);
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
();
sourceImageFile
=
f
.
toString
();
if
(!
f
.
exists
())
throw
new
Exception
(
"Test image is missing: "
+
sourceImageFile
);
if
(!
f
.
exists
())
throw
new
Exception
(
"Test image is missing: "
+
sourceImageFile
);
...
@@ -77,31 +90,55 @@ public class DnnTensorFlowTest extends OpenCVTestCase {
...
@@ -77,31 +90,55 @@ public class DnnTensorFlowTest extends OpenCVTestCase {
}
}
public
void
testTestNetForward
()
{
public
void
checkInceptionNet
(
Net
net
)
Mat
rawImage
=
Imgcodecs
.
imread
(
sourceImageFile
);
{
Mat
image
=
Imgcodecs
.
imread
(
sourceImageFile
);
assertNotNull
(
"Loading image from file failed!"
,
rawI
mage
);
assertNotNull
(
"Loading image from file failed!"
,
i
mage
);
Mat
image
=
new
Mat
();
Mat
inputBlob
=
Dnn
.
blobFromImage
(
image
,
1.0
,
new
Size
(
224
,
224
),
new
Scalar
(
0
),
true
,
true
);
Imgproc
.
resize
(
rawImage
,
image
,
new
Size
(
224
,
224
));
Mat
inputBlob
=
Dnn
.
blobFromImage
(
image
);
assertNotNull
(
"Converting image to blob failed!"
,
inputBlob
);
assertNotNull
(
"Converting image to blob failed!"
,
inputBlob
);
Mat
inputBlobP
=
new
Mat
();
net
.
setInput
(
inputBlob
,
"input"
);
Core
.
subtract
(
inputBlob
,
new
Scalar
(
117.0
),
inputBlobP
);
net
.
setInput
(
inputBlobP
,
"input"
);
Mat
result
=
net
.
forward
();
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
);
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
);
}
}
}
modules/dnn/src/caffe/caffe_importer.cpp
View file @
8b5f061d
...
@@ -453,10 +453,13 @@ Net readNetFromCaffe(const char *bufferProto, size_t lenProto,
...
@@ -453,10 +453,13 @@ Net readNetFromCaffe(const char *bufferProto, size_t lenProto,
return
net
;
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
(),
const
char
*
bufferProtoPtr
=
reinterpret_cast
<
const
char
*>
(
&
bufferProto
[
0
]);
bufferModel
.
empty
()
?
NULL
:
&
bufferModel
[
0
],
bufferModel
.
size
());
const
char
*
bufferModelPtr
=
bufferModel
.
empty
()
?
NULL
:
reinterpret_cast
<
const
char
*>
(
&
bufferModel
[
0
]);
return
readNetFromCaffe
(
bufferProtoPtr
,
bufferProto
.
size
(),
bufferModelPtr
,
bufferModel
.
size
());
}
}
#endif //HAVE_PROTOBUF
#endif //HAVE_PROTOBUF
...
...
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
...
@@ -242,10 +242,13 @@ Net readNetFromDarknet(const char *bufferCfg, size_t lenCfg, const char *bufferM
return
readNetFromDarknet
(
cfgStream
);
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
(),
const
char
*
bufferCfgPtr
=
reinterpret_cast
<
const
char
*>
(
&
bufferCfg
[
0
]);
bufferModel
.
empty
()
?
NULL
:
&
bufferModel
[
0
],
bufferModel
.
size
());
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
CV__DNN_EXPERIMENTAL_NS_END
...
...
modules/dnn/src/dnn.cpp
View file @
8b5f061d
...
@@ -3047,8 +3047,8 @@ Net readNet(const String& _model, const String& _config, const String& _framewor
...
@@ -3047,8 +3047,8 @@ Net readNet(const String& _model, const String& _config, const String& _framewor
model
+
(
config
.
empty
()
?
""
:
", "
+
config
));
model
+
(
config
.
empty
()
?
""
:
", "
+
config
));
}
}
Net
readNet
(
const
String
&
_framework
,
const
std
::
vector
<
char
>&
bufferModel
,
Net
readNet
(
const
String
&
_framework
,
const
std
::
vector
<
u
char
>&
bufferModel
,
const
std
::
vector
<
char
>&
bufferConfig
)
const
std
::
vector
<
u
char
>&
bufferConfig
)
{
{
String
framework
=
_framework
.
toLowerCase
();
String
framework
=
_framework
.
toLowerCase
();
if
(
framework
==
"caffe"
)
if
(
framework
==
"caffe"
)
...
...
modules/dnn/src/tensorflow/tf_importer.cpp
View file @
8b5f061d
...
@@ -1856,10 +1856,13 @@ Net readNetFromTensorflow(const char* bufferModel, size_t lenModel,
...
@@ -1856,10 +1856,13 @@ Net readNetFromTensorflow(const char* bufferModel, size_t lenModel,
return
net
;
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
(),
const
char
*
bufferModelPtr
=
reinterpret_cast
<
const
char
*>
(
&
bufferModel
[
0
]);
bufferConfig
.
empty
()
?
NULL
:
&
bufferConfig
[
0
],
bufferConfig
.
size
());
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
CV__DNN_EXPERIMENTAL_NS_END
...
...
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