范文健康探索娱乐情感热点
投稿投诉
热点动态
科技财经
情感日志
励志美文
娱乐时尚
游戏搞笑
探索旅游
历史星座
健康养生
美丽育儿
范文作文
教案论文
国学影视

使用Python和OpenCV进行面部识别应用于监控人脸门禁和考勤等

  在本文中,我们探索 OpenCV 和 Python 在创建强大的人脸识别系统方面的巨大潜力。从而逐步实现识别图像和视频中的人脸的整个过程。凭借清晰的解释和实际示例,希望您深入了解计算机视觉和人脸识别。
  下载 OpenCV 库
  访问官网进行下载并安装: https://opencv.org/ pip install opencv-python
  安装完成之后我们可以在文件夹下看到这些文件 sources/data/haarcascades
  包含了强大的识别算法,如眼睛识别和面部识别 人脸检测报警系统(可用于:家庭监控、人脸门禁、人脸考勤等)
  抓拍人脸功能模块。
  首先导入cv库。 import cv2
  然后调用我们的摄像头(0代表本地摄像头,其他数字代表外置摄像头)。 cap = cv2.VideoCapture(0)
  使用 while 循环来确定它是否处于打开状态。 while(cap.isOpened()):
  获取每一帧的图像。 ret_flag,Vshow = cap.read()
  调用控制键盘函数来控制和确定按键。 k = cv2.waitKey(1) & 0xFF
  使用 imshow 函数显示捕获的图像。 cv2.imshow("ceshi",Vshow)
  监听键盘输入,按"s"键保存。 if k == ord("s"):
  保存捕获图像的格式并打印提示文本。 cv2.imwrite("/tmp/"+str(num)+".name"+".jpg",Vshow)         print("save "+str(num)+".jpg")         print("-------------------------")         num += 1
  释放摄像头和内存。 cap.release()  cv2.destroyAllWindows()
  完整的代码片段 import cv2 cap = cv2.VideoCapture(0)   falg = 1 num = 1   while(cap.isOpened()):     ret_flag,Vshow = cap.read()     k = cv2.waitKey(1) & 0xFF     cv2.imshow("ceshi",Vshow)     if k == ord("s"):         cv2.imwrite("/tmp/"+str(num)+".name"+".jpg",Vshow)         print("save "+str(num)+".jpg")         print("-------------------------")         num += 1       elif k == ord(" "):         break    cap.release()  cv2.destroyAllWindows()录人脸功能模块
  在编写这个功能模块之前,我们需要在Pycharm或者cmd中在这个文件的根目录下使用如下命令安装人脸模块 pip install opencv-contrib-python
  导入依赖 import os import cv2 from PIL import Image import numpy as np
  存储人脸数据 facesSamples=[]
  存储名称数据 ids=[]
  存储图片的信息 imagePaths=[os.path.join(path,f) for f in os.listdir(path)]
  加载分类器 face_cascade = cv2.CascadeClassifier("haarcascade_frontalface_default.xml")
  遍历图像 for imagePath in imagePaths:
  将打开的图像转换为灰度 PIL_img = Image.open(imagePath).convert("L")
  将图像转换为数组 img_numpy = np.array(PIL_img,"uint8")
  获取图片中的人脸特征 faces = face_detector.detectMultiScale(img_numpy)
  获取每张抓拍图片的id和name id = int(os.path.split(imagePath)[1].split(".")[0])
  防止无脸拍照          for x,y,w,h in faces:             ids.append(id)             facesSamples.append(img_numpy[y:y+h,x:x+w])
  打印面部特征和ID,并返回数据     print("id",id)     print("fs:",facesSamples)     return facesSamples,ids
  调用图片路径(步骤1抓脸后按s键保存到"/tmp/"路径下的图片) path = "/tmp/"
  检索图像数组和 ID 标签数组和名称 faces,ids=getImageAndLabels(path)
  加载识别器 recognizer = cv2.face.LBPHFaceRecognizer_create()
  训练数据 recognizer.train(faces,np.array(ids))
  创建一个目录存放读取到的人脸信息 recognizer.write("tmp/tupian.yml")
  完整的代码片段 import os import cv2 from PIL import Image import numpy as np   def getImageAndLabels(path):      facesSamples=[]      ids=[]      imagePaths=[os.path.join(path,f) for f in os.listdir(path)]      face_detector = cv2.CascadeClassifier("/sources/data/haarcascades/haarcascade_frontalface_default.xml")      for imagePath in imagePaths:          PIL_img = Image.open(imagePath).convert("L")          img_numpy = np.array(PIL_img,"uint8")          faces = face_detector.detectMultiScale(img_numpy)          id = int(os.path.split(imagePath)[1].split(".")[0])          for x,y,w,h in faces:             ids.append(id)             facesSamples.append(img_numpy[y:y+h,x:x+w])      print("id",id)     print("fs:",facesSamples)     return facesSamples,ids   if __name__ == "__main__":      path = "/tmp/"      faces,ids=getImageAndLabels(path)      recognizer = cv2.face.LBPHFaceRecognizer_create()      recognizer.train(faces,np.array(ids))      recognizer.write("tmp/tupian.yml")人脸识别功能模块
  导入依赖 import cv2 import os
  加载训练好的数据文件 recogizer = cv2.face.LBPHFaceRecognizer_create()
  加载保存的面部信息 recogizer.read("tmp/tupian.yml")
  定义名称数组 names=[]
  定义用于识别的全局变量 warningtime = 0
  视频模块中的人脸识别 def face_detect_demo(img):     gray=cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)     face_detector=cv2.CascadeClassifier("/sources/data/haarcascades/haarcascade_frontalface_default.xml")     face=face_detector.detectMultiScale(gray)     for x,y,w,h in face:         cv2.rectangle(img,(x,y),(x+w,y+h),color=(0,0,255),thickness=2)         cv2.circle(img,center=(x+w//2,y+h//2),radius=w//2,color=(0,255,0),thickness=1)          ids, confidence = recogizer.predict(gray[y:y + h, x:x + w])         if confidence > 80:             global warningtime             warningtime += 1             if warningtime > 100:                # warning()                warningtime = 0             cv2.putText(img, "unknown", (x + 10, y - 10), cv2.FONT_HERSHEY_SIMPLEX, 0.75, (0, 255, 0), 1)         else:             cv2.putText(img,str(names[ids-1]), (x + 10, y - 10), cv2.FONT_HERSHEY_SIMPLEX, 0.75, (0, 255, 0), 1)     cv2.imshow("result",img)
  导入存储的图像名称标签 def name():     path = "/tmp/"     # names = []     imagePaths=[os.path.join(path,f) for f in os.listdir(path)]     for imagePath in imagePaths:        name = str(os.path.split(imagePath)[1].split(".",2)[1])        names.append(name)
  加载视频 cap=cv2.VideoCapture("1.mp4") name() while True:     flag,frame=cap.read()     if not flag:         break     face_detect_demo(frame)     if ord(" ") == cv2.waitKey(10):         break
  释放内存和视频 cv2.destroyAllWindows() cap.release()
  完整的代码片段 import cv2 import os  recogizer = cv2.face.LBPHFaceRecognizer_create()  recogizer.read("tupian/tupian.yml")  names=[]  warningtime = 0  def face_detect_demo(img):     gray=cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)     face_detector=cv2.CascadeClassifier("/sources/data/haarcascades/haarcascade_frontalface_default.xml")     face=face_detector.detectMultiScale(gray)     for x,y,w,h in face:         cv2.rectangle(img,(x,y),(x+w,y+h),color=(0,0,255),thickness=2)         cv2.circle(img,center=(x+w//2,y+h//2),radius=w//2,color=(0,255,0),thickness=1)          ids, confidence = recogizer.predict(gray[y:y + h, x:x + w])         if confidence > 80:             global warningtime             warningtime += 1             if warningtime > 100:                # warning()                warningtime = 0             cv2.putText(img, "unkonw", (x + 10, y - 10), cv2.FONT_HERSHEY_SIMPLEX, 0.75, (0, 255, 0), 1)         else:             cv2.putText(img,str(names[ids-1]), (x + 10, y - 10), cv2.FONT_HERSHEY_SIMPLEX, 0.75, (0, 255, 0), 1)     cv2.imshow("result",img)    def name():     path = "/tmp/"     # names = []     imagePaths=[os.path.join(path,f) for f in os.listdir(path)]     for imagePath in imagePaths:        name = str(os.path.split(imagePath)[1].split(".",2)[1])        names.append(name)  cap=cv2.VideoCapture("1.mp4") name() while True:     flag,frame=cap.read()     if not flag:         break     face_detect_demo(frame)     if ord(" ") == cv2.waitKey(10):         break  cv2.destroyAllWindows() cap.release()
  最后,希望这些示例代码对您的项目有所帮助!

成本只有75块,在中国售价高达1598元,为何仍有国人甘愿买单?韩国衣恋集团在中国注册的衣念上海时装贸易有限公司因以次充好被罚,该公司售卖的羽绒服的标价为1598元,但成本价仅为75块钱,品牌溢价高达20倍。1980年,韩国衣恋集团成立。经过4谈钱就说伤感情的人,只是想占你便宜谈钱就说伤感情的人,只是想占你便宜。1久病孝子离,家兴出恶狗。2人生有两饭不吃。上了菜的宴席,下了桌的酒。3如果你乐于帮助别人,但别人依然对你不友好。很可能是你既好说话,又好欺负。元宵节文案日子慢熬,汤圆也是,终究会甜1晚风揉进了汤圆,月亮在贩售快乐。2想把春天揉进汤圆煮给你吃。3生活的温柔总会哒哒哒的跑进你碗里的。4汤圆软软糯糯,日子红红火火5日子嘛,就是要过的白白胖胖,甜甜糯糯的6煮一锅汤圆一项新科学研究强调了降水变化对濒危物种的影响当我们想到气候变化时,我们经常想象一个更温暖的世界将如何影响物种,但一项新的研究强调了降水变化的重要性。这一发现表明,关注每个物种生命周期内的环境触发因素,将帮助我们更好地了解它们德国梅塞尔坑发现4700万年前的苍蝇化石,切开肚子全是花粉德国梅塞尔化石坑,是世界上出土物最丰富的化石遗址之一,同时也是世界上出土哺乳动物化石最多的遗址之一,它深刻而生动地记录了昔日地质年代中地球生物圈发生的剧变。这里出土的化石保存完好,如果地球突然停止转动会发生什么?如果地球突然停止旋转五秒,人类还能活多久?当地球停止时,突然停止的力量会立即将建筑物连根拔起,包括人类和一些不稳定的物体,他们会以每秒四百六十六米的速度飞出。当地球停转两秒,海洋会情人节送妹子什么礼物?抛开实用和性价比,今天颜值才是正义情人节送女生什么礼物?送花送化妆品送衣物?常规的做法哪能让人记住你的心意。现在针对女性开发的数码产品越来越多,小编为您推荐三款礼物,瞬间把节日的仪式感拉满!先要说一下,情人节送女神为什么智能手机的屏幕变得越来越大?是营销手段,还是大众需求?为什么智能手机的屏幕变得越来越大?是营销手段,还是大众需求?第一手机屏幕变大和手机变大是两个概念,如果只是为了散热,完全可以保持屏幕不变,把手机做得更大,事实不是这样,现实情况是各投影仪给孩子看动画片好吗?小孩子能看投影仪吗?大神这篇告诉你投影仪在教育娱乐等方面使用非常广泛,经常看到家长问投影仪给孩子看动画片好吗,给宝宝用投影仪看动画片好吗,小孩子能看投影仪吗,用投影仪给孩子看动画片伤眼吗,投影仪看动画片伤眼睛吗,小想要孩子长大后具有影响力,就帮孩子取这些英文名为宝贝儿女取名实在不是件容易的事,毕竟名字是要使用一辈子的(当然,为了鲑鱼而改名的除外),必须好听顺耳还要为孩子带来好运及福气,若是还能因取对名字将来成为一位具有影响力的人,那更是媒体分析中国足协不该一味地限薪,中超联赛会成为业余联赛中国足协近期将会颁布新的限薪令,这一次限薪也是陈戌源上任之后颁布的第三次限薪,相对来说这一次限薪十分严格。对此,有媒体有些担心,如果中国足协一直这样限薪下去,那么中超联赛不会为此得
碾声承载着的乡愁朦胧中,传来我熟悉的然而又是久违了的骨碌碌吱悠悠的碾声。这碾声对于我好像一种亲切的呼喊,又像是一种倾心的交流,迅速将我融入浓浓的乡情和悠远的回忆,让我浮想联翩。我家住在村头,村头有顺为凡,逆为仙,顺逆没法肩并肩人一旦选择了修行,那就意味着从此与男女感情无缘。因为男女感情是尘世阴阳,修行是自身阴阳。修行人为了修完先天性命,必须要保精养气,炼气养神。所以精气不可以动摇漏泄。而男女感情是为了生压力大的喘不过气来,停止内耗的9个建议精神内耗,又叫心理内耗,它是指人在自我控制中需要消耗心理资源,当资源不足时,人就处于一种所谓内耗的状态,内耗的长期存在就会让人感到疲惫。拒绝精神内耗,学会自爱,关注自我成长!如果你不做寒号鸟,做勤劳的喜鹊今天是读书很少的一天,心灵漂泊,思想滑坡,懒惰成性,摇摆不定!风中有朵雨做的云,我愿做那朵云,在风中摇摆,悠然自在,随风漂泊,随遇而安!今天看了寒号鸟的故事,哆哆嗦哆哆嗦,寒风冻死慢品人间烟火,静观岁月流长窗外院子里,落寂的苍天大树,此时已经褪去了青涩的外衣,呈现出枯黄之色,随着飒飒秋风,四处飘散,如一只只翩翩起舞的枯蝶,盘旋着落在地上,当一片树叶落于窗台时,我惊讶地发现漫过我的心头不纠缠的人,最好命在知乎上,我曾看过一个故事上班路上,李明突然发现自己的100元不见了,他急的团团转,打车回去挨个寻找。结果,钱没找到,却因迟到失去了一个重要客户,领导一怒之下将他辞退。有个高赞回答奇葩的美女哲学思念到极致,是一种怎样的体验?思念到极致是一种怎样的体验?思念不已,是一种病,极致是相思病?转念一想,得相思病是思念到生病,而不是极致。思念并不意味着执着,也不意味着沦陷。思念带来海市蜃楼,而极致就是识破幻觉。70岁之后,还有这三个特征,一般都会长寿前言70岁,我们的生活会发生很大的变化,有些事情我们已经无法改变,有些事情我们还可以继续,其实在这个世界上,应该知道,并不是每一件事情都那么容易,也不是每一件事情都无可救药,只要我大学首台电脑怎么选?老司机推荐这台5K价位首选,有颜有料更能打对于刚刚步入新学期的大学生来说,笔记本电脑应该是必不可少的数码产品之一,但是学生党在购买笔记本时,价格是一个始终绕不开的话题,如何在合适的价位上买到更好的笔记本电脑就值得深入的去思倍思数字式插线板我的数码伴侣感谢数字尾巴提供的众测产品倍思灵傲系列数字式插线板。作为数码爱好者,充电是我们绕不去的坎,特别是现在数码产品越来越多,且接口不统一,小的手机,平板等产品一个typec就能搞定,大的HDMI线太短怎么办?教你3招即可解决!赶紧收藏要说日常生活中那些常用却叫不上名字的物品,HDMI线必须排在前列。HDMI线全称高清晰多媒体接口线,是一种全数字化影像与声音的传输线,可以用来传送没有进行任何压缩的音频信号及视频信