From f52040f0bf2cacc736ae666a3969cd99c73d828a Mon Sep 17 00:00:00 2001
From: AlexeyAB <alexeyab84@gmail.com>
Date: Wed, 23 May 2018 15:43:51 +0000
Subject: [PATCH] Classifier uses C++ OpenCV cv::VideoCapture that hasn't bugs.
---
src/image.c | 22 +++++++++++
src/classifier.c | 43 ++++++++++++++-------
2 files changed, 50 insertions(+), 15 deletions(-)
diff --git a/src/classifier.c b/src/classifier.c
index e45f5a1..c84dcb2 100644
--- a/src/classifier.c
+++ b/src/classifier.c
@@ -21,6 +21,8 @@
#include "opencv2/videoio/videoio_c.h"
#endif
image get_image_from_stream(CvCapture *cap);
+image get_image_from_stream_cpp(CvCapture *cap);
+#include "http_stream.h"
#endif
float *get_regression_values(char **labels, int n)
@@ -860,11 +862,14 @@
srand(2222222);
CvCapture * cap;
- if(filename){
- cap = cvCaptureFromFile(filename);
- }else{
- cap = cvCaptureFromCAM(cam_index);
- }
+ if (filename) {
+ //cap = cvCaptureFromFile(filename);
+ cap = get_capture_video_stream(filename);
+ }
+ else {
+ //cap = cvCaptureFromCAM(cam_index);
+ cap = get_capture_webcam(filename);
+ }
int top = option_find_int(options, "top", 1);
@@ -886,7 +891,8 @@
struct timeval tval_before, tval_after, tval_result;
gettimeofday(&tval_before, NULL);
- image in = get_image_from_stream(cap);
+ //image in = get_image_from_stream(cap);
+ image in = get_image_from_stream_cpp(cap);
if(!in.data) break;
image in_s = resize_image(in, net.w, net.h);
@@ -992,11 +998,14 @@
srand(2222222);
CvCapture * cap;
- if(filename){
- cap = cvCaptureFromFile(filename);
- }else{
- cap = cvCaptureFromCAM(cam_index);
- }
+ if (filename) {
+ //cap = cvCaptureFromFile(filename);
+ cap = get_capture_video_stream(filename);
+ }
+ else {
+ //cap = cvCaptureFromCAM(cam_index);
+ cap = get_capture_webcam(filename);
+ }
int top = option_find_int(options, "top", 1);
@@ -1015,7 +1024,8 @@
struct timeval tval_before, tval_after, tval_result;
gettimeofday(&tval_before, NULL);
- image in = get_image_from_stream(cap);
+ //image in = get_image_from_stream(cap);
+ image in = get_image_from_stream_cpp(cap);
image in_s = resize_image(in, net.w, net.h);
show_image(in, "Threat Detection");
@@ -1070,9 +1080,11 @@
CvCapture * cap;
if(filename){
- cap = cvCaptureFromFile(filename);
+ //cap = cvCaptureFromFile(filename);
+ cap = get_capture_video_stream(filename);
}else{
- cap = cvCaptureFromCAM(cam_index);
+ //cap = cvCaptureFromCAM(cam_index);
+ cap = get_capture_webcam(filename);
}
int top = option_find_int(options, "top", 1);
@@ -1092,7 +1104,8 @@
struct timeval tval_before, tval_after, tval_result;
gettimeofday(&tval_before, NULL);
- image in = get_image_from_stream(cap);
+ //image in = get_image_from_stream(cap);
+ image in = get_image_from_stream_cpp(cap);
image in_s = resize_image(in, net.w, net.h);
show_image(in, "Classifier");
diff --git a/src/image.c b/src/image.c
index 003d5da..9c297c4 100644
--- a/src/image.c
+++ b/src/image.c
@@ -988,6 +988,28 @@
return im;
}
+image get_image_from_stream_cpp(CvCapture *cap)
+{
+ //IplImage* src = cvQueryFrame(cap);
+ IplImage* src;
+ static int once = 1;
+ if (once) {
+ once = 0;
+ do {
+ src = get_webcam_frame(cap);
+ if (!src) return make_empty_image(0, 0, 0);
+ } while (src->width < 1 || src->height < 1 || src->nChannels < 1);
+ printf("Video stream: %d x %d \n", src->width, src->height);
+ }
+ else
+ src = get_webcam_frame(cap);
+
+ if (!src) return make_empty_image(0, 0, 0);
+ image im = ipl_to_image(src);
+ rgbgr_image(im);
+ return im;
+}
+
image get_image_from_stream_resize(CvCapture *cap, int w, int h, IplImage** in_img, int cpp_video_capture)
{
IplImage* src;
--
Gitblit v1.10.0