ruby-opencv 0.0.10 → 0.0.11.pre
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +6 -14
- data/Manifest.txt +32 -8
- data/README.md +1 -1
- data/examples/alpha_blend.rb +2 -2
- data/examples/contours/bounding-box-detect-canny.rb +0 -0
- data/examples/contours/contour_retrieval_modes.rb +0 -0
- data/examples/convexhull.rb +0 -0
- data/examples/face_detect.rb +0 -0
- data/examples/facerec/create_csv.rb +43 -0
- data/examples/facerec/facerec_eigenfaces.rb +132 -0
- data/examples/facerec/facerec_fisherfaces.rb +131 -0
- data/examples/facerec/facerec_lbph.rb +116 -0
- data/examples/facerec/readme.md +111 -0
- data/examples/find_obj.rb +2 -2
- data/examples/houghcircle.rb +1 -1
- data/examples/{box.png → images/box.png} +0 -0
- data/examples/{box_in_scene.png → images/box_in_scene.png} +0 -0
- data/examples/{inpaint.png → images/inpaint.png} +0 -0
- data/examples/images/lena-256x256.jpg +0 -0
- data/examples/images/lena-eyes.jpg +0 -0
- data/examples/{lenna-rotated.jpg → images/lenna-rotated.jpg} +0 -0
- data/examples/{lenna.jpg → images/lenna.jpg} +0 -0
- data/examples/{stuff.jpg → images/stuff.jpg} +0 -0
- data/examples/{tiffany.jpg → images/tiffany.jpg} +0 -0
- data/examples/inpaint.rb +1 -1
- data/examples/match_kdtree.rb +2 -2
- data/examples/match_template.rb +26 -0
- data/examples/{matching_to_many_images.rb → matching_to_many_images/matching_to_many_images.rb} +3 -3
- data/examples/matching_to_many_images/query.png +0 -0
- data/examples/matching_to_many_images/train/1.png +0 -0
- data/examples/matching_to_many_images/train/2.png +0 -0
- data/examples/matching_to_many_images/train/3.png +0 -0
- data/examples/matching_to_many_images/train/trainImages.txt +0 -0
- data/examples/paint.rb +0 -0
- data/examples/snake.rb +0 -0
- data/ext/opencv/algorithm.cpp +286 -0
- data/ext/opencv/algorithm.h +38 -0
- data/ext/opencv/cvmat.cpp +205 -76
- data/ext/opencv/cvmat.h +8 -1
- data/ext/opencv/eigenfaces.cpp +67 -0
- data/ext/opencv/eigenfaces.h +30 -0
- data/ext/opencv/extconf.rb +0 -0
- data/ext/opencv/facerecognizer.cpp +174 -0
- data/ext/opencv/facerecognizer.h +46 -0
- data/ext/opencv/fisherfaces.cpp +67 -0
- data/ext/opencv/fisherfaces.h +30 -0
- data/ext/opencv/lbph.cpp +70 -0
- data/ext/opencv/lbph.h +30 -0
- data/ext/opencv/opencv.cpp +51 -1
- data/ext/opencv/opencv.h +6 -0
- data/lib/opencv.rb +0 -0
- data/lib/opencv/version.rb +1 -1
- data/ruby-opencv.gemspec +8 -7
- data/test/eigenfaces_save.xml +7524 -0
- data/test/fisherfaces_save.xml +7530 -0
- data/test/helper.rb +0 -0
- data/test/lbph_save.xml +4304 -0
- data/test/runner.rb +0 -0
- data/test/test_curve.rb +0 -0
- data/test/test_cvavgcomp.rb +0 -0
- data/test/test_cvbox2d.rb +0 -0
- data/test/test_cvcapture.rb +0 -0
- data/test/test_cvchain.rb +0 -0
- data/test/test_cvcircle32f.rb +0 -0
- data/test/test_cvconnectedcomp.rb +0 -0
- data/test/test_cvcontour.rb +0 -0
- data/test/test_cvcontourtree.rb +0 -0
- data/test/test_cverror.rb +0 -0
- data/test/test_cvfeaturetree.rb +0 -0
- data/test/test_cvfont.rb +0 -0
- data/test/test_cvhaarclassifiercascade.rb +0 -0
- data/test/test_cvhistogram.rb +0 -0
- data/test/test_cvhumoments.rb +0 -0
- data/test/test_cvline.rb +0 -0
- data/test/test_cvmat.rb +72 -16
- data/test/test_cvmat_drawing.rb +0 -0
- data/test/test_cvmat_dxt.rb +0 -0
- data/test/test_cvmat_imageprocessing.rb +72 -2
- data/test/test_cvmat_matching.rb +1 -1
- data/test/test_cvmoments.rb +0 -0
- data/test/test_cvpoint.rb +0 -0
- data/test/test_cvpoint2d32f.rb +0 -0
- data/test/test_cvpoint3d32f.rb +0 -0
- data/test/test_cvrect.rb +0 -0
- data/test/test_cvscalar.rb +0 -0
- data/test/test_cvseq.rb +0 -0
- data/test/test_cvsize.rb +0 -0
- data/test/test_cvsize2d32f.rb +0 -0
- data/test/test_cvslice.rb +0 -0
- data/test/test_cvsurfparams.rb +0 -0
- data/test/test_cvsurfpoint.rb +0 -0
- data/test/test_cvtermcriteria.rb +0 -0
- data/test/test_cvtwopoints.rb +0 -0
- data/test/test_cvvideowriter.rb +0 -0
- data/test/test_eigenfaces.rb +93 -0
- data/test/test_fisherfaces.rb +93 -0
- data/test/test_iplconvkernel.rb +0 -0
- data/test/test_iplimage.rb +0 -4
- data/test/test_lbph.rb +152 -0
- data/test/test_mouseevent.rb +0 -0
- data/test/test_opencv.rb +33 -4
- data/test/test_pointset.rb +7 -5
- data/test/test_preliminary.rb +0 -0
- data/test/test_trackbar.rb +0 -0
- data/test/test_window.rb +0 -0
- metadata +84 -56
@@ -0,0 +1,67 @@
|
|
1
|
+
/************************************************************
|
2
|
+
|
3
|
+
eigenfaces.cpp -
|
4
|
+
|
5
|
+
$Author: ser1zw $
|
6
|
+
|
7
|
+
Copyright (C) 2013 ser1zw
|
8
|
+
|
9
|
+
************************************************************/
|
10
|
+
#include <stdio.h>
|
11
|
+
#include "eigenfaces.h"
|
12
|
+
/*
|
13
|
+
* Document-class: OpenCV::EigenFaces
|
14
|
+
*
|
15
|
+
*/
|
16
|
+
__NAMESPACE_BEGIN_OPENCV
|
17
|
+
__NAMESPACE_BEGIN_EIGENFACES
|
18
|
+
|
19
|
+
VALUE rb_klass;
|
20
|
+
|
21
|
+
VALUE
|
22
|
+
rb_class()
|
23
|
+
{
|
24
|
+
return rb_klass;
|
25
|
+
}
|
26
|
+
|
27
|
+
/*
|
28
|
+
* call-seq:
|
29
|
+
* EigenFaces.new(num_components=0, threshold=DBL_MAX)
|
30
|
+
*/
|
31
|
+
VALUE
|
32
|
+
rb_initialize(int argc, VALUE argv[], VALUE self)
|
33
|
+
{
|
34
|
+
VALUE num_components_val, threshold_val;
|
35
|
+
rb_scan_args(argc, argv, "02", &num_components_val, &threshold_val);
|
36
|
+
|
37
|
+
int num_components = NIL_P(num_components_val) ? 0 : NUM2INT(num_components_val);
|
38
|
+
double threshold = NIL_P(threshold_val) ? DBL_MAX : NUM2DBL(threshold_val);
|
39
|
+
|
40
|
+
free(DATA_PTR(self));
|
41
|
+
cv::Ptr<cv::FaceRecognizer> ptr = cv::createEigenFaceRecognizer(num_components, threshold);
|
42
|
+
DATA_PTR(self) = ptr;
|
43
|
+
|
44
|
+
cFaceRecognizer::guard_facerecognizer(DATA_PTR(self), ptr);
|
45
|
+
|
46
|
+
return self;
|
47
|
+
}
|
48
|
+
|
49
|
+
void
|
50
|
+
define_ruby_class()
|
51
|
+
{
|
52
|
+
if (rb_klass)
|
53
|
+
return;
|
54
|
+
/*
|
55
|
+
* opencv = rb_define_module("OpenCV");
|
56
|
+
*
|
57
|
+
* note: this comment is used by rdoc.
|
58
|
+
*/
|
59
|
+
VALUE opencv = rb_module_opencv();
|
60
|
+
rb_klass = rb_define_class_under(opencv, "EigenFaces", cFaceRecognizer::rb_class());
|
61
|
+
rb_define_alloc_func(rb_klass, cFaceRecognizer::allocate_facerecognizer);
|
62
|
+
rb_define_private_method(rb_klass, "initialize", RUBY_METHOD_FUNC(rb_initialize), -1);
|
63
|
+
}
|
64
|
+
|
65
|
+
__NAMESPACE_END_EIGENFACES
|
66
|
+
__NAMESPACE_END_OPENCV
|
67
|
+
|
@@ -0,0 +1,30 @@
|
|
1
|
+
/************************************************************
|
2
|
+
|
3
|
+
eigenfaces.h
|
4
|
+
|
5
|
+
$Author: ser1zw $
|
6
|
+
|
7
|
+
Copyright (C) 2013 ser1zw
|
8
|
+
|
9
|
+
************************************************************/
|
10
|
+
#ifndef RUBY_OPENCV_EIGENFACES_H
|
11
|
+
#define RUBY_OPENCV_EIGENFACES_H
|
12
|
+
|
13
|
+
#include "opencv.h"
|
14
|
+
|
15
|
+
#define __NAMESPACE_BEGIN_EIGENFACES namespace cEigenFaces {
|
16
|
+
#define __NAMESPACE_END_EIGENFACES }
|
17
|
+
|
18
|
+
__NAMESPACE_BEGIN_OPENCV
|
19
|
+
__NAMESPACE_BEGIN_EIGENFACES
|
20
|
+
|
21
|
+
VALUE rb_class();
|
22
|
+
|
23
|
+
void define_ruby_class();
|
24
|
+
VALUE rb_initialize(int argc, VALUE argv[], VALUE self);
|
25
|
+
|
26
|
+
__NAMESPACE_END_EIGENFACES
|
27
|
+
__NAMESPACE_END_OPENCV
|
28
|
+
|
29
|
+
#endif // RUBY_OPENCV_EIGENFACES_H
|
30
|
+
|
data/ext/opencv/extconf.rb
CHANGED
File without changes
|
@@ -0,0 +1,174 @@
|
|
1
|
+
/************************************************************
|
2
|
+
|
3
|
+
facerecognizer.cpp -
|
4
|
+
|
5
|
+
$Author: ser1zw $
|
6
|
+
|
7
|
+
Copyright (C) 2013 ser1zw
|
8
|
+
|
9
|
+
************************************************************/
|
10
|
+
#include <stdio.h>
|
11
|
+
#include "facerecognizer.h"
|
12
|
+
/*
|
13
|
+
* Document-class: OpenCV::FaceRecognizer
|
14
|
+
*
|
15
|
+
*/
|
16
|
+
__NAMESPACE_BEGIN_OPENCV
|
17
|
+
__NAMESPACE_BEGIN_FACERECOGNIZER
|
18
|
+
|
19
|
+
VALUE rb_klass;
|
20
|
+
|
21
|
+
std::map< long, cv::Ptr<cv::FaceRecognizer> > ptr_guard_map;
|
22
|
+
|
23
|
+
void
|
24
|
+
guard_facerecognizer(void* data_ptr, cv::Ptr<cv::FaceRecognizer> ptr)
|
25
|
+
{
|
26
|
+
ptr_guard_map[(long)data_ptr] = ptr;
|
27
|
+
}
|
28
|
+
|
29
|
+
void
|
30
|
+
release_facerecognizer(void *ptr)
|
31
|
+
{
|
32
|
+
long key = (long)ptr;
|
33
|
+
ptr_guard_map[key].release();
|
34
|
+
ptr_guard_map.erase(key);
|
35
|
+
}
|
36
|
+
|
37
|
+
VALUE
|
38
|
+
allocate_facerecognizer(VALUE klass)
|
39
|
+
{
|
40
|
+
return Data_Wrap_Struct(klass, 0, release_facerecognizer, NULL);
|
41
|
+
}
|
42
|
+
|
43
|
+
|
44
|
+
VALUE
|
45
|
+
rb_class()
|
46
|
+
{
|
47
|
+
return rb_klass;
|
48
|
+
}
|
49
|
+
|
50
|
+
/*
|
51
|
+
* call-seq:
|
52
|
+
* train(src, labels)
|
53
|
+
*
|
54
|
+
* Trains a FaceRecognizer with given data and associated labels.
|
55
|
+
*/
|
56
|
+
VALUE
|
57
|
+
rb_train(VALUE self, VALUE src, VALUE labels)
|
58
|
+
{
|
59
|
+
Check_Type(src, T_ARRAY);
|
60
|
+
Check_Type(labels, T_ARRAY);
|
61
|
+
|
62
|
+
VALUE *src_ptr = RARRAY_PTR(src);
|
63
|
+
int src_size = RARRAY_LEN(src);
|
64
|
+
std::vector<cv::Mat> images;
|
65
|
+
for (int i = 0; i < src_size; i++) {
|
66
|
+
images.push_back(cv::Mat(CVMAT_WITH_CHECK(src_ptr[i])));
|
67
|
+
}
|
68
|
+
|
69
|
+
VALUE *labels_ptr = RARRAY_PTR(labels);
|
70
|
+
int labels_size = RARRAY_LEN(labels);
|
71
|
+
std::vector<int> local_labels;
|
72
|
+
for (int i = 0; i < labels_size; i++) {
|
73
|
+
local_labels.push_back(NUM2INT(labels_ptr[i]));
|
74
|
+
}
|
75
|
+
|
76
|
+
cv::FaceRecognizer *self_ptr = FACERECOGNIZER(self);
|
77
|
+
try {
|
78
|
+
self_ptr->train(images, local_labels);
|
79
|
+
}
|
80
|
+
catch (cv::Exception& e) {
|
81
|
+
raise_cverror(e);
|
82
|
+
}
|
83
|
+
|
84
|
+
return Qnil;
|
85
|
+
}
|
86
|
+
|
87
|
+
/*
|
88
|
+
* call-seq:
|
89
|
+
* predict(src)
|
90
|
+
*
|
91
|
+
* Predicts a label and associated confidence (e.g. distance) for a given input image.
|
92
|
+
*/
|
93
|
+
VALUE
|
94
|
+
rb_predict(VALUE self, VALUE src)
|
95
|
+
{
|
96
|
+
cv::Mat mat = cv::Mat(CVMAT_WITH_CHECK(src));
|
97
|
+
cv::FaceRecognizer *self_ptr = FACERECOGNIZER(self);
|
98
|
+
int label;
|
99
|
+
double confidence;
|
100
|
+
try {
|
101
|
+
self_ptr->predict(mat, label, confidence);
|
102
|
+
}
|
103
|
+
catch (cv::Exception& e) {
|
104
|
+
raise_cverror(e);
|
105
|
+
}
|
106
|
+
|
107
|
+
return rb_ary_new3(2, INT2NUM(label), DBL2NUM(confidence));
|
108
|
+
}
|
109
|
+
|
110
|
+
|
111
|
+
/*
|
112
|
+
* call-seq:
|
113
|
+
* save(filename)
|
114
|
+
*
|
115
|
+
* Saves this model to a given filename, either as XML or YAML.
|
116
|
+
*/
|
117
|
+
VALUE
|
118
|
+
rb_save(VALUE self, VALUE filename)
|
119
|
+
{
|
120
|
+
Check_Type(filename, T_STRING);
|
121
|
+
cv::FaceRecognizer *self_ptr = FACERECOGNIZER(self);
|
122
|
+
try {
|
123
|
+
char* s = StringValueCStr(filename);
|
124
|
+
self_ptr->save(std::string(s));
|
125
|
+
}
|
126
|
+
catch (cv::Exception& e) {
|
127
|
+
raise_cverror(e);
|
128
|
+
}
|
129
|
+
|
130
|
+
return Qnil;
|
131
|
+
}
|
132
|
+
|
133
|
+
/*
|
134
|
+
* call-seq:
|
135
|
+
* load(filename)
|
136
|
+
*
|
137
|
+
* Loads a FaceRecognizer and its model state.
|
138
|
+
*/
|
139
|
+
VALUE
|
140
|
+
rb_load(VALUE self, VALUE filename)
|
141
|
+
{
|
142
|
+
Check_Type(filename, T_STRING);
|
143
|
+
cv::FaceRecognizer *self_ptr = FACERECOGNIZER(self);
|
144
|
+
try {
|
145
|
+
char* s = StringValueCStr(filename);
|
146
|
+
self_ptr->load(std::string(s));
|
147
|
+
}
|
148
|
+
catch (cv::Exception& e) {
|
149
|
+
raise_cverror(e);
|
150
|
+
}
|
151
|
+
|
152
|
+
return Qnil;
|
153
|
+
}
|
154
|
+
|
155
|
+
void
|
156
|
+
define_ruby_class()
|
157
|
+
{
|
158
|
+
if (rb_klass)
|
159
|
+
return;
|
160
|
+
/*
|
161
|
+
* opencv = rb_define_module("OpenCV");
|
162
|
+
*
|
163
|
+
* note: this comment is used by rdoc.
|
164
|
+
*/
|
165
|
+
VALUE opencv = rb_module_opencv();
|
166
|
+
rb_klass = rb_define_class_under(opencv, "FaceRecognizer", cAlgorithm::rb_class());
|
167
|
+
rb_define_method(rb_klass, "train", RUBY_METHOD_FUNC(rb_train), 2);
|
168
|
+
rb_define_method(rb_klass, "predict", RUBY_METHOD_FUNC(rb_predict), 1);
|
169
|
+
rb_define_method(rb_klass, "save", RUBY_METHOD_FUNC(rb_save), 1);
|
170
|
+
rb_define_method(rb_klass, "load", RUBY_METHOD_FUNC(rb_load), 1);
|
171
|
+
}
|
172
|
+
|
173
|
+
__NAMESPACE_END_FACERECOGNIZER
|
174
|
+
__NAMESPACE_END_OPENCV
|
@@ -0,0 +1,46 @@
|
|
1
|
+
/************************************************************
|
2
|
+
|
3
|
+
facerecognizer.h
|
4
|
+
|
5
|
+
$Author: ser1zw $
|
6
|
+
|
7
|
+
Copyright (C) 2013 ser1zw
|
8
|
+
|
9
|
+
************************************************************/
|
10
|
+
#ifndef RUBY_OPENCV_FACERECOGNIZER_H
|
11
|
+
#define RUBY_OPENCV_FACERECOGNIZER_H
|
12
|
+
|
13
|
+
#include "opencv.h"
|
14
|
+
|
15
|
+
#define __NAMESPACE_BEGIN_FACERECOGNIZER namespace cFaceRecognizer {
|
16
|
+
#define __NAMESPACE_END_FACERECOGNIZER }
|
17
|
+
|
18
|
+
__NAMESPACE_BEGIN_OPENCV
|
19
|
+
__NAMESPACE_BEGIN_FACERECOGNIZER
|
20
|
+
|
21
|
+
VALUE rb_class();
|
22
|
+
|
23
|
+
void define_ruby_class();
|
24
|
+
VALUE rb_train(VALUE self, VALUE src, VALUE labels);
|
25
|
+
VALUE rb_predict(VALUE self, VALUE src);
|
26
|
+
VALUE rb_save(VALUE self, VALUE filename);
|
27
|
+
VALUE rb_load(VALUE self, VALUE filename);
|
28
|
+
|
29
|
+
void guard_facerecognizer(void* data_ptr, cv::Ptr<cv::FaceRecognizer> ptr);
|
30
|
+
void release_facerecognizer(void *ptr);
|
31
|
+
VALUE allocate_facerecognizer(VALUE klass);
|
32
|
+
|
33
|
+
__NAMESPACE_END_FACERECOGNIZER
|
34
|
+
|
35
|
+
inline cv::FaceRecognizer*
|
36
|
+
FACERECOGNIZER(VALUE object)
|
37
|
+
{
|
38
|
+
cv::FaceRecognizer *ptr;
|
39
|
+
Data_Get_Struct(object, cv::FaceRecognizer, ptr);
|
40
|
+
return ptr;
|
41
|
+
}
|
42
|
+
|
43
|
+
__NAMESPACE_END_OPENCV
|
44
|
+
|
45
|
+
#endif // RUBY_OPENCV_FACERECOGNIZER_H
|
46
|
+
|
@@ -0,0 +1,67 @@
|
|
1
|
+
/************************************************************
|
2
|
+
|
3
|
+
fisherfaces.cpp -
|
4
|
+
|
5
|
+
$Author: ser1zw $
|
6
|
+
|
7
|
+
Copyright (C) 2013 ser1zw
|
8
|
+
|
9
|
+
************************************************************/
|
10
|
+
#include <stdio.h>
|
11
|
+
#include "fisherfaces.h"
|
12
|
+
/*
|
13
|
+
* Document-class: OpenCV::FisherFaces
|
14
|
+
*
|
15
|
+
*/
|
16
|
+
__NAMESPACE_BEGIN_OPENCV
|
17
|
+
__NAMESPACE_BEGIN_FISHERFACES
|
18
|
+
|
19
|
+
VALUE rb_klass;
|
20
|
+
|
21
|
+
VALUE
|
22
|
+
rb_class()
|
23
|
+
{
|
24
|
+
return rb_klass;
|
25
|
+
}
|
26
|
+
|
27
|
+
/*
|
28
|
+
* call-seq:
|
29
|
+
* FisherFaces.new(num_components=0, threshold=DBL_MAX)
|
30
|
+
*/
|
31
|
+
VALUE
|
32
|
+
rb_initialize(int argc, VALUE argv[], VALUE self)
|
33
|
+
{
|
34
|
+
VALUE num_components_val, threshold_val;
|
35
|
+
rb_scan_args(argc, argv, "02", &num_components_val, &threshold_val);
|
36
|
+
|
37
|
+
int num_components = NIL_P(num_components_val) ? 0 : NUM2INT(num_components_val);
|
38
|
+
double threshold = NIL_P(threshold_val) ? DBL_MAX : NUM2DBL(threshold_val);
|
39
|
+
|
40
|
+
free(DATA_PTR(self));
|
41
|
+
cv::Ptr<cv::FaceRecognizer> ptr = cv::createFisherFaceRecognizer(num_components, threshold);
|
42
|
+
DATA_PTR(self) = ptr;
|
43
|
+
|
44
|
+
cFaceRecognizer::guard_facerecognizer(DATA_PTR(self), ptr);
|
45
|
+
|
46
|
+
return self;
|
47
|
+
}
|
48
|
+
|
49
|
+
void
|
50
|
+
define_ruby_class()
|
51
|
+
{
|
52
|
+
if (rb_klass)
|
53
|
+
return;
|
54
|
+
/*
|
55
|
+
* opencv = rb_define_module("OpenCV");
|
56
|
+
*
|
57
|
+
* note: this comment is used by rdoc.
|
58
|
+
*/
|
59
|
+
VALUE opencv = rb_module_opencv();
|
60
|
+
rb_klass = rb_define_class_under(opencv, "FisherFaces", cFaceRecognizer::rb_class());
|
61
|
+
rb_define_alloc_func(rb_klass, cFaceRecognizer::allocate_facerecognizer);
|
62
|
+
rb_define_private_method(rb_klass, "initialize", RUBY_METHOD_FUNC(rb_initialize), -1);
|
63
|
+
}
|
64
|
+
|
65
|
+
__NAMESPACE_END_FISHERFACES
|
66
|
+
__NAMESPACE_END_OPENCV
|
67
|
+
|
@@ -0,0 +1,30 @@
|
|
1
|
+
/************************************************************
|
2
|
+
|
3
|
+
fisherfaces.h
|
4
|
+
|
5
|
+
$Author: ser1zw $
|
6
|
+
|
7
|
+
Copyright (C) 2013 ser1zw
|
8
|
+
|
9
|
+
************************************************************/
|
10
|
+
#ifndef RUBY_OPENCV_FISHERFACES_H
|
11
|
+
#define RUBY_OPENCV_FISHERFACES_H
|
12
|
+
|
13
|
+
#include "opencv.h"
|
14
|
+
|
15
|
+
#define __NAMESPACE_BEGIN_FISHERFACES namespace cFisherFaces {
|
16
|
+
#define __NAMESPACE_END_FISHERFACES }
|
17
|
+
|
18
|
+
__NAMESPACE_BEGIN_OPENCV
|
19
|
+
__NAMESPACE_BEGIN_FISHERFACES
|
20
|
+
|
21
|
+
VALUE rb_class();
|
22
|
+
|
23
|
+
void define_ruby_class();
|
24
|
+
VALUE rb_initialize(int argc, VALUE argv[], VALUE self);
|
25
|
+
|
26
|
+
__NAMESPACE_END_FISHERFACES
|
27
|
+
__NAMESPACE_END_OPENCV
|
28
|
+
|
29
|
+
#endif // RUBY_OPENCV_FISHERFACES_H
|
30
|
+
|
data/ext/opencv/lbph.cpp
ADDED
@@ -0,0 +1,70 @@
|
|
1
|
+
/************************************************************
|
2
|
+
|
3
|
+
lbph.cpp -
|
4
|
+
|
5
|
+
$Author: ser1zw $
|
6
|
+
|
7
|
+
Copyright (C) 2013 ser1zw
|
8
|
+
|
9
|
+
************************************************************/
|
10
|
+
#include <stdio.h>
|
11
|
+
#include "lbph.h"
|
12
|
+
/*
|
13
|
+
* Document-class: OpenCV::LBPH
|
14
|
+
*
|
15
|
+
*/
|
16
|
+
__NAMESPACE_BEGIN_OPENCV
|
17
|
+
__NAMESPACE_BEGIN_LBPH
|
18
|
+
|
19
|
+
VALUE rb_klass;
|
20
|
+
|
21
|
+
VALUE
|
22
|
+
rb_class()
|
23
|
+
{
|
24
|
+
return rb_klass;
|
25
|
+
}
|
26
|
+
|
27
|
+
/*
|
28
|
+
* call-seq:
|
29
|
+
* LBPH.new(radius=1, neighbors=8, grid_x=8, grid_y=8, threshold=DBL_MAX) -> cvmat
|
30
|
+
*/
|
31
|
+
VALUE
|
32
|
+
rb_initialize(int argc, VALUE argv[], VALUE self)
|
33
|
+
{
|
34
|
+
VALUE radius_val, neighbors_val, grid_x_val, grid_y_val, threshold_val;
|
35
|
+
rb_scan_args(argc, argv, "05", &radius_val, &neighbors_val, &grid_x_val, &grid_y_val, &threshold_val);
|
36
|
+
|
37
|
+
int radius = NIL_P(radius_val) ? 1 : NUM2INT(radius_val);
|
38
|
+
int neighbors = NIL_P(neighbors_val) ? 8 : NUM2INT(neighbors_val);
|
39
|
+
int grid_x = NIL_P(grid_x_val) ? 8 : NUM2INT(grid_x_val);
|
40
|
+
int grid_y = NIL_P(grid_y_val) ? 8 : NUM2INT(grid_y_val);
|
41
|
+
double threshold = NIL_P(threshold_val) ? DBL_MAX : NUM2INT(threshold_val);
|
42
|
+
|
43
|
+
free(DATA_PTR(self));
|
44
|
+
cv::Ptr<cv::FaceRecognizer> ptr = cv::createLBPHFaceRecognizer(radius, neighbors, grid_x, grid_y, threshold);
|
45
|
+
DATA_PTR(self) = ptr;
|
46
|
+
|
47
|
+
cFaceRecognizer::guard_facerecognizer(DATA_PTR(self), ptr);
|
48
|
+
|
49
|
+
return self;
|
50
|
+
}
|
51
|
+
|
52
|
+
void
|
53
|
+
define_ruby_class()
|
54
|
+
{
|
55
|
+
if (rb_klass)
|
56
|
+
return;
|
57
|
+
/*
|
58
|
+
* opencv = rb_define_module("OpenCV");
|
59
|
+
*
|
60
|
+
* note: this comment is used by rdoc.
|
61
|
+
*/
|
62
|
+
VALUE opencv = rb_module_opencv();
|
63
|
+
rb_klass = rb_define_class_under(opencv, "LBPH", cFaceRecognizer::rb_class());
|
64
|
+
rb_define_alloc_func(rb_klass, cFaceRecognizer::allocate_facerecognizer);
|
65
|
+
rb_define_private_method(rb_klass, "initialize", RUBY_METHOD_FUNC(rb_initialize), -1);
|
66
|
+
}
|
67
|
+
|
68
|
+
__NAMESPACE_END_LBPH
|
69
|
+
__NAMESPACE_END_OPENCV
|
70
|
+
|