【计算机视觉】基于行为的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演示的更多相关文章
- SpringBoot2.0 基础案例(12):基于转账案例,演示事务管理操作
本文源码 GitHub地址:知了一笑 https://github.com/cicadasmile/spring-boot-base 一.事务管理简介 1.事务基本概念 一组业务操作ABCD,要么全部 ...
- 基于JavaFX图形界面演示的迷宫创建与路径寻找
事情的起因是收到了一位网友的请求,他的java课设需要设计实现迷宫相关的程序--如标题概括. 我这边不方便透露相关信息,就只把任务要求写出来. 演示视频指路: 视频过审后就更新链接 完整代码链接: 网 ...
- PHP RBAC权限管理 基于角色的访问控制演示
RBAC rbac:Role Based Access Controll,基于角色的访问控制. 今天理一理RBAC,话不多说,直接切入主题 功能需求: 权限管理(无限极) 角色管理(可以分配权限) 管 ...
- 【.NET6+WPF+Avalonia】开发支持跨平台的WPF应用程序以及基于ubuntu系统的演示
前言:随着跨平台越来越流行,.net core支持跨平台至今也有好几年的光景了.但是目前基于.net的跨平台,大多数还是在使用B/S架构的跨平台上:至于C/S架构,大部分人可能会选择QT进行开发,或者 ...
- 行人重识别(ReID) ——基于深度学习的行人重识别研究综述
转自:https://zhuanlan.zhihu.com/p/31921944 前言:行人重识别(Person Re-identification)也称行人再识别,本文简称为ReID,是利用计算机视 ...
- 行人重识别(ReID) ——技术实现及应用场景
导读 跨镜追踪(Person Re-Identification,简称 ReID)技术是现在计算机视觉研究的热门方向,主要解决跨摄像头跨场景下行人的识别与检索.该技术能够根据行人的穿着.体态.发型等信 ...
- Person Re-ID行人重试别梳理
定义 是利用计算机视觉技术判断图像或者视频序列中是否存在特定行人的技术.给定一张切好块的行人图像 (probe image,), 从一大堆切好块的图像 (gallery images) 中找到同一身份 ...
- javascript——touch事件介绍与实例演示
分类: javascript2014-02-12 16:42 1742人阅读 评论(0) 收藏 举报 touch事件touchmovetouchstarttouchend 前言 诸如智能手机和平板 ...
- 基于 dbms_redefinition 在线重定义表
Oracle 支持在线重定义表,也就是说我们可以在修改表结构(DDL)的同时进行相关的DQL.DML操作,使得前端的DML根本感觉不到表结构实际上已经发生了变化,对于用户而言是完全透明的.当然在线重定 ...
随机推荐
- java 不同意同一账户不同IP 同一时候登录系统解决的方法 兼容IE Firefox
需求就是 不同意同一个账户同一时间登录系统.仅仅要有一个账户在线其它人就是不能用这个账户. 功能非常easy,过程非常纠结 . 这篇文章攻克了兼容IE.Firefox 浏览器下,不同IP 地址 同一用 ...
- linux修改主机名-IP
1.查看当前主机名 hostname 2. ifconfig 显示所有网络接口的信息 ifconfig eth0 显示网卡eth0的信息 3.临时修改主机名 hostname rusky. ...
- 重学《C#高级编程》(序)
小生码农一枚,以前只是看别人写博客,从来没有想过要自己写博文,突然之间“脑抽”想自己也写点什么,遂在博客园开通这个博客. 简单介绍下自己吧,本人90后,父母对我没有大的想法,只是希望我平安成长,多学习 ...
- (一)一个工作任务引起的乱战——c#中结构体与byte[]间相互转换
一个工作任务涉及到c#与c++系统间的udp通信,处理了蛮长时间没有完成任务,但是期间接触到不少小知识点.本人是初接触c#,c++语言没有接触过.可能写的东西都很小儿科,暂且记录下来当工作日记把. 先 ...
- Android之来历
Android一词的本义指“机器人”,同时也是谷歌于2007年11月5日宣布的基于Linux平台的开源手机操作系统的名称,该平台由操作系统.中间件.用户界面和应用 软件组成,号称是首个为移动终端打造的 ...
- 常见Oracle数据库问题总结及解决办法(一)
开发中常使用Oralce数据库,使用中也许会碰到形形色色的各类错误提示,如:ORA-00933:SQL命令未正确结束.ORA-009242等等,为此记录积累对于自己来说还是很有帮助的,今天就记录以前出 ...
- iOS 用命令行进行打包
通过命令行编译打包 第一步,打开终端,输入: cd 把项目文件拖到这里(注意:cd后面要有空格,然后再把项目文件拖进来) 回车 第二步,clean工程(默认release版本),在终端输入: xcod ...
- iOS调节系统音量
目录[-] 使用MPVolumeView 编程实现系统音量调节2 通过MPVolumeSlider的实例来操作系统音量 有问题!我不喜欢系统弹出音量提示 还有问题,我修改了系统音量但是不是通过我的UI ...
- C语言---volatile(我的工程笔记本)
一般说来,volatile用在如下的几个地方: 1.中断服务程序中修改的供其它程序检测的变量需要加volatile: 2.多任务环境下各任务间共享的标志应该加volatile: 3.存储器映射的硬件寄 ...
- 第一个微信小程序(实现点击一个按钮弹出toast)
今天根据网上的教程搭建了微信小程序的环境,然后看文档做了一个简单的小应用. 项目的目录是这个样子的: app.js.app.json.app.wxss是全局文件,必不可少的文件.定义在app.wxss ...