mirror of
https://github.com/pjreddie/darknet.git
synced 2023-08-10 21:13:14 +03:00
GUYS I THINK MAYBE IT WAS BROKEN ON OPENCV IDK
This commit is contained in:
parent
680d3bde19
commit
810d7f797b
8
Makefile
8
Makefile
@ -20,6 +20,7 @@ EXEC=darknet
|
|||||||
OBJDIR=./obj/
|
OBJDIR=./obj/
|
||||||
|
|
||||||
CC=gcc
|
CC=gcc
|
||||||
|
CPP=g++
|
||||||
NVCC=nvcc
|
NVCC=nvcc
|
||||||
AR=ar
|
AR=ar
|
||||||
ARFLAGS=rcs
|
ARFLAGS=rcs
|
||||||
@ -41,7 +42,7 @@ CFLAGS+=$(OPTS)
|
|||||||
ifeq ($(OPENCV), 1)
|
ifeq ($(OPENCV), 1)
|
||||||
COMMON+= -DOPENCV
|
COMMON+= -DOPENCV
|
||||||
CFLAGS+= -DOPENCV
|
CFLAGS+= -DOPENCV
|
||||||
LDFLAGS+= `pkg-config --libs opencv`
|
LDFLAGS+= `pkg-config --libs opencv` -lstdc++
|
||||||
COMMON+= `pkg-config --cflags opencv`
|
COMMON+= `pkg-config --cflags opencv`
|
||||||
endif
|
endif
|
||||||
|
|
||||||
@ -57,7 +58,7 @@ CFLAGS+= -DCUDNN
|
|||||||
LDFLAGS+= -lcudnn
|
LDFLAGS+= -lcudnn
|
||||||
endif
|
endif
|
||||||
|
|
||||||
OBJ=gemm.o utils.o cuda.o deconvolutional_layer.o convolutional_layer.o list.o image.o activations.o im2col.o col2im.o blas.o crop_layer.o dropout_layer.o maxpool_layer.o softmax_layer.o data.o matrix.o network.o connected_layer.o cost_layer.o parser.o option_list.o detection_layer.o route_layer.o upsample_layer.o box.o normalization_layer.o avgpool_layer.o layer.o local_layer.o shortcut_layer.o logistic_layer.o activation_layer.o rnn_layer.o gru_layer.o crnn_layer.o demo.o batchnorm_layer.o region_layer.o reorg_layer.o tree.o lstm_layer.o l2norm_layer.o yolo_layer.o iseg_layer.o
|
OBJ=gemm.o utils.o cuda.o deconvolutional_layer.o convolutional_layer.o list.o image.o activations.o im2col.o col2im.o blas.o crop_layer.o dropout_layer.o maxpool_layer.o softmax_layer.o data.o matrix.o network.o connected_layer.o cost_layer.o parser.o option_list.o detection_layer.o route_layer.o upsample_layer.o box.o normalization_layer.o avgpool_layer.o layer.o local_layer.o shortcut_layer.o logistic_layer.o activation_layer.o rnn_layer.o gru_layer.o crnn_layer.o demo.o batchnorm_layer.o region_layer.o reorg_layer.o tree.o lstm_layer.o l2norm_layer.o yolo_layer.o iseg_layer.o image_opencv.o
|
||||||
EXECOBJA=captcha.o lsd.o super.o art.o tag.o cifar.o go.o rnn.o segmenter.o regressor.o classifier.o coco.o yolo.o detector.o nightmare.o instance-segmenter.o darknet.o
|
EXECOBJA=captcha.o lsd.o super.o art.o tag.o cifar.o go.o rnn.o segmenter.o regressor.o classifier.o coco.o yolo.o detector.o nightmare.o instance-segmenter.o darknet.o
|
||||||
ifeq ($(GPU), 1)
|
ifeq ($(GPU), 1)
|
||||||
LDFLAGS+= -lstdc++
|
LDFLAGS+= -lstdc++
|
||||||
@ -81,6 +82,9 @@ $(ALIB): $(OBJS)
|
|||||||
$(SLIB): $(OBJS)
|
$(SLIB): $(OBJS)
|
||||||
$(CC) $(CFLAGS) -shared $^ -o $@ $(LDFLAGS)
|
$(CC) $(CFLAGS) -shared $^ -o $@ $(LDFLAGS)
|
||||||
|
|
||||||
|
$(OBJDIR)%.o: %.cpp $(DEPS)
|
||||||
|
$(CPP) $(COMMON) $(CFLAGS) -c $< -o $@
|
||||||
|
|
||||||
$(OBJDIR)%.o: %.c $(DEPS)
|
$(OBJDIR)%.o: %.c $(DEPS)
|
||||||
$(CC) $(COMMON) $(CFLAGS) -c $< -o $@
|
$(CC) $(COMMON) $(CFLAGS) -c $< -o $@
|
||||||
|
|
||||||
|
@ -9,14 +9,11 @@ void demo_art(char *cfgfile, char *weightfile, int cam_index)
|
|||||||
set_batch_network(net, 1);
|
set_batch_network(net, 1);
|
||||||
|
|
||||||
srand(2222222);
|
srand(2222222);
|
||||||
CvCapture * cap;
|
|
||||||
|
|
||||||
cap = cvCaptureFromCAM(cam_index);
|
void * cap = open_video_stream(0, cam_index, 0,0,0);
|
||||||
|
|
||||||
char *window = "ArtJudgementBot9000!!!";
|
char *window = "ArtJudgementBot9000!!!";
|
||||||
if(!cap) error("Couldn't connect to webcam.\n");
|
if(!cap) error("Couldn't connect to webcam.\n");
|
||||||
cvNamedWindow(window, CV_WINDOW_NORMAL);
|
|
||||||
cvResizeWindow(window, 512, 512);
|
|
||||||
int i;
|
int i;
|
||||||
int idx[] = {37, 401, 434};
|
int idx[] = {37, 401, 434};
|
||||||
int n = sizeof(idx)/sizeof(idx[0]);
|
int n = sizeof(idx)/sizeof(idx[0]);
|
||||||
|
@ -157,14 +157,14 @@ char *labels[] = {"airplane","automobile","bird","cat","deer","dog","frog","hors
|
|||||||
int class = max_index(train.y.vals[i], 10);
|
int class = max_index(train.y.vals[i], 10);
|
||||||
char buff[256];
|
char buff[256];
|
||||||
sprintf(buff, "data/cifar/train/%d_%s",i,labels[class]);
|
sprintf(buff, "data/cifar/train/%d_%s",i,labels[class]);
|
||||||
save_image_png(im, buff);
|
save_image_options(im, buff, PNG, 0);
|
||||||
}
|
}
|
||||||
for(i = 0; i < test.X.rows; ++i){
|
for(i = 0; i < test.X.rows; ++i){
|
||||||
image im = float_to_image(32, 32, 3, test.X.vals[i]);
|
image im = float_to_image(32, 32, 3, test.X.vals[i]);
|
||||||
int class = max_index(test.y.vals[i], 10);
|
int class = max_index(test.y.vals[i], 10);
|
||||||
char buff[256];
|
char buff[256];
|
||||||
sprintf(buff, "data/cifar/test/%d_%s",i,labels[class]);
|
sprintf(buff, "data/cifar/test/%d_%s",i,labels[class]);
|
||||||
save_image_png(im, buff);
|
save_image_options(im, buff, PNG, 0);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -806,13 +806,7 @@ void threat_classifier(char *datacfg, char *cfgfile, char *weightfile, int cam_i
|
|||||||
list *options = read_data_cfg(datacfg);
|
list *options = read_data_cfg(datacfg);
|
||||||
|
|
||||||
srand(2222222);
|
srand(2222222);
|
||||||
CvCapture * cap;
|
void * cap = open_video_stream(filename, cam_index, 0,0,0);
|
||||||
|
|
||||||
if(filename){
|
|
||||||
cap = cvCaptureFromFile(filename);
|
|
||||||
}else{
|
|
||||||
cap = cvCaptureFromCAM(cam_index);
|
|
||||||
}
|
|
||||||
|
|
||||||
int top = option_find_int(options, "top", 1);
|
int top = option_find_int(options, "top", 1);
|
||||||
|
|
||||||
@ -934,13 +928,7 @@ void gun_classifier(char *datacfg, char *cfgfile, char *weightfile, int cam_inde
|
|||||||
list *options = read_data_cfg(datacfg);
|
list *options = read_data_cfg(datacfg);
|
||||||
|
|
||||||
srand(2222222);
|
srand(2222222);
|
||||||
CvCapture * cap;
|
void * cap = open_video_stream(filename, cam_index, 0,0,0);
|
||||||
|
|
||||||
if(filename){
|
|
||||||
cap = cvCaptureFromFile(filename);
|
|
||||||
}else{
|
|
||||||
cap = cvCaptureFromCAM(cam_index);
|
|
||||||
}
|
|
||||||
|
|
||||||
int top = option_find_int(options, "top", 1);
|
int top = option_find_int(options, "top", 1);
|
||||||
|
|
||||||
@ -950,8 +938,6 @@ void gun_classifier(char *datacfg, char *cfgfile, char *weightfile, int cam_inde
|
|||||||
int *indexes = calloc(top, sizeof(int));
|
int *indexes = calloc(top, sizeof(int));
|
||||||
|
|
||||||
if(!cap) error("Couldn't connect to webcam.\n");
|
if(!cap) error("Couldn't connect to webcam.\n");
|
||||||
cvNamedWindow("Threat Detection", CV_WINDOW_NORMAL);
|
|
||||||
cvResizeWindow("Threat Detection", 512, 512);
|
|
||||||
float fps = 0;
|
float fps = 0;
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
@ -1008,23 +994,10 @@ void demo_classifier(char *datacfg, char *cfgfile, char *weightfile, int cam_ind
|
|||||||
list *options = read_data_cfg(datacfg);
|
list *options = read_data_cfg(datacfg);
|
||||||
|
|
||||||
srand(2222222);
|
srand(2222222);
|
||||||
CvCapture * cap;
|
|
||||||
|
|
||||||
int w = 1280;
|
int w = 1280;
|
||||||
int h = 720;
|
int h = 720;
|
||||||
|
void * cap = open_video_stream(filename, cam_index, w, h, 0);
|
||||||
if(filename){
|
|
||||||
cap = cvCaptureFromFile(filename);
|
|
||||||
}else{
|
|
||||||
cap = cvCaptureFromCAM(cam_index);
|
|
||||||
}
|
|
||||||
|
|
||||||
if(w){
|
|
||||||
cvSetCaptureProperty(cap, CV_CAP_PROP_FRAME_WIDTH, w);
|
|
||||||
}
|
|
||||||
if(h){
|
|
||||||
cvSetCaptureProperty(cap, CV_CAP_PROP_FRAME_HEIGHT, h);
|
|
||||||
}
|
|
||||||
|
|
||||||
int top = option_find_int(options, "top", 1);
|
int top = option_find_int(options, "top", 1);
|
||||||
|
|
||||||
@ -1035,8 +1008,6 @@ void demo_classifier(char *datacfg, char *cfgfile, char *weightfile, int cam_ind
|
|||||||
int *indexes = calloc(top, sizeof(int));
|
int *indexes = calloc(top, sizeof(int));
|
||||||
|
|
||||||
if(!cap) error("Couldn't connect to webcam.\n");
|
if(!cap) error("Couldn't connect to webcam.\n");
|
||||||
cvNamedWindow(base, CV_WINDOW_NORMAL);
|
|
||||||
cvResizeWindow(base, 512, 512);
|
|
||||||
float fps = 0;
|
float fps = 0;
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
|
@ -9,7 +9,6 @@ extern void test_detector(char *datacfg, char *cfgfile, char *weightfile, char *
|
|||||||
extern void run_yolo(int argc, char **argv);
|
extern void run_yolo(int argc, char **argv);
|
||||||
extern void run_detector(int argc, char **argv);
|
extern void run_detector(int argc, char **argv);
|
||||||
extern void run_coco(int argc, char **argv);
|
extern void run_coco(int argc, char **argv);
|
||||||
extern void run_captcha(int argc, char **argv);
|
|
||||||
extern void run_nightmare(int argc, char **argv);
|
extern void run_nightmare(int argc, char **argv);
|
||||||
extern void run_classifier(int argc, char **argv);
|
extern void run_classifier(int argc, char **argv);
|
||||||
extern void run_regressor(int argc, char **argv);
|
extern void run_regressor(int argc, char **argv);
|
||||||
@ -396,9 +395,6 @@ void visualize(char *cfgfile, char *weightfile)
|
|||||||
{
|
{
|
||||||
network *net = load_network(cfgfile, weightfile, 0);
|
network *net = load_network(cfgfile, weightfile, 0);
|
||||||
visualize_network(net);
|
visualize_network(net);
|
||||||
#ifdef OPENCV
|
|
||||||
cvWaitKey(0);
|
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
|
|
||||||
int main(int argc, char **argv)
|
int main(int argc, char **argv)
|
||||||
@ -465,8 +461,6 @@ int main(int argc, char **argv)
|
|||||||
composite_3d(argv[2], argv[3], argv[4], (argc > 5) ? atof(argv[5]) : 0);
|
composite_3d(argv[2], argv[3], argv[4], (argc > 5) ? atof(argv[5]) : 0);
|
||||||
} else if (0 == strcmp(argv[1], "test")){
|
} else if (0 == strcmp(argv[1], "test")){
|
||||||
test_resize(argv[2]);
|
test_resize(argv[2]);
|
||||||
} else if (0 == strcmp(argv[1], "captcha")){
|
|
||||||
run_captcha(argc, argv);
|
|
||||||
} else if (0 == strcmp(argv[1], "nightmare")){
|
} else if (0 == strcmp(argv[1], "nightmare")){
|
||||||
run_nightmare(argc, argv);
|
run_nightmare(argc, argv);
|
||||||
} else if (0 == strcmp(argv[1], "rgbgr")){
|
} else if (0 == strcmp(argv[1], "rgbgr")){
|
||||||
|
@ -609,10 +609,7 @@ void test_detector(char *datacfg, char *cfgfile, char *weightfile, char *filenam
|
|||||||
else{
|
else{
|
||||||
save_image(im, "predictions");
|
save_image(im, "predictions");
|
||||||
#ifdef OPENCV
|
#ifdef OPENCV
|
||||||
cvNamedWindow("predictions", CV_WINDOW_NORMAL);
|
make_window("predictions", 512, 512, 0);
|
||||||
if(fullscreen){
|
|
||||||
cvSetWindowProperty("predictions", CV_WND_PROP_FULLSCREEN, CV_WINDOW_FULLSCREEN);
|
|
||||||
}
|
|
||||||
show_image(im, "predictions", 0);
|
show_image(im, "predictions", 0);
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
@ -187,17 +187,9 @@ void demo_isegmenter(char *datacfg, char *cfg, char *weights, int cam_index, con
|
|||||||
set_batch_network(net, 1);
|
set_batch_network(net, 1);
|
||||||
|
|
||||||
srand(2222222);
|
srand(2222222);
|
||||||
CvCapture * cap;
|
void * cap = open_video_stream(filename, cam_index, 0,0,0);
|
||||||
|
|
||||||
if(filename){
|
|
||||||
cap = cvCaptureFromFile(filename);
|
|
||||||
}else{
|
|
||||||
cap = cvCaptureFromCAM(cam_index);
|
|
||||||
}
|
|
||||||
|
|
||||||
if(!cap) error("Couldn't connect to webcam.\n");
|
if(!cap) error("Couldn't connect to webcam.\n");
|
||||||
cvNamedWindow("Segmenter", CV_WINDOW_NORMAL);
|
|
||||||
cvResizeWindow("Segmenter", 512, 512);
|
|
||||||
float fps = 0;
|
float fps = 0;
|
||||||
|
|
||||||
while(1){
|
while(1){
|
||||||
|
@ -155,21 +155,13 @@ void demo_regressor(char *datacfg, char *cfgfile, char *weightfile, int cam_inde
|
|||||||
set_batch_network(net, 1);
|
set_batch_network(net, 1);
|
||||||
|
|
||||||
srand(2222222);
|
srand(2222222);
|
||||||
CvCapture * cap;
|
|
||||||
|
|
||||||
if(filename){
|
|
||||||
cap = cvCaptureFromFile(filename);
|
|
||||||
}else{
|
|
||||||
cap = cvCaptureFromCAM(cam_index);
|
|
||||||
}
|
|
||||||
list *options = read_data_cfg(datacfg);
|
list *options = read_data_cfg(datacfg);
|
||||||
int classes = option_find_int(options, "classes", 1);
|
int classes = option_find_int(options, "classes", 1);
|
||||||
char *name_list = option_find_str(options, "names", 0);
|
char *name_list = option_find_str(options, "names", 0);
|
||||||
char **names = get_labels(name_list);
|
char **names = get_labels(name_list);
|
||||||
|
|
||||||
|
void * cap = open_video_stream(filename, cam_index, 0,0,0);
|
||||||
if(!cap) error("Couldn't connect to webcam.\n");
|
if(!cap) error("Couldn't connect to webcam.\n");
|
||||||
cvNamedWindow("Regressor", CV_WINDOW_NORMAL);
|
|
||||||
cvResizeWindow("Regressor", 512, 512);
|
|
||||||
float fps = 0;
|
float fps = 0;
|
||||||
|
|
||||||
while(1){
|
while(1){
|
||||||
|
@ -175,17 +175,9 @@ void demo_segmenter(char *datacfg, char *cfg, char *weights, int cam_index, cons
|
|||||||
set_batch_network(net, 1);
|
set_batch_network(net, 1);
|
||||||
|
|
||||||
srand(2222222);
|
srand(2222222);
|
||||||
CvCapture * cap;
|
void * cap = open_video_stream(filename, cam_index, 0,0,0);
|
||||||
|
|
||||||
if(filename){
|
|
||||||
cap = cvCaptureFromFile(filename);
|
|
||||||
}else{
|
|
||||||
cap = cvCaptureFromCAM(cam_index);
|
|
||||||
}
|
|
||||||
|
|
||||||
if(!cap) error("Couldn't connect to webcam.\n");
|
if(!cap) error("Couldn't connect to webcam.\n");
|
||||||
cvNamedWindow("Segmenter", CV_WINDOW_NORMAL);
|
|
||||||
cvResizeWindow("Segmenter", 512, 512);
|
|
||||||
float fps = 0;
|
float fps = 0;
|
||||||
|
|
||||||
while(1){
|
while(1){
|
||||||
|
@ -5,9 +5,6 @@
|
|||||||
#include <string.h>
|
#include <string.h>
|
||||||
#include <pthread.h>
|
#include <pthread.h>
|
||||||
|
|
||||||
#define SECRET_NUM -1234
|
|
||||||
extern int gpu_index;
|
|
||||||
|
|
||||||
#ifdef GPU
|
#ifdef GPU
|
||||||
#define BLOCK 512
|
#define BLOCK 512
|
||||||
|
|
||||||
@ -20,18 +17,13 @@ extern int gpu_index;
|
|||||||
#endif
|
#endif
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifndef __cplusplus
|
#ifdef __cplusplus
|
||||||
#ifdef OPENCV
|
extern "C" {
|
||||||
#include "opencv2/highgui/highgui_c.h"
|
|
||||||
#include "opencv2/imgproc/imgproc_c.h"
|
|
||||||
#include "opencv2/core/version.hpp"
|
|
||||||
#if CV_MAJOR_VERSION == 3
|
|
||||||
#include "opencv2/videoio/videoio_c.h"
|
|
||||||
#include "opencv2/imgcodecs/imgcodecs_c.h"
|
|
||||||
#endif
|
|
||||||
#endif
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#define SECRET_NUM -1234
|
||||||
|
extern int gpu_index;
|
||||||
|
|
||||||
typedef struct{
|
typedef struct{
|
||||||
int classes;
|
int classes;
|
||||||
char **names;
|
char **names;
|
||||||
@ -57,6 +49,10 @@ typedef enum{
|
|||||||
LOGISTIC, RELU, RELIE, LINEAR, RAMP, TANH, PLSE, LEAKY, ELU, LOGGY, STAIR, HARDTAN, LHTAN, SELU
|
LOGISTIC, RELU, RELIE, LINEAR, RAMP, TANH, PLSE, LEAKY, ELU, LOGGY, STAIR, HARDTAN, LHTAN, SELU
|
||||||
} ACTIVATION;
|
} ACTIVATION;
|
||||||
|
|
||||||
|
typedef enum{
|
||||||
|
PNG, BMP, TGA, JPG
|
||||||
|
} IMTYPE;
|
||||||
|
|
||||||
typedef enum{
|
typedef enum{
|
||||||
MULT, ADD, SUB, DIV
|
MULT, ADD, SUB, DIV
|
||||||
} BINARY_ACTIVATION;
|
} BINARY_ACTIVATION;
|
||||||
@ -650,7 +646,8 @@ void harmless_update_network_gpu(network *net);
|
|||||||
#endif
|
#endif
|
||||||
image get_label(image **characters, char *string, int size);
|
image get_label(image **characters, char *string, int size);
|
||||||
void draw_label(image a, int r, int c, image label, const float *rgb);
|
void draw_label(image a, int r, int c, image label, const float *rgb);
|
||||||
void save_image_png(image im, const char *name);
|
void save_image(image im, const char *name);
|
||||||
|
void save_image_options(image im, const char *name, IMTYPE f, int quality);
|
||||||
void get_next_batch(data d, int n, int offset, float *X, float *y);
|
void get_next_batch(data d, int n, int offset, float *X, float *y);
|
||||||
void grayscale_image_3c(image im);
|
void grayscale_image_3c(image im);
|
||||||
void normalize_image(image p);
|
void normalize_image(image p);
|
||||||
@ -709,7 +706,6 @@ image mask_to_rgb(image mask);
|
|||||||
int resize_network(network *net, int w, int h);
|
int resize_network(network *net, int w, int h);
|
||||||
void free_matrix(matrix m);
|
void free_matrix(matrix m);
|
||||||
void test_resize(char *filename);
|
void test_resize(char *filename);
|
||||||
void save_image(image p, const char *name);
|
|
||||||
int show_image(image p, const char *name, int ms);
|
int show_image(image p, const char *name, int ms);
|
||||||
image copy_image(image p);
|
image copy_image(image p);
|
||||||
void draw_box_width(image a, int x1, int y1, int x2, int y2, int w, float r, float g, float b);
|
void draw_box_width(image a, int x1, int y1, int x2, int y2, int w, float r, float g, float b);
|
||||||
@ -758,11 +754,12 @@ void do_nms_sort(detection *dets, int total, int classes, float thresh);
|
|||||||
|
|
||||||
matrix make_matrix(int rows, int cols);
|
matrix make_matrix(int rows, int cols);
|
||||||
|
|
||||||
#ifndef __cplusplus
|
|
||||||
#ifdef OPENCV
|
#ifdef OPENCV
|
||||||
image get_image_from_stream(CvCapture *cap);
|
void *open_video_stream(const char *f, int c, int w, int h, int fps);
|
||||||
#endif
|
image get_image_from_stream(void *p);
|
||||||
|
void make_window(char *name, int w, int h, int fullscreen);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
void free_image(image m);
|
void free_image(image m);
|
||||||
float train_network(network *net, data d);
|
float train_network(network *net, data d);
|
||||||
pthread_t load_data_in_thread(load_args args);
|
pthread_t load_data_in_thread(load_args args);
|
||||||
@ -802,4 +799,7 @@ size_t rand_size_t();
|
|||||||
float rand_normal();
|
float rand_normal();
|
||||||
float rand_uniform(float min, float max);
|
float rand_uniform(float min, float max);
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
}
|
||||||
|
#endif
|
||||||
#endif
|
#endif
|
||||||
|
37
src/demo.c
37
src/demo.c
@ -21,8 +21,7 @@ static network *net;
|
|||||||
static image buff [3];
|
static image buff [3];
|
||||||
static image buff_letter[3];
|
static image buff_letter[3];
|
||||||
static int buff_index = 0;
|
static int buff_index = 0;
|
||||||
static CvCapture * cap;
|
static void * cap;
|
||||||
static IplImage * ipl;
|
|
||||||
static float fps = 0;
|
static float fps = 0;
|
||||||
static float demo_thresh = 0;
|
static float demo_thresh = 0;
|
||||||
static float demo_hier = .5;
|
static float demo_hier = .5;
|
||||||
@ -140,16 +139,19 @@ void *detect_in_thread(void *ptr)
|
|||||||
|
|
||||||
void *fetch_in_thread(void *ptr)
|
void *fetch_in_thread(void *ptr)
|
||||||
{
|
{
|
||||||
int status = fill_image_from_stream(cap, buff[buff_index]);
|
free_image(buff[buff_index]);
|
||||||
|
buff[buff_index] = get_image_from_stream(cap);
|
||||||
|
if(buff[buff_index].data == 0) {
|
||||||
|
demo_done = 1;
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
letterbox_image_into(buff[buff_index], net->w, net->h, buff_letter[buff_index]);
|
letterbox_image_into(buff[buff_index], net->w, net->h, buff_letter[buff_index]);
|
||||||
if(status == 0) demo_done = 1;
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
void *display_in_thread(void *ptr)
|
void *display_in_thread(void *ptr)
|
||||||
{
|
{
|
||||||
show_image_cv(buff[(buff_index + 1)%3], "Demo", ipl);
|
int c = show_image(buff[(buff_index + 1)%3], "Demo", 1);
|
||||||
int c = cvWaitKey(1);
|
|
||||||
if (c != -1) c = c%256;
|
if (c != -1) c = c%256;
|
||||||
if (c == 27) {
|
if (c == 27) {
|
||||||
demo_done = 1;
|
demo_done = 1;
|
||||||
@ -209,19 +211,9 @@ void demo(char *cfgfile, char *weightfile, float thresh, int cam_index, const ch
|
|||||||
|
|
||||||
if(filename){
|
if(filename){
|
||||||
printf("video file: %s\n", filename);
|
printf("video file: %s\n", filename);
|
||||||
cap = cvCaptureFromFile(filename);
|
cap = open_video_stream(filename, 0, 0, 0, 0);
|
||||||
}else{
|
}else{
|
||||||
cap = cvCaptureFromCAM(cam_index);
|
cap = open_video_stream(0, cam_index, w, h, frames);
|
||||||
|
|
||||||
if(w){
|
|
||||||
cvSetCaptureProperty(cap, CV_CAP_PROP_FRAME_WIDTH, w);
|
|
||||||
}
|
|
||||||
if(h){
|
|
||||||
cvSetCaptureProperty(cap, CV_CAP_PROP_FRAME_HEIGHT, h);
|
|
||||||
}
|
|
||||||
if(frames){
|
|
||||||
cvSetCaptureProperty(cap, CV_CAP_PROP_FPS, frames);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if(!cap) error("Couldn't connect to webcam.\n");
|
if(!cap) error("Couldn't connect to webcam.\n");
|
||||||
@ -232,17 +224,10 @@ void demo(char *cfgfile, char *weightfile, float thresh, int cam_index, const ch
|
|||||||
buff_letter[0] = letterbox_image(buff[0], net->w, net->h);
|
buff_letter[0] = letterbox_image(buff[0], net->w, net->h);
|
||||||
buff_letter[1] = letterbox_image(buff[0], net->w, net->h);
|
buff_letter[1] = letterbox_image(buff[0], net->w, net->h);
|
||||||
buff_letter[2] = letterbox_image(buff[0], net->w, net->h);
|
buff_letter[2] = letterbox_image(buff[0], net->w, net->h);
|
||||||
ipl = cvCreateImage(cvSize(buff[0].w,buff[0].h), IPL_DEPTH_8U, buff[0].c);
|
|
||||||
|
|
||||||
int count = 0;
|
int count = 0;
|
||||||
if(!prefix){
|
if(!prefix){
|
||||||
cvNamedWindow("Demo", CV_WINDOW_NORMAL);
|
make_window("Demo", 1352, 1013, fullscreen);
|
||||||
if(fullscreen){
|
|
||||||
cvSetWindowProperty("Demo", CV_WND_PROP_FULLSCREEN, CV_WINDOW_FULLSCREEN);
|
|
||||||
} else {
|
|
||||||
cvMoveWindow("Demo", 0, 0);
|
|
||||||
cvResizeWindow("Demo", 1352, 1013);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
demo_time = what_time_is_it_now();
|
demo_time = what_time_is_it_now();
|
||||||
|
181
src/image.c
181
src/image.c
@ -534,174 +534,27 @@ void rgbgr_image(image im)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef OPENCV
|
|
||||||
void show_image_cv(image p, const char *name, IplImage *disp)
|
|
||||||
{
|
|
||||||
int x,y,k;
|
|
||||||
if(p.c == 3) rgbgr_image(p);
|
|
||||||
//normalize_image(copy);
|
|
||||||
|
|
||||||
char buff[256];
|
|
||||||
//sprintf(buff, "%s (%d)", name, windows);
|
|
||||||
sprintf(buff, "%s", name);
|
|
||||||
|
|
||||||
int step = disp->widthStep;
|
|
||||||
cvNamedWindow(buff, CV_WINDOW_NORMAL);
|
|
||||||
//cvMoveWindow(buff, 100*(windows%10) + 200*(windows/10), 100*(windows%10));
|
|
||||||
++windows;
|
|
||||||
for(y = 0; y < p.h; ++y){
|
|
||||||
for(x = 0; x < p.w; ++x){
|
|
||||||
for(k= 0; k < p.c; ++k){
|
|
||||||
disp->imageData[y*step + x*p.c + k] = (unsigned char)(get_pixel(p,x,y,k)*255);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if(0){
|
|
||||||
int w = 448;
|
|
||||||
int h = w*p.h/p.w;
|
|
||||||
if(h > 1000){
|
|
||||||
h = 1000;
|
|
||||||
w = h*p.w/p.h;
|
|
||||||
}
|
|
||||||
IplImage *buffer = disp;
|
|
||||||
disp = cvCreateImage(cvSize(w, h), buffer->depth, buffer->nChannels);
|
|
||||||
cvResize(buffer, disp, CV_INTER_LINEAR);
|
|
||||||
cvReleaseImage(&buffer);
|
|
||||||
}
|
|
||||||
cvShowImage(buff, disp);
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
int show_image(image p, const char *name, int ms)
|
int show_image(image p, const char *name, int ms)
|
||||||
{
|
{
|
||||||
#ifdef OPENCV
|
#ifdef OPENCV
|
||||||
IplImage *disp = cvCreateImage(cvSize(p.w,p.h), IPL_DEPTH_8U, p.c);
|
int c = show_image_cv(p, name, ms);
|
||||||
image copy = copy_image(p);
|
|
||||||
constrain_image(copy);
|
|
||||||
show_image_cv(copy, name, disp);
|
|
||||||
free_image(copy);
|
|
||||||
cvReleaseImage(&disp);
|
|
||||||
int c = cvWaitKey(ms);
|
|
||||||
if (c != -1) c = c%256;
|
|
||||||
return c;
|
return c;
|
||||||
#else
|
#else
|
||||||
fprintf(stderr, "Not compiled with OpenCV, saving to %s.png instead\n", name);
|
fprintf(stderr, "Not compiled with OpenCV, saving to %s.png instead\n", name);
|
||||||
save_image(p, name);
|
save_image(p, name);
|
||||||
return 0;
|
return -1;
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef OPENCV
|
void save_image_options(image im, const char *name, IMTYPE f, int quality)
|
||||||
|
|
||||||
void ipl_into_image(IplImage* src, image im)
|
|
||||||
{
|
|
||||||
unsigned char *data = (unsigned char *)src->imageData;
|
|
||||||
int h = src->height;
|
|
||||||
int w = src->width;
|
|
||||||
int c = src->nChannels;
|
|
||||||
int step = src->widthStep;
|
|
||||||
int i, j, k;
|
|
||||||
|
|
||||||
for(i = 0; i < h; ++i){
|
|
||||||
for(k= 0; k < c; ++k){
|
|
||||||
for(j = 0; j < w; ++j){
|
|
||||||
im.data[k*w*h + i*w + j] = data[i*step + j*c + k]/255.;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
image ipl_to_image(IplImage* src)
|
|
||||||
{
|
|
||||||
int h = src->height;
|
|
||||||
int w = src->width;
|
|
||||||
int c = src->nChannels;
|
|
||||||
image out = make_image(w, h, c);
|
|
||||||
ipl_into_image(src, out);
|
|
||||||
return out;
|
|
||||||
}
|
|
||||||
|
|
||||||
image load_image_cv(char *filename, int channels)
|
|
||||||
{
|
|
||||||
IplImage* src = 0;
|
|
||||||
int flag = -1;
|
|
||||||
if (channels == 0) flag = -1;
|
|
||||||
else if (channels == 1) flag = 0;
|
|
||||||
else if (channels == 3) flag = 1;
|
|
||||||
else {
|
|
||||||
fprintf(stderr, "OpenCV can't force load with %d channels\n", channels);
|
|
||||||
}
|
|
||||||
|
|
||||||
if( (src = cvLoadImage(filename, flag)) == 0 )
|
|
||||||
{
|
|
||||||
fprintf(stderr, "Cannot load image \"%s\"\n", filename);
|
|
||||||
char buff[256];
|
|
||||||
sprintf(buff, "echo %s >> bad.list", filename);
|
|
||||||
system(buff);
|
|
||||||
return make_image(10,10,3);
|
|
||||||
//exit(0);
|
|
||||||
}
|
|
||||||
image out = ipl_to_image(src);
|
|
||||||
cvReleaseImage(&src);
|
|
||||||
rgbgr_image(out);
|
|
||||||
return out;
|
|
||||||
}
|
|
||||||
|
|
||||||
void flush_stream_buffer(CvCapture *cap, int n)
|
|
||||||
{
|
|
||||||
int i;
|
|
||||||
for(i = 0; i < n; ++i) {
|
|
||||||
cvQueryFrame(cap);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
image get_image_from_stream(CvCapture *cap)
|
|
||||||
{
|
|
||||||
IplImage* src = cvQueryFrame(cap);
|
|
||||||
if (!src) return make_empty_image(0,0,0);
|
|
||||||
image im = ipl_to_image(src);
|
|
||||||
rgbgr_image(im);
|
|
||||||
return im;
|
|
||||||
}
|
|
||||||
|
|
||||||
int fill_image_from_stream(CvCapture *cap, image im)
|
|
||||||
{
|
|
||||||
IplImage* src = cvQueryFrame(cap);
|
|
||||||
if (!src) return 0;
|
|
||||||
ipl_into_image(src, im);
|
|
||||||
rgbgr_image(im);
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
void save_image_jpg(image p, const char *name)
|
|
||||||
{
|
|
||||||
image copy = copy_image(p);
|
|
||||||
if(p.c == 3) rgbgr_image(copy);
|
|
||||||
int x,y,k;
|
|
||||||
|
|
||||||
char buff[256];
|
|
||||||
sprintf(buff, "%s.jpg", name);
|
|
||||||
|
|
||||||
IplImage *disp = cvCreateImage(cvSize(p.w,p.h), IPL_DEPTH_8U, p.c);
|
|
||||||
int step = disp->widthStep;
|
|
||||||
for(y = 0; y < p.h; ++y){
|
|
||||||
for(x = 0; x < p.w; ++x){
|
|
||||||
for(k= 0; k < p.c; ++k){
|
|
||||||
disp->imageData[y*step + x*p.c + k] = (unsigned char)(get_pixel(copy,x,y,k)*255);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
cvSaveImage(buff, disp,0);
|
|
||||||
cvReleaseImage(&disp);
|
|
||||||
free_image(copy);
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
void save_image_png(image im, const char *name)
|
|
||||||
{
|
{
|
||||||
char buff[256];
|
char buff[256];
|
||||||
//sprintf(buff, "%s (%d)", name, windows);
|
//sprintf(buff, "%s (%d)", name, windows);
|
||||||
sprintf(buff, "%s.png", name);
|
if(f == PNG) sprintf(buff, "%s.png", name);
|
||||||
|
else if (f == BMP) sprintf(buff, "%s.bmp", name);
|
||||||
|
else if (f == TGA) sprintf(buff, "%s.tga", name);
|
||||||
|
else if (f == JPG) sprintf(buff, "%s.jpg", name);
|
||||||
|
else sprintf(buff, "%s.png", name);
|
||||||
unsigned char *data = calloc(im.w*im.h*im.c, sizeof(char));
|
unsigned char *data = calloc(im.w*im.h*im.c, sizeof(char));
|
||||||
int i,k;
|
int i,k;
|
||||||
for(k = 0; k < im.c; ++k){
|
for(k = 0; k < im.c; ++k){
|
||||||
@ -709,21 +562,20 @@ void save_image_png(image im, const char *name)
|
|||||||
data[i*im.c+k] = (unsigned char) (255*im.data[i + k*im.w*im.h]);
|
data[i*im.c+k] = (unsigned char) (255*im.data[i + k*im.w*im.h]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
int success = stbi_write_png(buff, im.w, im.h, im.c, data, im.w*im.c);
|
int success = 0;
|
||||||
|
if(f == PNG) success = stbi_write_png(buff, im.w, im.h, im.c, data, im.w*im.c);
|
||||||
|
else if (f == BMP) success = stbi_write_bmp(buff, im.w, im.h, im.c, data);
|
||||||
|
else if (f == TGA) success = stbi_write_tga(buff, im.w, im.h, im.c, data);
|
||||||
|
else if (f == JPG) success = stbi_write_jpg(buff, im.w, im.h, im.c, data, quality);
|
||||||
free(data);
|
free(data);
|
||||||
if(!success) fprintf(stderr, "Failed to write image %s\n", buff);
|
if(!success) fprintf(stderr, "Failed to write image %s\n", buff);
|
||||||
}
|
}
|
||||||
|
|
||||||
void save_image(image im, const char *name)
|
void save_image(image im, const char *name)
|
||||||
{
|
{
|
||||||
#ifdef OPENCV
|
save_image_options(im, name, JPG, 80);
|
||||||
save_image_jpg(im, name);
|
|
||||||
#else
|
|
||||||
save_image_png(im, name);
|
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void show_image_layers(image p, char *name)
|
void show_image_layers(image p, char *name)
|
||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
@ -938,11 +790,7 @@ void composite_3d(char *f1, char *f2, char *out, int delta)
|
|||||||
for(i = 0; i < c.w*c.h; ++i){
|
for(i = 0; i < c.w*c.h; ++i){
|
||||||
c.data[i] = a.data[i];
|
c.data[i] = a.data[i];
|
||||||
}
|
}
|
||||||
#ifdef OPENCV
|
|
||||||
save_image_jpg(c, out);
|
|
||||||
#else
|
|
||||||
save_image(c, out);
|
save_image(c, out);
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void letterbox_image_into(image im, int w, int h, image boxed)
|
void letterbox_image_into(image im, int w, int h, image boxed)
|
||||||
@ -1437,7 +1285,6 @@ void test_resize(char *filename)
|
|||||||
show_image(c, "rand", 1);
|
show_image(c, "rand", 1);
|
||||||
printf("%f %f %f\n", dhue, dsat, dexp);
|
printf("%f %f %f\n", dhue, dsat, dexp);
|
||||||
free_image(c);
|
free_image(c);
|
||||||
cvWaitKey(0);
|
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
19
src/image.h
19
src/image.h
@ -9,14 +9,15 @@
|
|||||||
#include "box.h"
|
#include "box.h"
|
||||||
#include "darknet.h"
|
#include "darknet.h"
|
||||||
|
|
||||||
#ifndef __cplusplus
|
#ifdef __cplusplus
|
||||||
#ifdef OPENCV
|
extern "C" {
|
||||||
int fill_image_from_stream(CvCapture *cap, image im);
|
|
||||||
image ipl_to_image(IplImage* src);
|
|
||||||
void ipl_into_image(IplImage* src, image im);
|
|
||||||
void flush_stream_buffer(CvCapture *cap, int n);
|
|
||||||
void show_image_cv(image p, const char *name, IplImage *disp);
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#ifdef OPENCV
|
||||||
|
void *open_video_stream(const char *f, int c, int w, int h, int fps);
|
||||||
|
image get_image_from_stream(void *p);
|
||||||
|
image load_image_cv(char *filename, int channels);
|
||||||
|
int show_image_cv(image im, const char* name, int ms);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
float get_color(int c, int x, int max);
|
float get_color(int c, int x, int max);
|
||||||
@ -60,5 +61,9 @@ void copy_image_into(image src, image dest);
|
|||||||
|
|
||||||
image get_image_layer(image m, int l);
|
image get_image_layer(image m, int l);
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
135
src/image_opencv.cpp
Normal file
135
src/image_opencv.cpp
Normal file
@ -0,0 +1,135 @@
|
|||||||
|
#ifdef OPENCV
|
||||||
|
|
||||||
|
#include "stdio.h"
|
||||||
|
#include "stdlib.h"
|
||||||
|
#include "opencv2/opencv.hpp"
|
||||||
|
#include "image.h"
|
||||||
|
|
||||||
|
using namespace cv;
|
||||||
|
|
||||||
|
extern "C" {
|
||||||
|
|
||||||
|
IplImage *image_to_ipl(image im)
|
||||||
|
{
|
||||||
|
int x,y,c;
|
||||||
|
IplImage *disp = cvCreateImage(cvSize(im.w,im.h), IPL_DEPTH_8U, im.c);
|
||||||
|
int step = disp->widthStep;
|
||||||
|
for(y = 0; y < im.h; ++y){
|
||||||
|
for(x = 0; x < im.w; ++x){
|
||||||
|
for(c= 0; c < im.c; ++c){
|
||||||
|
float val = im.data[c*im.h*im.w + y*im.w + x];
|
||||||
|
disp->imageData[y*step + x*im.c + c] = (unsigned char)(val*255);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return disp;
|
||||||
|
}
|
||||||
|
|
||||||
|
image ipl_to_image(IplImage* src)
|
||||||
|
{
|
||||||
|
int h = src->height;
|
||||||
|
int w = src->width;
|
||||||
|
int c = src->nChannels;
|
||||||
|
image im = make_image(w, h, c);
|
||||||
|
unsigned char *data = (unsigned char *)src->imageData;
|
||||||
|
int step = src->widthStep;
|
||||||
|
int i, j, k;
|
||||||
|
|
||||||
|
for(i = 0; i < h; ++i){
|
||||||
|
for(k= 0; k < c; ++k){
|
||||||
|
for(j = 0; j < w; ++j){
|
||||||
|
im.data[k*w*h + i*w + j] = data[i*step + j*c + k]/255.;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return im;
|
||||||
|
}
|
||||||
|
|
||||||
|
Mat image_to_mat(image im)
|
||||||
|
{
|
||||||
|
image copy = copy_image(im);
|
||||||
|
constrain_image(copy);
|
||||||
|
if(im.c == 3) rgbgr_image(copy);
|
||||||
|
|
||||||
|
IplImage *ipl = image_to_ipl(copy);
|
||||||
|
Mat m = cvarrToMat(ipl, true);
|
||||||
|
cvReleaseImage(&ipl);
|
||||||
|
free_image(copy);
|
||||||
|
return m;
|
||||||
|
}
|
||||||
|
|
||||||
|
image mat_to_image(Mat m)
|
||||||
|
{
|
||||||
|
IplImage ipl = m;
|
||||||
|
image im = ipl_to_image(&ipl);
|
||||||
|
rgbgr_image(im);
|
||||||
|
return im;
|
||||||
|
}
|
||||||
|
|
||||||
|
void *open_video_stream(const char *f, int c, int w, int h, int fps)
|
||||||
|
{
|
||||||
|
VideoCapture *cap;
|
||||||
|
if(f) cap = new VideoCapture(f);
|
||||||
|
else cap = new VideoCapture(c);
|
||||||
|
if(!cap->isOpened()) return 0;
|
||||||
|
if(w) cap->set(CV_CAP_PROP_FRAME_WIDTH, w);
|
||||||
|
if(h) cap->set(CV_CAP_PROP_FRAME_HEIGHT, w);
|
||||||
|
if(fps) cap->set(CV_CAP_PROP_FPS, w);
|
||||||
|
return (void *) cap;
|
||||||
|
}
|
||||||
|
|
||||||
|
image get_image_from_stream(void *p)
|
||||||
|
{
|
||||||
|
VideoCapture *cap = (VideoCapture *)p;
|
||||||
|
Mat m;
|
||||||
|
*cap >> m;
|
||||||
|
if(m.empty()) return make_empty_image(0,0,0);
|
||||||
|
return mat_to_image(m);
|
||||||
|
}
|
||||||
|
|
||||||
|
image load_image_cv(char *filename, int channels)
|
||||||
|
{
|
||||||
|
int flag = -1;
|
||||||
|
if (channels == 0) flag = -1;
|
||||||
|
else if (channels == 1) flag = 0;
|
||||||
|
else if (channels == 3) flag = 1;
|
||||||
|
else {
|
||||||
|
fprintf(stderr, "OpenCV can't force load with %d channels\n", channels);
|
||||||
|
}
|
||||||
|
Mat m;
|
||||||
|
m = imread(filename, flag);
|
||||||
|
if(!m.data){
|
||||||
|
fprintf(stderr, "Cannot load image \"%s\"\n", filename);
|
||||||
|
char buff[256];
|
||||||
|
sprintf(buff, "echo %s >> bad.list", filename);
|
||||||
|
system(buff);
|
||||||
|
return make_image(10,10,3);
|
||||||
|
//exit(0);
|
||||||
|
}
|
||||||
|
image im = mat_to_image(m);
|
||||||
|
return im;
|
||||||
|
}
|
||||||
|
|
||||||
|
int show_image_cv(image im, const char* name, int ms)
|
||||||
|
{
|
||||||
|
Mat m = image_to_mat(im);
|
||||||
|
imshow(name, m);
|
||||||
|
int c = waitKey(ms);
|
||||||
|
if (c != -1) c = c%256;
|
||||||
|
return c;
|
||||||
|
}
|
||||||
|
|
||||||
|
void make_window(char *name, int w, int h, int fullscreen)
|
||||||
|
{
|
||||||
|
namedWindow(name, WINDOW_NORMAL);
|
||||||
|
if (fullscreen) {
|
||||||
|
setWindowProperty(name, CV_WND_PROP_FULLSCREEN, CV_WINDOW_FULLSCREEN);
|
||||||
|
} else {
|
||||||
|
resizeWindow(name, w, h);
|
||||||
|
if(strcmp(name, "Demo") == 0) moveWindow(name, 0, 0);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif
|
Loading…
Reference in New Issue
Block a user