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必须是纯英文,否则读取不到存储路径;而且最后一个“\”后面是自定义的图片名称,之前的全为路径
6.后续会陆续更新,如何在搜集的人脸数据的基础上如何准备数据集,加载数据集,数据集的划分,如何用Keras和Tensorflow构造卷积神经网络以及训练神经网络等。请持续关注。。。
我是小关,关注我,带你从初级入门编程
希望能帮到大家,问你们要一个赞,你们会给吗,谢谢大家
版权声明:本文版权归作者(@攻城狮小关)和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
大家写文都不容易,请尊重劳动成果~
交流加Q:1909561302
CSDN地址https://blog.csdn.net/Mumaren6/