import cv2

cv2.namedWindow("frame")
cap = cv2.VideoCapture(0)
while(cap.isOpened()):
ret, img = cap.read()
if ret == True:
cv2.imshow("frame", img)
k = cv2.waitKey(100)
if k == ord("z") or k == ord("Z"):
cv2.imwrite("F:\\pythonBase\\pythonex\\catch.jpg", img)
break
cap.release()
cv2.waitKey(10000)
cv2.destroyWindow("frame")

def makeFace(facename, msg, endstr):
print(msg) #显示提示信息
cv2.namedWindow("frame")
cv2.waitKey(0)
cap = cv2.VideoCapture(0) #打开摄像头
while(cap.isOpened()): #如果摄像头处于打开状态,则...
ret, img = cap.read() #读取图像
if ret == True: #读取成功
cv2.imshow("frame", img) #显示图像
k = cv2.waitKey(100) #每0.1秒读一次键盘
if k == ord("z") or k == ord("Z"): #如果输入z
cv2.imwrite(facename,img) #把读取的img保存至facename文件
image = cv2.imread(facename) #读取刚刚保存的facename文件至image变量,作为下面人脸识别函数的参数
faces = faceCascade.detectMultiScale(image, scaleFactor=1.1, minNeighbors=5, minSize=(30,30), flags = cv2.CASCADE_SCALE_IMAGE)
(x, y, w, h) = (faces[0][0], faces[0][1], faces[0][2], faces[0][3]) #取出第一张人脸区域
image1 = Image.open(facename).crop((x, y, x+w, y+h)) #抓取人脸区域的图像并存至image1变量
image1 = image1.resize((200, 200), Image.ANTIALIAS) #把取得的人脸区域的分辨率变为200x200
image1.save(facename) #把经过处理的人脸文件保存至facename文件
break;
cap.release() #关闭摄像头
cv2.destroyAllWindows() #关闭窗口
print(endstr)
return

import cv2, os, math, operator
from PIL import Image
from functools import reduce

# casc_path = "C:\\ProgramData\\Anaconda3\\pkgs\\opencv3-3.1.0-py27_0\\Library\etc\\haarcascades\\haarcascade_frontalface_default.xml"
casc_path = "C:\\Users\\acer\\Anaconda3\\envs\\python36\\Lib\\site-packages\\cv2\\data\\haarcascade_frontalface_default.xml"
faceCascade = cv2.CascadeClassifier(casc_path) #创建识别对象
recogname = "F:\\pythonBase\pythonex\\ch10\\media\\recogface.jpg" #预存的人脸文件
loginname = "F:\\pythonBase\pythonex\\ch10\\media\\loginface.jpg" #登录者的人脸文件
os.system("cls") #清屏
if(os.path.exists(recogname)): #如果预存的人脸文件已存在
msg = "按任意键创建登录人脸文件。\n摄像头打开后按z键进行拍照对比!"
makeFace(loginname, msg, "") #创建登录者人脸文件
pic1 = Image.open(recogname) #打开预存的人脸文件
pic2 = Image.open(loginname) #打开登录者人脸文件
h1 = pic1.histogram() #取预存片文件的直方图信息
h2 = pic2.histogram() #取登录者图片的直方图信息
diff = math.sqrt(reduce(operator.add, list(map(lambda a,b: (a-b)**2, h1, h2)))/len(h1)) #计算两个图形差异度
if(diff <= 100): #若差度在100内,可通过验证
print("通过验证,欢迎使用本系统! diff=%4.2f" % diff)
else:
print("人脸错误,无法使用本系统! diff=%4.2f" % diff)
else: #如果预存的人脸文件不存在
msg = "按任意键创建预存的人脸文件。\n摄像头打开后按z进行拍照!\n"
endstr = "预存文件建立完成!"
makeFace(recogname, msg, endstr) #建立预存人脸文件

吴裕雄 实战PYTHON编程(10)的更多相关文章

  1. 吴裕雄 实战PYTHON编程(9)

    import cv2 cv2.namedWindow("ShowImage1")cv2.namedWindow("ShowImage2")image1 = cv ...

  2. 吴裕雄 实战PYTHON编程(7)

    import os from win32com import client word = client.gencache.EnsureDispatch('Word.Application')word. ...

  3. 吴裕雄 实战PYTHON编程(6)

    import matplotlib.pyplot as plt plt.rcParams['font.sans-serif']=['Simhei']plt.rcParams['axes.unicode ...

  4. 吴裕雄 实战PYTHON编程(8)

    import pandas as pd df = pd.DataFrame( {"林大明":[65,92,78,83,70], "陈聪明":[90,72,76, ...

  5. 吴裕雄 实战PYTHON编程(5)

    text = '中华'print(type(text))#<class 'str'>text1 = text.encode('gbk')print(type(text1))#<cla ...

  6. 吴裕雄 实战PYTHON编程(4)

    import hashlib md5 = hashlib.md5()md5.update(b'Test String')print(md5.hexdigest()) import hashlib md ...

  7. 吴裕雄 实战python编程(3)

    import requests from bs4 import BeautifulSoup url = 'http://www.baidu.com'html = requests.get(url)sp ...

  8. 吴裕雄 实战python编程(2)

    from urllib.parse import urlparse url = 'http://www.pm25x.com/city/beijing.htm'o = urlparse(url)prin ...

  9. 吴裕雄 实战python编程(1)

    import sqlite3 conn = sqlite3.connect('E:\\test.sqlite') # 建立数据库联接cursor = conn.cursor() # 建立 cursor ...

随机推荐

  1. golang panic的捕获

    panic发生时, 会导致进程挂掉.为了处理panic, 可以使用recover捕获,然后处理. 下面以下标引用越界问题为例进行说明. 正常情况下,代码中如果出现下标越界,会直接触发panic, 导致 ...

  2. hyperledger fabric各类节点及其故障分析

    1.Client节点 client代表由最终用户操作的实体,它必须连接到某一个peer节点或者orderer节点上与区块链网络通信.客户端向endorser提交交易提案,当收集到足够背书后,向排序服务 ...

  3. ORACLE11g 安装中xhost: unable to open display 问题解决纪实 (go)

    http://blog.csdn.net/mchdba/article/details/62235761 1,Xhosts报错 安装好vncserver,本地pc笔记本能通过vnc viewer远程连 ...

  4. 使用Jquery实现Win8开始菜单效果的站点导航

    前言: 本人是个Metro控,自我感觉到处都充斥着Metro的元素,个人认为这种风格强调表现以及内容,以简洁著称,不过也不是大部分都喜欢,也有一些人和你讨厌这种风格~不过本人非常喜欢这种风格,看我博客 ...

  5. linux 标准I/O (二)

    <Uinx 环境高级编程笔记>   以前经常遇到两种I/O操作 一类是f打头的fopen, fread, fwrite 一类是没有f打头的open, read, fwrite 原来一个是U ...

  6. Neo4j在Centos7下的安装笔记

    首先,要在官网找到tar的安装包路径,然后使用wget来安装.下载之后解压. 然后运行 bin/neo4j start 就可以启动了. 启动之后防火墙开放7474,发现仍然访问不了. 因为这里和win ...

  7. bzoj2263: Pku3889 Fractal Streets

    给出两点编号,求如图所示的图中两点间欧氏距离*10取整 递归处理由编号求出坐标 #include<cstdio> #include<cmath> int T,n,s,t; vo ...

  8. HSSF NPOI 颜色

    using System; using System.IO; using System.Windows.Forms; using NPOI.HSSF.UserModel; using NPOI.SS. ...

  9. ZooKeeper 集群的安装、配置---Dubbo 注册中心

    ZooKeeper 集群的安装.配置.高可用测试 Dubbo 注册中心集群 Zookeeper-3.4.6 Dubbo 建议使用 Zookeeper 作为服务的注册中心. Zookeeper 集群中只 ...

  10. 1117 Eddington Number (25 分)

    1117 Eddington Number (25 分) British astronomer Eddington liked to ride a bike. It is said that in o ...