mirror of
https://github.com/pjreddie/darknet.git
synced 2023-08-10 21:13:14 +03:00
Use detector test...-out result.json -dont_show < train.txt to save results to JSON-file
This commit is contained in:
3
build/darknet/x64/darknet_json_reslut.cmd
Normal file
3
build/darknet/x64/darknet_json_reslut.cmd
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
darknet.exe detector test cfg/coco.data cfg/yolov3.cfg yolov3.weights -ext_output -dont_show -out result.json < data/train.txt
|
||||||
|
|
||||||
|
pause
|
@ -1220,7 +1220,7 @@ void calc_anchors(char *datacfg, int num_of_clusters, int width, int height, int
|
|||||||
//#endif // OPENCV
|
//#endif // OPENCV
|
||||||
|
|
||||||
void test_detector(char *datacfg, char *cfgfile, char *weightfile, char *filename, float thresh,
|
void test_detector(char *datacfg, char *cfgfile, char *weightfile, char *filename, float thresh,
|
||||||
float hier_thresh, int dont_show, int ext_output, int save_labels)
|
float hier_thresh, int dont_show, int ext_output, int save_labels, char *outfile)
|
||||||
{
|
{
|
||||||
list *options = read_data_cfg(datacfg);
|
list *options = read_data_cfg(datacfg);
|
||||||
char *name_list = option_find_str(options, "names", "data/names.list");
|
char *name_list = option_find_str(options, "names", "data/names.list");
|
||||||
@ -1244,6 +1244,14 @@ void test_detector(char *datacfg, char *cfgfile, char *weightfile, char *filenam
|
|||||||
double time;
|
double time;
|
||||||
char buff[256];
|
char buff[256];
|
||||||
char *input = buff;
|
char *input = buff;
|
||||||
|
char *json_buf = NULL;
|
||||||
|
int json_image_id = 0;
|
||||||
|
FILE* json_file = NULL;
|
||||||
|
if (outfile) {
|
||||||
|
json_file = fopen(outfile, "wb");
|
||||||
|
char *tmp = "[\n";
|
||||||
|
fwrite(tmp, sizeof(char), strlen(tmp), json_file);
|
||||||
|
}
|
||||||
int j;
|
int j;
|
||||||
float nms = .45; // 0.4F
|
float nms = .45; // 0.4F
|
||||||
while (1) {
|
while (1) {
|
||||||
@ -1256,7 +1264,7 @@ void test_detector(char *datacfg, char *cfgfile, char *weightfile, char *filenam
|
|||||||
printf("Enter Image Path: ");
|
printf("Enter Image Path: ");
|
||||||
fflush(stdout);
|
fflush(stdout);
|
||||||
input = fgets(input, 256, stdin);
|
input = fgets(input, 256, stdin);
|
||||||
if (!input) return;
|
if (!input) break;
|
||||||
strtok(input, "\n");
|
strtok(input, "\n");
|
||||||
}
|
}
|
||||||
image im = load_image(input, 0, 0, net.c);
|
image im = load_image(input, 0, 0, net.c);
|
||||||
@ -1287,6 +1295,18 @@ void test_detector(char *datacfg, char *cfgfile, char *weightfile, char *filenam
|
|||||||
show_image(im, "predictions");
|
show_image(im, "predictions");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (outfile) {
|
||||||
|
if (json_buf) {
|
||||||
|
char *tmp = ", \n";
|
||||||
|
fwrite(tmp, sizeof(char), strlen(tmp), json_file);
|
||||||
|
}
|
||||||
|
++json_image_id;
|
||||||
|
json_buf = detection_to_json(dets, nboxes, l.classes, names, json_image_id, input);
|
||||||
|
|
||||||
|
fwrite(json_buf, sizeof(char), strlen(json_buf), json_file);
|
||||||
|
free(json_buf);
|
||||||
|
}
|
||||||
|
|
||||||
// pseudo labeling concept - fast.ai
|
// pseudo labeling concept - fast.ai
|
||||||
if (save_labels)
|
if (save_labels)
|
||||||
{
|
{
|
||||||
@ -1327,6 +1347,12 @@ void test_detector(char *datacfg, char *cfgfile, char *weightfile, char *filenam
|
|||||||
if (filename) break;
|
if (filename) break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (outfile) {
|
||||||
|
char *tmp = "\n]";
|
||||||
|
fwrite(tmp, sizeof(char), strlen(tmp), json_file);
|
||||||
|
fclose(json_file);
|
||||||
|
}
|
||||||
|
|
||||||
// free memory
|
// free memory
|
||||||
free_ptrs(names, net.layers[net.n - 1].classes);
|
free_ptrs(names, net.layers[net.n - 1].classes);
|
||||||
free_list_contents_kvp(options);
|
free_list_contents_kvp(options);
|
||||||
@ -1405,7 +1431,7 @@ void run_detector(int argc, char **argv)
|
|||||||
if (strlen(weights) > 0)
|
if (strlen(weights) > 0)
|
||||||
if (weights[strlen(weights) - 1] == 0x0d) weights[strlen(weights) - 1] = 0;
|
if (weights[strlen(weights) - 1] == 0x0d) weights[strlen(weights) - 1] = 0;
|
||||||
char *filename = (argc > 6) ? argv[6] : 0;
|
char *filename = (argc > 6) ? argv[6] : 0;
|
||||||
if (0 == strcmp(argv[2], "test")) test_detector(datacfg, cfg, weights, filename, thresh, hier_thresh, dont_show, ext_output, save_labels);
|
if (0 == strcmp(argv[2], "test")) test_detector(datacfg, cfg, weights, filename, thresh, hier_thresh, dont_show, ext_output, save_labels, outfile);
|
||||||
else if (0 == strcmp(argv[2], "train")) train_detector(datacfg, cfg, weights, gpus, ngpus, clear, dont_show, calc_map);
|
else if (0 == strcmp(argv[2], "train")) train_detector(datacfg, cfg, weights, gpus, ngpus, clear, dont_show, calc_map);
|
||||||
else if (0 == strcmp(argv[2], "valid")) validate_detector(datacfg, cfg, weights, outfile);
|
else if (0 == strcmp(argv[2], "valid")) validate_detector(datacfg, cfg, weights, outfile);
|
||||||
else if (0 == strcmp(argv[2], "recall")) validate_detector_recall(datacfg, cfg, weights);
|
else if (0 == strcmp(argv[2], "recall")) validate_detector_recall(datacfg, cfg, weights);
|
||||||
|
@ -274,8 +274,7 @@ public:
|
|||||||
void close_all()
|
void close_all()
|
||||||
{
|
{
|
||||||
close_all_sockets = 1;
|
close_all_sockets = 1;
|
||||||
char tmp[1];
|
write("\n]"); // close JSON array
|
||||||
write(tmp);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
bool open(int port)
|
bool open(int port)
|
||||||
@ -357,10 +356,26 @@ public:
|
|||||||
"Content-Type: application/json\r\n"
|
"Content-Type: application/json\r\n"
|
||||||
//"Content-Type: multipart/x-mixed-replace; boundary=boundary\r\n"
|
//"Content-Type: multipart/x-mixed-replace; boundary=boundary\r\n"
|
||||||
"\r\n", 0);
|
"\r\n", 0);
|
||||||
|
_write(client, "[\n", 0); // open JSON array
|
||||||
cerr << "JSON_sender: new client " << client << endl;
|
cerr << "JSON_sender: new client " << client << endl;
|
||||||
}
|
}
|
||||||
else // existing client, just stream pix
|
else // existing client, just stream pix
|
||||||
{
|
{
|
||||||
|
//char head[400];
|
||||||
|
// application/x-resource+json or application/x-collection+json - when you are representing REST resources and collections
|
||||||
|
// application/json or text/json or text/javascript or text/plain.
|
||||||
|
// https://stackoverflow.com/questions/477816/what-is-the-correct-json-content-type
|
||||||
|
//sprintf(head, "\r\nContent-Length: %zu\r\n\r\n", outlen);
|
||||||
|
//sprintf(head, "--boundary\r\nContent-Type: application/json\r\nContent-Length: %zu\r\n\r\n", outlen);
|
||||||
|
//_write(s, head, 0);
|
||||||
|
int n = _write(s, outputbuf, outlen);
|
||||||
|
if (n < outlen)
|
||||||
|
{
|
||||||
|
cerr << "JSON_sender: kill client " << s << endl;
|
||||||
|
::shutdown(s, 2);
|
||||||
|
FD_CLR(s, &master);
|
||||||
|
}
|
||||||
|
|
||||||
// Graceful closes will first close their output channels and then wait for the peer
|
// Graceful closes will first close their output channels and then wait for the peer
|
||||||
// on the other side of the connection to close its output channels. When both sides are done telling
|
// on the other side of the connection to close its output channels. When both sides are done telling
|
||||||
// each other they won<6F>t be sending any more data (i.e., closing output channels),
|
// each other they won<6F>t be sending any more data (i.e., closing output channels),
|
||||||
@ -372,24 +387,6 @@ public:
|
|||||||
free(buf);
|
free(buf);
|
||||||
//::closesocket(s);
|
//::closesocket(s);
|
||||||
printf("JSON_sender: close clinet: %d \n", result);
|
printf("JSON_sender: close clinet: %d \n", result);
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
//char head[400];
|
|
||||||
// application/json
|
|
||||||
// application/x-resource+json or application/x-collection+json - when you are representing REST resources and collections
|
|
||||||
// text/json or text/javascript or text/plain.
|
|
||||||
// https://stackoverflow.com/questions/477816/what-is-the-correct-json-content-type
|
|
||||||
//sprintf(head, "\r\nContent-Length: %zu\r\n\r\n", outlen);
|
|
||||||
//sprintf(head, "--boundary\r\nContent-Type: application/json\r\nContent-Length: %zu\r\n\r\n", outlen);
|
|
||||||
//_write(s, head, 0);
|
|
||||||
int n = _write(s, outputbuf, outlen);
|
|
||||||
//cerr << "known client " << s << " " << n << endl;
|
|
||||||
if (n < outlen)
|
|
||||||
{
|
|
||||||
cerr << "JSON_sender: kill client " << s << endl;
|
|
||||||
::shutdown(s, 2);
|
|
||||||
FD_CLR(s, &master);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -401,7 +398,9 @@ public:
|
|||||||
void send_json(detection *dets, int nboxes, int classes, char **names, long long int frame_id, int port, int timeout)
|
void send_json(detection *dets, int nboxes, int classes, char **names, long long int frame_id, int port, int timeout)
|
||||||
{
|
{
|
||||||
static JSON_sender js(port, timeout);
|
static JSON_sender js(port, timeout);
|
||||||
char *send_buf = detection_to_json(dets, nboxes, classes, names, frame_id, NULL);
|
static char *send_buf = NULL;
|
||||||
|
if(send_buf) js.write(", \n");
|
||||||
|
send_buf = detection_to_json(dets, nboxes, classes, names, frame_id, NULL);
|
||||||
|
|
||||||
js.write(send_buf);
|
js.write(send_buf);
|
||||||
std::cout << " JSON-stream sent. \n";
|
std::cout << " JSON-stream sent. \n";
|
||||||
|
@ -705,7 +705,8 @@ char *detection_to_json(detection *dets, int nboxes, int classes, char **names,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
strcat(send_buf, "\n ] \n}, \n");
|
//strcat(send_buf, "\n ] \n}, \n");
|
||||||
|
strcat(send_buf, "\n ] \n}");
|
||||||
return send_buf;
|
return send_buf;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user