python讀取宇視攝像頭實時流,並用opencv做人臉檢測

一、測試攝像頭

宇視攝像頭默認密碼123456,取流地址:rtsp://admin:[email protected]:554

下載VLC播放器進行驗證,下載地址如下

https://dl.pconline.com.cn/html_2/1/124/id=6661&pn=0&linkPage=1.html

選擇媒體-打開網絡串流

可以看到預覽流。

二、準備python 庫

1、下載cv2

安裝cv2模塊不能直接用命令pip install cv2安裝,要用pip install opencv-python安裝,

如果失敗,可以下載whl:https://www.lfd.uci.edu/~gohlke/pythonlibs/#opencv

或者https://pypi.tuna.tsinghua.edu.cn/simple/opencv-python/

一定要下載和python版本相適應的,比如我的3.6必須下

pip install opencv_python‑3.4.6‑cp36‑cp36m‑win_amd64.whl

三、利用opencv預覽

#以下是最常用的讀取視頻流的方法
import cv2
url = 'rtsp://admin:[email protected]:554'
cap = cv2.VideoCapture(url)
while(cap.isOpened()):
    ret, frame = cap.read()
# Display the resulting frame  
    cv2.imshow('frame',frame)
    if cv2.waitKey(1) & 0xFF == ord('q'):
        break
# When everything done, release the capture  
cap.release()
cv2.destroyAllWindows()

可以看到跳出預覽畫面:

 

四、人臉檢測

分類器可以用opencv自帶的haarcascade_frontalface_default.xml,在安裝路徑下:\Lib\site-packages\cv2\data\haarcascade_frontalface_default.xml,要和代碼放在同一文件夾下

代碼如下:
import cv2
def CatVideo():
    #1調用攝像頭,0表示從pc本地連接的攝像頭,url表示從ipc的url取流
    cap=cv2.VideoCapture(url)
    classfier = cv2.CascadeClassifier("haarcascade_frontalface_default.xml")
    color = (0, 255, 0)
    while cap.isOpened():
        ok,frame=cap.read()
        if not ok:
            break
            # 3灰度轉換
        grey = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
        # 4人臉檢測,1.2和2分別爲圖片縮放比例和需要檢測的有效點數
        faceRects = classfier.detectMultiScale(grey, scaleFactor=1.2, minNeighbors=3, minSize=(32, 32))
        if len(faceRects) > 0:  # 大於0則檢測到人臉
            print("檢測到人臉")
            for faceRect in faceRects:  # 單獨框出每一張人臉
                x, y, w, h = faceRect  # 5畫圖
                cv2.rectangle(frame, (x - 10, y - 10), (x + w + 10, y + h + 10), color, 3)
        cv2.imshow("Face Recognition", frame)
        if cv2.waitKey(1) & 0xFF == ord('q'):
            break
    cap.release()
    cv2.destroyAllWindows()

其中:waitKey()方法本身表示等待鍵盤輸入,

參數是1,表示延時1ms切換到下一幀圖像,對於視頻而言;

參數爲0,如cv2.waitKey(0)只顯示當前幀圖像,相當於視頻暫停,;

按q時退出播放

五、問題

1、誤報率還是挺高的,

2、解碼經常出錯

[h264 @ 000000000ef76940] cabac decode of qscale diff failed at 84 17
[h264 @ 000000000ef76940] error while decoding MB 84 17, bytestream 507ffmpeg

解碼h264流出錯,最挫的方法是設置IPC編碼格式

3、啓動較慢

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