0
关注
58132
浏览

大学生写人脸识别算法现实吗?

为什么被折叠? 0 个回复被折叠
匿名用户用户来自于: 北京市
2026-01-12 03:49
当然现实啊,一边能学习算法,一边能做出好玩的东西。大学时期不做点自己喜欢的事情那真是浪费啦!
天天向上xz 核心会员 用户来自于: 北京市
2026-01-12 04:10
人脸检测算法算是比较简单的 以前项目需要做过 实现用了OpenCV2.4.9+VS2013 基本方法是基于adaboost算法的级联分类器检测 用OpenCV可以很容易实现,这个方法算是比较老的了,由于是在视频中一帧一帧进行检测,为了保证运行速度和准确性,需要人脸离摄像头比较近,这也算是该算法的一个缺点吧。 大学多参加创新项目和比赛对个人还是非常有用的,只要做过一些相关的项目就会了解其中的算法代码,不必妄自菲薄,术业有专攻,虽然是计算机系的,但不可能所有的专业技能都精通(相对于我这种小学生而言),我觉得干好一件事就非常不错了,接触到了学习了便会了 代码实现参考: 来源:http://www.opencv.org.cn/opencvdoc/2.3.2/html/doc/tutorials/objdetect/cascade_classifier/cascade_classifier.html#cascade-classifier 准备工作:安装VS2013,配置OpenCV的环境(具体参考浅墨的CSDN教程说的很详细)
 #include "opencv2/objdetect/objdetect.hpp"
 #include "opencv2/highgui/highgui.hpp"
 #include "opencv2/imgproc/imgproc.hpp"

 #include <iostream>
 #include <stdio.h>

 using namespace std;
 using namespace cv;

 /** 函数声明 */
 void detectAndDisplay( Mat frame );

 /** 全局变量 */
 string face_cascade_name = "haarcascade_frontalface_alt.xml";
 string eyes_cascade_name = "haarcascade_eye_tree_eyeglasses.xml";
 CascadeClassifier face_cascade;
 CascadeClassifier eyes_cascade;
 string window_name = "Capture - Face detection";
 RNG rng(12345);

 /** @主函数 */
 int main( int argc, const char** argv )
 {
   CvCapture* capture;
   Mat frame;

   //-- 1. 加载级联分类器文件
   if( !face_cascade.load( face_cascade_name ) ){ printf("--(!)Error loading\n"); return -1; };
   if( !eyes_cascade.load( eyes_cascade_name ) ){ printf("--(!)Error loading\n"); return -1; };

   //-- 2. 打开内置摄像头视频流
   capture = cvCaptureFromCAM( -1 );
   if( capture )
   {
     while( true )
     {
   frame = cvQueryFrame( capture );

   //-- 3. 对当前帧使用分类器进行检测
       if( !frame.empty() )
       { detectAndDisplay( frame ); }
       else
       { printf(" --(!) No captured frame -- Break!"); break; }

       int c = waitKey(10);
       if( (char)c == 'c' ) { break; }
      }
   }
   return 0;
 }

/** @函数 detectAndDisplay */
void detectAndDisplay( Mat frame )
{
  std::vector<Rect> faces;
  Mat frame_gray;

  cvtColor( frame, frame_gray, CV_BGR2GRAY );
  equalizeHist( frame_gray, frame_gray );

  //-- 多尺寸检测人脸
  face_cascade.detectMultiScale( frame_gray, faces, 1.1, 2, 0|CV_HAAR_SCALE_IMAGE, Size(30, 30) );

  for( int i = 0; i < faces.size(); i++ )
  {
    Point center( faces[i].x + faces[i].width*0.5, faces[i].y + faces[i].height*0.5 );
    ellipse( frame, center, Size( faces[i].width*0.5, faces[i].height*0.5), 0, 0, 360, Scalar( 255, 0, 255 ), 4, 8, 0 );

    Mat faceROI = frame_gray( faces[i] );
    std::vector<Rect> eyes;

    //-- 在每张人脸上检测双眼
    eyes_cascade.detectMultiScale( faceROI, eyes, 1.1, 2, 0 |CV_HAAR_SCALE_IMAGE, Size(30, 30) );

    for( int j = 0; j < eyes.size(); j++ )
     {
       Point center( faces[i].x + eyes[j].x + eyes[j].width*0.5, faces[i].y + eyes[j].y + eyes[j].height*0.5 );
       int radius = cvRound( (eyes[j].width + eyes[i].height)*0.25 );
       circle( frame, center, radius, Scalar( 255, 0, 0 ), 4, 8, 0 );
     }
  }
  //-- 显示结果图像
  imshow( window_name, frame );
 }
haarcascade_frontalface_alt.xml 是人脸分类器, haarcascade_eye_tree_eyeglasses.xml 是人眼分类器。 其实这就是官网给出的示例代码,具体链接上面已经给出,分类器可以自己训练也可以直接用别人训练好的,仅供学习参考。
匿名用户用户来自于: 北京市
2026-01-12 03:50
现在应用最广的基于cnn的人脸检测算法就是张凯鹏本科时候做出来的,人脸识别实现起来比人脸检测简单很多,有什么不行的。 https://kpzhang93.github.io/MTCNN_face_detection_alignment/
卡本特 核心会员 用户来自于: 北京市
2026-01-12 03:51
来凑个热闹,我是一名本科生,我的理想是发一篇cvpr。 在人脸方向学习有一段时间了,谈谈我的看法。 首先回答你的问题,“大学生写人脸识别算法的可能性”。 答案是可以,完全可能。(你说的大学生,我理解为本科生)暂时先抛开人脸识别算法的准确性来说,目前开源的人脸识别的项目代码就有很多,数不胜数。目前用的比较多的有seetaFace,dlib库,还有opencv自带的基于模板匹配的识别,这些都是基于传统的特征提取然后进行距离度量的方法。目前比较火的基于深度学习的人脸识别也有很多,类似于centerFace,normFace,sphereFace,都是最近关注度比较高的一些深度学习的人脸识别,还有kaipengZhang在本科阶段就搞出了MTCNN这样牛逼的人脸检测算法。所以你说的问题完全是有可能的,很多在校本科生在这方面已经玩的很熟了。(后面我把这些开源项目地址放出来) 然后,我觉得你是不是加入了一个自称技术极客的所谓技术群 为什么这么说呢,现在有一群人很瞧不起他们眼中的大学生。他们这群人就是自己没读过大学,但是收入比普通大学生要高。举个例子,我一个初中同学,高中没读完,就去读了个技校,然后工作,然后在07年前后参加了IT培训班,当时的IT浪潮刚刚起来。现在在帝都的互联网公司,年收入20~30W。这收入当然是秒杀我这种渣渣了。所以每次见面他都是有一种隐约的现在的大学生都学些啥东西,浪费青春,云云。因为现在互联网行业的待遇确实要比其他行业的高很多。并且是随便一个培训班培训出来学生就比普通本科文科或者工科学生工资要高。 现在瞧不起大学生的人群有很多,一方面是因为他身边的大学生确实不怎么样导致他管中窥豹,认为所有的大学生都不怎么样。另一方面是他确实比大多数大学生某一方面强(一般他们会看经济收入) 最后,放一点资料,写一点人脸方面的东西 人脸分为两个部分:人脸检测,人脸识别 人脸识别又分为两个部分:face verification(人脸验证)和 face identification(人脸辨识)。 解释下这两个概念。face verification是1对1,判断两个人脸是否是同一人,验证现在待检测的你是不是你自己,例如现在武汉火车站实现了刷人脸自助进站,刷身份证就验明信息,这里就是对比身份证上的图片和你进站时摄像头拍的图片进行对比,验证是否是同一人。face identification是1对n,从人脸库中找到给定的人脸的对应身份信息。或者理解成检测你是不是某个黑名单中的要管制的对象,例如公安系统的黑名单对比,或者人脸识别考勤,就是确认你是不是数据库中的某个对象。 人脸检测 人脸检测从刚开始的分类器(adaboost之类)到现在神经网络,发展很快,效果也很好。 1,opencv2中就自带了人脸检测的代码,也是利用分类器的原理进行检测,OpenCV\samples\facedetect.cpp,实现起来特别简单。 2,seetaFace 是中科院山世光组开源的一个项目,除了opencv以外不依赖其他的第三方库。效果和速度都还不错,是当时2016年的开源的一股清流,当时评价很不错。唯一遗憾是没有开源训练方法。seetaface/SeetaFaceEngine 3,MTCNN 这个是基于深度学习做的一个人脸检测,它是一个级联的cnn结构。其检测效果很不错,也是现在用的最多的一个开源的人脸检测算法。 论文链接:[1604.02878v1] Joint Face Detection and Alignment using Multi-task Cascaded Convolutional Networks 代码链接:https://github.com/kpzhang93/MTCNN_face_detection_alignment 4,MTCNN-light 上面3中的MTCNN是基于深度学习框架下实现的人脸检测,在GPU上的表现很不错,但是在CPU上面时间消耗或许成了一个问题,后来有人仿照mtcnn的思想,用c++代码没有依赖框架实现了mtcnn-light。虽然精度有一点损失但是在cpu上表现不错。 代码链接:AlphaQi/MTCNN-light 人脸识别 人脸识别的目的就是将人脸检测到的人脸进一步确认其身份,严格地来讲,在进行识别之前还有一个步骤,叫做人脸对齐(face alignment),有时候检测到的人脸是歪的,斜的,需要将人脸进行对齐,对齐之后再识别。 人脸对齐就需要准确的标注出人脸上的特征点位置,例如眼睛,鼻子,嘴巴,或者轮廓,这样才能知道人脸的角度,再进行对齐操作。seetaface,mtcnn中都带有特征点输出,当然还有dlib和3000fps这样的库进行人脸对齐。 dlib链接:dlib C++ Library 人脸识别中最重要的一部分就是将人脸上的特征如何提取出来这一部分,根据提取特征这一部分的方法的不同可以分为传统特征提取和深度学习特征提取。传统的提取人脸特征一般是haar或者lbp特征,深度学习提取的特征是不为人知的某种特征。将提取出来的特征(n维的特征向量)用距离度量的某种方法来判断两个人脸的相似度。 现在深度学习常用的人脸识别的算法有 caffeFace:https://github.com/ydwen/caffe-face normFace:https://github.com/happynear/NormFace mobile ID:liuziwei7/mobile-id sphereFace:wy1iu/sphereface sphereFace是截止到目前开源的效果最好的一个算法。 特征提取完成之后,需要用一种度量的方法来判断两个特征向量的距离,从而判断两个图片是否是同一个人。 在face verification中常用的方法就是 联合贝叶斯 在face identification中常用的方法是 余弦相似度 在度量方法中其实有很多种可选的方法,上面说的只是比较常见的。 目前想到这么多就写这么多吧,以后有时间再更新。 -----------2018年4月6日 又过了好几个月的时间了,新的人脸识别算法层出不穷。 AM-softmax[1801.05599] Additive Margin Softmax for Face Verification cosface Large Margin Cosine Loss for Deep Face Recognition 上面这两个算法其实是一样的,撞车了。其根本的思想都是基于sphere face的大尺度边界设计的损失函数上做文章的。 目前效果最好的人脸识别开源算法应该是 洞见实验室的arcface(因为arcface与虹软的arcface相同,所以将其名字改为了insightface)代码链接: insightface 之前基于度量学习的人脸识别算法都面临一个很严重的问题,难以训练。例如sphereface中,其loss的核心思想:最小类间距离大于最大类内距离,所以在自己组织样本训练的时候会非常的难以收敛,但是arcface在训练方面会好一点。 ----------------2018年7月25日 我想换一份工作,去面试了一家做人脸的公司。真正地诠释了什么“自取其辱”,其实我现在也开始怀疑了本科生适不适合做图像算法了。 一个本科生去面试算法工程师自取其辱的故事 - CSDN博客

关于作者

问题动态

发布时间
2026-01-12 05:38
更新时间
2026-01-12 05:38
关注人数
0 人关注

相关问题

车牌识别系统原理
如果安卓机推出指纹识别,你会购买并使用吗?
美签母亲指纹识别不了?
人脸识别考勤系统怎么做?
oppo N3的指纹识别是哪家的方案?
大家是如何识别交换机对应的光模块呢?我是新手请各位指教
求比较好的国产指纹识别门禁系统品牌?
大学生创业者最大的错误:忽视供求规律
汇顶科技的指纹识别技术真是自主开发的吗?
能区分照片和真人的人脸识别服务?

推荐内容

手机人脸识别是怎么一回事?
网络工程,计算机科学与技术,物联网?
人脸识别算法的可改进余地?
如何配置双核心交换机 怎么使用两个三层交换机分担网络流量?
人脸识别技术在商业领域达到什么样的应用程度?
Face++、商汤、依图、云从、百度人脸识别、腾讯优图,谁会在未来主宰国内人脸识别和安防市场?
人脸识别技术会毁在整形医院手里吗?
学人脸识别好就业吗?
过人脸识别?
开源人脸识别软件有哪些?
All Rights Reserved Powered BY WeCenter V4.1.0 © 2026 粤ICP备20025096号-2
  

粤公网安备 44190002007303号