1
0
Fork 0
mirror of https://github.com/ruby-opencv/ruby-opencv synced 2023-03-27 23:22:12 -04:00

Some more code cleanup and return of read_net_… methods.

This commit is contained in:
Francois Deschenes 2018-07-26 21:19:09 -07:00
parent 801d1e8694
commit 869e21ab42
5 changed files with 109 additions and 103 deletions

View file

@ -8,9 +8,6 @@
#include "dnn_layer.hpp"
#include "error.hpp"
// https://docs.opencv.org/trunk/d6/d0f/group__dnn.html#ga29d0ea5e52b1d1a6c2681e3f7d68473a
// https://github.com/opencv/opencv/blob/master/modules/dnn/src/caffe/caffe_importer.cpp
namespace rubyopencv {
namespace Dnn {
VALUE rb_module = Qnil;
@ -21,23 +18,22 @@ namespace rubyopencv {
rb_scan_args(argc, argv, "11", &image, &options);
cv::Mat *b = NULL;
cv::Mat *m = Mat::obj2mat(image);
try {
cv::Mat r;
double scale_factor = 1.0;
cv::Size size;
cv::Scalar mean;
bool swap_rb = true;
bool crop = true;
if (NIL_P(options)) {
r = cv::dnn::blobFromImage(*m);
} else {
if (!NIL_P(options)) {
Check_Type(options, T_HASH);
double scale_factor = NUM2DBL_DEFAULT(HASH_LOOKUP(options, "scale_factor"), 1.0);
cv::Size size;
cv::Scalar mean;
bool swap_rb = RTEST_DEFAULT(HASH_LOOKUP(options, "swap_rb"), true);
bool crop = RTEST_DEFAULT(HASH_LOOKUP(options, "crop"), true);
VALUE tmp = Qnil;
scale_factor = NUM2DBL_DEFAULT(HASH_LOOKUP(options, "scale_factor"), scale_factor);
swap_rb = RTEST_DEFAULT(HASH_LOOKUP(options, "swap_rb"), (bool)swap_rb);
crop = RTEST_DEFAULT(HASH_LOOKUP(options, "crop"), (bool)crop);
VALUE tmp = Qnil;
tmp = HASH_LOOKUP(options, "size");
if (!NIL_P(tmp)) {
size = *(Size::obj2size(tmp));
@ -47,11 +43,9 @@ namespace rubyopencv {
if (!NIL_P(tmp)) {
mean = *(Scalar::obj2scalar(tmp));
}
r = cv::dnn::blobFromImage(*m, scale_factor, size, mean, swap_rb, crop);
}
b = new cv::Mat(r);
b = new cv::Mat(cv::dnn::blobFromImage(*Mat::obj2mat(image), scale_factor, size, mean, swap_rb, crop));
} catch(cv::Exception& e) {
delete b;
Error::raise(e);
@ -60,72 +54,16 @@ namespace rubyopencv {
return Mat::mat2obj(b);
}
// // Net readNetFromCaffe(const String &prototxt, const String &caffeModel = String());
// VALUE rb_read_net_from_caffe(VALUE self, VALUE prototxt, VALUE caffe_model) {
// cv::dnn::Net *net = NULL;
//
// try {
// net = new cv::dnn::Net(cv::dnn::readNetFromCaffe(StringValueCStr(prototxt), StringValueCStr(caffe_model)));
// } catch(cv::Exception& e) {
// delete net;
// Error::raise(e);
// }
//
// return Dnn::Net::net2obj(net);
// }
//
// // Net readNetFromTorch(const String &model, bool isBinary)
// VALUE rb_read_net_from_tensorflow(VALUE self, VALUE model) {
// cv::dnn::Net *net = NULL;
//
// try {
// net = new cv::dnn::Net(cv::dnn::readNetFromTensorflow(StringValueCStr(model)));
// } catch(cv::Exception& e) {
// delete net;
// Error::raise(e);
// }
//
// return Dnn::Net::net2obj(net);
// }
//
// // Net readNetFromTorch(const String &model, bool isBinary)
// VALUE rb_read_net_from_torch(VALUE self, VALUE model) {
// cv::dnn::Net *net = NULL;
//
// try {
// net = new cv::dnn::Net(cv::dnn::readNetFromTorch(StringValueCStr(model)));
// } catch(cv::Exception& e) {
// delete net;
// Error::raise(e);
// }
//
// return Dnn::Net::net2obj(net);
// }
//
// // Net readNetFromDarknet(const String &cfgFile, const String &darknetModel /*= String()*/)
// VALUE rb_read_net_from_darknet(VALUE self, VALUE cfg_file, VALUE darknet_model) {
// cv::dnn::Net *net = NULL;
//
// try {
// net = new cv::dnn::Net(cv::dnn::readNetFromDarknet(StringValueCStr(cfg_file), StringValueCStr(darknet_model)));
// } catch(cv::Exception& e) {
// delete net;
// Error::raise(e);
// }
//
// return Dnn::Net::net2obj(net);
// }
void init() {
VALUE opencv = rb_define_module("Cv");
void init(VALUE opencv) {
rb_module = rb_define_module_under(opencv, "Dnn");
rb_define_singleton_method(rb_module, "blob_from_image", RUBY_METHOD_FUNC(rb_blob_from_image), -1);
// rb_define_singleton_method(rb_module, "read_net_from_caffe", RUBY_METHOD_FUNC(rb_read_net_from_caffe), 2);
// rb_define_singleton_method(rb_module, "read_net_from_tensorflow", RUBY_METHOD_FUNC(rb_read_net_from_tensorflow), 1);
// rb_define_singleton_method(rb_module, "read_net_from_torch", RUBY_METHOD_FUNC(rb_read_net_from_torch), 1);
// rb_define_singleton_method(rb_module, "read_net_from_darknet", RUBY_METHOD_FUNC(rb_read_net_from_darknet), 2);
rb_define_singleton_method(rb_module, "read_net", RUBY_METHOD_FUNC(Dnn::Net::rb_read_net), -1);
rb_define_singleton_method(rb_module, "read_net_from_caffe", RUBY_METHOD_FUNC(Dnn::Net::rb_read_net_from_caffe), 2);
rb_define_singleton_method(rb_module, "read_net_from_tensorflow", RUBY_METHOD_FUNC(Dnn::Net::rb_read_net_from_tensorflow), 1);
rb_define_singleton_method(rb_module, "read_net_from_torch", RUBY_METHOD_FUNC(Dnn::Net::rb_read_net_from_torch), 1);
rb_define_singleton_method(rb_module, "read_net_from_darknet", RUBY_METHOD_FUNC(Dnn::Net::rb_read_net_from_darknet), 2);
Dnn::Net::init(rb_module);
Dnn::Layer::init(rb_module);