首页 > 编程语言 >用python写openvino yolov5目标检测代码

用python写openvino yolov5目标检测代码

时间:2023-03-20 15:11:06浏览次数:46  
标签:index openvino python cv2 yolov5 boxes y1 x1

 

 检测代码

import cv2
import numpy as np
import time

#from openvino.runtime import Core  # the version of openvino >= 2022.1 # openvino 2022.1.0 has requirement numpy<1.20,>=1.16.6
from openvino.inference_engine import IECore # the version of openvino <= 2021.4.2

classes = ['person', 'bicycle', 'car', 'motorcycle', 'airplane', 'bus', 'train', 'truck', 'boat', 'traffic light',
        'fire hydrant', 'stop sign', 'parking meter', 'bench', 'bird', 'cat', 'dog', 'horse', 'sheep', 'cow',
        'elephant', 'bear', 'zebra', 'giraffe', 'backpack', 'umbrella', 'handbag', 'tie', 'suitcase', 'frisbee',
        'skis', 'snowboard', 'sports ball', 'kite', 'baseball bat', 'baseball glove', 'skateboard', 'surfboard',
        'tennis racket', 'bottle', 'wine glass', 'cup', 'fork', 'knife', 'spoon', 'bowl', 'banana', 'apple',
        'sandwich', 'orange', 'broccoli', 'carrot', 'hot dog', 'pizza', 'donut', 'cake', 'chair', 'couch',
        'potted plant', 'bed', 'dining table', 'toilet', 'tv', 'laptop', 'mouse', 'remote', 'keyboard', 'cell phone',
        'microwave', 'oven', 'toaster', 'sink', 'refrigerator', 'book', 'clock', 'vase', 'scissors', 'teddy bear',
        'hair drier', 'toothbrush']  # class names

class OpenVinoYoloV5Detector():

    def __init__(self,IN_conf):
        # ie = Core()  # Initialize Core version>=2022.1
        # self.Net = ie.compile_model(model=IN_conf.get("weight_file"),device_name=IN_conf.get("device"))

        ie = IECore()  # Initialize IECore  openvino <= 2021.4.2
        self.Net = ie.load_network(network=IN_conf.get("weight_file"), device_name=IN_conf.get("device"))

        self.INPUT_HEIGHT = 640
        self.INPUT_WIDTH = 640

    # YOLOv5目标检测
    def detect(self, image):

        blob = cv2.dnn.blobFromImage(image, 1 / 255.0, (self.INPUT_WIDTH, self.INPUT_HEIGHT), swapRB=True, crop=False)

        # openvino >= 2022.1
        # results = net([blob])[next(iter(net.outputs))]
        # results = self.Net([blob])[self.Net.output(0)]

        # openvino <= 2021.4.2
        results = self.Net.infer(inputs={"images": blob})
        results = results["output"]

        self.process_results(image, results)

    # YOLOv5的后处理函数,解析模型的输出
    def process_results(self,image, results,thresh=0.25):

        h, w, _ = image.shape

        class_ids = []
        boxes = []
        scores = []

        results = results[0]
        rows = results.shape[0]

        y_factor = h / self.INPUT_HEIGHT
        x_factor = w / self.INPUT_WIDTH

        for r in range(rows):
            row = results[r]
            score = row[4]

            if score >= 0.4 :

                classes_scores = row[5:]

                _, _, _, max_indexes = cv2.minMaxLoc(classes_scores)
                class_id = max_indexes[1]

                if classes_scores[class_id] > 0.25:
                    x, y, w, h = row[0].item(), row[1].item(), row[2].item(), row[3].item()

                    x1 = int((x - 0.5 * w) * x_factor)
                    y1 = int((y - 0.5 * h) * y_factor)
                    x2 = x1 + int(w * x_factor)
                    y2 = y1 + int(h * y_factor)
                    boxes.append((x1,y1, x2, y2))
                    class_ids.append(class_id)
                    scores.append(score)

        # default score_threshold=0.25, nms_threshold=0.45
        indices = cv2.dnn.NMSBoxes(bboxes=boxes, scores=scores, score_threshold=thresh, nms_threshold=0.45)

        for index in indices:
            x1, y1, x2,y2 = boxes[index][0], boxes[index][1], boxes[index][2], boxes[index][3]
            cv2.rectangle(frame, (x1,y1), (x2,y2), (0,255,0), 2)
            cv2.putText(frame, str(classes[class_ids[index]]), (x1, y1 + 20), cv2.FONT_HERSHEY_SIMPLEX, .5,(255,255,255))

if __name__ == '__main__':
    IN_conf = {
        "weight_file": "weights/yolov5n_openvino_model/yolov5n.xml",
        "device": "CPU"#"GPU"
    }
    detector = OpenVinoYoloV5Detector(IN_conf=IN_conf)

    url = 'bus.jpg'

    cap = cv2.VideoCapture(url)

    while True:
        r, frame = cap.read()
        if r:
            t1 = time.time()
            detector.detect(frame)
            cv2.imshow('OpenVinoYoloV5Detector.py', frame)
            t2 = time.time()
        else:
            print("读取%s结束" % str(url))
            break

    cv2.waitKey(0)
    cap.release()
    cv2.destroyAllWindows()

 

标签:index,openvino,python,cv2,yolov5,boxes,y1,x1
From: https://www.cnblogs.com/chen1880/p/17236368.html

相关文章

  • mysql-connector-python驱动和django-mysql-pool连接池
    ##################### 为了设计一个公用的、安全的连接池接口,可以考虑以下几个方面:封装连接池初始化和获取连接的逻辑,使得调用者不需要了解连接池的具体实现细节,只需要调......
  • python实现一个二分法
    #################      ############################### ......
  • python 文本形成视频
    https://modelscope.cn/models/damo/text-to-video-synthesis/summary?continueFlag=316e474d46439886c7d26c850c8c9d37frommodelscope.pipelinesimportpipelinefrom......
  • Python语言种有哪些关键字
    关键字是Python语言自己已经使用的,不允许开发者自己定义和关键字相同名字的标识符。FalseclassfromorNonecontinueglobalpassTruedef......
  • python+playwright 学习-35.获取页面的完整 HTML 内容
    前言selenium里面有个driver.page_source可以获取整个html页面的内容,playwright里面也有类似的方法使用page.content()page.content()获取html内容使用示例fromp......
  • Windows10 安装OpenVINO(2021.4.2)非默认路径踩坑总结
    @TOC前言这几天因公司业务需要,下载了OpenVINO,真的是一把辛酸泪啊,晚上十一点,安装调试到凌晨四点,运行demo_squeezenet_download_convert_run.bat依旧报错一大堆,真的要炸了,后来......
  • Python基础:面向对象-继承和多态
    一、继承Python面向对象的继承指的是多个类之间的所属关系,即子类默认继承父类的所有属性的方法。作用:可以减少代码重复,提升代码复用率。简单示例如下:#父类AclassAni......
  • python3.X版本升级3.1X
    卸载旧版本的python1、用安装包进行卸载,找到安装包2、双击后点击uninstall3、点击close 4、找到安装目录删除D:\ProgramFiles\Python39装新的版本1、去官网下......
  • python高级用法之命名元组namedtuple
    1.tuple类型数据的获取大家都知道,元组里面的数据获取只能通过下标的方式去获取,比如:a=('username','age','phone'),要获取username的话,就需要用a[0]的方式去获取,当元组......
  • 接口测试——python接口开发(二)
    1.python接口开发框架Flask简介与安装Flask接口测试框架的简介与安装Flask是轻量级的web开发框架相比于其他框架,Flask更自由,灵活相比于其他框架,Flask更容易上手Fl......