From 336e9c4ad2eae2e9a0670abdf736a3d180c416f2 Mon Sep 17 00:00:00 2001 From: ser1zw Date: Sun, 24 Feb 2013 02:57:21 +0900 Subject: [PATCH] add minimal functions of EigenFaces --- Manifest.txt | 3 + ext/opencv/eigenfaces.cpp | 143 ++++++++++++++++++++++++++++++++++++++ ext/opencv/eigenfaces.h | 42 +++++++++++ ext/opencv/opencv.cpp | 3 + ext/opencv/opencv.h | 2 + ruby-opencv.gemspec | 8 +-- test/test_eigenfaces.rb | 53 ++++++++++++++ 7 files changed, 250 insertions(+), 4 deletions(-) create mode 100644 ext/opencv/eigenfaces.cpp create mode 100644 ext/opencv/eigenfaces.h create mode 100755 test/test_eigenfaces.rb diff --git a/Manifest.txt b/Manifest.txt index 9e748d2..e322cc6 100644 --- a/Manifest.txt +++ b/Manifest.txt @@ -109,6 +109,8 @@ ext/opencv/cvutils.cpp ext/opencv/cvutils.h ext/opencv/cvvideowriter.cpp ext/opencv/cvvideowriter.h +ext/opencv/eigenfaces.cpp +ext/opencv/eigenfaces.h ext/opencv/gui.cpp ext/opencv/gui.h ext/opencv/iplconvkernel.cpp @@ -216,6 +218,7 @@ test/test_cvsurfpoint.rb test/test_cvtermcriteria.rb test/test_cvtwopoints.rb test/test_cvvideowriter.rb +test/test_eigenfaces.rb test/test_iplconvkernel.rb test/test_iplimage.rb test/test_mouseevent.rb diff --git a/ext/opencv/eigenfaces.cpp b/ext/opencv/eigenfaces.cpp new file mode 100644 index 0000000..dd3a53b --- /dev/null +++ b/ext/opencv/eigenfaces.cpp @@ -0,0 +1,143 @@ +/************************************************************ + + eigenfaces.cpp - + + $Author: ser1zw $ + + Copyright (C) 2013 ser1zw + +************************************************************/ +#include +#include "eigenfaces.h" +/* + * Document-class: OpenCV::EigenFaces + * + */ +__NAMESPACE_BEGIN_OPENCV +__NAMESPACE_BEGIN_EIGENFACES + +VALUE rb_klass; +std::map > ptr_guard_map; + +VALUE +rb_class() +{ + return rb_klass; +} + +void +release_facerecognizer(void *ptr) { + long key = (long)ptr; + ptr_guard_map[key].release(); + ptr_guard_map.erase(key); +} + +VALUE +rb_allocate(VALUE klass) +{ + return Data_Wrap_Struct(klass, 0, release_facerecognizer, NULL); +} + +/* + * call-seq: + * EigenFaces.new(num_components=0, threshold=DBL_MAX) + */ +VALUE +rb_initialize(int argc, VALUE argv[], VALUE self) +{ + VALUE num_components_val, threshold_val; + rb_scan_args(argc, argv, "02", &num_components_val, &threshold_val); + + int num_components = NIL_P(num_components_val) ? 0 : NUM2INT(num_components_val); + double threshold = NIL_P(threshold_val) ? DBL_MAX : NUM2DBL(threshold_val); + + free(DATA_PTR(self)); + cv::Ptr ptr = cv::createEigenFaceRecognizer(num_components, threshold); + DATA_PTR(self) = ptr; + + long key = (long)(DATA_PTR(self)); + ptr_guard_map[key] = ptr; // To avoid cv::Ptr's GC + + return self; +} + +/* + * call-seq: + * train(src, labels) + * + * Trains a FaceRecognizer with given data and associated labels. + */ +VALUE +rb_train(VALUE self, VALUE src, VALUE labels) +{ + Check_Type(src, T_ARRAY); + Check_Type(labels, T_ARRAY); + + VALUE *src_ptr = RARRAY_PTR(src); + int src_size = RARRAY_LEN(src); + std::vector images; + for (int i = 0; i < src_size; i++) { + images.push_back(cv::Mat(CVMAT_WITH_CHECK(src_ptr[i]))); + } + + VALUE *labels_ptr = RARRAY_PTR(labels); + int labels_size = RARRAY_LEN(labels); + std::vector local_labels; + for (int i = 0; i < labels_size; i++) { + local_labels.push_back(NUM2INT(labels_ptr[i])); + } + + cv::FaceRecognizer *self_ptr = FACERECOGNIZER(self); + try { + self_ptr->train(images, local_labels); + } + catch (cv::Exception& e) { + raise_cverror(e); + } + + return Qnil; +} + +/* + * call-seq: + * predict(src) + * + * Predicts a label and associated confidence (e.g. distance) for a given input image. + */ +VALUE +rb_predict(VALUE self, VALUE src) +{ + cv::Mat mat = cv::Mat(CVMAT_WITH_CHECK(src)); + cv::FaceRecognizer *self_ptr = FACERECOGNIZER(self); + int label; + try { + label = self_ptr->predict(mat); + } + catch (cv::Exception& e) { + raise_cverror(e); + } + + return INT2NUM(label); +} + +void +define_ruby_class() +{ + if (rb_klass) + return; + /* + * opencv = rb_define_module("OpenCV"); + * + * note: this comment is used by rdoc. + */ + VALUE opencv = rb_module_opencv(); + rb_klass = rb_define_class_under(opencv, "EigenFaces", rb_cObject); + rb_define_alloc_func(rb_klass, rb_allocate); + rb_define_private_method(rb_klass, "initialize", RUBY_METHOD_FUNC(rb_initialize), -1); + rb_define_method(rb_klass, "train", RUBY_METHOD_FUNC(rb_train), 2); + rb_define_method(rb_klass, "predict", RUBY_METHOD_FUNC(rb_predict), 1); +} + +__NAMESPACE_END_EIGENFACES +__NAMESPACE_END_OPENCV + diff --git a/ext/opencv/eigenfaces.h b/ext/opencv/eigenfaces.h new file mode 100644 index 0000000..0cbdbd9 --- /dev/null +++ b/ext/opencv/eigenfaces.h @@ -0,0 +1,42 @@ +/************************************************************ + + eigenfacerecognizer.h + + $Author: ser1zw $ + + Copyright (C) 2013 ser1zw + +************************************************************/ +#ifndef RUBY_OPENCV_EIGENFACES_H +#define RUBY_OPENCV_EIGENFACES_H + +#include "opencv.h" + +#define __NAMESPACE_BEGIN_EIGENFACES namespace cEigenFaces { +#define __NAMESPACE_END_EIGENFACES } + +__NAMESPACE_BEGIN_OPENCV +__NAMESPACE_BEGIN_EIGENFACES + +VALUE rb_class(); + +void define_ruby_class(); +VALUE rb_allocate(VALUE klass); +VALUE rb_initialize(int argc, VALUE argv[], VALUE self); +VALUE rb_train(VALUE self, VALUE src, VALUE labels); + +__NAMESPACE_END_EIGENFACES + +inline cv::FaceRecognizer* +FACERECOGNIZER(VALUE object) +{ + cv::FaceRecognizer *ptr; + Data_Get_Struct(object, cv::FaceRecognizer, ptr); + return ptr; +} + +__NAMESPACE_END_OPENCV + +#endif // RUBY_OPENCV_EIGENFACES_H + + diff --git a/ext/opencv/opencv.cpp b/ext/opencv/opencv.cpp index c19bbf4..f163c46 100644 --- a/ext/opencv/opencv.cpp +++ b/ext/opencv/opencv.cpp @@ -706,6 +706,9 @@ extern "C" { mOpenCV::cCvConnectedComp::define_ruby_class(); mOpenCV::cCvAvgComp::define_ruby_class(); mOpenCV::cCvHaarClassifierCascade::define_ruby_class(); + + mOpenCV::cEigenFaces::define_ruby_class(); + mOpenCV::mGUI::define_ruby_module(); mOpenCV::mGUI::cWindow::define_ruby_class(); mOpenCV::mGUI::cTrackbar::define_ruby_class(); diff --git a/ext/opencv/opencv.h b/ext/opencv/opencv.h index cdabe4e..4f5aa4f 100644 --- a/ext/opencv/opencv.h +++ b/ext/opencv/opencv.h @@ -130,6 +130,8 @@ extern "C" { #include "cvfeaturetree.h" +#include "eigenfaces.h" + // GUI #include "gui.h" #include "window.h" diff --git a/ruby-opencv.gemspec b/ruby-opencv.gemspec index ec76a17..83f9f87 100644 --- a/ruby-opencv.gemspec +++ b/ruby-opencv.gemspec @@ -2,23 +2,23 @@ Gem::Specification.new do |s| s.name = "ruby-opencv" - s.version = "0.0.8.20130127124736" + s.version = "0.0.8.20130224024508" s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version= s.authors = ["lsxi", "ser1zw", "pcting"] - s.date = "2013-01-27" + s.date = "2013-02-23" s.description = "" s.email = ["masakazu.yonekura@gmail.com", "azariahsawtikes@gmail.com", "pcting@gmail.com"] s.extensions = ["extconf.rb"] s.extra_rdoc_files = ["History.txt", "License.txt", "Manifest.txt", "examples/matching_to_many_images/train/trainImages.txt"] - s.files = [".gitignore", "DEVELOPERS_NOTE.md", "Gemfile", "History.txt", "License.txt", "Manifest.txt", "README.md", "Rakefile", "examples/alpha_blend.rb", "examples/box.png", "examples/box_in_scene.png", "examples/contours/bitmap-contours-with-labels.png", "examples/contours/bitmap-contours.png", "examples/contours/bounding-box-detect-canny.rb", "examples/contours/contour_retrieval_modes.rb", "examples/contours/rotated-boxes.jpg", "examples/convexhull.rb", "examples/face_detect.rb", "examples/find_obj.rb", "examples/houghcircle.rb", "examples/inpaint.png", "examples/inpaint.rb", "examples/lenna-rotated.jpg", "examples/lenna.jpg", "examples/match_kdtree.rb", "examples/matching_to_many_images.rb", "examples/matching_to_many_images/query.png", "examples/matching_to_many_images/train/1.png", "examples/matching_to_many_images/train/2.png", "examples/matching_to_many_images/train/3.png", "examples/matching_to_many_images/train/trainImages.txt", "examples/paint.rb", "examples/snake.rb", "examples/stuff.jpg", "examples/tiffany.jpg", "ext/opencv/curve.cpp", "ext/opencv/curve.h", "ext/opencv/cvavgcomp.cpp", "ext/opencv/cvavgcomp.h", "ext/opencv/cvbox2d.cpp", "ext/opencv/cvbox2d.h", "ext/opencv/cvcapture.cpp", "ext/opencv/cvcapture.h", "ext/opencv/cvchain.cpp", "ext/opencv/cvchain.h", "ext/opencv/cvcircle32f.cpp", "ext/opencv/cvcircle32f.h", "ext/opencv/cvcondensation.cpp", "ext/opencv/cvcondensation.h", "ext/opencv/cvconnectedcomp.cpp", "ext/opencv/cvconnectedcomp.h", "ext/opencv/cvcontour.cpp", "ext/opencv/cvcontour.h", "ext/opencv/cvcontourtree.cpp", "ext/opencv/cvcontourtree.h", "ext/opencv/cvconvexitydefect.cpp", "ext/opencv/cvconvexitydefect.h", "ext/opencv/cverror.cpp", "ext/opencv/cverror.h", "ext/opencv/cvfeaturetree.cpp", "ext/opencv/cvfeaturetree.h", "ext/opencv/cvfont.cpp", "ext/opencv/cvfont.h", "ext/opencv/cvhaarclassifiercascade.cpp", "ext/opencv/cvhaarclassifiercascade.h", "ext/opencv/cvhistogram.cpp", "ext/opencv/cvhistogram.h", "ext/opencv/cvhumoments.cpp", "ext/opencv/cvhumoments.h", "ext/opencv/cvline.cpp", "ext/opencv/cvline.h", "ext/opencv/cvmat.cpp", "ext/opencv/cvmat.h", "ext/opencv/cvmatnd.cpp", "ext/opencv/cvmatnd.h", "ext/opencv/cvmemstorage.cpp", "ext/opencv/cvmemstorage.h", "ext/opencv/cvmoments.cpp", "ext/opencv/cvmoments.h", "ext/opencv/cvpoint.cpp", "ext/opencv/cvpoint.h", "ext/opencv/cvpoint2d32f.cpp", "ext/opencv/cvpoint2d32f.h", "ext/opencv/cvpoint3d32f.cpp", "ext/opencv/cvpoint3d32f.h", "ext/opencv/cvrect.cpp", "ext/opencv/cvrect.h", "ext/opencv/cvscalar.cpp", "ext/opencv/cvscalar.h", "ext/opencv/cvseq.cpp", "ext/opencv/cvseq.h", "ext/opencv/cvsize.cpp", "ext/opencv/cvsize.h", "ext/opencv/cvsize2d32f.cpp", "ext/opencv/cvsize2d32f.h", "ext/opencv/cvslice.cpp", "ext/opencv/cvslice.h", "ext/opencv/cvsparsemat.cpp", "ext/opencv/cvsparsemat.h", "ext/opencv/cvsurfparams.cpp", "ext/opencv/cvsurfparams.h", "ext/opencv/cvsurfpoint.cpp", "ext/opencv/cvsurfpoint.h", "ext/opencv/cvtermcriteria.cpp", "ext/opencv/cvtermcriteria.h", "ext/opencv/cvtwopoints.cpp", "ext/opencv/cvtwopoints.h", "ext/opencv/cvutils.cpp", "ext/opencv/cvutils.h", "ext/opencv/cvvideowriter.cpp", "ext/opencv/cvvideowriter.h", "ext/opencv/gui.cpp", "ext/opencv/gui.h", "ext/opencv/iplconvkernel.cpp", "ext/opencv/iplconvkernel.h", "ext/opencv/iplimage.cpp", "ext/opencv/iplimage.h", "ext/opencv/lib/opencv.rb", "ext/opencv/lib/opencv/psyched_yaml.rb", "ext/opencv/lib/opencv/version.rb", "ext/opencv/mouseevent.cpp", "ext/opencv/mouseevent.h", "ext/opencv/opencv.cpp", "ext/opencv/opencv.h", "ext/opencv/pointset.cpp", "ext/opencv/pointset.h", "ext/opencv/trackbar.cpp", "ext/opencv/trackbar.h", "ext/opencv/window.cpp", "ext/opencv/window.h", "extconf.rb", "images/CvMat_sobel.png", "images/CvMat_sub_rect.png", "images/CvSeq_relationmap.png", "images/face_detect_from_lena.jpg", "ruby-opencv.gemspec", "test/helper.rb", "test/runner.rb", "test/samples/airplane.jpg", "test/samples/baboon.jpg", "test/samples/baboon200.jpg", "test/samples/baboon200_rotated.jpg", "test/samples/blank0.jpg", "test/samples/blank1.jpg", "test/samples/blank2.jpg", "test/samples/blank3.jpg", "test/samples/blank4.jpg", "test/samples/blank5.jpg", "test/samples/blank6.jpg", "test/samples/blank7.jpg", "test/samples/blank8.jpg", "test/samples/blank9.jpg", "test/samples/cat.jpg", "test/samples/chessboard.jpg", "test/samples/contours.jpg", "test/samples/fruits.jpg", "test/samples/haarcascade_frontalface_alt.xml.gz", "test/samples/inpaint-mask.bmp", "test/samples/lena-256x256.jpg", "test/samples/lena-32x32.jpg", "test/samples/lena-eyes.jpg", "test/samples/lena-inpaint.jpg", "test/samples/lena.jpg", "test/samples/lines.jpg", "test/samples/messy0.jpg", "test/samples/messy1.jpg", "test/samples/movie_sample.avi", "test/samples/one_way_train_0000.jpg", "test/samples/one_way_train_0001.jpg", "test/samples/partially_blank0.jpg", "test/samples/partially_blank1.jpg", "test/samples/smooth0.jpg", "test/samples/smooth1.jpg", "test/samples/smooth2.jpg", "test/samples/smooth3.jpg", "test/samples/smooth4.jpg", "test/samples/smooth5.jpg", "test/samples/smooth6.jpg", "test/samples/str-cv-rotated.jpg", "test/samples/str-cv.jpg", "test/samples/str-ov.jpg", "test/samples/stuff.jpg", "test/test_curve.rb", "test/test_cvavgcomp.rb", "test/test_cvbox2d.rb", "test/test_cvcapture.rb", "test/test_cvchain.rb", "test/test_cvcircle32f.rb", "test/test_cvconnectedcomp.rb", "test/test_cvcontour.rb", "test/test_cvcontourtree.rb", "test/test_cverror.rb", "test/test_cvfeaturetree.rb", "test/test_cvfont.rb", "test/test_cvhaarclassifiercascade.rb", "test/test_cvhistogram.rb", "test/test_cvhumoments.rb", "test/test_cvline.rb", "test/test_cvmat.rb", "test/test_cvmat_drawing.rb", "test/test_cvmat_dxt.rb", "test/test_cvmat_imageprocessing.rb", "test/test_cvmat_matching.rb", "test/test_cvmoments.rb", "test/test_cvpoint.rb", "test/test_cvpoint2d32f.rb", "test/test_cvpoint3d32f.rb", "test/test_cvrect.rb", "test/test_cvscalar.rb", "test/test_cvseq.rb", "test/test_cvsize.rb", "test/test_cvsize2d32f.rb", "test/test_cvslice.rb", "test/test_cvsurfparams.rb", "test/test_cvsurfpoint.rb", "test/test_cvtermcriteria.rb", "test/test_cvtwopoints.rb", "test/test_cvvideowriter.rb", "test/test_iplconvkernel.rb", "test/test_iplimage.rb", "test/test_mouseevent.rb", "test/test_opencv.rb", "test/test_pointset.rb", "test/test_preliminary.rb", "test/test_trackbar.rb", "test/test_window.rb"] + s.files = [".gitignore", "DEVELOPERS_NOTE.md", "Gemfile", "History.txt", "License.txt", "Manifest.txt", "README.md", "Rakefile", "examples/alpha_blend.rb", "examples/box.png", "examples/box_in_scene.png", "examples/contours/bitmap-contours-with-labels.png", "examples/contours/bitmap-contours.png", "examples/contours/bounding-box-detect-canny.rb", "examples/contours/contour_retrieval_modes.rb", "examples/contours/rotated-boxes.jpg", "examples/convexhull.rb", "examples/face_detect.rb", "examples/find_obj.rb", "examples/houghcircle.rb", "examples/inpaint.png", "examples/inpaint.rb", "examples/lenna-rotated.jpg", "examples/lenna.jpg", "examples/match_kdtree.rb", "examples/matching_to_many_images.rb", "examples/matching_to_many_images/query.png", "examples/matching_to_many_images/train/1.png", "examples/matching_to_many_images/train/2.png", "examples/matching_to_many_images/train/3.png", "examples/matching_to_many_images/train/trainImages.txt", "examples/paint.rb", "examples/snake.rb", "examples/stuff.jpg", "examples/tiffany.jpg", "ext/opencv/curve.cpp", "ext/opencv/curve.h", "ext/opencv/cvavgcomp.cpp", "ext/opencv/cvavgcomp.h", "ext/opencv/cvbox2d.cpp", "ext/opencv/cvbox2d.h", "ext/opencv/cvcapture.cpp", "ext/opencv/cvcapture.h", "ext/opencv/cvchain.cpp", "ext/opencv/cvchain.h", "ext/opencv/cvcircle32f.cpp", "ext/opencv/cvcircle32f.h", "ext/opencv/cvcondensation.cpp", "ext/opencv/cvcondensation.h", "ext/opencv/cvconnectedcomp.cpp", "ext/opencv/cvconnectedcomp.h", "ext/opencv/cvcontour.cpp", "ext/opencv/cvcontour.h", "ext/opencv/cvcontourtree.cpp", "ext/opencv/cvcontourtree.h", "ext/opencv/cvconvexitydefect.cpp", "ext/opencv/cvconvexitydefect.h", "ext/opencv/cverror.cpp", "ext/opencv/cverror.h", "ext/opencv/cvfeaturetree.cpp", "ext/opencv/cvfeaturetree.h", "ext/opencv/cvfont.cpp", "ext/opencv/cvfont.h", "ext/opencv/cvhaarclassifiercascade.cpp", "ext/opencv/cvhaarclassifiercascade.h", "ext/opencv/cvhistogram.cpp", "ext/opencv/cvhistogram.h", "ext/opencv/cvhumoments.cpp", "ext/opencv/cvhumoments.h", "ext/opencv/cvline.cpp", "ext/opencv/cvline.h", "ext/opencv/cvmat.cpp", "ext/opencv/cvmat.h", "ext/opencv/cvmatnd.cpp", "ext/opencv/cvmatnd.h", "ext/opencv/cvmemstorage.cpp", "ext/opencv/cvmemstorage.h", "ext/opencv/cvmoments.cpp", "ext/opencv/cvmoments.h", "ext/opencv/cvpoint.cpp", "ext/opencv/cvpoint.h", "ext/opencv/cvpoint2d32f.cpp", "ext/opencv/cvpoint2d32f.h", "ext/opencv/cvpoint3d32f.cpp", "ext/opencv/cvpoint3d32f.h", "ext/opencv/cvrect.cpp", "ext/opencv/cvrect.h", "ext/opencv/cvscalar.cpp", "ext/opencv/cvscalar.h", "ext/opencv/cvseq.cpp", "ext/opencv/cvseq.h", "ext/opencv/cvsize.cpp", "ext/opencv/cvsize.h", "ext/opencv/cvsize2d32f.cpp", "ext/opencv/cvsize2d32f.h", "ext/opencv/cvslice.cpp", "ext/opencv/cvslice.h", "ext/opencv/cvsparsemat.cpp", "ext/opencv/cvsparsemat.h", "ext/opencv/cvsurfparams.cpp", "ext/opencv/cvsurfparams.h", "ext/opencv/cvsurfpoint.cpp", "ext/opencv/cvsurfpoint.h", "ext/opencv/cvtermcriteria.cpp", "ext/opencv/cvtermcriteria.h", "ext/opencv/cvtwopoints.cpp", "ext/opencv/cvtwopoints.h", "ext/opencv/cvutils.cpp", "ext/opencv/cvutils.h", "ext/opencv/cvvideowriter.cpp", "ext/opencv/cvvideowriter.h", "ext/opencv/eigenfaces.cpp", "ext/opencv/eigenfaces.h", "ext/opencv/gui.cpp", "ext/opencv/gui.h", "ext/opencv/iplconvkernel.cpp", "ext/opencv/iplconvkernel.h", "ext/opencv/iplimage.cpp", "ext/opencv/iplimage.h", "ext/opencv/lib/opencv.rb", "ext/opencv/lib/opencv/psyched_yaml.rb", "ext/opencv/lib/opencv/version.rb", "ext/opencv/mouseevent.cpp", "ext/opencv/mouseevent.h", "ext/opencv/opencv.cpp", "ext/opencv/opencv.h", "ext/opencv/pointset.cpp", "ext/opencv/pointset.h", "ext/opencv/trackbar.cpp", "ext/opencv/trackbar.h", "ext/opencv/window.cpp", "ext/opencv/window.h", "extconf.rb", "images/CvMat_sobel.png", "images/CvMat_sub_rect.png", "images/CvSeq_relationmap.png", "images/face_detect_from_lena.jpg", "ruby-opencv.gemspec", "test/helper.rb", "test/runner.rb", "test/samples/airplane.jpg", "test/samples/baboon.jpg", "test/samples/baboon200.jpg", "test/samples/baboon200_rotated.jpg", "test/samples/blank0.jpg", "test/samples/blank1.jpg", "test/samples/blank2.jpg", "test/samples/blank3.jpg", "test/samples/blank4.jpg", "test/samples/blank5.jpg", "test/samples/blank6.jpg", "test/samples/blank7.jpg", "test/samples/blank8.jpg", "test/samples/blank9.jpg", "test/samples/cat.jpg", "test/samples/chessboard.jpg", "test/samples/contours.jpg", "test/samples/fruits.jpg", "test/samples/haarcascade_frontalface_alt.xml.gz", "test/samples/inpaint-mask.bmp", "test/samples/lena-256x256.jpg", "test/samples/lena-32x32.jpg", "test/samples/lena-eyes.jpg", "test/samples/lena-inpaint.jpg", "test/samples/lena.jpg", "test/samples/lines.jpg", "test/samples/messy0.jpg", "test/samples/messy1.jpg", "test/samples/movie_sample.avi", "test/samples/one_way_train_0000.jpg", "test/samples/one_way_train_0001.jpg", "test/samples/partially_blank0.jpg", "test/samples/partially_blank1.jpg", "test/samples/smooth0.jpg", "test/samples/smooth1.jpg", "test/samples/smooth2.jpg", "test/samples/smooth3.jpg", "test/samples/smooth4.jpg", "test/samples/smooth5.jpg", "test/samples/smooth6.jpg", "test/samples/str-cv-rotated.jpg", "test/samples/str-cv.jpg", "test/samples/str-ov.jpg", "test/samples/stuff.jpg", "test/test_curve.rb", "test/test_cvavgcomp.rb", "test/test_cvbox2d.rb", "test/test_cvcapture.rb", "test/test_cvchain.rb", "test/test_cvcircle32f.rb", "test/test_cvconnectedcomp.rb", "test/test_cvcontour.rb", "test/test_cvcontourtree.rb", "test/test_cverror.rb", "test/test_cvfeaturetree.rb", "test/test_cvfont.rb", "test/test_cvhaarclassifiercascade.rb", "test/test_cvhistogram.rb", "test/test_cvhumoments.rb", "test/test_cvline.rb", "test/test_cvmat.rb", "test/test_cvmat_drawing.rb", "test/test_cvmat_dxt.rb", "test/test_cvmat_imageprocessing.rb", "test/test_cvmat_matching.rb", "test/test_cvmoments.rb", "test/test_cvpoint.rb", "test/test_cvpoint2d32f.rb", "test/test_cvpoint3d32f.rb", "test/test_cvrect.rb", "test/test_cvscalar.rb", "test/test_cvseq.rb", "test/test_cvsize.rb", "test/test_cvsize2d32f.rb", "test/test_cvslice.rb", "test/test_cvsurfparams.rb", "test/test_cvsurfpoint.rb", "test/test_cvtermcriteria.rb", "test/test_cvtwopoints.rb", "test/test_cvvideowriter.rb", "test/test_eigenfaces.rb", "test/test_iplconvkernel.rb", "test/test_iplimage.rb", "test/test_mouseevent.rb", "test/test_opencv.rb", "test/test_pointset.rb", "test/test_preliminary.rb", "test/test_trackbar.rb", "test/test_window.rb"] s.homepage = "https://github.com/ruby-opencv/ruby-opencv/" s.rdoc_options = ["--main", "README.md"] s.require_paths = ["lib"] s.rubyforge_project = "ruby-opencv" s.rubygems_version = "1.8.24" s.summary = "OpenCV wrapper for Ruby" - s.test_files = ["test/test_cvcontourtree.rb", "test/test_iplconvkernel.rb", "test/test_cvsize2d32f.rb", "test/test_cvconnectedcomp.rb", "test/test_cvcontour.rb", "test/test_cvslice.rb", "test/test_cvmat_matching.rb", "test/test_trackbar.rb", "test/test_cvpoint3d32f.rb", "test/test_cvpoint2d32f.rb", "test/test_cvcapture.rb", "test/test_cvfont.rb", "test/test_cvhumoments.rb", "test/test_cvmat_dxt.rb", "test/test_cvbox2d.rb", "test/test_iplimage.rb", "test/test_preliminary.rb", "test/test_cvmat_drawing.rb", "test/test_cvsurfparams.rb", "test/test_cvcircle32f.rb", "test/test_pointset.rb", "test/test_cvmat.rb", "test/test_cvhistogram.rb", "test/test_cverror.rb", "test/test_cvtermcriteria.rb", "test/test_cvmoments.rb", "test/test_cvchain.rb", "test/test_cvpoint.rb", "test/test_cvavgcomp.rb", "test/test_cvrect.rb", "test/test_cvvideowriter.rb", "test/test_curve.rb", "test/test_window.rb", "test/test_cvline.rb", "test/test_opencv.rb", "test/test_cvfeaturetree.rb", "test/test_cvseq.rb", "test/test_cvsize.rb", "test/test_mouseevent.rb", "test/test_cvmat_imageprocessing.rb", "test/test_cvtwopoints.rb", "test/test_cvscalar.rb", "test/test_cvsurfpoint.rb", "test/test_cvhaarclassifiercascade.rb"] + s.test_files = ["test/test_cvcontourtree.rb", "test/test_iplconvkernel.rb", "test/test_cvsize2d32f.rb", "test/test_cvconnectedcomp.rb", "test/test_cvcontour.rb", "test/test_cvslice.rb", "test/test_cvmat_matching.rb", "test/test_trackbar.rb", "test/test_cvpoint3d32f.rb", "test/test_cvpoint2d32f.rb", "test/test_cvcapture.rb", "test/test_cvfont.rb", "test/test_cvhumoments.rb", "test/test_cvmat_dxt.rb", "test/test_cvbox2d.rb", "test/test_iplimage.rb", "test/test_preliminary.rb", "test/test_cvmat_drawing.rb", "test/test_cvsurfparams.rb", "test/test_cvcircle32f.rb", "test/test_pointset.rb", "test/test_cvmat.rb", "test/test_cvhistogram.rb", "test/test_cverror.rb", "test/test_cvtermcriteria.rb", "test/test_cvmoments.rb", "test/test_cvchain.rb", "test/test_cvpoint.rb", "test/test_cvavgcomp.rb", "test/test_cvrect.rb", "test/test_cvvideowriter.rb", "test/test_curve.rb", "test/test_window.rb", "test/test_cvline.rb", "test/test_opencv.rb", "test/test_cvfeaturetree.rb", "test/test_cvseq.rb", "test/test_cvsize.rb", "test/test_eigenfaces.rb", "test/test_mouseevent.rb", "test/test_cvmat_imageprocessing.rb", "test/test_cvtwopoints.rb", "test/test_cvscalar.rb", "test/test_cvsurfpoint.rb", "test/test_cvhaarclassifiercascade.rb"] if s.respond_to? :specification_version then s.specification_version = 3 diff --git a/test/test_eigenfaces.rb b/test/test_eigenfaces.rb new file mode 100755 index 0000000..3bd6cca --- /dev/null +++ b/test/test_eigenfaces.rb @@ -0,0 +1,53 @@ +#!/usr/bin/env ruby +# -*- mode: ruby; coding: utf-8-unix -*- +require 'test/unit' +require 'opencv' +require File.expand_path(File.dirname(__FILE__)) + '/helper' + +include OpenCV + +# Tests for OpenCV::EigenFaces +class TestEigenFaces < OpenCVTestCase + def setup + @eigenfaces = EigenFaces.new + end + + def test_initialize + [EigenFaces.new, EigenFaces.new(1), EigenFaces.new(1, 99999)].each { |ef| + assert_equal(EigenFaces, ef.class) + } + + assert_raise(TypeError) { + EigenFaces.new(DUMMY_OBJ) + } + + assert_raise(TypeError) { + EigenFaces.new(1, DUMMY_OBJ) + } + end + + def test_train + img = CvMat.load(FILENAME_LENA256x256, CV_LOAD_IMAGE_GRAYSCALE) + assert_nil(@eigenfaces.train([img], [1])) + + assert_raise(TypeError) { + @eigenfaces.train(DUMMY_OBJ, [1]) + } + + assert_raise(TypeError) { + @eigenfaces.train([img], DUMMY_OBJ) + } + end + + def test_predict + img = CvMat.load(FILENAME_LENA256x256, CV_LOAD_IMAGE_GRAYSCALE) + label = 1 + @eigenfaces.train([img], [label]) + assert_equal(label, @eigenfaces.predict(img)) + + assert_raise(TypeError) { + @eigenfaces.predict(DUMMY_OBJ) + } + end +end +