搭建人臉識(shí)別系統(tǒng)需要使用把特征存儲(chǔ)到數(shù)據(jù)庫(kù),以及從數(shù)據(jù)庫(kù)中讀取特征進(jìn)行比較,因此使用MySQLdb進(jìn)行mysql數(shù)據(jù)庫(kù)的簡(jiǎn)單操作
https://pypi.python.org/pypi/MySQL-python/1.2.5
安裝可以直接使用pip安裝 也可以直接下源碼編譯
特征是一個(gè)128維的浮點(diǎn)數(shù)向量,嘗試了兩種存儲(chǔ)的方式:
方式1: 在表中創(chuàng)建128個(gè)列,每個(gè)列存儲(chǔ)一個(gè)DOUBLE類(lèi)型的數(shù)據(jù),存儲(chǔ)成f0, f2, ..., f127,
方式2: 把這個(gè)浮點(diǎn)數(shù)向量使用python的json模塊進(jìn)行序列化 json.dumps 成為一個(gè)字符串后以TEXT類(lèi)型數(shù)據(jù)存儲(chǔ),取出的時(shí)候再使用json.load還原成向量,浮點(diǎn)數(shù)精度取了10位,粗略估計(jì)一下按20計(jì)算每一個(gè)維度,則每一個(gè)向量存儲(chǔ)空間不大于20*128, TEXT類(lèi)型能夠存儲(chǔ)下。
比較了一下兩種存儲(chǔ)方式在查詢的時(shí)候的時(shí)間


多次實(shí)驗(yàn)后發(fā)現(xiàn)基本是blob稍微還要慢一點(diǎn)點(diǎn),但是總體來(lái)說(shuō)差距不是很大
之后在表上建立了一些索引,優(yōu)化了一下SQL,發(fā)現(xiàn)基本查詢時(shí)間都在100秒左右
這時(shí)候考慮到是不是傳輸都數(shù)據(jù)量比較大,導(dǎo)致時(shí)間沒(méi)辦法減小
正在糾結(jié)都時(shí)候突然發(fā)現(xiàn)數(shù)據(jù)庫(kù)使用的外網(wǎng)連接地址,修改成內(nèi)網(wǎng)連接后,獲得了100X的提速


差距不是太大基本都可以用了
這是一個(gè)比較大大數(shù)據(jù)量大場(chǎng)景下,一共有3700+張圖片,共識(shí)別出臉5300+個(gè)
一般場(chǎng)景下大概是600張圖片,人臉1000個(gè)左右 數(shù)據(jù)庫(kù)查詢時(shí)間基本在0.2秒以下