【计算机视觉】基于行为的ReID演示

帮老师做了一个简单的基于行为(主要是步态)的ReID问题的Demo,效果如下图:

下面是提取的集中特征,前三个都是GEI系的,后几个是基于光流场的。然后右边是识别出的几个对象的排序,因为没有角度和衣服,书包等协变量改变的问题,所以识别比较准确,排第一的就是对的。其实特征是之前提好的,因为对象也不多,识别序列对也是一次性计算的。右边识别出的几个人是显示的动态行走的序列图,所以预先把每个人resize的剪影存储在vector中。

int main(int argc, char*argv[]){
	string video_name(argv[1]);
	int video_height=240;
	int video_width=320;
	int window_height=video_height+feature_height;
	int window_width=video_width+feature_width;

	vector<vector<int> > pairs;
	process(pairs);
	vector<vector<Mat> > features;
	vector<vector<Mat> > images;
	readFeatures(features,images);
	Mat window=Mat::zeros(window_height,window_width,CV_8UC3);
	Rect rect;
	rect.x=rect.y=0;rect.width=video_width;rect.height=video_height;
	Mat window_video(window,rect);

	VideoCapture video(video_name);
	int frame_num=0;
	Mat frame;
	video>>frame;
	vector<Mat> frames;
	string people_num_str=video_name.substr(0,3);
	int people_num=atoi(people_num_str.c_str());

	while(!frame.empty()||!frames.empty()){
		frame_num++;
		if(!frame.empty()){
			frame.copyTo(window_video);
			Mat tmp;
			frame.copyTo(tmp);
			frames.push_back(tmp);
			video>>frame;
		}
		else{
			int show_num=frame_num%frames.size();
			(frames[show_num]).copyTo(window_video);
		}
		if(frame_num>40){
			for(int ci=0;ci<class_size;ci++){
				Rect rect;
				rect.x=ci*feature_width;
				rect.y=video_height;
				rect.width=feature_width;
				rect.height=feature_height;
				Mat featre_mat(window,rect);
				if(frame_num>ci*10+40)
					features[ci][people_num-1].copyTo(featre_mat);
			}
		}
		if(frame_num>120){
			for(int i=0;i<4;i++){
				int recp=pairs[people_num-1][i+1];
				Rect rect;
				rect.x=video_width;
				rect.y=i*feature_height;
				rect.width=feature_width;
				rect.height=feature_height;
				Mat rec_mat(window,rect);
				int recpnum=frame_num%40;
				images[recp-1][recpnum].copyTo(rec_mat);
				if(pairs[people_num-1][i+1]==people_num)
					rectangle(window,rect,Scalar(0,0,255));
			}
		}
		Mat largeWinow(window_height*2,window_width*2,CV_8UC3);
		resize(window,largeWinow,Size(),2.0f,2.0f,INTER_LINEAR);
		imshow("Gait",largeWinow);
		waitKey(50);
	}
	return 0;
}

其实主要的代码是process()和readFeatures(),一个用来计算识别排序的对组合,一个用来读取之前提取的特征和每个人用来显示在右边的行走序列图,不过也比较好理解,这里不再贴了,有个计算前k个最小值的代码放一下把。

void getKMinScores(vector<float>&scores,
	vector<float>& k_scores,int KNN_K){
		for(int k=0;k<KNN_K;k++){
			k_scores[k] = FLT_MAX;
		}
		int people_size = scores.size();
		for(int pi=0;pi<people_size;pi++){
			int change_id = -1;
			for(int kk=0;kk<KNN_K;kk++){
				if(scores[pi]<k_scores[kk]){
					change_id = kk;
				}
			}
			if(change_id>=0){
				if(change_id==(KNN_K-1)||
					(change_id<(KNN_K-1)&&scores[pi]!=k_scores[change_id+1])
					){
						for(int c=0;c<change_id;c++){
							k_scores[c] = k_scores[c+1];
						}
						k_scores[change_id] = scores[pi];
				}
			}
		}
		return ;
}

抱歉,水文一篇~

(转载请注明作者和出处:http://blog.csdn.net/xiaowei_cqu 未经允许请勿用于商业用途)

【计算机视觉】基于行为的ReID演示,布布扣,bubuko.com

时间: 2024-09-29 20:54:08

【计算机视觉】基于行为的ReID演示的相关文章

RBAC 基于角色的访问控制演示

RBAC rbac:Role Based Access Controll,基于角色的访问控制. 今天理一理RBAC,话不多说,直接切入主题 功能需求: 权限管理(无限极) 角色管理(可以分配权限) 管理员管理(管理员属于哪些角色) 后台左侧显示当前登录用户所拥有的权限 超级管理员拥有所有权限 实现 建表(我们需要三个表,管理员表.角色表.权限表,tip:也可用其它建表方式) 管理员表 权限表 角色表 我制作完的三张表的CRUD,后台首页效果展示(具体的增删改查就不列步骤了): 管理员表 权限表

【OpenCV新手教程第14】OpenCVHough变换:霍夫变换线,霍夫变换圆汇编

本系列文章由@浅墨_毛星云 出品.转载请注明出处. 文章链接:http://blog.csdn.net/poem_qianmo/article/details/26977557 作者:毛星云(浅墨)    微博:http://weibo.com/u/1723155442 知乎:http://www.zhihu.com/people/mao-xing-yun 邮箱: [email protected] 写作当前博文时配套使用的OpenCV版本号: 2.4.9 本篇文章中.我们一起探讨了OpenCV

移动端html touch事件

诸如智能手机和平板电脑一类的移动设备通常会有一(capacitive touch-sensitivescreen),以捕捉用户的手指所做的交互.随着移动网络的发展,其能够支持越来越复杂的应用,web开发者需要一种方法来处理这些事件.例如,几乎所有的快节奏游戏都需要玩家一次按下多个按钮,这种方式,在触摸屏情况下,意味着多点触摸. Apple在iOS 2.0中引入了触摸事件API,Android正迎头赶上这一事实标准,缩小差距.最近一个W3C工作组正合力制定这一触摸事件规范. 在本文深入研究iOS和

赠书:HTML5 Canvas 2d 编程必读的两本经典

赠书:HTML5 Canvas 2d 编程必读的两本经典 这两年多一直在和HTML5 Canvas 打交道,也带领团队开发了世界首款基于HTML5 Canvas 的演示文档工具---AxeSlide(斧子演示,www.axeslide.com).在这个领域也积累了一些 经验,希望有机会和大家分享.今天是要给大家推荐两本这方面的书,同时会送一本书给大家. 要介绍的第一本书是我学习Canvas开发的入门书——<HTML5 Canvas核心技术:图形.动画与游戏开发>. 此书作者David Gear

移动互联网终端的touch事件,touchstart, touchend, touchmove

如果我们允许用户在页面上用类似桌面浏览器鼠标手势的方式来控制WEB APP,这个页面上肯定是有很多可点击区域的,如果用户触摸到了那些可点击区域怎么办呢??诸如智能手机和平板电脑一类的移动设备通常会有一个电容式触摸屏(capacitive touch-sensitive screen),以捕捉用户的手指所做的交互.随着移动网络的发展,其能够支持越来越复杂的应用,web开发者需要一种方法来处理这些事件.例如,几乎所 有的快节奏游戏都需要玩家一次按下多个按钮,这种方式,在触摸屏情况下,意味着多点触摸.

[小技巧][ASP.Net MVC Hack] 使用 HTTP 报文中的 Header 字段进行身份验证

在一些 Web 系统中,身份验证是依靠硬件证书进行的:在电脑上插入 USB 证书,浏览器插件读取证书的相关信息,然后在发送 HTTP 登录请求时顺便在 Header 字段附加上身份信息.服务器端处理这样的登录请求的思路也很简单,就是读取 HTTP Header 相关信息,然后进行相应的处理. 在 ASP.Net MVC 架构的网站中,自然也可以使用这样的机制,下面基于 Visual Studio 2012 演示一下操作步骤. 首先建立一个ASP.Net MVC 4 项目. 选择模板的时候,保留默

Ember.js 入门指南——handlebars基础

Ember采用handlebars模板库作为应用程序的view层.Handlebars模板与普通的HTML非常相似.但是相比普通的HTML而言handlebars提供了非常丰富的Ember表达式. Ember采用handlebars模板并且扩展了很多功能,让你使用handlebars就像使用HTML一样简单.你设置可以指定某个模板显示你的应用程序界面,并且还不需要编写更新界面显示值的代码,Ember会自动为你更新. 在介绍模板之前先介绍一个非常有用.强大的工具 Ember CLI,使用这个工具可

移动端事件

前言 如果我们允许用户在页面上用类似桌面浏览器鼠标手势的方式来控制WEB APP,这个页面上肯定是有很多可点击区域的,如果用户触摸到了那些可点击区域怎么办呢??诸如智能手机和平板电脑一类的移动设备通常会有一个电容式触摸屏(capacitive touch-sensitive screen),以捕捉用户的手指所做的交互.随着移动网络的发展,其能够支持越来越复杂的应用,web开发者需要一种方法来处理这些事件.例如,几乎所 有的快节奏游戏都需要玩家一次按下多个按钮,这种方式,在触摸屏情况下,意味着多点

浅谈javascript的Touch事件

js的touch事件,一般用于移动端的触屏滑动 代码如下: $(function(){ document.addEventListener("touchmove", _touch, false); }) function _touch(event){alert(1);} event对象 touchstart:当手指触摸屏幕时触发:即使已经有一个手指放在了屏幕上也会触发. touchmove:当手指在屏幕上滑动时连续的触发.在这个事件发生期间,调用preventDefault()可阻止滚