男神鹏:人工智能人脸识别操作。

Python 中的 人脸识别 是基于OpenCV 来进行实现的。

 

OpenCV 可以通过 头videoCapture()方法打开摄像

摄像头变量 = cv2.VideoCapture(n)   n为整数,内置摄像头为0,若有其他摄像头则依次为1,2,3,4,。。。

cap = cv2.VideoCapture(0)

 

摄像头是否处于打开状态可以通过isOpened()方法进行判断

摄像头变量.isOpened()

若打开返回True,反正返回False

cap.isOpened()

 

布尔变量,图像变量 = 摄像头变量.read()  可以通过read() 方法读取图像

布尔变量为True,代表读取成功,False代表读取失败

ret,img = cap.read()

 

释放摄像头

摄像头变量.release()

cap.release()

按键变量  = cv2.waitKey(n)   waitKey(n)  方法可以获取用户输入,同时可获取按键的ASCLL码值

话不多说,直接上代码。

下面是登录注册的人脸实现系统。

 

from django.shortcuts import render
#导包
from django.http import HttpResponse,HttpResponseRedirect
#导入类路由库
from django.views import View
#导入数据库类
from myapp.models import User
import json
#导入时间模块
import time
import os
from mymac.settings import UPLOAD_ROOT
import cv2
import numpy as np
from myapp.my_compare import main_my,parse_arguments
from django.utils.decorators import method_decorator
from django.db import connection


#定义注册逻辑
class Sign_Up(View):

#定义注册接收方法
def post(self,request):
 
username = request.POST.get('username')

cap = cv2.VideoCapture(0)

face_cascade = cv2.CascadeClassifier("C:/Users/lenvov/AppData/Local/Programs/Python/Python37/Lib/site-packages/cv2/data/haarcascade_frontalface_default.xml")
my_count = 1

while(1):
# 获取摄像头屏幕对象
ret,frame = cap.read()
 
 
gray = cv2.cvtColor(frame,cv2.COLOR_BGR2GRAY )
 
# 识别脸部
faces = face_cascade.detectMultiScale(gray,scaleFactor=1.2,minNeighbors=3,minSize=(32,32))
for facerect in faces:
# 框处人脸
x,y,w,h = facerect
cv2.rectangle(gray,(x-10,y-10),(x+w+10,y+h+10),(0,255,0),3)

f = cv2.resize(gray[y:(y+h),x:(x+w)],(200,200))
 
 
# 生成摄像头视角窗口
cv2.imshow("capture",gray)

# 等待结束 如果按q键就结束
if cv2.waitKey(1) & 0xff == ord('q'):
cv2.imwrite(UPLOAD_ROOT+'/'+username+'_face.jpg',f)
break


# 释放摄像头
cap.release()
cv2.destroyAllWindows()


res = User.objects.filter(username=username).count()
if res > 0:
return HttpResponse('请换一个用户名')
else:
user = User(username=username)
user.save()
return HttpResponse('注册成功')
 




#定义登录逻辑
class Log_IN(View):

#定义注册接收方法
def post(self,request):

username = request.POST.get('username')


cap = cv2.VideoCapture(0)

face_cascade = cv2.CascadeClassifier("C:/Users/lenvov/AppData/Local/Programs/Python/Python37/Lib/site-packages/cv2/data/haarcascade_frontalface_default.xml")
my_count = 1

while(1):
# 获取摄像头屏幕对象
ret,frame = cap.read()
 
 
gray = cv2.cvtColor(frame,cv2.COLOR_BGR2GRAY )
 
# 识别脸部
faces = face_cascade.detectMultiScale(gray,scaleFactor=1.2,minNeighbors=3,minSize=(32,32))
for facerect in faces:
# 框处人脸
x,y,w,h = facerect
cv2.rectangle(gray,(x-10,y-10),(x+w+10,y+h+10),(0,255,0),3)

f = cv2.resize(gray[y:(y+h),x:(x+w)],(200,200))
 
 
# 生成摄像头视角窗口
cv2.imshow("capture",gray)

# 等待结束 如果按q键就结束
if cv2.waitKey(1) & 0xff == ord('q'):
cv2.imwrite(UPLOAD_ROOT+'/'+username+'_hou.jpg',f)
break


# 释放摄像头
cap.release()
cv2.destroyAllWindows()
 
res = User.objects.filter(username=username)[0]

args_list = []
args_list.append('C:/20170512-110547')
args_list.append(UPLOAD_ROOT+'/'+username+'_face.jpg')
args_list.append(UPLOAD_ROOT+'/'+username+'_hou.jpg')

res_float = main_my(parse_arguments(args_list))
print(res_float)


if res_float > 0.50:
return HttpResponse('识别头像不匹配')
else:
return HttpResponse('登录成功')
 
这些只是后端代码,前端代码就是通过axios来实现的。
如需有有疑问,可以在评论区里评论。
posted @ 2019-03-24 21:24  男神鹏●詹姆斯  阅读(289)  评论(0编辑  收藏  举报