我的编程空间,编程开发者的网络收藏夹
学习永远不晚

python进阶——人工智能视觉识别

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

python进阶——人工智能视觉识别

  大家好,我是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是最经典的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 cv2cap = cv2.VideoCapture(0)falg = 1num = 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 += 1    elif k == ord(' '):#退出        break#释放摄像头cap.release()#释放内存cv2.destroyAllWindows()

录入人脸功能模块

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

 pip install opencv-contrib-python

导入第三方库:

import osimport cv2from PIL import Imageimport 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 osimport cv2from PIL import Imageimport 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,F        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,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 cv2import 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 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 = '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:        break    face_detect_demo(frame)    if ord(' ') == cv2.waitKey(10):        break

释放内存与视频:

cv2.destroyAllWindows()cap.release()

 完整代码:

import cv2import 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 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 = '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:        break    face_detect_demo(frame)    if ord(' ') == cv2.waitKey(10):        break#释放内存+视频cv2.destroyAllWindows()cap.release()

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

 

 

来源地址:https://blog.csdn.net/lbcyllqj/article/details/128801971

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

python进阶——人工智能视觉识别

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

人工智能人脸识别进社区

编程学习网:近年来,作为智慧社区建设中的重要组成部分,人脸识别门禁系统正在广泛进入城市社区,但在推行过程中也向人们提出了一个新问题:如何在提供便捷性的同时守住个人隐私安全?技术与伦理的边界在哪?
人工智能人脸识别进社区
2024-04-23

人工智能计算机视觉第一人是谁?

人工智能计算机视觉是现代计算机科学中的一个重要分支,它主要研究如何让计算机“看懂”图像和视频,从而实现自动识别、分类、跟踪等功能。

人工智能和计算机视觉之间有什么区别?

人工智能(AI)应用程序开始改变我们与技术交互的方式,使我们的生活更轻松、更方便。从帮助解决健康问题到预测您的需求并做出相应反应,人工智能可以让生活更轻松、更高效。

人工智能人脸识别被“破解”

编程学习网:技术总归是不断发展进步的,坏人掌握的技术也是一样。并且,任何一个技术都有被黑被破解的可能,只是成本问题
人工智能人脸识别被“破解”
2024-04-23

人工智能的人脸识别技术

编程学习网:此前,AI换脸软件ZAO的一夜爆红,不仅让其服务器陷入了“满负荷至崩溃运行“的危机之中,也将用户的安全与隐私暴露在种种危险地带。
人工智能的人脸识别技术
2024-04-23

人工智能:语音识别技术

根据悬恋语音库的特征参数训练出声学模型参数,从而可以在识别时与声学模型进行匹配得到相应结果。目前主流语音识别系统一般都会采用HMM进行声学模型建模。

人工智能:声纹识别技术

目前是人工智能高速发展阶段,越来越多的智能设备走向了市场,从而带动了各方面的人工智能技术的飞速发展。未来声纹识别技术也会随着智能市场巨大的潜力从而快速发展。未来声纹识别技术会向声纹+智能以及多模态识别的方向发展。

人工智能的360入局人脸识别

编程学习网:眼下市场上的不少人脸识别产品都处于“裸奔”状态,技术安全和个人隐私安全等问题应当得到重视。随着智能手机、火车站开始规模化应用人脸识别技术,大家对于这一新科技想必都不会陌生。
人工智能的360入局人脸识别
2024-04-23

什么是人工智能中的计算机视觉

计算机视觉被许多行业用来提高客户满意度、削减开支和提高安全性。这项技术之所以与众不同,是因为它以独特的方式处理数据。我们每天产生的大量数据被用来为我们带来优势,因为它们可以教会计算机识别和理解物体。人工智能领域的计算机视觉为消费者和企...
人工智能2024-11-30

智能自动化:当计算机视觉、人工智能和AR集成时

对于开发人员而言,最有前途的技术是增强现实(AR)、虚拟现实(VR)和人工智能(AI)。虚拟现实(VR)是由游戏玩家为游戏玩家开发的,主要用于游戏和娱乐,而增强现实在所有行业都取得了巨大成功。虽然技术迎合不同的受众,但它们代表了未来几年值得

人工智能面部识别:如何发展智能监控

想知道人工智能如何改变智能监控行业?需要了解人工智能为不同的面部识别用例和智能监控提供的帮助。

人工智能与“人脸识别”较劲的教授

编程学习网:因为劳东燕的较劲,小区启用人脸识别门禁的计划搁置了下来。2020年3月,她居住的小区贴出安装人脸识别门禁系统的公告,要求业主提供房产证、身份证、人脸识别等信息。她是清华大学法学教授,深知人脸识别信息被滥用的风险很高,物业更是无权收集这些个人信息
人工智能与“人脸识别”较劲的教授
2024-04-23

人工智能会取代视觉特效师的角色吗?

人工智能和视觉特效之间的这种协同作用不仅简化了整个制作流程,而且提高了视觉特效师的创作能力。

采用RAG和知识图谱克服人工智能幻觉

将知识图与检索增强生成相结合可以提高生成式人工智能应用程序的准确性,通常可以使用现有的数据库来完成。

人工智能将不再开发人脸识别技术

编程学习网:IBM宣布,随着人们对人脸识别技术的影响越来越关注,他们将不再开发相关人脸识别技术与功能。
人工智能将不再开发人脸识别技术
2024-04-23

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录