zoukankan      html  css  js  c++  java
  • Python人工智能之opencv--python实现计算机视觉

    这篇文章即将开启我们的计算机视觉之旅的探索

    1.首先需要下载一个cv2包,全称为Open Source Computer Vision Library,缩写为OpenCV,调用时简称cv2

    win+R,输入cmd打开命令窗口,然后输入命令行:

    pip install opencv-python

    2.输入pip list可以查看到是否成功安装有opencv-python

    3.这边opencv-python包中需要手动添加一个加载分类器haarcascade_frontalface_alt2.xml

    (1)一般情况下opencv-python的默认路径为C:Usersdellanaconda3Libsite-packagesopencv_python-4.5.1.48.dist-info

    (2)打开opencv_python-4.5.1.48.dist-info这个文件夹后把,加载分类器haarcascade_frontalface_alt2.xml放进这个目录里面

    (3)#加载分类器haarcascade_frontalface_alt2.xml下载路径:

    链接:https://pan.baidu.com/s/1flgCtnwnWFy7-1OHwkdmbg
    提取码:vicu
    复制这段内容后打开百度网盘手机App,操作更方便哦

    4.接下来为大家分享一个小编亲测有效的opencv人脸识别算法,用的是笔记本电脑外接USB摄像头,完整代码如下:

    import cv2
    
    def getTrainingData(window_name, camera_id, path_name, max_num): # path_name是图片存储目录,max_num是需要捕捉的图片数量
        cv2.namedWindow(window_name) # 创建窗口
        cap = cv2.VideoCapture(camera_id) # 打开摄像头
        classifier = cv2.CascadeClassifier('haarcascade_frontalface_alt2.xml') # 加载分类器
        classifier.load(r'C:Usersdellanaconda3Libsite-packagesopencv_python-4.5.1.48.dist-infohaarcascade_frontalface_alt2.xml')#一定要告诉编译器文件所在的具体位置
        color = (0,255,0) # 人脸矩形框的颜色
        num = 0 # 记录存储的图片数量
    
        while cap.isOpened():
            ok, frame = cap.read()
            if not ok:
                break
    
            gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY) # 灰度化
            faceRects=classifier.detectMultiScale(gray,scaleFactor=1.2,minNeighbors=3,minSize=(32,32))
    
            if len(faceRects) > 0:
                for faceRect in faceRects:
                    x,y,w,h = faceRect
                    # 捕捉到的图片的名字,这里用到了格式化字符串的输出
                    image_name = '%s%d.jpg' % (path_name, num) # 注意这里图片名一定要加上扩展名,否则后面imwrite的时候会报错:could not find a writer for the specified extension in function cv::imwrite_ 参考:https://stackoverflow.com/questions/9868963/cvimwrite-could-not-find-a-writer-for-the-specified-extension
                    image = frame[y:y+h, x:x+w] # 将当前帧含人脸部分保存为图片,注意这里存的还是彩色图片,前面检测时灰度化是为了降低计算量;这里访问的是从y位开始到y+h-1位
                    cv2.imwrite(image_name, image)
    
                    num += 1
                    # 超过指定最大保存数量则退出循环
                    if num > max_num:
                        break
    
                    cv2.rectangle(frame, (x,y), (x+w,y+h), color, 2) # 画出矩形框
                    font = cv2.FONT_HERSHEY_SIMPLEX # 获取内置字体
                    cv2.putText(frame, ('%d'%num), (x+30, y+30), font, 1, (255,0,255), 4) # 调用函数,对人脸坐标位置,添加一个(x+30,y+30)的矩形框用于显示当前捕捉到了多少人脸图片
            if num > max_num:
                break
            cv2.imshow(window_name, frame)
            c = cv2.waitKey(10)
            if c & 0xFF == ord('q'):
                break
    
        cap.release()#释放摄像头并销毁所有窗口
        cv2.destroyAllWindows()
        print('Finished.')
    #主函数
    if __name__ =='__main__':
        print ('catching your face and writting into disk...')
        getTrainingData('mycamera',0,r'E:datasets_me	raining_data_me',10) # 注意这里的path_name必须是纯英文,否则读取不到存储路径;而且最后一个“”后面是自定义的图片名称,之前的全为路径

    5.这边需要注意的是

    (1)# 加载分类器的路径根据自己的情况修改
    (2)注意这里的path_name必须是纯英文,否则读取不到存储路径;而且最后一个“”后面是自定义的图片名称,之前的全为路径

    6.后续会陆续更新,如何在搜集的人脸数据的基础上如何准备数据集,加载数据集,数据集的划分,如何用Keras和Tensorflow构造卷积神经网络以及训练神经网络等。请持续关注。。。

    我是小关,关注我,带你从初级入门编程
    希望能帮到大家,问你们要一个赞,你们会给吗,谢谢大家
    版权声明:本文版权归作者(@攻城狮小关)和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
    大家写文都不容易,请尊重劳动成果~
    交流加Q:1909561302
    CSDN地址https://blog.csdn.net/Mumaren6/

  • 相关阅读:
    推荐系统 蒋凡译 第一章 引言 读书笔记
    神经网络与深度学习 邱锡鹏 第5章 卷积神经网络 读书笔记
    神经网络与深度学习 邱锡鹏 第4章 前馈神经网络 读书笔记
    神经网络与深度学习 邱锡鹏 第3章 线性模型 读书笔记
    神经网络与深度学习 邱锡鹏 第2章 机器学习概述 读书笔记
    神经网络与深度学习 邱锡鹏 第1章 绪论 作业
    神经网络与深度学习 邱锡鹏 第1章 绪论 读书笔记
    算法笔记 上机训练实战指南 第13章 专题扩展 学习笔记
    算法笔记 第13章 专题扩展 学习笔记
    算法笔记 上机训练实战指南 第11章 提高篇(5)--动态规划专题 学习笔记
  • 原文地址:https://www.cnblogs.com/guanguan-com/p/14710797.html
Copyright © 2011-2022 走看看