关于FaceL的学习
来源:互联网 发布:淘宝批量自动注册 编辑:程序博客网 时间:2024/05/07 14:07
近两周的摸索边学习python,边看FaceL的源码,有收获也有困惑。
Face.py看着可简单了,主要就是三个步骤:
1)OpenCV Cascade 检测摄像头捕捉到的人脸。
2)ASEF 用来定位人眼,这个相当的精准啊!
3)支持向量机SVM,通过addTraining(),train(),以及predict()阶段显示出人脸的标签。
把很多开源库整合到了一起,识别的效果也非常流畅。
当然,若要是在iOS上实现人脸识别,这与我的期望还有很大差距。
首先:每重启一次,Label就会被删除,不能保存前一次人脸的信息。
这几天的折腾终于解决了,本来想想是件很简单的时,就是在一次人脸注册后将信息存到数据库,然后第二次开启时再从数据库导入就可以了。问题就来了:
1) 怎么用python建数据库
看了一下python关于SQLite3的操作还是比较简单的,总结一点备忘:
先导入sqlite3
import sqlite3
创建数据库:
db = sqlite.connect("test.db")
获取游标:
cu = db.cursor()
CURD:
cu.execute(SQL) SQL语句都是很简单的。
“增删改”执行之后不要忘记 db.commit()哦。
2)应该存入什么信息
看怎么注册信息就知道了,注册时addtraining()有四个参数:data,leye,reye,sub_id
3)以什么形式存入信息
上面的四个参数,除了sub_Id,其他三种都是对象类型,data是图片对象,leye和reye是Point对象。
Sqlite上当然是用“TEXT”形式存。
Point对象,先不管他是什么,转换成字符串:leye = str(leye)
关键是这data,sqlite上当然不能存放图片,先想到存成字符类型。data是由摄像头捕捉的一帧图像,在pyvison.types.Video.py 中有Webcam类,data即由该类方法query() 获得。用dir(data)查看它具有的方法和属性,发现 可以用 data.pil.tostring() 转化成为字符流存入数据库。但是存进去是一回事,取出来又是另外一回事,对于如何又将该字符流转回图片对象,我可又犯了难。对python就知道点皮毛,所以没找到方法,有什么好方法求指教。
所以就改变了图片存储的策略,将data图片生成并保存,将路径存入数据库,再凭该路径取出。这当然也不是一个什么好方法,当下真是没什么办法了。在调试的时候发现,data.show()可以显示当前这一帧的图片,可以用data.save(path)将图片存入该path下,但是存下的图片与data.show()显示的图片却有不同,需要加上人脸检测的方框线,所以存储的形式应该是:data.asAnnotated.save(path)。
4)如何取出信息
取出某个字段后打印,发现是以u'开头的有木有,因为它是unicode字符串,转化为普通字符串: string.encode('gbk')
因为左右眼坐标是以字符串形式保存的,需要还原为Point对象,找啊找,终于找到Point类。
先导入:from pyvision.type.Point import Point
在Point类中有方法: 将字符串中前两个坐标截取出来,然后Point(float(x),float(y))就可以还原为Point对象了。
图片对象这样还原:image = pv.Image(path)
在程序开始前将数据取出,addTraining。
在注册完成之后将每一帧存入数据库。
两个步骤,重启程序时,就可以看到label数为存入数据库的特征数。
第二个难题,目前基本无解。在标记为isTrained() 后,当程序扫描到未注册过的用户时,会显示注册过的用户的信息,确切的说是与他最为相似的人脸信息,只有该人注册之后才会显示该用户的信息。这就相当纠结了,若是门禁系统,好不容易要经过注册、训练才能开门,若来了个陌生人,倒也可以轻而易举地进入了,那这系统还有什么意思呢。如果要实现陌生人不显示任何信息,就需要改pyvision库中的SVMFaceRec文件的逻辑了。
还有就是如何让移植到iOS上的问题,据说iOS不支持libSVM,不会这么坑爹吧。本来想在后台建个服务器,从iOS获取图片然后识别,但是想要的效果是实时地显示该用户的信息,并不像门禁,识别完毕就暂停交互的,如果每一帧都需要与服务器交互,那肯定是不行的。一堆问题啊,慢慢摸索吧。
- 关于FaceL的学习
- FaceL:一个靠谱的开源人脸标注训练识别程序
- FaceL:一个靠谱的开源人脸标注训练识别程序
- FaceL:一个靠谱的开源人脸标注训练识别程序
- FaceL:一个靠谱的开源人脸标注训练识别程序
- http://cs.dartmouth.edu/~xy/blog/facel/
- 关于学习的学习要点
- 关于AutoResetEvent的学习
- 关于AOP的学习
- 关于MMAPI的学习
- 关于学习的方法
- 关于ike的学习
- 关于FTP的学习
- 关于SqlHelper的学习
- 关于NASM的学习
- 关于TestComplete的学习
- 关于sequence的学习
- 关于CSS的学习
- BI学习之一创建一个简单的Olap多维数据集的展现
- redis的安装及php扩展
- Windows - 在当前路径下打开命令行(Command)窗口
- 第五篇 直接面向系统资源的0号中断处理
- 千内自恋性数
- 关于FaceL的学习
- js中style,currentStyle和getComputedStyle的区别
- 枚举类: 只能取特定之中的一个
- ActiveMQ大总结
- Android 应用商店分析
- IE6关于浮动、margin-bottom的兼容问题
- Codeforces Round #148 (Div. 1) 总结
- linux 内核定时器编程
- 内核线程和用户线程的区别