我這也不是技術(shù)大牛哈,就是最近也在搞人臉識別這塊兒,看到這個帖子覺得挺有參考價值的,趕緊來總結(jié)一下順便分享下自己的理解~
首先說正題,用MySQL存人臉特征數(shù)據(jù),用來做識別參照,實現(xiàn)多條件匹配,準確率還挺高。下面簡單過一遍流程。
需求描述
1. 把人臉特征信息存到MySQL里。
2. 調(diào)用攝像頭做人臉識別,然后實時和數(shù)據(jù)庫里的特征比對,確認是誰。
實現(xiàn)思路
先說準備工作:
用的是Python,主要依賴幾個庫——OpenCV(負責調(diào)用攝像頭)、face_recognition(做人臉識別)、numpy(處理數(shù)據(jù))、pymysql(連接數(shù)據(jù)庫)。聽說face_recognition準確率能到99.6%,聽起來靠譜。
人臉識別這塊兒,face_recognition確實挺好使,直接就能拿到128維的人臉編碼,然后通過它自帶的比對函數(shù)就能得出結(jié)果。
重點來了,怎么把128維的數(shù)據(jù)存進MySQL?
因為face_recognition輸出的是numpy的ndarray類型,也就是個矩陣,沒法直接塞數(shù)據(jù)庫。那怎么辦?得轉(zhuǎn)格式!
具體操作是這樣的:
先把矩陣轉(zhuǎn)成列表,然后再把列表里的每個元素都轉(zhuǎn)成字符串,最后拼成一個長字符串,這樣就能存到數(shù)據(jù)庫里了。
反過來,等要從數(shù)據(jù)庫讀的時候,就得把這個字符串還原回矩陣形式。
方法也不難:先按分隔符切開變成列表,再逐個轉(zhuǎn)成浮點數(shù),最后再用numpy轉(zhuǎn)成矩陣就OK了。
顯示中文的問題也得解決哈。
OpenCV本身不支持中文顯示,直接顯示中文會亂碼。咋辦?可以用PIL庫配合本地字體文件來處理圖像上的文字顯示,這樣就能正常顯示人名這些中文信息啦。
再說說數(shù)據(jù)庫部分:
有個.py文件專門處理數(shù)據(jù)庫相關(guān)操作,比如連接、插入、查詢啥的。代碼大概是這樣的結(jié)構(gòu)(當然賬號密碼那些地方打了碼):
python
import pymysql
class FaceSQL:
def __init__(self):
self.conn = pymysql.connect(
host=*.*,
user=,
password=,
db=xxx,
...
)
這部分主要是為了方便管理人臉數(shù)據(jù),把編碼后的字符串存進去,識別時再取出來比對。
總結(jié)整個方案流程清晰,技術(shù)選型也比較成熟,適合想入門人臉識別+數(shù)據(jù)庫結(jié)合應(yīng)用的小白參考。實操中可能會遇到一些坑,比如格式轉(zhuǎn)換出錯啊、中文顯示問題啊,但網(wǎng)上資料也挺多,基本都能搞定。
有需要的小伙伴可以試試照著這個思路去實現(xiàn)一波~
首先說正題,用MySQL存人臉特征數(shù)據(jù),用來做識別參照,實現(xiàn)多條件匹配,準確率還挺高。下面簡單過一遍流程。
需求描述
1. 把人臉特征信息存到MySQL里。
2. 調(diào)用攝像頭做人臉識別,然后實時和數(shù)據(jù)庫里的特征比對,確認是誰。
實現(xiàn)思路
先說準備工作:
用的是Python,主要依賴幾個庫——OpenCV(負責調(diào)用攝像頭)、face_recognition(做人臉識別)、numpy(處理數(shù)據(jù))、pymysql(連接數(shù)據(jù)庫)。聽說face_recognition準確率能到99.6%,聽起來靠譜。
人臉識別這塊兒,face_recognition確實挺好使,直接就能拿到128維的人臉編碼,然后通過它自帶的比對函數(shù)就能得出結(jié)果。
重點來了,怎么把128維的數(shù)據(jù)存進MySQL?
因為face_recognition輸出的是numpy的ndarray類型,也就是個矩陣,沒法直接塞數(shù)據(jù)庫。那怎么辦?得轉(zhuǎn)格式!
具體操作是這樣的:
先把矩陣轉(zhuǎn)成列表,然后再把列表里的每個元素都轉(zhuǎn)成字符串,最后拼成一個長字符串,這樣就能存到數(shù)據(jù)庫里了。
反過來,等要從數(shù)據(jù)庫讀的時候,就得把這個字符串還原回矩陣形式。
方法也不難:先按分隔符切開變成列表,再逐個轉(zhuǎn)成浮點數(shù),最后再用numpy轉(zhuǎn)成矩陣就OK了。
顯示中文的問題也得解決哈。
OpenCV本身不支持中文顯示,直接顯示中文會亂碼。咋辦?可以用PIL庫配合本地字體文件來處理圖像上的文字顯示,這樣就能正常顯示人名這些中文信息啦。
再說說數(shù)據(jù)庫部分:
有個.py文件專門處理數(shù)據(jù)庫相關(guān)操作,比如連接、插入、查詢啥的。代碼大概是這樣的結(jié)構(gòu)(當然賬號密碼那些地方打了碼):
python
import pymysql
class FaceSQL:
def __init__(self):
self.conn = pymysql.connect(
host=*.*,
user=,
password=,
db=xxx,
...
)
這部分主要是為了方便管理人臉數(shù)據(jù),把編碼后的字符串存進去,識別時再取出來比對。
總結(jié)整個方案流程清晰,技術(shù)選型也比較成熟,適合想入門人臉識別+數(shù)據(jù)庫結(jié)合應(yīng)用的小白參考。實操中可能會遇到一些坑,比如格式轉(zhuǎn)換出錯啊、中文顯示問題啊,但網(wǎng)上資料也挺多,基本都能搞定。
有需要的小伙伴可以試試照著這個思路去實現(xiàn)一波~