搭建人脸识别系统需要使用把特征存储到数据库,以及从数据库中读取特征进行比较,因此使用MySQLdb进行mysql数据库的简单操作
https://pypi.python.org/pypi/MySQL-python/1.2.5
安装可以直接使用pip安装 也可以直接下源码编译
特征是一个128维的浮点数向量,尝试了两种存储的方式:
方式1: 在表中创建128个列,每个列存储一个DOUBLE类型的数据,存储成f0, f2, ..., f127,
方式2: 把这个浮点数向量使用python的json模块进行序列化 json.dumps 成为一个字符串后以TEXT类型数据存储,取出的时候再使用json.load还原成向量,浮点数精度取了10位,粗略估计一下按20计算每一个维度,则每一个向量存储空间不大于20*128, TEXT类型能够存储下。
比较了一下两种存储方式在查询的时候的时间
多次实验后发现基本是blob稍微还要慢一点点,但是总体来说差距不是很大
之后在表上建立了一些索引,优化了一下SQL,发现基本查询时间都在100秒左右
这时候考虑到是不是传输都数据量比较大,导致时间没办法减小
正在纠结都时候突然发现数据库使用的外网连接地址,修改成内网连接后,获得了100X的提速
差距不是太大基本都可以用了
这是一个比较大大数据量大场景下,一共有3700+张图片,共识别出脸5300+个
一般场景下大概是600张图片,人脸1000个左右 数据库查询时间基本在0.2秒以下