淘宝看到一款很便宜的双目,150元,就买了。想着用它学习一下opencv,好换个工做。固然,也想着可否用它作一些好玩的,好比三维重建之类高大上的东西。先用便宜的入个门,等之后眼界高了再看是否是买那些更加精密的双目。不过目前来看,这个摄像头仍是很不错的。html
这个双目摄像头用win10自带的摄像头驱动能够完美的打开,支持它的各类比例和分辨率的视频显示。分辨率支持如下几种:算法
16:9 1280x720
4:3 640x480
4:3 320x240
8:3 1280x480
8:3 640x240
32:9 2560x720ide
但是在win下面的使用anaconda环境+Python版本opencv 只能驱动显示单个摄像头,一旦更改双目的分辨率就会报错,网上找了很久资料也没解决,就一直用录制好的双目视频和双目照片来学习。学习
这几天在家,就掏出吃灰已久的jetson TX2开发板试试,没想到完美运行。人工智能
jetsonTX2为NVIDIA的人工智能开发板,网上有详细的介绍,也有丰富的资料和教程。spa
使用本开发板时,要先刷机(这个过程很漫长......),我记得当时刷了好几遍,(有一次是没刷完我觉得刷好了,因此要耐心等待。)而后安装各类环境,包括opencv、numpy等。.net
安装opencv时要先装上cmake,而后使用这个里面的脚本安装,很方便:https://www.ncnynl.com/archives/201706/1760.html3d
这个开发板只有一个USB口,因此要准备一个USB HUB。code
插上双目后,使用 ls -la /dev/vid* 命令查看,当出现 /dev/video0 和 /dev/video1 两个摄像头时,说明识别正确。其中video1就是咱们的双目,video0是板子自带的摄像头,可能我驱动没装好,自带的摄像头不能用。视频
人脸检测使用Haar级联算法检测,因此须要用于人脸检测的XML文件。具体见 附件。解压后,替换程序中文件夹的绝对路径。
代码很简单:
1 # -*- coding: utf-8 -*- 2 """ 3 Created on Tue May 7 13:37:49 2019 4 5 @author: 执念执战 6 """ 7 import cv2 8 camercapture=cv2.VideoCapture(1)#video1 为本双目摄像头 9 10 """ 11 本双目支持的分辨率 12 16:9 1280x720 13 4:3 640x480 14 320x240 15 8:3 1280x480 16 640x240 17 32:9 2560x720 18 """ 19 camercapture.set(3,1280) #设置分辨率 20 camercapture.set(4,480) 21 cv2.namedWindow('pic1') 22 cv2.namedWindow('pic2') 23 success,frame=camercapture.read() #获得原始图像 24 face_cascade=cv2.CascadeClassifier('/media/nvidia/Ubuntu-Kyli/Opencv/pycv-master/pycv-master/pycv-master/chapter5/cascades/haarcascade_frontalface_default.xml') 25 #Haar数据包的绝对地址,请更改成本身的地址 26 27 while True: 28 if cv2.waitKey(int(1000/30)) & 0xff == ord("q"): #按下 q 键退出 29 break 30 #cv2.imshow('Test',frame) #显示原始图像 31 pic1=cv2.cvtColor(frame[0:480,0:640],cv2.COLOR_BGR2GRAY) #将图像按照左右分割为两部分,并转化为灰度图 32 pic2=cv2.cvtColor(frame[0:480,640:1280],cv2.COLOR_BGR2GRAY) 33 34 faces1=face_cascade.detectMultiScale(pic1,1.3,5)#分别对左右两部分作人脸检测 35 faces2=face_cascade.detectMultiScale(pic2,1.3,5) 36 for (x,y,w,h) in faces1: 37 pic1=cv2.rectangle(pic1,(x,y),(x+w,y+h),(255,0,0),-1)#在灰度图上画出人脸区域,此处使用填充的矩形,遮挡人脸 38 for (x,y,w,h) in faces2: 39 pic2=cv2.rectangle(pic2,(x,y),(x+w,y+h),(255,0,0),-1) 40 41 cv2.imshow("pic1",pic1)#分别显示检测后的图像 42 cv2.imshow("pic2",pic2) 43 success,frame=camercapture.read()#获取下一帧的原始图像 44 45 cv2.destroyAllWindows()#销毁窗口 46 camercapture.release() #释放摄像头
运行效果以下:
原始图像也一块儿显示效果以下:
本文水平有限,内容不少词语因为知识水平问题不严谨或很离谱,但主要做为记录做用,能理解就行了,但愿之后的本身和路过的大神对必要的错误提出批评与指点,对好笑的错误不要嘲笑,指出来我会改正的。
另外,转载使用请注明出处。
-------------随梦,随心,随愿,执念执战,执战苍天!