| | |
| | | |
| | | char *class_names[] = {"aeroplane", "bicycle", "bird", "boat", "bottle", "bus", "car", "cat", "chair", "cow", "diningtable", "dog", "horse", "motorbike", "person", "pottedplant", "sheep", "sofa", "train", "tvmonitor"}; |
| | | |
| | | void draw_detection(image im, float *box, int side, int bg, char *label) |
| | | void draw_detection(image im, float *box, int side, char *label) |
| | | { |
| | | int classes = 20; |
| | | int elems = 4+classes+bg; |
| | | int elems = 4+classes; |
| | | int j; |
| | | int r, c; |
| | | |
| | | for(r = 0; r < side; ++r){ |
| | | for(c = 0; c < side; ++c){ |
| | | j = (r*side + c) * elems + bg; |
| | | j = (r*side + c) * elems; |
| | | int class = max_index(box+j, classes); |
| | | if(box[j+class] > .2){ |
| | | printf("%f %s\n", box[j+class], class_names[class]); |
| | |
| | | load_weights(&net, weightfile); |
| | | } |
| | | detection_layer layer = get_network_detection_layer(net); |
| | | if (!layer.joint) fprintf(stderr, "Detection layer should use joint prediction to draw correctly.\n"); |
| | | int im_size = 448; |
| | | set_batch_network(&net, 1); |
| | | srand(2222222); |
| | | clock_t time; |
| | | char filename[256]; |
| | | while(1){ |
| | | printf("Image Path: "); |
| | | fflush(stdout); |
| | | fgets(filename, 256, stdin); |
| | | strtok(filename, "\n"); |
| | | image im = load_image_color(filename,0,0); |
| | | image sized = resize_image(im, im_size, im_size); |
| | | printf("%d %d %d\n", im.h, im.w, im.c); |
| | | float *X = sized.data; |
| | | time=clock(); |
| | | float *predictions = network_predict(net, X); |
| | | printf("%s: Predicted in %f seconds.\n", filename, sec(clock()-time)); |
| | | draw_detection(im, predictions, 7, layer.background || layer.objectness, "predictions"); |
| | | draw_detection(im, predictions, 7, "predictions"); |
| | | free_image(im); |
| | | free_image(sized); |
| | | #ifdef OPENCV |