jetson TX2 + opencv3.4 + python3 + 雙目 +人臉檢測

        淘寶看到一款很便宜的雙目,150元,就買了。想着用它學習一下opencv,好換個工作。當然,也想着能否用它做一些好玩的,比如三維重建之類高大上的東西。先用便宜的入個門,等以後眼界高了再看是不是買那些更加精密的雙目。不過目前來看,這個攝像頭還是很不錯的。

 

        這個雙目攝像頭用win10自帶的攝像頭驅動可以完美的打開,支持它的各種比例和分辨率的視頻顯示。分辨率支持以下幾種:

    16:9 1280x720
    4:3 640x480
    4:3 320x240
    8:3 1280x480
    8:3 640x240
    32:9 2560x720

     可是在win下面的使用anaconda環境+Python版本opencv 只能驅動顯示單個攝像頭,一旦更改雙目的分辨率就會報錯,網上找了好久資料也沒解決,就一直用錄製好的雙目視頻和雙目照片來學習。

  這幾天在家,就掏出吃灰已久的jetson TX2開發板試試,沒想到完美運行。

  jetsonTX2爲NVIDIA的人工智能開發板,網上有詳細的介紹,也有豐富的資料和教程。

  使用本開發板時,要先刷機(這個過程很漫長......),我記得當時刷了好幾遍,(有一次是沒刷完我以爲刷好了,所以要耐心等待。)然後安裝各種環境,包括opencv、numpy等。

  安裝opencv時要先裝上cmake,然後使用這個裏面的腳本安裝,很方便:https://www.ncnynl.com/archives/201706/1760.html

  這個開發板只有一個USB口,所以要準備一個USB HUB。

       插上雙目後,使用  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() #釋放攝像頭

運行效果如下:

 

 原始圖像也一起顯示效果如下:

 

 本文水平有限,內容很多詞語由於知識水平問題不嚴謹或很離譜,但主要作爲記錄作用,能理解就好了,希望以後的自己和路過的大神對必要的錯誤提出批評與指點,對可笑的錯誤不要嘲笑,指出來我會改正的。 

 另外,轉載使用請註明出處。                                                                                                

  -------------隨夢,隨心,隨願,執念執戰,執戰蒼天!

  

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章