IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 开发工具 -> Windows环境下yolov3+darknet批量处理图片完整教程 -> 正文阅读

[开发工具]Windows环境下yolov3+darknet批量处理图片完整教程

windows环境下,需要用到VS

1.下载Darknet和yolov3
下载Darknet

如果有git的话 git clone https://github.com/AlexeyAB/darknet
下载master版本的

首先打开darknet_no_gpu.sln

打开后修改detector.c
替换原先的detector.c文件


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, char *outfile, int letter_box, int benchmark_layers)
{
	list *options = read_data_cfg(datacfg);
	char *name_list = option_find_str(options, "names", "data/names.list");
	int names_size = 0;
	char **names = get_labels_custom(name_list, &names_size); //get_labels(name_list);

	image **alphabet = load_alphabet();
	network net = parse_network_cfg_custom(cfgfile, 1, 1); // set batch=1
	if (weightfile) {
		load_weights(&net, weightfile);
	}
	if (net.letter_box) letter_box = 1;
	net.benchmark_layers = benchmark_layers;
	fuse_conv_batchnorm(net);
	calculate_binary_weights(net);
	if (net.layers[net.n - 1].classes != names_size) {
		printf("\n Error: in the file %s number of names %d that isn't equal to classes=%d in the file %s \n",
			name_list, names_size, net.layers[net.n - 1].classes, cfgfile);
		if (net.layers[net.n - 1].classes > names_size) getchar();
	}
	srand(2222222);
	char buff[256];
	char *input = buff;
	char *json_buf = NULL;
	int json_image_id = 0;
	FILE* json_file = NULL;
	if (outfile) {
		json_file = fopen(outfile, "wb");
		if (!json_file) {
			error("fopen failed", DARKNET_LOC);
		}
		char *tmp = "[\n";
		fwrite(tmp, sizeof(char), strlen(tmp), json_file);
	}
	int j;
	float nms = .45;    // 0.4F
	while (1) {
		if (filename) {
			strncpy(input, filename, 256);
			
			list *plist = get_paths(input);
			char **paths = (char **)list_to_array(plist);
			printf("Start Testing!\n");
			int m = plist->size;
			int i;
			for (i = 0; i < m; ++i) {
				char *path = paths[i];
				image im = load_image(path, 0, 0, net.c);
				int letterbox = 0;
				image sized = resize_image(im, net.w, net.h);
				//image sized = letterbox_image(im, net.w, net.h); letterbox = 1;
				layer l = net.layers[net.n - 1];
				float *X = sized.data;
				double time = get_time_point();
				network_predict(net, X);
				printf("%s: Predicted in %lf milli-seconds.\n", input, ((double)get_time_point() - time) / 1000);
				printf("Try Very Hard:");
				printf("%s: Predicted in %lf milli-seconds.\n", path, ((double)get_time_point() - time) / 1000);
				int nboxes = 0;
				detection *dets = get_network_boxes(&net, im.w, im.h, thresh, hier_thresh, 0, 1, &nboxes, letterbox);
				if (nms) do_nms_sort(dets, nboxes, l.classes, nms);
				draw_detections_v3(im, dets, nboxes, thresh, names, alphabet, l.classes, ext_output);

				char b[2048];
				sprintf(b, "E:\\darknet-Yolo_v3\\train\\test_result\\%d", i); //这里换上自己的路径,即你希望生成图片所保存的位置
				save_image(im, b);
				printf("save %s successfully!\n", b);

				if (save_labels)
				{
					char labelpath[4096];
					replace_image_to_label(input, labelpath);

					FILE* fw = fopen(labelpath, "wb");
					int i;
					for (i = 0; i < nboxes; ++i) {
						char buff[1024];
						int class_id = -1;
						float prob = 0;
						for (j = 0; j < l.classes; ++j) {
							if (dets[i].prob[j] > thresh && dets[i].prob[j] > prob) {
								prob = dets[i].prob[j];
								class_id = j;
							}
						}
						if (class_id >= 0) {
							sprintf(buff, "%d %2.4f %2.4f %2.4f %2.4f\n", class_id, dets[i].bbox.x, dets[i].bbox.y, dets[i].bbox.w, dets[i].bbox.h);
							fwrite(buff, sizeof(char), strlen(buff), fw);
						}
					}
					fclose(fw);
				}
			}
		}
		else {
			/*printf("Enter Image Path: ");
			fflush(stdout);
			input = fgets(input, 256, stdin);
			if (!input) break;
			strtok(input, "\n");
			*/
		}
		//image im;
		//image sized = load_image_resize(input, net.w, net.h, net.c, &im);
		
		image im = load_image(input, 0, 0, net.c);
		image sized;
		
		if (letter_box) sized = letterbox_image(im, net.w, net.h);
		else sized = resize_image(im, net.w, net.h);

		layer l = net.layers[net.n - 1];
		int k;
		for (k = 0; k < net.n; ++k) {
			layer lk = net.layers[k];
			if (lk.type == YOLO || lk.type == GAUSSIAN_YOLO || lk.type == REGION) {
				l = lk;
				printf(" Detection layer: %d - type = %d \n", k, l.type);
			}
		}
		
		//box *boxes = calloc(l.w*l.h*l.n, sizeof(box));
		//float **probs = calloc(l.w*l.h*l.n, sizeof(float*));
		//for(j = 0; j < l.w*l.h*l.n; ++j) probs[j] = (float*)xcalloc(l.classes, sizeof(float));

		float *X = sized.data;

		//time= what_time_is_it_now();
		double time = get_time_point();
		network_predict(net, X);
		//network_predict_image(&net, im); letterbox = 1;
		printf("%s: Predicted in %lf milli-seconds.\n", input, ((double)get_time_point() - time) / 1000);
		//printf("%s: Predicted in %f seconds.\n", input, (what_time_is_it_now()-time));

		int nboxes = 0;
		detection *dets = get_network_boxes(&net, im.w, im.h, thresh, hier_thresh, 0, 1, &nboxes, letter_box);
		if (nms) {
			if (l.nms_kind == DEFAULT_NMS) do_nms_sort(dets, nboxes, l.classes, nms);
			else diounms_sort(dets, nboxes, l.classes, nms, l.nms_kind, l.beta_nms);
		}
		draw_detections_v3(im, dets, nboxes, thresh, names, alphabet, l.classes, ext_output);
		save_image(im, "predictions");
		if (!dont_show) {
			show_image(im, "predictions");
		}

		if (json_file) {
			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
		

		free_detections(dets, nboxes);
		free_image(im);
		free_image(sized);

		if (!dont_show) {
			wait_until_press_key_cv();
			destroy_all_windows_cv();
		}

		if (filename) break;
	}

	if (json_file) {
		char *tmp = "\n]";
		fwrite(tmp, sizeof(char), strlen(tmp), json_file);
		fclose(json_file);
	}


	// free memory
	free_ptrs((void**)names, net.layers[net.n - 1].classes);
	free_list_contents_kvp(options);
	free_list(options);


	int i;

	const int nsize = 8;
	for (j = 0; j < nsize; ++j) {
		for (i = 32; i < 127; ++i) {
			free_image(alphabet[j][i]);
		}
		free(alphabet[j]);
	}
	free(alphabet);

	free_network(net);
}

2、然后编译生成exe文件

3、生成包括批量的图片txt,txt包括每一张代检测图片的绝对路径
最后执行下面命令来批量检测:

darknet_no_gpu.exe detector test cfg/coco.data cfg/yolov3.cfg yolov3.weights D:\Ctext\input_image_list.txt  

得到检测结果!

  开发工具 最新文章
Postman接口测试之Mock快速入门
ASCII码空格替换查表_最全ASCII码对照表0-2
如何使用 ssh 建立 socks 代理
Typora配合PicGo阿里云图床配置
SoapUI、Jmeter、Postman三种接口测试工具的
github用相对路径显示图片_GitHub 中 readm
Windows编译g2o及其g2o viewer
解决jupyter notebook无法连接/ jupyter连接
Git恢复到之前版本
VScode常用快捷键
上一篇文章      下一篇文章      查看所有文章
加:2021-10-27 13:01:55  更:2021-10-27 13:03:30 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年12日历 -2024/12/23 20:08:56-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码
数据统计