diff --git a/modules/datasets/doc/datasets.rst b/modules/datasets/doc/datasets.rst index 6bf2bd8c8..eddd482cf 100644 --- a/modules/datasets/doc/datasets.rst +++ b/modules/datasets/doc/datasets.rst @@ -278,6 +278,32 @@ Currently implemented loading "Scene Recognition Benchmark. SUN397". Planned to 3. To load data run: ./opencv/build/bin/example_datasets_or_sun -p=/home/user/path_to_unpacked_folder/SUN397/ +Pedestrian Detection +-------------------- + +PD_caltech +========== +.. ocv:class:: PD_caltech + +Implements loading dataset: + +_`"Caltech Pedestrian Detection Benchmark"`: http://www.vision.caltech.edu/Image_Datasets/CaltechPedestrians/ + +.. note:: First version of Caltech Pedestrian dataset loading. + + Code to unpack all frames from seq files commented as their number is huge! + So currently load only meta information without data. + + Also ground truth isn't processed, as need to convert it from mat files first. + +.. note:: Usage + + 1. From link above download dataset files: set00.tar-set10.tar. + + 2. Unpack them to separate folder. + + 3. To load data run: ./opencv/build/bin/example_datasets_pd_caltech -p=/home/user/path_to_unpacked_folders/ + SLAM ---- diff --git a/modules/datasets/include/opencv2/datasets/pd_caltech.hpp b/modules/datasets/include/opencv2/datasets/pd_caltech.hpp new file mode 100644 index 000000000..69a99359d --- /dev/null +++ b/modules/datasets/include/opencv2/datasets/pd_caltech.hpp @@ -0,0 +1,84 @@ +/*M/////////////////////////////////////////////////////////////////////////////////////// +// +// IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING. +// +// By downloading, copying, installing or using the software you agree to this license. +// If you do not agree to this license, do not download, install, +// copy or use the software. +// +// +// License Agreement +// For Open Source Computer Vision Library +// +// Copyright (C) 2014, Itseez Inc, all rights reserved. +// Third party copyrights are property of their respective owners. +// +// Redistribution and use in source and binary forms, with or without modification, +// are permitted provided that the following conditions are met: +// +// * Redistribution's of source code must retain the above copyright notice, +// this list of conditions and the following disclaimer. +// +// * Redistribution's in binary form must reproduce the above copyright notice, +// this list of conditions and the following disclaimer in the documentation +// and/or other materials provided with the distribution. +// +// * The name of the copyright holders may not be used to endorse or promote products +// derived from this software without specific prior written permission. +// +// This software is provided by the copyright holders and contributors "as is" and +// any express or implied warranties, including, but not limited to, the implied +// warranties of merchantability and fitness for a particular purpose are disclaimed. +// In no event shall the Itseez Inc or contributors be liable for any direct, +// indirect, incidental, special, exemplary, or consequential damages +// (including, but not limited to, procurement of substitute goods or services; +// loss of use, data, or profits; or business interruption) however caused +// and on any theory of liability, whether in contract, strict liability, +// or tort (including negligence or otherwise) arising in any way out of +// the use of this software, even if advised of the possibility of such damage. +// +//M*/ + +#ifndef OPENCV_DATASETS_PD_CALTECH_HPP +#define OPENCV_DATASETS_PD_CALTECH_HPP + +#include +#include + +#include "opencv2/datasets/dataset.hpp" + +#include + +namespace cv +{ +namespace datasets +{ + +struct PD_caltechObj : public Object +{ + //double groundTrue[][]; + //Mat image; + std::string name; + std::vector< std::string > imageNames; +}; + +// +// first version of Caltech Pedestrian dataset loading +// code to unpack all frames from seq files commented as their number is huge +// so currently load only meta information without data +// +// also ground truth isn't processed, as need to convert it from mat files first +// + +class CV_EXPORTS PD_caltech : public Dataset +{ +public: + virtual void load(const std::string &path) = 0; + + static Ptr create(); +}; + +} +} + +#endif diff --git a/modules/datasets/include/opencv2/datasets/util.hpp b/modules/datasets/include/opencv2/datasets/util.hpp index 9d20fbab7..9832e7406 100644 --- a/modules/datasets/include/opencv2/datasets/util.hpp +++ b/modules/datasets/include/opencv2/datasets/util.hpp @@ -54,6 +54,8 @@ namespace datasets void CV_EXPORTS split(const std::string &s, std::vector &elems, char delim); +void CV_EXPORTS createDirectory(const std::string &path); + void CV_EXPORTS getDirList(const std::string &dirName, std::vector &fileNames); } diff --git a/modules/datasets/samples/pd_caltech.cpp b/modules/datasets/samples/pd_caltech.cpp new file mode 100644 index 000000000..ee17112e8 --- /dev/null +++ b/modules/datasets/samples/pd_caltech.cpp @@ -0,0 +1,86 @@ +/*M/////////////////////////////////////////////////////////////////////////////////////// +// +// IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING. +// +// By downloading, copying, installing or using the software you agree to this license. +// If you do not agree to this license, do not download, install, +// copy or use the software. +// +// +// License Agreement +// For Open Source Computer Vision Library +// +// Copyright (C) 2014, Itseez Inc, all rights reserved. +// Third party copyrights are property of their respective owners. +// +// Redistribution and use in source and binary forms, with or without modification, +// are permitted provided that the following conditions are met: +// +// * Redistribution's of source code must retain the above copyright notice, +// this list of conditions and the following disclaimer. +// +// * Redistribution's in binary form must reproduce the above copyright notice, +// this list of conditions and the following disclaimer in the documentation +// and/or other materials provided with the distribution. +// +// * The name of the copyright holders may not be used to endorse or promote products +// derived from this software without specific prior written permission. +// +// This software is provided by the copyright holders and contributors "as is" and +// any express or implied warranties, including, but not limited to, the implied +// warranties of merchantability and fitness for a particular purpose are disclaimed. +// In no event shall the Itseez Inc or contributors be liable for any direct, +// indirect, incidental, special, exemplary, or consequential damages +// (including, but not limited to, procurement of substitute goods or services; +// loss of use, data, or profits; or business interruption) however caused +// and on any theory of liability, whether in contract, strict liability, +// or tort (including negligence or otherwise) arising in any way out of +// the use of this software, even if advised of the possibility of such damage. +// +//M*/ + +#include "opencv2/datasets/pd_caltech.hpp" + +#include + +#include + +#include +#include + +using namespace std; +using namespace cv; +using namespace cv::datasets; + +int main(int argc, char *argv[]) +{ + const char *keys = + "{ help h usage ? | | show this message }" + "{ path p |true| path to dataset }"; + CommandLineParser parser(argc, argv, keys); + string path(parser.get("path")); + if (parser.has("help") || path=="true") + { + parser.printMessage(); + return -1; + } + + Ptr dataset = PD_caltech::create(); + dataset->load(path); + + // *************** + // dataset contains for each object its images. + // currently on loading extract all images to folder path/../images/ + // For example, let output train size and first element of first object + // and number of it's images. + printf("train size: %u\n", (unsigned int)dataset->getTrain().size()); + + PD_caltechObj *example = static_cast(dataset->getTrain()[0].get()); + printf("first train object:\n"); + printf("name: %s\n", example->name.c_str()); + printf("images number: %u\n", (unsigned int)example->imageNames.size()); + printf("first image name: %s\n", example->imageNames[0].c_str()); + printf("images were extracted to path/../images/\n"); + + return 0; +} diff --git a/modules/datasets/src/ar_hmdb.cpp b/modules/datasets/src/ar_hmdb.cpp index 876857ee1..6baa28c05 100644 --- a/modules/datasets/src/ar_hmdb.cpp +++ b/modules/datasets/src/ar_hmdb.cpp @@ -40,6 +40,7 @@ //M*/ #include "opencv2/datasets/ar_hmdb.hpp" +#include "opencv2/datasets/util.hpp" #include "precomp.hpp" namespace cv diff --git a/modules/datasets/src/ar_sports.cpp b/modules/datasets/src/ar_sports.cpp index 3af1ffd72..83cf79c6b 100644 --- a/modules/datasets/src/ar_sports.cpp +++ b/modules/datasets/src/ar_sports.cpp @@ -40,6 +40,7 @@ //M*/ #include "opencv2/datasets/ar_sports.hpp" +#include "opencv2/datasets/util.hpp" #include "precomp.hpp" namespace cv diff --git a/modules/datasets/src/dataset.cpp b/modules/datasets/src/dataset.cpp index 083e870ca..38b74167c 100644 --- a/modules/datasets/src/dataset.cpp +++ b/modules/datasets/src/dataset.cpp @@ -40,6 +40,7 @@ //M*/ #include "opencv2/datasets/dataset.hpp" +#include "opencv2/datasets/util.hpp" #include "precomp.hpp" namespace cv diff --git a/modules/datasets/src/fr_lfw.cpp b/modules/datasets/src/fr_lfw.cpp index 57f1ce415..16e0133c7 100644 --- a/modules/datasets/src/fr_lfw.cpp +++ b/modules/datasets/src/fr_lfw.cpp @@ -40,6 +40,7 @@ //M*/ #include "opencv2/datasets/fr_lfw.hpp" +#include "opencv2/datasets/util.hpp" #include "precomp.hpp" #include diff --git a/modules/datasets/src/gr_chalearn.cpp b/modules/datasets/src/gr_chalearn.cpp index 0f9e5ca6a..7cbed3ca9 100644 --- a/modules/datasets/src/gr_chalearn.cpp +++ b/modules/datasets/src/gr_chalearn.cpp @@ -40,6 +40,7 @@ //M*/ #include "opencv2/datasets/gr_chalearn.hpp" +#include "opencv2/datasets/util.hpp" #include "precomp.hpp" namespace cv diff --git a/modules/datasets/src/gr_skig.cpp b/modules/datasets/src/gr_skig.cpp index 3bff0d322..954ed509a 100644 --- a/modules/datasets/src/gr_skig.cpp +++ b/modules/datasets/src/gr_skig.cpp @@ -40,6 +40,7 @@ //M*/ #include "opencv2/datasets/gr_skig.hpp" +#include "opencv2/datasets/util.hpp" #include "precomp.hpp" #include diff --git a/modules/datasets/src/hpe_parse.cpp b/modules/datasets/src/hpe_parse.cpp index 0a909beb7..2c37a96e0 100644 --- a/modules/datasets/src/hpe_parse.cpp +++ b/modules/datasets/src/hpe_parse.cpp @@ -40,6 +40,7 @@ //M*/ #include "opencv2/datasets/hpe_parse.hpp" +#include "opencv2/datasets/util.hpp" #include "precomp.hpp" namespace cv diff --git a/modules/datasets/src/ir_affine.cpp b/modules/datasets/src/ir_affine.cpp index e7a9e8922..b8946106c 100644 --- a/modules/datasets/src/ir_affine.cpp +++ b/modules/datasets/src/ir_affine.cpp @@ -40,6 +40,7 @@ //M*/ #include "opencv2/datasets/ir_affine.hpp" +#include "opencv2/datasets/util.hpp" #include "precomp.hpp" namespace cv diff --git a/modules/datasets/src/ir_robot.cpp b/modules/datasets/src/ir_robot.cpp index 145177d02..338633b46 100644 --- a/modules/datasets/src/ir_robot.cpp +++ b/modules/datasets/src/ir_robot.cpp @@ -40,6 +40,7 @@ //M*/ #include "opencv2/datasets/ir_robot.hpp" +#include "opencv2/datasets/util.hpp" #include "precomp.hpp" namespace cv diff --git a/modules/datasets/src/is_bsds.cpp b/modules/datasets/src/is_bsds.cpp index c098de8c0..b99315bc0 100644 --- a/modules/datasets/src/is_bsds.cpp +++ b/modules/datasets/src/is_bsds.cpp @@ -40,6 +40,7 @@ //M*/ #include "opencv2/datasets/is_bsds.hpp" +#include "opencv2/datasets/util.hpp" #include "precomp.hpp" namespace cv diff --git a/modules/datasets/src/is_weizmann.cpp b/modules/datasets/src/is_weizmann.cpp index ad4c03671..fc75ae742 100644 --- a/modules/datasets/src/is_weizmann.cpp +++ b/modules/datasets/src/is_weizmann.cpp @@ -40,6 +40,7 @@ //M*/ #include "opencv2/datasets/is_weizmann.hpp" +#include "opencv2/datasets/util.hpp" #include "precomp.hpp" namespace cv diff --git a/modules/datasets/src/msm_epfl.cpp b/modules/datasets/src/msm_epfl.cpp index d2802035f..663adedcb 100644 --- a/modules/datasets/src/msm_epfl.cpp +++ b/modules/datasets/src/msm_epfl.cpp @@ -40,6 +40,7 @@ //M*/ #include "opencv2/datasets/msm_epfl.hpp" +#include "opencv2/datasets/util.hpp" #include "precomp.hpp" namespace cv diff --git a/modules/datasets/src/msm_middlebury.cpp b/modules/datasets/src/msm_middlebury.cpp index 5780b4743..a7d520d3f 100644 --- a/modules/datasets/src/msm_middlebury.cpp +++ b/modules/datasets/src/msm_middlebury.cpp @@ -40,6 +40,7 @@ //M*/ #include "opencv2/datasets/msm_middlebury.hpp" +#include "opencv2/datasets/util.hpp" #include "precomp.hpp" namespace cv diff --git a/modules/datasets/src/or_imagenet.cpp b/modules/datasets/src/or_imagenet.cpp index f6160549c..0fbebf976 100644 --- a/modules/datasets/src/or_imagenet.cpp +++ b/modules/datasets/src/or_imagenet.cpp @@ -40,6 +40,7 @@ //M*/ #include "opencv2/datasets/or_imagenet.hpp" +#include "opencv2/datasets/util.hpp" #include "precomp.hpp" namespace cv diff --git a/modules/datasets/src/or_mnist.cpp b/modules/datasets/src/or_mnist.cpp index ed069045e..cc721ee15 100644 --- a/modules/datasets/src/or_mnist.cpp +++ b/modules/datasets/src/or_mnist.cpp @@ -40,6 +40,7 @@ //M*/ #include "opencv2/datasets/or_mnist.hpp" +#include "opencv2/datasets/util.hpp" #include "precomp.hpp" namespace cv diff --git a/modules/datasets/src/or_sun.cpp b/modules/datasets/src/or_sun.cpp index 5ae64cc8f..29b710922 100644 --- a/modules/datasets/src/or_sun.cpp +++ b/modules/datasets/src/or_sun.cpp @@ -40,6 +40,7 @@ //M*/ #include "opencv2/datasets/or_sun.hpp" +#include "opencv2/datasets/util.hpp" #include "precomp.hpp" namespace cv diff --git a/modules/datasets/src/pd_caltech.cpp b/modules/datasets/src/pd_caltech.cpp new file mode 100644 index 000000000..8bea8af1e --- /dev/null +++ b/modules/datasets/src/pd_caltech.cpp @@ -0,0 +1,183 @@ +/*M/////////////////////////////////////////////////////////////////////////////////////// +// +// IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING. +// +// By downloading, copying, installing or using the software you agree to this license. +// If you do not agree to this license, do not download, install, +// copy or use the software. +// +// +// License Agreement +// For Open Source Computer Vision Library +// +// Copyright (C) 2014, Itseez Inc, all rights reserved. +// Third party copyrights are property of their respective owners. +// +// Redistribution and use in source and binary forms, with or without modification, +// are permitted provided that the following conditions are met: +// +// * Redistribution's of source code must retain the above copyright notice, +// this list of conditions and the following disclaimer. +// +// * Redistribution's in binary form must reproduce the above copyright notice, +// this list of conditions and the following disclaimer in the documentation +// and/or other materials provided with the distribution. +// +// * The name of the copyright holders may not be used to endorse or promote products +// derived from this software without specific prior written permission. +// +// This software is provided by the copyright holders and contributors "as is" and +// any express or implied warranties, including, but not limited to, the implied +// warranties of merchantability and fitness for a particular purpose are disclaimed. +// In no event shall the Itseez Inc or contributors be liable for any direct, +// indirect, incidental, special, exemplary, or consequential damages +// (including, but not limited to, procurement of substitute goods or services; +// loss of use, data, or profits; or business interruption) however caused +// and on any theory of liability, whether in contract, strict liability, +// or tort (including negligence or otherwise) arising in any way out of +// the use of this software, even if advised of the possibility of such damage. +// +//M*/ + +#include "opencv2/datasets/pd_caltech.hpp" +#include "opencv2/datasets/util.hpp" +#include "precomp.hpp" + +namespace cv +{ +namespace datasets +{ + +using namespace std; + +class CV_EXPORTS PD_caltechImp : public PD_caltech +{ +public: + PD_caltechImp() {} + //PD_caltechImp(const string &path); + virtual ~PD_caltechImp() {} + + virtual void load(const string &path); + +private: + void loadDataset(const string &path); +}; + +/*PD_caltechImp::PD_caltechImp(const string &path) +{ + loadDataset(path); +}*/ + +void PD_caltechImp::load(const string &path) +{ + loadDataset(path); +} + +void PD_caltechImp::loadDataset(const string &path) +{ + train.push_back(vector< Ptr >()); + test.push_back(vector< Ptr >()); + validation.push_back(vector< Ptr >()); + + createDirectory((path + "../images/")); + + vector objectNames; + getDirList(path, objectNames); + for (vector::iterator it=objectNames.begin(); it!=objectNames.end(); ++it) + { + Ptr curr(new PD_caltechObj); + curr->name = *it; + + string objectPath(path + "../images/" + curr->name + "/"); + createDirectory(objectPath); + + string seqImagesPath(path + curr->name + "/"); + vector seqNames; + getDirList(seqImagesPath, seqNames); + for (vector::iterator itSeq=seqNames.begin(); itSeq!=seqNames.end(); ++itSeq) + { + string &seqName = *itSeq; + + createDirectory((objectPath + seqName)); + + FILE *f = fopen((seqImagesPath + seqName).c_str(), "rb"); + + #define SKIP 28+8+512 + fseek(f, SKIP, SEEK_CUR); + + unsigned int header[9]; + size_t res = fread(header, 9, 4, f); + double fps; + res = fread(&fps, 1, 8, f); + fseek(f, 432, SEEK_CUR); + + /*printf("width %u\n", header[0]); + printf("height %u\n", header[1]); + printf("imageBitDepth %u\n", header[2]); + printf("imageBitDepthReal %u\n", header[3]); + printf("imageSizeBytes %u\n", header[4]); + printf("imageFormat %u\n", header[5]); + printf("numFrames %u\n", numFrames); + printf("fps %f\n", fps); + printf("trueImageSize %u\n", header[8]);*/ + unsigned int numFrames = header[6]; + + string ext; + switch (header[5]) + { + case 100: + case 200: + ext = "raw"; + break; + case 101: + ext = "brgb8"; + break; + case 102: + case 201: + ext = "jpg"; + break; + case 103: + ext = "jbrgb"; + break; + case 001: + case 002: + ext = "png"; + break; + } + + for (unsigned int i=0; iimageNames.push_back(imgName); + + // comment fseek and uncomment next block to unpack all frames + fseek(f, size, SEEK_CUR); + /*char *img = new char[size]; + fread(img, size, 1, f); + string imgPath(objectPath + seqName + imgName); + FILE *fImg = fopen(imgPath.c_str(), "wb"); + fwrite(img, size, 1, fImg); + fclose(fImg); + delete[] img;*/ + + fseek(f, 12, SEEK_CUR); + } + + fclose(f); + } + + train.back().push_back(curr); + } +} + +Ptr PD_caltech::create() +{ + return Ptr(new PD_caltechImp); +} + +} +} diff --git a/modules/datasets/src/precomp.hpp b/modules/datasets/src/precomp.hpp index bb048b7d2..da5bf8b83 100644 --- a/modules/datasets/src/precomp.hpp +++ b/modules/datasets/src/precomp.hpp @@ -47,6 +47,4 @@ #include -#include "opencv2/datasets/util.hpp" - #endif diff --git a/modules/datasets/src/slam_kitti.cpp b/modules/datasets/src/slam_kitti.cpp index 0fcffbbce..ca1904d3e 100644 --- a/modules/datasets/src/slam_kitti.cpp +++ b/modules/datasets/src/slam_kitti.cpp @@ -40,6 +40,7 @@ //M*/ #include "opencv2/datasets/slam_kitti.hpp" +#include "opencv2/datasets/util.hpp" #include "precomp.hpp" namespace cv diff --git a/modules/datasets/src/slam_tumindoor.cpp b/modules/datasets/src/slam_tumindoor.cpp index 2c136382e..cdc354314 100644 --- a/modules/datasets/src/slam_tumindoor.cpp +++ b/modules/datasets/src/slam_tumindoor.cpp @@ -40,6 +40,7 @@ //M*/ #include "opencv2/datasets/slam_tumindoor.hpp" +#include "opencv2/datasets/util.hpp" #include "precomp.hpp" #include diff --git a/modules/datasets/src/tr_chars.cpp b/modules/datasets/src/tr_chars.cpp index e83b8fa5b..5291c5bc8 100644 --- a/modules/datasets/src/tr_chars.cpp +++ b/modules/datasets/src/tr_chars.cpp @@ -40,6 +40,7 @@ //M*/ #include "opencv2/datasets/tr_chars.hpp" +#include "opencv2/datasets/util.hpp" #include "precomp.hpp" namespace cv diff --git a/modules/datasets/src/tr_svt.cpp b/modules/datasets/src/tr_svt.cpp index 05deaa3f0..b2e11e788 100644 --- a/modules/datasets/src/tr_svt.cpp +++ b/modules/datasets/src/tr_svt.cpp @@ -40,6 +40,7 @@ //M*/ #include "opencv2/datasets/tr_svt.hpp" +#include "opencv2/datasets/util.hpp" #include "precomp.hpp" #include diff --git a/modules/datasets/src/util.cpp b/modules/datasets/src/util.cpp index adafb6ba4..7f2235792 100644 --- a/modules/datasets/src/util.cpp +++ b/modules/datasets/src/util.cpp @@ -48,6 +48,7 @@ #ifdef __GNUC__ #include #include + #include #else #include #include @@ -70,6 +71,15 @@ void split(const string &s, vector &elems, char delim) } } +void createDirectory(const string &path) +{ +#ifdef __GNUC__ + mkdir(path.c_str(), S_IRWXU | S_IRWXG | S_IROTH | S_IXOTH); +#else + mkdir(path.c_str()); +#endif +} + void getDirList(const string &dirName, vector &fileNames) { #ifdef __GNUC__