请做过‘人脸识别’的高手进来讨论

laishishenghust 2003-08-19 09:50:55
主要是做两张相片(人相)的识别,比如一张两寸的照片,用高分辨率打印机打印出来,再用高分辨率的扫描仪扫描得到的图像进行比较(主要是检查打印的照片是否正确,比如张三的卡片是否打印的是张三的照片)
...全文
45 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
wudang 2003-09-12
  • 打赏
  • 举报
回复
编成实现识别黄色图象,是不是找露三点的特征?hf
ccrun.com 2003-09-11
  • 打赏
  • 举报
回复
不是曾经有人发帖说做出来能识别黄色图象的吗?道理应该差不多吧。
xiaozhen666 2003-09-11
  • 打赏
  • 举报
回复
用求质心距和质心偏角的的方法,源代码如下:
double * __fastcall TForm1::FeatureExtract(Graphics::TBitmap *pBitmap,AnsiString S_FileName)
{
double GlobalCentroidX,GlobalCentroidY,PrintCentroid,PrintCentroidX,PrintCentroidY,tempX,tempY,temp;
double corner,hypotenuse,arc;
GlobalCentroidX = double(pBitmap->Width)/2.0;
GlobalCentroidY = double(pBitmap->Height)/2.0;
PrintCentroid = PrintCentroidX = PrintCentroidY = tempX = tempY = 0.0;
int i,j;
byte *ptr;
for(i=0;i<pBitmap->Height;i++)
{
ptr = (byte *)pBitmap->ScanLine[i];
for(j=0;j<pBitmap->Width*3;j+=3)
{
if(ptr[j] == 0)
temp = 1;
else
temp = 0;
PrintCentroid += temp;
tempX +=(double)j*temp;
tempY +=(double)i*temp;
}
}
PrintCentroidX = tempX/PrintCentroid;
PrintCentroidY = tempY/PrintCentroid;
hypotenuse = sqrt((PrintCentroidX-GlobalCentroidX)*(PrintCentroidX-GlobalCentroidX)
+(PrintCentroidY-GlobalCentroidY)*(PrintCentroidY-GlobalCentroidY));
corner = asin(fabs(PrintCentroidY-GlobalCentroidY)/hypotenuse);
if(GlobalCentroidX < PrintCentroidX && GlobalCentroidY < PrintCentroidY)
corner += PI/2.0;
if(GlobalCentroidX < PrintCentroidX && GlobalCentroidY > PrintCentroidY)
corner += PI;
if(GlobalCentroidX > PrintCentroidX && GlobalCentroidY > PrintCentroidY)
corner += 1.5*PI;
arc = corner*180.0/PI;

AnsiString str;
str = "质心距:"+FloatToStr(hypotenuse);
str = str + "  质心坐标";
str = str + " X=" + FloatToStr(PrintCentroidX)+ " ";
str = str + " Y=" + FloatToStr(PrintCentroidY)+ " ";
str = str + " 角度= " + FloatToStr(arc)+" ";
str = str + "\n";
FILE *iFileHandle;
iFileHandle = fopen("c:\\DemoData\\data.dat", "a");
fwrite(S_FileName.c_str(),S_FileName.Length(),1,iFileHandle);
fwrite("\n",1,1,iFileHandle);
fwrite(str.c_str(),str.Length(),1,iFileHandle);
fclose(iFileHandle);

return_arc[0] = hypotenuse;
return_arc[1] = arc;
return(return_arc);
}
grouse 2003-09-03
  • 打赏
  • 举报
回复
楼上的技术听说过,具体实现方式就是...........






































..................找一个人来认 :)
小笨象 2003-09-03
  • 打赏
  • 举报
回复
呵呵呵。今天才看新闻,说中国已经开发出了一种比别的都先进的‘人脸识别’技术。
所以你就不用忙了。找他们去问问吧。好象是中科院的。
chenpeng20000 2003-08-25
  • 打赏
  • 举报
回复
我认为“比如眼睛的宽度,眼睛离嘴巴的距离等等”,这种绝对距离没有太大意义,要看要看它们在整个脸中所占的相对距离才有意义,如眼睛宽度占整个眼睛这条直线段上的比例等等
sprewellkobe 2003-08-25
  • 打赏
  • 举报
回复
没做过,但对这感兴趣

顶!
g677 2003-08-25
  • 打赏
  • 举报
回复
这种人脸识别应该不是太难的,因为打出来,再扫进去的图片与原图片变化应该很小(除非打印机和扫描仪有问题),所以特征丢失得也应该比较小。
关键是找特征,就像potlee(potlee)所说的“比如眼睛的宽度,眼睛离嘴巴的距离等等”,包括器官的重心特征,这是几何特征,我觉得也可以考虑色彩特征(用灰度,打印机打的,彩色可能会有影响),如灰度直方图等等
oldcold 2003-08-20
  • 打赏
  • 举报
回复
gz
chenpeng20000 2003-08-20
  • 打赏
  • 举报
回复
这个太复杂了,找些论文看看吧
zhrmghg11 2003-08-20
  • 打赏
  • 举报
回复
只要可以找出每个人的脸部的特征模型,就好办了
potlee 2003-08-20
  • 打赏
  • 举报
回复
我没有做过这样的项目,但我知道指纹识别是用了指纹的特征识别的,指纹上有许多线条和分叉,所谓指纹的唯一性也就是这些线条和分叉不同,系统把两个指纹图片的分叉点找出来,比照,这就是指纹识别的原理了,当然要想做的成熟点还有不少工作要做。
楼主所说的人脸识别,我想也是这个原理吧,把照片扫进电脑,再把照片的大小调整成一样大,在照片里提取出能表现出人脸的特征点,比如眼睛的宽度,眼睛离嘴巴的距离等等,进行识别吧,不知道大家意见如何?

13,825

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder相关内容讨论区
社区管理员
  • 基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧