python利用opencv调用摄像头实现目标检测

 更新时间:2022年05月09日 10:21:43   作者:Bubbliiiing  
这篇文章主要为大家介绍了python利用opencv调用摄像头实现目标检测的示例代码,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪

使用到的库

好多人都想了解一下如何对摄像头进行调用,然后进行目标检测,于是我做了这个小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

以上就是python利用opencv调用摄像头实现目标检测的详细内容,更多关于python opencv调用摄像头目标检测的资料请关注脚本之家其它相关文章!

相关文章

  • Python面向对象编程之继承与多态详解

    Python面向对象编程之继承与多态详解

    这篇文章主要介绍了Python面向对象编程之继承与多态,结合实例形式详细分析了Python面向对象编程中继承与多态的概念、使用方法及相关注意事项,需要的朋友可以参考下
    2018-01-01
  • python,Java,JavaScript实现indexOf

    python,Java,JavaScript实现indexOf

    这篇文章主要介绍了python,Java,JavaScript如何实现indexOf,帮助大家更好的理解indexOf,感兴趣的朋友可以了解下
    2020-09-09
  • Python实现为PDF去除水印的示例代码

    Python实现为PDF去除水印的示例代码

    这篇文章主要介绍了如何利用Python实现PDF去除水印功能,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-04-04
  • PyTorch搭建一维线性回归模型(二)

    PyTorch搭建一维线性回归模型(二)

    这篇文章主要为大家详细介绍了PyTorch搭建一维线性回归模型,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-05-05
  • 深入探讨opencv图像矫正算法实战

    深入探讨opencv图像矫正算法实战

    在机器视觉中,对于图像的处理有时候因为放置的原因导致ROI区域倾斜,这个时候我们会想办法把它纠正为正确的角度视角来,本文主要介绍了opencv图像矫正算法,感兴趣的可以了解一下
    2021-05-05
  • Python生成短uuid的方法实例详解

    Python生成短uuid的方法实例详解

    python的uuid都是32位的,比较长,处理起来效率比较低。这篇文章主要介绍了Python生成短uuid的方法,需要的朋友可以参考下
    2018-05-05
  • Python中的json对象与string相互转换教程

    Python中的json对象与string相互转换教程

    python里有json这个库,但并没有json这个类,所以所谓的json对象本质上就是一个dict;而json这个库,用于实现dict到string、string到dict的互转,这篇文章主要介绍了Python中的json对象与string相互转换教程,需要的朋友可以参考下
    2022-11-11
  • python日记(使用TCP实现的对话客户端和服务器)

    python日记(使用TCP实现的对话客户端和服务器)

    这篇文章主要为大家介绍了python使用TCP实现的对话客户端和服务器实现示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-03-03
  • python中使用numpy包的向量矩阵相乘np.dot和np.matmul实现

    python中使用numpy包的向量矩阵相乘np.dot和np.matmul实现

    本文主要介绍了python中使用numpy包的向量矩阵相乘np.dot和np.matmul实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-02-02
  • Python 实现毫秒级淘宝抢购脚本的示例代码

    Python 实现毫秒级淘宝抢购脚本的示例代码

    本篇文章主要介绍了Python 通过selenium实现毫秒级自动抢购的示例代码,通过扫码登录即可自动完成一系列操作,抢购时间精确至毫秒,可抢加购物车等待时间结算的,感兴趣的小伙伴们可以参考一下
    2019-09-09

最新评论