首页 > 编程 > Python > 正文

基于python神经卷积网络的人脸识别

2020-02-23 00:14:25
字体:
来源:转载
供稿:网友

本文实例为大家分享了基于神经卷积网络的人脸识别,供大家参考,具体内容如下

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             
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表