本文實例為大家分享了基于神經卷積網絡的人臉識別,供大家參考,具體內容如下
1.人臉識別整體設計方案

客_服交互流程圖:

2.服務端代碼展示
sk = socket.socket() # s.bind(address) 將套接字綁定到地址。在AF_INET下,以元組(host,port)的形式表示地址。 sk.bind(("172.29.25.11",8007)) # 開始監聽傳入連接。 sk.listen(True) while True: for i in range(100): # 接受連接并返回(conn,address),conn是新的套接字對象,可以用來接收和發送數據。address是連接客戶端的地址。 conn,address = sk.accept() # 建立圖片存儲路徑 path = str(i+1) + '.jpg' # 接收圖片大小(字節數) size = conn.recv(1024) size_str = str(size,encoding="utf-8") size_str = size_str[2 :] file_size = int(size_str) # 響應接收完成 conn.sendall(bytes('finish', encoding="utf-8")) # 已經接收數據大小 has_size has_size = 0 # 創建圖片并寫入數據 f = open(path,"wb") while True: # 獲取 if file_size == has_size: break date = conn.recv(1024) f.write(date) has_size += len(date) f.close() # 圖片縮放 resize(path) # cut_img(path):圖片裁剪成功返回True;失敗返回False if cut_img(path): yuchuli() result = test('test.jpg') conn.sendall(bytes(result,encoding="utf-8")) else: print('falue') conn.sendall(bytes('人眼檢測失敗,請保持圖片眼睛清晰',encoding="utf-8")) conn.close() 3.圖片預處理
1)圖片縮放
# 根據圖片大小等比例縮放圖片 def resize(path): image=cv2.imread(path,0) row,col = image.shape if row >= 2500: x,y = int(row/5),int(col/5) elif row >= 2000: x,y = int(row/4),int(col/4) elif row >= 1500: x,y = int(row/3),int(col/3) elif row >= 1000: x,y = int(row/2),int(col/2) else: x,y = row,col # 縮放函數 res=cv2.resize(image,(y,x),interpolation=cv2.INTER_CUBIC) cv2.imwrite(path,res)
2)直方圖均衡化和中值濾波
# 直方圖均衡化 eq = cv2.equalizeHist(img) # 中值濾波 lbimg=cv2.medianBlur(eq,3)
3)人眼檢測
# -*- coding: utf-8 -*- # 檢測人眼,返回眼睛數據 import numpy as np import cv2 def eye_test(path): # 待檢測的人臉路徑 imagepath = path # 獲取訓練好的人臉參數 eyeglasses_cascade = cv2.CascadeClassifier('haarcascade_eye_tree_eyeglasses.xml') # 讀取圖片 img = cv2.imread(imagepath) # 轉為灰度圖像 gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY) # 檢測并獲取人眼數據 eyeglasses = eyeglasses_cascade.detectMultiScale(gray) # 人眼數為2時返回左右眼位置數據 if len(eyeglasses) == 2: num = 0 for (e_gx,e_gy,e_gw,e_gh) in eyeglasses: cv2.rectangle(img,(e_gx,e_gy),(e_gx+int(e_gw/2),e_gy+int(e_gh/2)),(0,0,255),2) if num == 0: x1,y1 = e_gx+int(e_gw/2),e_gy+int(e_gh/2) else: x2,y2 = e_gx+int(e_gw/2),e_gy+int(e_gh/2) num += 1 print('eye_test') return x1,y1,x2,y2 else: return False
新聞熱點
疑難解答