parent
2f6d743342
commit
cfb9cfab9b
5 changed files with 34202 additions and 27 deletions
@ -1,5 +1,19 @@ |
|||||||
set(the_description "Deep neural netork module. Allow load models and make forward pass") |
set(the_description "Deep neural network module. Allow load models and make forward pass") |
||||||
set(OPENCV_MODULE_IS_PART_OF_WORLD OFF) |
set(OPENCV_MODULE_IS_PART_OF_WORLD OFF) |
||||||
ocv_define_module(dnn opencv_imgproc opencv_core opencv_highgui WRAP python) |
ocv_define_module(dnn opencv_imgproc opencv_core opencv_highgui WRAP python) |
||||||
|
|
||||||
|
option(WITH_PROTOBUF "Build with libprotobuf" ON) |
||||||
|
|
||||||
|
|
||||||
|
if(NOT WITH_PROTOBUF) |
||||||
|
message(ERROR "libprotobuf required for dnn module") |
||||||
|
else() |
||||||
|
message(STATUS "Find protobuf") |
||||||
|
find_package( Protobuf REQUIRED ) |
||||||
|
target_include_directories(opencv_dnn PUBLIC ${PROTOBUF_INCLUDE_DIR}) |
||||||
|
target_link_libraries(opencv_dnn ${PROTOBUF_LIBRARIES}) |
||||||
|
message(STATUS "Protobuf:" ${PROTOBUF_INCLUDE_DIR}) |
||||||
|
message(STATUS "Protobuf:" ${PROTOBUF_LIBRARIES}) |
||||||
|
endif() |
||||||
|
|
||||||
target_link_libraries(opencv_dnn) |
target_link_libraries(opencv_dnn) |
||||||
|
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@ -1,28 +1,78 @@ |
|||||||
#include "opencv2/dnn.hpp" |
#include "opencv2/dnn.hpp" |
||||||
|
#include <iostream> |
||||||
|
#include <fstream> |
||||||
|
#include <google/protobuf/message.h> |
||||||
|
#include <google/protobuf/text_format.h> |
||||||
|
#include <google/protobuf/io/zero_copy_stream_impl.h> |
||||||
|
#include "caffe.pb.h" |
||||||
|
|
||||||
|
namespace |
||||||
|
{ |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
namespace cv |
namespace cv |
||||||
{ |
{ |
||||||
namespace dnn |
namespace dnn |
||||||
{
|
{ |
||||||
|
|
||||||
|
Blob::Blob(Mat &in) : _InputOutputArray(in) |
||||||
|
{ |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
Blob::Blob(const Mat &in) : _InputOutputArray(in) |
||||||
|
{ |
||||||
|
|
||||||
Blob::Blob(Mat &in) : _InputOutputArray(in) |
} |
||||||
{ |
|
||||||
|
|
||||||
} |
|
||||||
|
|
||||||
Blob::Blob(const Mat &in) : _InputOutputArray(in) |
Blob::Blob(UMat &in) : _InputOutputArray(in) |
||||||
{ |
{ |
||||||
|
|
||||||
} |
} |
||||||
|
|
||||||
Blob::Blob(UMat &in) : _InputOutputArray(in) |
Blob::Blob(const UMat &in) : _InputOutputArray(in) |
||||||
{ |
{ |
||||||
|
|
||||||
} |
|
||||||
|
|
||||||
Blob::Blob(const UMat &in) : _InputOutputArray(in) |
} |
||||||
{ |
|
||||||
|
|
||||||
|
class CaffeImporter : public Importer |
||||||
|
{ |
||||||
|
|
||||||
|
public: |
||||||
|
|
||||||
|
CaffeImporter(const char *pototxt, const char *caffeModel) |
||||||
|
{ |
||||||
|
std::ifstream proto_ifs(pototxt, std::ifstream::in); |
||||||
|
std::ifstream model_ifs(caffeModel, std::ifstream::in); |
||||||
|
|
||||||
|
CV_Assert(proto_ifs.is_open() && model_ifs.is_open()); |
||||||
|
|
||||||
|
google::protobuf::io::IstreamInputStream proto_zcs(&proto_ifs); |
||||||
|
google::protobuf::io::IstreamInputStream model_zcs(&model_ifs); |
||||||
|
|
||||||
|
//google::protobuf::Message msg_arch;
|
||||||
|
//google::protobuf::Message msg_weights;
|
||||||
|
caffe::NetParameter msg_arch; |
||||||
|
|
||||||
|
CV_Assert( google::protobuf::TextFormat::Parse(&proto_zcs, &msg_arch) ); |
||||||
|
//CV_Assert( msg_weights.ParseFromZeroCopyStream(model_zcs) );
|
||||||
|
|
||||||
|
const google::protobuf::Descriptor *desc_arch = msg_arch.GetDescriptor(); |
||||||
|
CV_Assert(desc_arch); |
||||||
|
} |
||||||
|
|
||||||
|
void populateNetConfiguration(Ptr<NetConfiguration> config) |
||||||
|
{ |
||||||
|
|
||||||
|
} |
||||||
|
}; |
||||||
|
|
||||||
|
Ptr<Importer> createCaffeImporter(const String &prototxt, const String &caffeModel) |
||||||
|
{ |
||||||
|
return Ptr<Importer>(new CaffeImporter(prototxt.c_str(), caffeModel.c_str())); |
||||||
|
} |
||||||
|
|
||||||
} |
|
||||||
} |
} |
||||||
} |
} |
Loading…
Reference in new issue