人脸识别系统运行步骤如下:
1. 从摄像头抓取一帧图片。
2. 转换彩色图片帧为灰度图片帧。
3. 检测灰度图片帧的人脸。
4. 处理图片以显示人脸区域(使用 cvSetImageROI() 和 cvCopyImage())。
5. 预处理脸部图片。
6. 识别图片中的人。
摄像头实时训练的实现
现在你已经有了一个用摄像头实时识别人脸的方法,但是要学习新人脸,你不得不关闭这个程序,把摄像头的图片保存成图片文件,更新图片列表,使用离线命令行训练的方法,然后以实时摄像头识别的模式再次运行这个程序。所以实际上,你完全可以用程序来执行实时的摄像头训练!
这里就是用摄像头视频流把一个新的人加入人脸识别数据库而不关闭程序的一个最简单的方法:
1. 从摄像头收集一些图片(预处理后的脸部图片),也可以同时执行人脸识别。
2. 用“cvSaveImage()”函数保存这些脸部图片作为图片文件存入磁盘。
3. 加入每张脸部图片的文件名到训练图片列表(用于离线命令行训练的文本文件)的底部。
4. 一旦你准备实时训练,你将从所有图片文件形成的数据库重新训练。这个文本文件列出了新加入的训练图片文件,并且这些图片被电脑存为了图片文件,所以实时训练工作起来跟离线训练一样。
5. 但是在重新训练之前,释放任何正在使用的资源和重新初始化也很必要。应该像你重新启动了这个程序一样。比如,在图片被存储成文件并且加入训练列表的文本文件后,你应该再执行相同的离线训练(包括从训练列表文件载入图片,用PCA方法找出新训练集的特征脸和比率)之前释放特征脸数组。 这个实时训练的方法相当低效,因为假如在训练集中有50个人,而你多加了一个人,它将为51个人重新训练,这是非常不好的,因为训练的时间随着用户或图片数量的增加呈指数级增长。但是假如你只是处理百来张图片,它不需要多少秒就可以完成。
对于怎么追加训练我还没研究出来,哪位同仁研究出来希望能分享下!