From 101de2b07aa2feefa74f7e73876fd5cc8fc696cf Mon Sep 17 00:00:00 2001
From: AlexeyAB <alexeyab84@gmail.com>
Date: Tue, 20 Mar 2018 21:40:01 +0000
Subject: [PATCH] More stable web-cam
---
src/demo.c | 6 ++++--
src/http_stream.cpp | 28 ++++++++++++++++++++++------
2 files changed, 26 insertions(+), 8 deletions(-)
diff --git a/src/demo.c b/src/demo.c
index 59672f8..b5917fa 100644
--- a/src/demo.c
+++ b/src/demo.c
@@ -64,6 +64,7 @@
in = get_image_from_stream_resize(cap, net.w, net.h, &in_img, use_webcam);
if(!in.data){
//error("Stream closed.");
+ printf("Stream closed.\n");
flag_exit = 1;
return;
}
@@ -166,6 +167,8 @@
probs = (float **)calloc(l.w*l.h*l.n, sizeof(float *));
for(j = 0; j < l.w*l.h*l.n; ++j) probs[j] = (float *)calloc(l.classes, sizeof(float *));
+ flag_exit = 0;
+
pthread_t fetch_thread;
pthread_t detect_thread;
@@ -198,7 +201,7 @@
}
CvVideoWriter* output_video_writer = NULL; // cv::VideoWriter output_video;
- if (out_filename)
+ if (out_filename && !flag_exit)
{
CvSize size;
size.width = det_img->width, size.height = det_img->height;
@@ -212,7 +215,6 @@
//output_video_writer = cvCreateVideoWriter(out_filename, CV_FOURCC('X', 'V', 'I', 'D'), 25, size, 1);
//output_video_writer = cvCreateVideoWriter(out_filename, CV_FOURCC('W', 'M', 'V', '2'), 25, size, 1);
}
- flag_exit = 0;
double before = get_wall_time();
diff --git a/src/http_stream.cpp b/src/http_stream.cpp
index d42ecff..ca57728 100644
--- a/src/http_stream.cpp
+++ b/src/http_stream.cpp
@@ -197,16 +197,32 @@
CvCapture* get_capture_webcam(int index) {
- CvCapture* cap = (CvCapture*)new cv::VideoCapture(index);
+ CvCapture* cap = NULL;
+ try {
+ cap = (CvCapture*)new cv::VideoCapture(index);
+ //((cv::VideoCapture*)cap)->set(CV_CAP_PROP_FRAME_WIDTH, 1280);
+ //((cv::VideoCapture*)cap)->set(CV_CAP_PROP_FRAME_HEIGHT, 960);
+ }
+ catch (...) {
+ std::cout << " Error: Web-camera " << index << " can't be opened! \n";
+ }
return cap;
}
IplImage* get_webcam_frame(CvCapture *cap) {
- cv::VideoCapture &cpp_cap = *(cv::VideoCapture *)cap;
- cv::Mat frame;
- cpp_cap >> frame;
- IplImage* src = cvCreateImage(cvSize(frame.cols, frame.rows), 8, frame.channels());
- *src = frame;
+ IplImage* src = NULL;
+ try {
+ cv::VideoCapture &cpp_cap = *(cv::VideoCapture *)cap;
+ cv::Mat frame;
+ if (cpp_cap.isOpened()) {
+ cpp_cap >> frame;
+ src = cvCreateImage(cvSize(frame.cols, frame.rows), 8, frame.channels());
+ *src = frame;
+ }
+ }
+ catch (...) {
+ std::cout << " Web-camera stoped! \n";
+ }
return src;
}
--
Gitblit v1.10.0