python进阶——人工智能视觉识别
创始人
2024-05-20 16:23:22
0

  大家好,我是csdn的博主:lqj_本人

这是我的个人博客主页:lqj_本人的博客_CSDN博客-微信小程序,前端,vue领域博主lqj_本人擅长微信小程序,前端,vue,等方面的知识https://blog.csdn.net/lbcyllqj?spm=1000.2115.3001.5343

哔哩哔哩欢迎关注:小淼前端

小淼前端的个人空间_哔哩哔哩_bilibili

本篇文章主要讲述python的安装以及pycharm解释器的配置流程,本篇文章已经成功收录到我们python专栏中:https://blog.csdn.net/lbcyllqj/category_12089557.htmlicon-default.png?t=MBR7https://blog.csdn.net/lbcyllqj/category_12089557.html

 

前言

python在人工智能方面可以毫不客气的说,比其他的所有语言都要有优势,因为python的背后有一个非常强大的资源库来支撑着python运作。

opencv库

opencv是最经典的python视觉库,它里面包含了很多种视觉的识别类型供开发者们使用。

opencv库的下载

我们可以在我们的pycharm里面输入以下代码进行下载,但这里我们下载的是阉割版的。

pip install opencv-python    

当我们的pycharm下载完成之后,我们呢还需要在opencv的官网进行下载:

首页 - OpenCV

然后我们选择(如下图所示):

 进入之后,我们就可以看到opencv相对应的版本了:

 然后,我们选择自己使用的系统进行下载并安装即可(仅安装即可,opencv不用环境配置!只需要记住安装在哪里,当我们使用的时候直接调取我们的安装目录就可以!)

当安装完成之后,我们就可以看到安装路径下的这些文件:

 里面包含眼睛识别,面部识别等一些强大的识别算法!

人脸检测报警系统(可用于:家用监控;人脸门禁;人脸打卡签到等)

这里我将本功能分为了三个py文件来展开描述:

抓取人脸功能模块

首先,导入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('E:/tupian/'+str(num)+'.name'+'.jpg',Vshow)print('保存成功'+str(num)+".jpg")print("-------------------------")num += 1

释放摄像头与内存:

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

完整代码:

import cv2
cap = cv2.VideoCapture(0)falg = 1
num = 1while(cap.isOpened()):#检测是否在开启状态ret_flag,Vshow = cap.read()#得到每一帧的图像k = cv2.waitKey(1) & 0xFF#判断按键cv2.imshow('ceshi',Vshow)#显示图像if k == ord('s'):#按s键保存cv2.imwrite('E:/tupian/'+str(num)+'.name'+'.jpg',Vshow)print('保存成功'+str(num)+".jpg")print("-------------------------")num += 1elif k == ord(' '):#退出break#释放摄像头
cap.release()
#释放内存
cv2.destroyAllWindows()

录入人脸功能模块

在写这个功能模块之前,我们要在pycharm中或cmd中的本文件根目录下使用命令行,安装face模块使用函数:

 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)]

加载分类器(就是我们上面讲到的在opencv官网下载的库,我们只需要调取安装目录就可以):

face_detector = cv2.CascadeClassifier('E:/open-cv/opencv/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与姓名:

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

调用图片路径(有第一步抓取人脸后按s键保存到'E:/tupian/'路径下的图片):

 path = 'E:/tupian/'

获取图像数组和id标签数组和姓名:

faces,ids=getImageAndLabels(path)

加载识别器:

recognizer = cv2.face.LBPHFaceRecognizer_create()

训练数据:

 recognizer.train(faces,np.array(ids))

保存面部特征到文件夹(创建一个文件夹,用于存放读取的面部信息):

 recognizer.write('tupian/tupian.yml')

完整代码:

import os
import cv2
from PIL import Image
import numpy as npdef getImageAndLabels(path):#储存人脸数据facesSamples=[]#储存姓名数据ids=[]#储存图片信息imagePaths=[os.path.join(path,f) for f in os.listdir(path)]#加载分类器face_detector = cv2.CascadeClassifier('E:/open-cv/opencv/sources/data/haarcascades/haarcascade_frontalface_default.xml')#遍历列表中的图片for imagePath in imagePaths:#打开图片,灰度化PIL有九种不同的模式:1,L,P,RGB,RGBA,CMYK,YCbCr,I,FPIL_img = Image.open(imagePath).convert('L')#将图像转化为数组,以黑白深浅img_numpy = np.array(PIL_img,'uint8')#获取图片人脸特征faces = face_detector.detectMultiScale(img_numpy)#获取每一张图片的id和姓名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])#打印面部特征和idprint('id',id)print('fs:',facesSamples)return facesSamples,idsif __name__ == '__main__':#图片路径path = 'E:/tupian/'#获取图像数组和id标签数组和姓名faces,ids=getImageAndLabels(path)#加载识别器recognizer = cv2.face.LBPHFaceRecognizer_create()#训练recognizer.train(faces,np.array(ids))#保存文件recognizer.write('tupian/tupian.yml')

人脸识别功能模块

导入第三方库:

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('E:/open-cv/opencv/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 warningtimewarningtime += 1if warningtime > 100:# warning()warningtime = 0cv2.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 = 'E:/tupian/'# 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:breakface_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('E:/open-cv/opencv/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 warningtimewarningtime += 1if warningtime > 100:# warning()warningtime = 0cv2.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 = 'E:/tupian/'# 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:breakface_detect_demo(frame)if ord(' ') == cv2.waitKey(10):break
#释放内存+视频
cv2.destroyAllWindows()
cap.release()

最终显示效果:

录入过的面部信息就会显示录入的姓名(如下面的LQJ),未录入过的面部信息就会显示unkonw(不知道的状态)。

 

 

相关内容

热门资讯

常用商务英语口语   商务英语是以适应职场生活的语言要求为目的,内容涉及到商务活动的方方面面。下面是小编收集的常用商务...
六年级上册英语第一单元练习题   一、根据要求写单词。  1.dry(反义词)__________________  2.writ...
复活节英文怎么说 复活节英文怎么说?复活节的英语翻译是什么?复活节:Easter;"Easter,anniversar...
2008年北京奥运会主题曲 2008年北京奥运会(第29届夏季奥林匹克运动会),2008年8月8日到2008年8月24日在中华人...
英语道歉信 英语道歉信15篇  在日常生活中,道歉信的使用频率越来越高,通过道歉信,我们可以更好地解释事情发生的...
六年级英语专题训练(连词成句... 六年级英语专题训练(连词成句30题)  1. have,playhouse,many,I,toy,i...
上班迟到情况说明英语   每个人都或多或少的迟到过那么几次,因为各种原因,可能生病,可能因为交通堵车,可能是因为天气冷,有...
小学英语教学论文 小学英语教学论文范文  引导语:英语教育一直都是每个家长所器重的,那么有关小学英语教学论文要怎么写呢...
英语口语学习必看的方法技巧 英语口语学习必看的方法技巧如何才能说流利的英语? 说外语时,我们主要应做到四件事:理解、回答、提问、...
四级英语作文选:Birth ... 四级英语作文范文选:Birth controlSince the Chinese Governmen...
金融专业英语面试自我介绍 金融专业英语面试自我介绍3篇  金融专业的学生面试时,面试官要求用英语做自我介绍该怎么说。下面是小编...
我的李老师走了四年级英语日记... 我的李老师走了四年级英语日记带翻译  我上了五个学期的小学却换了六任老师,李老师是带我们班最长的语文...
小学三年级英语日记带翻译捡玉... 小学三年级英语日记带翻译捡玉米  今天,我和妈妈去外婆家,外婆家有刚剥的`玉米棒上带有玉米籽,好大的...
七年级英语优秀教学设计 七年级英语优秀教学设计  作为一位兢兢业业的人民教师,常常要写一份优秀的教学设计,教学设计是把教学原...
我的英语老师作文 我的英语老师作文(通用21篇)  在日常生活或是工作学习中,大家都有写作文的经历,对作文很是熟悉吧,...
英语老师教学经验总结 英语老师教学经验总结(通用19篇)  总结是指社会团体、企业单位和个人对某一阶段的学习、工作或其完成...
初一英语暑假作业答案 初一英语暑假作业答案  英语练习一(基础训练)第一题1.D2.H3.E4.F5.I6.A7.J8.C...
大学生的英语演讲稿 大学生的英语演讲稿范文(精选10篇)  使用正确的写作思路书写演讲稿会更加事半功倍。在现实社会中,越...
VOA美国之音英语学习网址 VOA美国之音英语学习推荐网址 美国之音网站已经成为语言学习最重要的资源站点,在互联网上还有若干网站...
商务英语期末试卷 Part I Term Translation (20%)Section A: Translate ...