pycv实时目标检测快速实现

使用python_cv实现目标实时检测

python 安装依赖

python 复制代码
opencv_python==4.7.0.72
pandas==1.5.3
tensorflow==2.11.0
tensorflow_hub==0.13.0
tensorflow_intel==2.11.0
numpy==1.23.5

核心代码快速使用

python 复制代码
# 使用了TensorFlow Hub和OpenCV库来实现实时对象检测
# tensorflow_hub:用于加载预训练的模型。
# cv2:OpenCV库,用于图像处理和视频流操作。
# tensorflow:深度学习框架。
# pandas:数据处理库。

import tensorflow_hub as hub
import cv2
# import numpy
import tensorflow as tf
import pandas as pd

# 加载了EfficientDet Lite2检测模型,并读取了标签文件:

# 模型加载方式被注释掉,直接通过本地路径加载模型。
# 从CSV文件中读取标签,以ID作为索引,获取对象名称。

# Carregar modelos
# detector = hub.load("https://tfhub.dev/tensorflow/efficientdet/lite2/detection/1")
detector = hub.load("efficientdet_lite2_detection_1")
labels = pd.read_csv('labels.csv', sep=';', index_col='ID')
labels = labels['OBJECT (2017 REL.)']

# 初始化摄像头捕获,0表示默认摄像头。
cap = cv2.VideoCapture(0)

# 定义输入图像的宽度和高度。

width = 512
height = 512

# 接下来是一个循环,用于实时处理视频流:
while (True):
    # Capture frame-by-frame
    # 在循环中,逐帧捕获视频并调整尺寸以匹配模型输入。
    ret, frame = cap.read()
    # Resize to respect the input_shape
    inp = cv2.resize(frame, (width, height))

    # 将BGR格式的图像转换为RGB格式,这是因为大多数深度学习模型接受RGB输入。
    # Convert img to RGB
    rgb = cv2.cvtColor(inp, cv2.COLOR_BGR2RGB)

    # Is optional but i recommend (float convertion and convert img to tensor image)
    rgb_tensor = tf.convert_to_tensor(rgb, dtype=tf.uint8)

    # 将图像转换为TensorFlow张量,类型为uint8。
    # Add dims to rgb_tensor
    rgb_tensor = tf.expand_dims(rgb_tensor, 0)
    
    # 增加一个维度以匹配模型输入要求。
    boxes, scores, classes, num_detections = detector(rgb_tensor)
    pred_labels = classes.numpy().astype('int')[0]
    pred_labels = [labels[i] for i in pred_labels]
    pred_boxes = boxes.numpy()[0].astype('int')
    pred_scores = scores.numpy()[0]
    # 将预测结果转换为可处理的格式,包括标签、边界框和得分。
    #循环遍历每个检测到的对象,绘制边界框和标签,只显示得分高于0.5的对象。
    # loop throughout the faces detected and place a box around it
    for score, (ymin, xmin, ymax, xmax), label in zip(pred_scores, pred_boxes, pred_labels):
        if score < 0.5:
            continue
        score_txt = f'{100 * round(score,0)}'
        img_boxes = cv2.rectangle(rgb, (xmin, ymax), (xmax, ymin), (0,  255, 0), 1)
        font = cv2.FONT_HERSHEY_SIMPLEX
        cv2.putText(img_boxes, label, (xmin, ymax-10), font, 0.5, (255, 0, 0), 1, cv2.LINE_AA)
        cv2.putText(img_boxes, score_txt, (xmax, ymax-10), font, 0.5, (255, 0, 0), 1, cv2.LINE_AA)
    # 显示处理后的图像,并在按下'q'键时退出循环。
    # Display the resulting frame
    cv2.imshow('black and white', img_boxes)
    if cv2.waitKey(1) & 0xFF == ord('q'):
        break

# 释放摄像头资源并关闭所有OpenCV窗口,确保程序正常结束。
# When everything done, release the capture
cap.release()
cv2.destroyAllWindows()

实现结果展示

enjoy

github:liveCamer

相关推荐
云南新人和数采集团10 分钟前
云南靠谱软件开发公司选型指南:以昆明新腾科技为例
大数据·人工智能·科技
发现你走远了1 小时前
05-权限不是开关:工具调用如何在放行、拦截与追问之间做决定
人工智能·agent·claude
AllData公司负责人1 小时前
AI大模型数据开发底座系列说明书:AllData集成DB-GPT开源项目建设 AI 多模态分析底座,涵盖模态解析/智能大屏/MCP 扩展!
大数据·数据库·人工智能·gpt·数据采集·数据接入·模态解析
syyjhchou3 小时前
自己搭企业内部中转站,怎么让请求更容易命中缓存
人工智能·后端·语言模型·aigc
张然Adolf3 小时前
人工智能电力系统应用新手实战指南
人工智能
高洁013 小时前
数据同化与动态状态估计:让孪生持续贴合现实
人工智能·python·深度学习·transformer·迁移学习
feasibility.3 小时前
一物降一物?AI逆向没有终局:REA拆App,BLA设套,LASIK清场
人工智能·爬虫·github·逆向·skill·rea
IT古董4 小时前
AI 资讯日报 | 2026年10月25日:Kimi K3.1 Pro开源逼近前沿,OpenAI改离线训练,Claude合并Cowork,神经网络黑箱获新解,具身智能竞技场落幕
人工智能·神经网络·开源
小虎AI生活4 小时前
WorkBuddy + Loomy 实操教程:装开源技能反推任意图片提示词(附完整流程与提示词包)
人工智能·超级个体·一人公司·青玥ai
Rattenking4 小时前
OpenCV 轨迹栏操作和键盘响应操作
人工智能·opencv·计算机外设