📄 wi.cpp
字号:
templenx = DTWTemplate(s0->xLoc2,s0->effectDataNum,s1->xLoc2,s1->effectDataNum,dtwtemplatex,1,20,&thresholdx);
if(templenx == -1)
{
return -1;
}
for(i = 2 ;i<num;i++)
{
CWi::Sample *s = (CWi::Sample *)trainSampleArray.GetAt(i);
retval = DTWTemplate(dtwtemplatex,templenx,s->xLoc2,s->effectDataNum,dtwtemplatex,i,20,&thresholdx);
if(templenx == -1)
{
return -1;
}
}
thresholdxy = SQUARE(thresholdx)+SQUARE(thresholdy);
templenxy = templeny;
threshold = thresholdxy;
return retval;
}
/****************************************************************************/
/*功能:综合利用X坐标和Y坐标进行识别
/*参数:distance-保存识别对象与模板的距离
/* index-待识别的对象在测试几种的下标
/*返回值:1 接受 -1 拒绝
/****************************************************************************/
int CWi::RecogTemplateXY(double *distance,int index)
{
double disx,disy;
double retval;
CWi::Sample *s = (CWi::Sample *)testSampleArray.GetAt(index);
disx = DTWDistanceFun(dtwtemplatex,templenx,s->xLoc2,s->effectDataNum,100);
disy = DTWDistanceFun(dtwtemplatey,templeny,s->yLoc2,s->effectDataNum,100);
retval = SQUARE(disx)+SQUARE(disy);
*distance = retval;
if(retval>=threshold*1.0)
{
return -1;
}
else
{
return 1;
}
}
/****************************************************************************/
/*
/*
/*
/****************************************************************************/
int CWi::RecogMovement(double *distance,int index)
{
FEAGURE_MV fm;
double retval;
CWi::Sample *s = (CWi::Sample *)testSampleArray.GetAt(index);
compute_feagure_ex(s->xLoc,s->yLoc,s->pressTotal,s->effectDataNum,&fm);
retval = feagure_distance(&feat,&fm);
*distance = retval;
if(retval>=thresholdfeat*1.3)
{
return -1;
}
else
{
return 1;
}
}
/****************************************************************************/
/*
/*
/*
/****************************************************************************/
int CWi::RegDih(double *distance,int index)
{
DIHFQ fq;
double retval;
CWi::Sample *s = (CWi::Sample *)testSampleArray.GetAt(index);
int *dir = (int *)malloc(sizeof(int)*s->effectDataNum);
dih_compute_direction(s->xLoc2,s->yLoc2,dir,s->effectDataNum);
//dih_compute_frequency_dist(dir,s->xLoc2,s->yLoc2,s->effectDataNum,&fq);
//dih_compute_frequency_pressure(dir,s->pressTotal2,s->effectDataNum,&fq);
dih_compute_frequency_dp(dir,s->pressTotal2,s->xLoc2,s->yLoc2,s->effectDataNum,&fq);
//dih_compute_frequency(dir,s->effectDataNum,&fq);
retval = dih_dist_compute(&freq,&fq);
*distance = retval;
if(retval>=thresholdfreq*1.3)
{
return -1;
}
else
{
return 1;
}
}
/****************************************************************************/
/*
/*
/*
/****************************************************************************/
void CWi::OnDirection()
{
int num = trainSetDataFilePath.GetSize();
DIHFQ *fq = (DIHFQ *)malloc(sizeof(DIHFQ)*num);
double total = 0.0;
DIHFQ frequence;
frequence.f0 = 0.0;
frequence.f1 = 0.0;
frequence.f2 = 0.0;
frequence.f3 = 0.0;
for(int i = 0;i<num;i++)
{
CWi::Sample *s = (CWi::Sample *)trainSampleArray.GetAt(i);
int *dir = (int *)malloc(sizeof(int)*s->effectDataNum);
dih_compute_direction(s->xLoc2,s->yLoc2,dir,s->effectDataNum);
//dih_compute_frequency_dist(dir,s->xLoc2,s->yLoc2,s->effectDataNum,&fq[i]);
//dih_compute_frequency_pressure(dir,s->pressTotal2,s->effectDataNum,&fq[i]);
dih_compute_frequency_dp(dir,s->pressTotal2,s->xLoc2,s->yLoc2,s->effectDataNum,&fq[i]);
//dih_compute_frequency(dir,s->effectDataNum,&fq[i]);
frequence.f0+=fq[i].f0;
frequence.f1+=fq[i].f1;
frequence.f2+=fq[i].f2;
frequence.f3+=fq[i].f3;
}
frequence.f0/=num;
frequence.f1/=num;
frequence.f2/=num;
frequence.f3/=num;
for(i = 0;i<num;i++)
{
total+=dih_dist_compute(&freq,&fq[i]);
}
total/=num;
freq = frequence;
thresholdfreq = total;
}
/****************************************************************************/
/*
/*
/*
/****************************************************************************/
void CWi::OnMovement()
{
int num = trainSetDataFilePath.GetSize();
PFEAGURE_MV fm = (PFEAGURE_MV)malloc(sizeof(FEAGURE_MV)*num);
double total = 0.0;
FEAGURE_MV feature;
feature.f1 = 0.0;
feature.f2 = 0.0;
feature.f3 = 0.0;
feature.f4 = 0.0;
feature.f5 = 0.0;
feature.f6 = 0.0;
feature.f7 = 0.0;
feature.f8 = 0.0;
for(int i = 0;i<num;i++)
{
CWi::Sample *s = (CWi::Sample *)trainSampleArray.GetAt(i);
compute_feagure_ex(s->xLoc,s->yLoc,s->pressTotal,s->effectDataNum,&fm[i]);
feature.f1+=fm[i].f1;
feature.f2+=fm[i].f2;
feature.f3+=fm[i].f3;
feature.f4+=fm[i].f4;
feature.f5+=fm[i].f5;
feature.f6+=fm[i].f6;
feature.f7+=fm[i].f7;
feature.f8+=fm[i].f8;
}
feature.f1/=num;
feature.f2/=num;
feature.f3/=num;
feature.f4/=num;
feature.f5/=num;
feature.f6/=num;
feature.f7/=num;
feature.f8/=num;
for(i = 0;i<num;i++)
{
total += feagure_distance(&feature,&fm[i]);
}
total/=num;
feat = feature;
thresholdfeat = total;
}
/****************************************************************************/
/* 功能:保存以压力为特征时的模板
/* 参数:FileName-模板文件名
/****************************************************************************/
void CWi::SaveTemplatePress(char * FileName)
{
TempHeader head;
FILE *fp;
fp = fopen(FileName,"ab+");
head.length = templen;
head.threshold = threshold;
head.method = METHOD_PRES;
fwrite(&head,sizeof(head),1,fp);
fwrite(dtwtemplate,sizeof(double),templen,fp);
fclose(fp);
}
/****************************************************************************/
/*
/*
/*
/****************************************************************************/
void CWi::SaveTemplateXpos(char * FileName)
{
TempHeader head;
FILE *fp;
fp = fopen(FileName,"ab+");
head.length = templenx;
head.threshold = thresholdx;
head.method = METHOD_X;
fwrite(&head,sizeof(head),1,fp);
fwrite(dtwtemplatex,sizeof(double),templenx,fp);
fclose(fp);
}
/****************************************************************************/
/*
/*
/*
/****************************************************************************/
void CWi::SaveTemplateYpos(char * FileName)
{
TempHeader head;
FILE *fp;
fp = fopen(FileName,"ab+");
head.length = templeny;
head.threshold = thresholdy;
head.method = METHOD_Y;
fwrite(&head,sizeof(head),1,fp);
fwrite(dtwtemplatey,sizeof(double),templeny,fp);
fclose(fp);
}
/****************************************************************************/
/*
/*
/*
/****************************************************************************/
void CWi::SaveTemplateXY(char * FileName)
{
TempHeader head;
FILE *fp;
fp = fopen(FileName,"ab+");
head.length = templenxy;
head.threshold = thresholdxy;
head.method = METHOD_XY;
fwrite(&head,sizeof(head),1,fp);
fwrite(dtwtemplatex,sizeof(double),templenx,fp);
fwrite(dtwtemplatey,sizeof(double),templeny,fp);
fclose(fp);
}
/****************************************************************************/
/*
/*
/*
/****************************************************************************/
void CWi::SaveMovement(char * FileName)
{
TempHeader head;
FILE *fp;
fp = fopen(FileName,"ab+");
head.length = 0;
head.threshold = thresholdfeat;
head.method = METHOD_MOVE;
fwrite(&head,sizeof(head),1,fp);
fwrite(&feat,sizeof(FEAGURE_MV),1,fp);
fclose(fp);
}
/****************************************************************************/
/*
/*
/*
/****************************************************************************/
void CWi::SaveDih(char * FileName)
{
TempHeader head;
FILE *fp;
fp = fopen(FileName,"ab+");
head.length = 0;
head.threshold = thresholdfreq;
head.method = METHOD_DIH;
fwrite(&head,sizeof(head),1,fp);
fwrite(&freq,sizeof(DIHFQ),1,fp);
fclose(fp);
}
/****************************************************************************/
/*
/*
/*
/****************************************************************************/
void CWi::SaveTemplateVec(char * FileName)
{
TempHeader head;
FILE *fp;
fp = fopen(FileName,"ab+");
head.length = templenvec;
head.threshold = thresholdvec;
head.method = METHOD_VEC;
fwrite(&head,sizeof(head),1,fp);
fwrite(dtwtemplatev,sizeof(mvector),templenvec,fp);
fclose(fp);
}
/****************************************************************************/
/*功能:保存用HMM模型时的模板
/*参数:FileName-模板文件名
/****************************************************************************/
void CWi::SaveHMM(char * FileName)
{
FILE *fp;
fp = fopen(FileName,"ab+");
PrintHMM(fp, &hmm);
fclose(fp);
}
/****************************************************************************/
/*功能:装载以压力为特征的模板
/*参数:FileName-文件名
/****************************************************************************/
int CWi::LoadTemplatePress(char * FileName)
{
TempHeader head;
FILE *fp;
fp = fopen(FileName,"rb");
fread(&head,sizeof(head),1,fp);
if(head.method != METHOD_PRES)
{
fclose(fp);
return -1;
}
fread(dtwtemplate,sizeof(double),templen,fp);
templen = head.length;
threshold = head.threshold;
fclose(fp);
return 0;
}
/****************************************************************************/
/*
/*
/*
/****************************************************************************/
int CWi::LoadTemplateXpos(char * FileName)
{
TempHeader head;
FILE *fp;
fp = fopen(FileName,"rb");
fread(&head,sizeof(head),1,fp);
if(head.method != METHOD_X)
{
fclose(fp);
return -1;
}
fread(dtwtemplatex,sizeof(double),templenx,fp);
templenx = head.length;
threshold = thresholdx = head.threshold;
fclose(fp);
return 0;
}
/****************************************************************************/
/*
/*
/*
/****************************************************************************/
int CWi::LoadTemplateYpos(char * FileName)
{
TempHeader head;
FILE *fp;
fp = fopen(FileName,"rb");
fread(&head,sizeof(head),1,fp);
if(head.method != METHOD_Y)
{
fclose(fp);
return -1;
}
fread(dtwtemplatey,sizeof(double),templeny,fp);
templeny = head.length;
threshold = thresholdy = head.threshold;
fclose(fp);
return 0;
}
/****************************************************************************/
/*
/*
/*
/****************************************************************************/
int CWi::LoadTemplateXY(char * FileName)
{
TempHeader head;
FILE *fp;
fp = fopen(FileName,"rb");
fread(&head,sizeof(head),1,fp);
if(head.method != METHOD_XY)
{
fclose(fp);
return -1;
}
fread(dtwtemplatex,sizeof(double),templenx,fp);
fread(dtwtemplatey,sizeof(double),templeny,fp);
templenxy = head.length;
thresholdxy = head.threshold;
fclose(fp);
return 0;
}
/****************************************************************************/
/*
/*
/*
/****************************************************************************/
int CWi::LoadMovement(char * FileName)
{
TempHeader head;
FILE *fp;
fp = fopen(FileName,"rb");
fread(&head,sizeof(head),1,fp);
if(head.method != METHOD_MOVE)
{
fclose(fp);
return -1;
}
fread(&feat,sizeof(FEAGURE_MV),1,fp);
thresholdfeat = head.threshold;
fclose(fp);
return 0;
}
/****************************************************************************/
/*
/*
/*
/****************************************************************************/
int CWi::LoadDih(char * FileName)
{
TempHeader head;
FILE *fp;
fp = fopen(FileName,"rb");
fread(&head,sizeof(head),1,fp);
if(head.method != METHOD_DIH)
{
fclose(fp);
return -1;
}
fread(&freq,sizeof(DIHFQ),1,fp);
thresholdfreq = head.threshold;
fclose(fp);
return 0;
}
/****************************************************************************/
/*
/*
/*
/****************************************************************************/
int CWi::LoadTemplateVec(char * FileName)
{
TempHeader head;
FILE *fp;
fp = fopen(FileName,"rb");
fread(&head,sizeof(head),1,fp);
if(head.method != METHOD_VEC)
{
fclose(fp);
return -1;
}
fread(dtwtemplatev,sizeof(mvector),templenvec,fp);
templenvec = head.length;
thresholdvec = head.threshold;
fclose(fp);
return 0;
}
/****************************************************************************/
/*功能:装载利用HMM模型时的模板文件
/*参数:FileName-模板文件名
/****************************************************************************/
int CWi::LoadHMM(char * FileName)
{
FILE *fp;
fp = fopen(FileName,"rb");
ReadHMM(fp, &hmm);
fclose(fp);
return 0;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -