python利用opencv調(diào)用攝像頭實(shí)現(xiàn)目標(biāo)檢測(cè)
使用到的庫(kù)
好多人都想了解一下如何對(duì)攝像頭進(jìn)行調(diào)用,然后進(jìn)行目標(biāo)檢測(cè),于是我做了這個(gè)小BLOG。
opencv-python==4.1.2.30
Pillow==6.2.1
numpy==1.17.4
這些都是通用的庫(kù),版本不同問(wèn)題應(yīng)該也不大。
實(shí)現(xiàn)思路
利用opencv調(diào)用攝像頭,讀取每一幀傳入目標(biāo)檢測(cè)網(wǎng)絡(luò)檢測(cè),將檢測(cè)結(jié)果呈現(xiàn)。
由于本文所用的檢測(cè)格式為RGB格式,CV2讀取的時(shí)候會(huì)使用BGR格式,因此在檢測(cè)的時(shí)候要利用cv2.cvtColor進(jìn)行轉(zhuǎn)換。
實(shí)現(xiàn)代碼
以Retinanet為例:
from keras.layers import Input from retinanet import Retinanet from PIL import Image import numpy as np import cv2 retinanet = Retinanet() # 調(diào)用攝像頭 capture=cv2.VideoCapture(0) while(True): # 讀取某一幀 ref,frame=capture.read() # 格式轉(zhuǎn)變,BGRtoRGB frame = cv2.cvtColor(frame,cv2.COLOR_BGR2RGB) # 轉(zhuǎn)變成Image frame = Image.fromarray(np.uint8(frame)) # 進(jìn)行檢測(cè) 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計(jì)算
很多小伙伴說(shuō)到想要獲取FPS,于是給所有的目標(biāo)檢測(cè)網(wǎng)絡(luò)加上了FPS的功能,需要的小伙伴請(qǐng)重新下載。
FPS記錄的原理
FPS簡(jiǎn)單來(lái)理解就是圖像的刷新頻率,也就是每秒多少幀。
假設(shè)目標(biāo)檢測(cè)網(wǎng)絡(luò)處理1幀要0.02s。
此時(shí)FPS就是50。
FPS實(shí)現(xiàn)代碼
該代碼以ssd為例。
#-------------------------------------# # 調(diào)用攝像頭檢測(cè) #-------------------------------------# from ssd import SSD from PIL import Image import numpy as np import cv2 import time ssd = SSD() # 調(diào)用攝像頭 capture=cv2.VideoCapture(0) # capture=cv2.VideoCapture("1.mp4") fps = 0.0 while(True): t1 = time.time() # 讀取某一幀 ref,frame=capture.read() # 格式轉(zhuǎn)變,BGRtoRGB frame = cv2.cvtColor(frame,cv2.COLOR_BGR2RGB) # 轉(zhuǎn)變成Image frame = Image.fromarray(np.uint8(frame)) # 進(jìn)行檢測(cè) 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
以上就是python利用opencv調(diào)用攝像頭實(shí)現(xiàn)目標(biāo)檢測(cè)的詳細(xì)內(nèi)容,更多關(guān)于python opencv調(diào)用攝像頭目標(biāo)檢測(cè)的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
- 在VS2019環(huán)境下使用Opencv調(diào)用GPU版本YOLOv4算法的詳細(xì)過(guò)程
- Qt結(jié)合OpenCV部署yolov5的實(shí)現(xiàn)
- opencv-python+yolov3實(shí)現(xiàn)目標(biāo)檢測(cè)
- 基于深度學(xué)習(xí)和OpenCV實(shí)現(xiàn)目標(biāo)檢測(cè)
- OpenCV實(shí)現(xiàn)車輛識(shí)別和運(yùn)動(dòng)目標(biāo)檢測(cè)
- opencv調(diào)用yolov3模型深度學(xué)習(xí)目標(biāo)檢測(cè)實(shí)例詳解
相關(guān)文章
python,Java,JavaScript實(shí)現(xiàn)indexOf
這篇文章主要介紹了python,Java,JavaScript如何實(shí)現(xiàn)indexOf,幫助大家更好的理解indexOf,感興趣的朋友可以了解下2020-09-09Python實(shí)現(xiàn)為PDF去除水印的示例代碼
這篇文章主要介紹了如何利用Python實(shí)現(xiàn)PDF去除水印功能,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2022-04-04Python中的json對(duì)象與string相互轉(zhuǎn)換教程
python里有json這個(gè)庫(kù),但并沒(méi)有json這個(gè)類,所以所謂的json對(duì)象本質(zhì)上就是一個(gè)dict;而json這個(gè)庫(kù),用于實(shí)現(xiàn)dict到string、string到dict的互轉(zhuǎn),這篇文章主要介紹了Python中的json對(duì)象與string相互轉(zhuǎn)換教程,需要的朋友可以參考下2022-11-11python日記(使用TCP實(shí)現(xiàn)的對(duì)話客戶端和服務(wù)器)
這篇文章主要為大家介紹了python使用TCP實(shí)現(xiàn)的對(duì)話客戶端和服務(wù)器實(shí)現(xiàn)示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-03-03python中使用numpy包的向量矩陣相乘np.dot和np.matmul實(shí)現(xiàn)
本文主要介紹了python中使用numpy包的向量矩陣相乘np.dot和np.matmul實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2023-02-02Python 實(shí)現(xiàn)毫秒級(jí)淘寶搶購(gòu)腳本的示例代碼
本篇文章主要介紹了Python 通過(guò)selenium實(shí)現(xiàn)毫秒級(jí)自動(dòng)搶購(gòu)的示例代碼,通過(guò)掃碼登錄即可自動(dòng)完成一系列操作,搶購(gòu)時(shí)間精確至毫秒,可搶加購(gòu)物車等待時(shí)間結(jié)算的,感興趣的小伙伴們可以參考一下2019-09-09