OpenCV獲取IP攝像頭視頻


從開源中國博客搬來,合並博客

實驗室做一個智能小車的小項目,期間涉及到在PC端處理小車攝像頭的視頻。這里先用安卓手機代替一下進行試驗。大致流程就是手機攝像頭獲取視頻,開啟一個IP攝像頭服務軟件,在局域網內可以根據IP進行訪問。Python+OpenCV2獲取視頻並進行顯示人臉識別。

具體步驟

  • Step1:安裝IP攝像頭軟件

    這個在應用商店里搜一下就行了

  • Step2:瀏覽器訪問測試

    根據IP攝像頭軟件的提示從在同一個局域網中的PC的瀏覽器上進行訪問(如:192。168.1.111:8080)

  • Step3:OpenCV獲取視頻

    視頻的本質是不斷變化的圖片,而Python是可以直接通過URL/IP獲得圖片的,找到圖片地址,就可以進行獲取了代碼如下:

resp = urllib.urlopen("http://192.168.1.128:8080/shot.jpg")
frame = resp.read()
  • Step4:進行圖片轉碼

    上一步獲得的圖片OpenCV是無法直接處理的(你把它保存了再打開的話,算我沒說),而這就涉及到了圖片的存儲格式的轉換,將比特流轉換成OpenCV里的圖片格式,代碼如下:

resp = urllib.urlopen("http://192.168.1.128:8080/shot.jpg")
frame = np.asarray(bytearray(resp.read()), dtype="uint8")
frame = cv2.imdecode(frame, cv2.IMREAD_COLOR)
  • Step5:人臉識別

    這個就沒什么說的了,將圖片轉碼之后就和處理普通視頻沒什么差別了。完整代碼如下:

#coding:utf-8
import cv2
import urllib2
import urllib
import numpy as np
cv2.namedWindow("test")#命名一個窗口
#cap=cv2.VideoCapture("http://192.168.1.128:8080/shot.jpg?rnd=190604?dummy=param.mjpg")#打開1號攝像頭
#success, frame = cap.read()#讀取一楨圖像,前一個返回值是是否成功,后一個返回值是圖像本身
# print success
success = True
resp = urllib.urlopen("http://192.168.1.111:8080/shot.jpg")
frame = np.asarray(bytearray(resp.read()), dtype="uint8")
frame = cv2.imdecode(frame, cv2.IMREAD_COLOR)
color = (255,0,0)#設置人臉框的顏色
classfier=cv2.CascadeClassifier("haarcascade_frontalface_alt.xml")#定義分類器
while success:
    #success, frame = cap.read()
    resp = urllib.urlopen("http://192.168.1.111:8080/shot.jpg")
    frame = np.asarray(bytearray(resp.read()), dtype="uint8")
    frame = cv2.imdecode(frame, cv2.IMREAD_COLOR)
    size=frame.shape[:2]#獲得當前楨彩色圖像的大小
    image=np.zeros(size,dtype=np.float16)#定義一個與當前楨圖像大小相同的的灰度圖像矩陣
    image = cv2.cvtColor(frame, cv2.cv.CV_BGR2GRAY)#將當前楨圖像轉換成灰度圖像
    cv2.equalizeHist(image, image)#灰度圖像進行直方圖等距化
    #如下三行是設定最小圖像的大小
    divisor=8
    h, w = size
    minSize=(w/divisor, h/divisor)
    faceRects = classfier.detectMultiScale(image, 1.2, 2, cv2.CASCADE_SCALE_IMAGE,minSize)#人臉檢測
    if len(faceRects)>0:#如果人臉數組長度大於0
        for faceRect in faceRects: #對每一個人臉畫矩形框
                x, y, w, h = faceRect
                cv2.rectangle(frame, (x, y), (x+w, y+h), color)
    cv2.imshow("test", frame)#顯示圖像
    key=cv2.waitKey(10)
    c = chr(key & 255)


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM