parent
cfb9cfab9b
commit
a6963b4abb
9 changed files with 1190 additions and 34159 deletions
@ -1,19 +1,25 @@ |
||||
set(the_description "Deep neural network module. Allow load models and make forward pass") |
||||
set(OPENCV_MODULE_IS_PART_OF_WORLD OFF) |
||||
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") |
||||
message(FATAL_ERROR "libprotobuf is required for dnn module") |
||||
endif() |
||||
|
||||
find_package( Protobuf REQUIRED ) |
||||
|
||||
if(EXISTS ${PROTOBUF_PROTOC_EXECUTABLE}) |
||||
message(STATUS "Found PROTOBUF Compiler: ${PROTOBUF_PROTOC_EXECUTABLE}") |
||||
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}) |
||||
message(FATAL_ERROR "Could not find PROTOBUF Compiler") |
||||
endif() |
||||
|
||||
target_link_libraries(opencv_dnn) |
||||
file(GLOB PROTO_FILES src/*.proto) |
||||
PROTOBUF_GENERATE_CPP(PROTO_HDRS PROTO_SRCS ${PROTO_FILES}) |
||||
|
||||
ocv_add_module(dnn opencv_imgproc opencv_core opencv_highgui WRAP python matlab) |
||||
ocv_glob_module_sources(${PROTO_SRCS} ${PROTO_HDRS}) |
||||
ocv_source_group("Src\\protobuf" FILES ${PROTO_SRCS} ${PROTO_HDRS}) |
||||
ocv_module_include_directories(${PROTOBUF_INCLUDE_DIR}) |
||||
ocv_create_module() |
||||
target_link_libraries(opencv_dnn ${PROTOBUF_LIBRARIES}) |
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@ -0,0 +1,57 @@ |
||||
#include "opencv2/dnn.hpp" |
||||
#include "caffe.pb.h" |
||||
|
||||
#include <iostream> |
||||
#include <fstream> |
||||
#include <google/protobuf/message.h> |
||||
#include <google/protobuf/text_format.h> |
||||
#include <google/protobuf/io/zero_copy_stream_impl.h> |
||||
|
||||
using namespace cv; |
||||
using namespace cv::dnn; |
||||
|
||||
namespace |
||||
{ |
||||
|
||||
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_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) |
||||
{ |
||||
|
||||
} |
||||
|
||||
~CaffeImporter() |
||||
{ |
||||
|
||||
} |
||||
}; |
||||
|
||||
} |
||||
|
||||
Ptr<Importer> cv::dnn::createCaffeImporter(const String &prototxt, const String &caffeModel) |
||||
{ |
||||
return Ptr<Importer>(new CaffeImporter(prototxt.c_str(), caffeModel.c_str())); |
||||
} |
Binary file not shown.
Binary file not shown.
Loading…
Reference in new issue