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:\Users\dell\anaconda3\Lib\site-packages\opencv_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:\Users\dell\anaconda3\Lib\site-packages\opencv_python-4.5.1.48.dist-info\haarcascade_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\training_data_me',10) # 注意这里的path_name必须是纯英文,否则读取不到存储路径;而且最后一个“\”后面是自定义的图片名称,之前的全为路径

5.这边需要注意的是

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

猜你喜欢

转载自blog.csdn.net/m0_59485658/article/details/128585772