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/

  • 相关阅读:
    Ajax实现异步上传图片
    python文章的抓取
    python
    Python的MySQLdb模块安装
    import _mysql----ImportError: DLL load failed: %1 不是有效的 Win32 应用程序。
    安装第三方模块时遇到Python version 2.7 required, which was not found
    beautifulSoup安装
    安装setuptools和pip
    python 的简单抓取图片
    python
  • 原文地址:https://www.cnblogs.com/guanguan-com/p/14710797.html
Copyright © 2011-2022 走看看