利用python開發,借助dlib庫進行人臉識別,然後將檢測到的人臉剪下下來,依次排序顯示在新的影象上;
實現的效果如下圖所示,將圖1原圖中的6張人臉檢測出來,然後剪下下來,在影象視窗中依次輸出顯示人臉;
實現比較簡單,**量也比較少,適合入門或者興趣學習。
圖1 原圖和處理後得到的影象視窗
python: 3.6.3
dlib: 19.7
opencv, numpy
import dlib # 人臉識別的庫dlib
import numpy as np # 資料處理的庫numpy
import cv2 # 影象處理的庫opencv
工作內容主要以下兩大塊:dlib人臉檢測 和 繪製新影象
2.1 dlib人臉檢測:
dlib的使用,在我之前另一篇部落格裡面介紹過(link:
2.2 繪製新影象:
2.2.1 確定空白影象尺寸
這部分首先要根據檢測到的人臉數和人臉大小,來確定繪製影象所需要的尺寸:
多張人臉要輸出到一行,先進行一次人臉的遍歷,記每張人臉的尺寸為height*width(高度和寬度說明見圖2),
我取的生成影象的尺寸:height_max(最大高度)和width_sum(寬度之和),然後根據尺寸大小來新建空白影象:
img_blank = np.zeros((height_max, width_sum, 3), np.uint8)
2.2.2 影象填充
然後再進行一次人臉遍歷,這次進行空白影象img_blank進行填充:
for i in range(height):
for j in range(width):
img_blank[i][blank_start+j] = img[d.top()+i][d.left()+j]
圖2 影象尺寸說明
如果想訪問影象的某點畫素,可以利用img[height][width]:
儲存畫素其實是乙個三維陣列,先高度height,然後寬度wwww.cppcns.comidth;
返回的是乙個顏色陣列(0-255,0-255,0-255),按照(bwww.cppcns.com, g, r)的順序,比如 藍色 就是(255,0,0),紅色 是(0,0,255);
# 2018-01-22
# by timestamp
# #cnblogs: http://ww程式設計客棧w.cnblogs.com/adaminxie/
import dlib # 人臉識別的庫dlib
import numpy as np # 資料處理的庫numpy
import cv2 # 影象處理的庫opencv
# dlib**器
detector = dlib.get_frontal_face_detector()
predictor = dlib.shape_predictor('shape_predictor_68_face_landmarks.dat')
# 讀取影象
# dlib檢測
d程式設計客棧ets = dete程式設計客棧ctor(img, 1)
print("人臉數:", len(dets))
# 記錄人臉矩陣大小
height_max = 0
width_sum = 0
# 計算要生成的影象img_blank大小
for k, d in enumerate(dets):
# 計算矩形大小
# (x,y), (寬度width, 高度height)
pos_start = tuple([d.left(), d.top()])
pos_end = tuple([d.right(), d.bottom()])
# 計算矩形框大小
height = d.bottom()-d.top()
width = d.right()-d.left()
# 處理寬度
width_sum += width
# 處理高度
if height > height_max:
height_max = height
else:
height_max = height_max
# 繪製用來顯示人臉的影象的大小
print("img_blank的大小:")
print("高度", height_max, "寬度", width_sum)
# 生成用來顯示的影象
img_blank = np.zeros((height_max, width_sum, 3), np.uint8)
# 記錄每次開始寫入人臉畫素的寬度位置
blank_start = 0
# 將人臉填充到img_blank
for k, d in enumerate(dets):
height = d.bottom()-d.top()
width = d.right()-d.left()
# 填充
for i in range(height):
for j in range(width):
img_blank[i][blank_start+j] = img[d.top()+i][d.left()+j]
# 調整影象
blank_start += width
cv2.namedwindow("img_faces", 2)
cv2.imshow("img_faces", img_blank)
cv2.waitkey(0)
結果:圖3 原圖和處理後得到的影象視窗
Python3結合Sciter編寫桌面程式第三節
繼續.基礎框架搭好了,下面來正式的來乙個專案吧 behance 全球設計師的作品展示平台 就從這拉幾張圖吧,具體的網頁解析方式網上有很多,在此略過,我已經取出了一些位址,儲存在了list.txt裡,這次就用這些吧。即asyncio 框架則用了aiohttp 問題這裡可以在程式啟動的時候設定乙個配置列...
python3實現CryptoJS AES加密演算法
from crypto.cipher import aes from binascii import b2a hex,a2b hex import base64 class aescrypt def init self,key self.key key.encode utf8 self.mode a...
python3 dlib實現人臉識別和情緒分析
一 介紹 我想做的是基於人臉識別的表情 情緒 分析。看到網上也是有很多的開源庫提供使用,為開發提供了很大的方便。我選擇目前用的比較多的dlib庫進行人臉識別與特徵標定。使用python也縮短了開發周期。官網對於dlib的介紹是 dlib包含廣泛的機器學習演算法。所有的設計都是高度模組化的,快速執行,...