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(不知道的状态)。

 

 

相关内容

热门资讯

2021最新版微信网名大全 2021最新版微信网名大全  一、网名的特征  象征性,网名和自己的名字一样,也是身份的象征(如右图...
经典个性签名 经典个性签名(精选15篇)  随着社交网络和信息技术的飞速发展,越来越多人会在网上发布个性签名,用以...
座右铭简短 座右铭大全简短  导语 :除了无法达成心愿之外,就数心愿达成了最伤感。以下是小编为你介绍的座右铭大全...
成熟高雅的微信名字 成熟高雅的微信名字  微信有个好听名字会让人容易记住,留下好的印象,因此在签名和头像以外微信的名字怎...
经典哲理的个性签名 关于经典哲理的个性签名  ■ 爱情里,年龄不是差距,性别决定问题  ■ 男人因为烟酒而加深友谊,女人...
和平精英名字 和平精英名字  名字的作用  姓名诱导性格倾向  不同的姓名诱导着不同特点的的性格。给宝宝取好名字可...
qq个性幸福签名 qq个性幸福签名  随着线上的、虚拟的社交的迅猛发展,越来越多人喜欢设置个性签名,借助个性签名可以让...
电力安全生产座右铭 电力安全生产座右铭  1、您不想让自己的生命和国家财产遭受损失吧?请提高安全意识!  2、人车分离,...
2022两字高冷网名 2022两字高冷网名  2022两字高冷网名(精选500个)  字数少的网名往往比字数多的更能显示出...
经典个性签名语句 经典个性签名语句模板  1、你目前所拥有的都将随着你的死亡而成为他人的,那为何不现在就乐施给真正需要...
被抛弃的个性签名 被抛弃的个性签名  时光的轮子转了,却也把我们转散了。以下是小编整理的被抛弃的个性签名,希望对大家有...
2字网名大全600个 2字网名大全600个  一、网名的介绍  网名指在网上使用的名字。由于网络它是一个虚拟里的世界,为了...
qq个性签名女生伤感毕业 qq个性签名女生伤感毕业  这次毕业照我希望你们都开心点,至少能让相机定格你们最开心的一次,也许这次...
脑卒中知识讲座 脑卒中知识讲座脑卒中健康知识讲座一.什么是中风中风叫脑卒中或脑血管意外,表现为偏瘫、失语等,是一组急...
可爱的个性签名 可爱的个性签名(精选130句)  随着社交网络的普及,越来越多人钟情于在线上设置自己的个性签名,借助...
带来运气最好的女生网名 带来运气最好的女生网名  谁不希望自己的运气能够变好,但是有的人就是没那么幸运,可只要找对方法就能带...
福州市林阳寺 福州市林阳寺福州市林阳寺在福建省福州市北峰区瑞峰之麓,有一座唐代古刹林阳寺,为福州五大禅宗丛林之一。...
护士工作职责 -岗位职责 护士工作职责 -岗位职责办公室护士工作职责 1.办公室护士由副护士长、护师或具有高度责任感的高年资...
超火的微信昵称 超火的微信昵称  超火的微信昵称(精选400个)  在互联网时代,网名是个人形象的代名字,用什么样的...
假山 假山假山jiǎ shān[释义] (名)园林中完全或主要用石块(大多是太湖石)堆砌而成的小山。[构成...