cascade_detect_camera.cpp 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144
  1. /*M///////////////////////////////////////////////////////////////////////////////////////
  2. //
  3. // IMPORTANT: READ BEFORE DOWNLOADING, COPYING, INSTALLING OR USING.
  4. //
  5. // By downloading, copying, installing or using the software you agree to this license.
  6. // If you do not agree to this license, do not download, install,
  7. // copy or use the software.
  8. //
  9. //
  10. // License Agreement
  11. // For Open Source Computer Vision Library
  12. //
  13. // Copyright (C) 2015, Itseez Inc, all rights reserved.
  14. // Third party copyrights are property of their respective owners.
  15. //
  16. // Redistribution and use in source and binary forms, with or without modification,
  17. // are permitted provided that the following conditions are met:
  18. //
  19. // * Redistribution's of source code must retain the above copyright notice,
  20. // this list of conditions and the following disclaimer.
  21. //
  22. // * Redistribution's in binary form must reproduce the above copyright notice,
  23. // this list of conditions and the following disclaimer in the documentation
  24. // and/or other materials provided with the distribution.
  25. //
  26. // * The name of the copyright holders may not be used to endorse or promote products
  27. // derived from this software without specific prior written permission.
  28. //
  29. // This software is provided by the copyright holders and contributors "as is" and
  30. // any express or implied warranties, including, but not limited to, the implied
  31. // warranties of merchantability and fitness for a particular purpose are disclaimed.
  32. // In no event shall the Itseez Inc or contributors be liable for any direct,
  33. // indirect, incidental, special, exemplary, or consequential damages
  34. // (including, but not limited to, procurement of substitute goods or services;
  35. // loss of use, data, or profits; or business interruption) however caused
  36. // and on any theory of liability, whether in contract, strict liability,
  37. // or tort (including negligence or otherwise) arising in any way out of
  38. // the use of this software, even if advised of the possibility of such damage.
  39. //
  40. // Author: Jiaolong Xu <jiaolongxu AT gmail.com>
  41. //M*/
  42. #include <opencv2/dpm.hpp>
  43. #include <opencv2/core.hpp>
  44. #include <opencv2/imgproc.hpp>
  45. #include <opencv2/highgui.hpp>
  46. #include <opencv2/videoio.hpp>
  47. #include <opencv2/videoio/videoio_c.h>
  48. #include <stdio.h>
  49. #include <iostream>
  50. using namespace cv;
  51. using namespace cv::dpm;
  52. using namespace std;
  53. static void help()
  54. {
  55. cout << "\nThis is a demo of \"Deformable Part-based Model (DPM) cascade detection API\" using web camera.\n"
  56. "Call:\n"
  57. "./example_dpm_cascade_detect_camera <model_path>\n"
  58. << endl;
  59. }
  60. void drawBoxes(Mat &frame,
  61. vector<DPMDetector::ObjectDetection> ds,
  62. Scalar color,
  63. string text);
  64. int main( int argc, char** argv )
  65. {
  66. const char* keys =
  67. {
  68. "{@model_path | | Path of the DPM cascade model}"
  69. };
  70. CommandLineParser parser(argc, argv, keys);
  71. string model_path(parser.get<string>(0));
  72. if( model_path.empty() )
  73. {
  74. help();
  75. return -1;
  76. }
  77. cv::Ptr<DPMDetector> detector = \
  78. DPMDetector::create(vector<string>(1, model_path));
  79. // use web camera
  80. VideoCapture capture(0);
  81. capture.set(CV_CAP_PROP_FRAME_WIDTH, 320);
  82. capture.set(CV_CAP_PROP_FRAME_HEIGHT, 240);
  83. if ( !capture.isOpened() )
  84. {
  85. cerr << "Fail to open default camera (0)!" << endl;
  86. return -1;
  87. }
  88. Mat frame;
  89. namedWindow("DPM Cascade Detection", 1);
  90. // the color of the rectangle
  91. Scalar color(0, 255, 255); // yellow
  92. while( capture.read(frame) )
  93. {
  94. vector<DPMDetector::ObjectDetection> ds;
  95. Mat image;
  96. frame.copyTo(image);
  97. double t = (double) getTickCount();
  98. // detection
  99. detector->detect(image, ds);
  100. // compute frame per second (fps)
  101. t = ((double) getTickCount() - t)/getTickFrequency();//elapsed time
  102. // draw boxes
  103. string text = format("%0.1f fps", 1.0/t);
  104. drawBoxes(frame, ds, color, text);
  105. imshow("DPM Cascade Detection", frame);
  106. if ( waitKey(30) >= 0)
  107. break;
  108. }
  109. return 0;
  110. }
  111. void drawBoxes(Mat &frame,
  112. vector<DPMDetector::ObjectDetection> ds,
  113. Scalar color,
  114. string text)
  115. {
  116. for (unsigned int i = 0; i < ds.size(); i++)
  117. {
  118. rectangle(frame, ds[i].rect, color, 2);
  119. }
  120. // draw text on image
  121. Scalar textColor(0,0,250);
  122. putText(frame, text, Point(10,50), FONT_HERSHEY_PLAIN, 2, textColor, 2);
  123. }