本文实例为大家分享了基于神经卷积网络的人脸识别,供大家参考,具体内容如下
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
新闻热点
疑难解答