睿智的目標檢測21——如何調用攝像頭進行目標檢測

學習前言

好多人都想了解一下如何對攝像頭進行調用,然後進行目標檢測,於是我做了這個小BLOG。
在這裏插入圖片描述

使用到的庫

opencv-python==4.1.2.30
Pillow==6.2.1
numpy==1.17.4
這些都是通用的庫,版本不同問題應該也不大。

實現思路

利用opencv調用攝像頭,讀取每一幀傳入目標檢測網絡檢測,將檢測結果呈現。
由於本文所用的檢測格式爲RGB格式,CV2讀取的時候會使用BGR格式,因此在檢測的時候要利用cv2.cvtColor進行轉換。

實現代碼

以Retinanet爲例:

from keras.layers import Input
from retinanet import Retinanet
from PIL import Image
import numpy as np
import cv2

retinanet = Retinanet()

# 調用攝像頭
capture=cv2.VideoCapture(0) 
while(True):
    # 讀取某一幀
    ref,frame=capture.read()
    # 格式轉變,BGRtoRGB
    frame = cv2.cvtColor(frame,cv2.COLOR_BGR2RGB)
    # 轉變成Image
    frame = Image.fromarray(np.uint8(frame))

    # 進行檢測
    frame = np.array(retinanet.detect_image(frame))
    # RGBtoBGR滿足opencv顯示格式
    frame = cv2.cvtColor(frame,cv2.COLOR_RGB2BGR)
    cv2.imshow("video",frame)
    c= cv2.waitKey(30) & 0xff 
    if c==27:
        capture.release()
        break

retinanet.close_session()

2020/4/26更新:FPS計算

很多小夥伴說到想要獲取FPS,於是給所有的目標檢測網絡加上了FPS的功能,需要的小夥伴請重新下載。

FPS記錄的原理

FPS簡單來理解就是圖像的刷新頻率,也就是每秒多少幀。
假設目標檢測網絡處理1幀要0.02s。
此時FPS就是50。

FPS實現代碼

該代碼以ssd爲例。

#-------------------------------------#
#       調用攝像頭檢測
#-------------------------------------#
from ssd import SSD
from PIL import Image
import numpy as np
import cv2
import time
ssd = SSD()
# 調用攝像頭
capture=cv2.VideoCapture(0) # capture=cv2.VideoCapture("1.mp4")
fps = 0.0
while(True):
    t1 = time.time()
    # 讀取某一幀
    ref,frame=capture.read()
    # 格式轉變,BGRtoRGB
    frame = cv2.cvtColor(frame,cv2.COLOR_BGR2RGB)
    # 轉變成Image
    frame = Image.fromarray(np.uint8(frame))

    # 進行檢測
    frame = np.array(ssd.detect_image(frame))

    # RGBtoBGR滿足opencv顯示格式
    frame = cv2.cvtColor(frame,cv2.COLOR_RGB2BGR)

    fps  = ( fps + (1./(time.time()-t1)) ) / 2
    print("fps= %.2f"%(fps))
    frame = cv2.putText(frame, "fps= %.2f"%(fps), (0, 40), cv2.FONT_HERSHEY_SIMPLEX, 1, (0, 255, 0), 2)

    cv2.imshow("video",frame)
    c= cv2.waitKey(30) & 0xff 
    if c==27:
        capture.release()
        break
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章