关于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获取图片然后识别,但是想要的效果是实时地显示该用户的信息,并不像门禁,识别完毕就暂停交互的,如果每一帧都需要与服务器交互,那肯定是不行的。一堆问题啊,慢慢摸索吧。

原创粉丝点击