• IP摄像头实现远程目标检测



    title: IP摄像头实现远程目标检测

    硬件准备

    不用的手机,或者esp32_CAM、电脑
    实现思路:
    摄像头负责采集图像传送到云端
    电脑获取云端视频流,在PC端对视频进行图像处理。
    然后将处理结果反馈给摄像头终端(未实现)

    软件准备

    Python 3.9、Pycharm、OpenCV、pytorch、手机安装IP摄像头软件

    代码实现

    以下只是使用手机IP摄像头的代码

    import time
    import torch
    import cv2 as cv
    
    
    class MultipleTarget:
    
        def __init__(self, url):
            """
            初始化
            """
            # 加载训练模型
            self.model = torch.hub.load('./yolov5', 'custom', path='./weight/yolov5s.pt', source='local')
            # 设置阈值
            self.model.conf = 0.52  # confidence threshold (0-1)
            self.model.iou = 0.45  # NMS IoU threshold (0-1)
            # 加载摄像头
            self.url = url
            self.cap = cv.VideoCapture(self.url)
            if not self.cap.isOpened():
                print("Cannot open camera")
                exit()
    
        def draw(self, list_temp, image_temp):
            for temp in list_temp:
                name = temp[6]  # 取出标签名
                temp = temp[:4].astype('int')  # 转成int加快计算
                cv.rectangle(image_temp, (temp[0], temp[1]), (temp[2], temp[3]), (0, 0, 255), 3)  # 框出识别物体
                cv.putText(image_temp, name, (int(temp[0] - 10), int(temp[1] - 10)), cv.FONT_ITALIC, 1, (0, 255, 0), 2)
    
        def detect(self):
            """
            目标检测
            """
            while True:
                ret, frame = self.cap.read()
                # 如果正确读取帧,ret为True
                if not ret:
                    print("Can't receive frame (stream end?). Exiting ...")
                    break
                frame = cv.flip(frame, 1)
    
                # FPS计算time.start
                start_time = time.time()
    
                # Inference
                results = self.model(frame)
                pd = results.pandas().xyxy[0]  # tensor-->pandas的DataFrame
                # 取出对应标签的list
                person_list = pd[pd['name'] == 'person'].to_numpy()
                bus_list = pd[pd['name'] == 'bus'].to_numpy()
                # 框出物体
                self.draw(person_list, frame)
                self.draw(bus_list, frame)
                # end_time
                end_time = time.time()
                fps = 1 / (end_time - start_time)
    
                # 控制台显示
                # results.print()  # or .show(), .save(), .crop(), .pandas(), etc.
                # print(results.xyxy[0])  # img1 predictions (tensor)
                # print('----------------')
                # print(results.pandas().xyxy[0])  # img1 predictions (pandas)
    
                # FPS显示
                cv.putText(frame, 'FPS:' + str(int(fps)), (30, 50), cv.FONT_ITALIC, 1, (0, 255, 0), 2)
    
                cv.imshow('results', frame)
                cv.waitKey(10)
                if cv.waitKey(10) & 0xFF == ord('q'):
                    break
    
            self.cap.release()
            cv.destroyAllWindows()
    
    
    url = 'rtsp://admin:admin@192.168.43.229:8554/live'
    test = MultipleTarget(url)
    test.detect()
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73
    • 74
    • 75
    • 76
    • 77
    • 78
    • 79
    • 80

    结果

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-F5O6Atei-1656468386884)(https://i.niupic.com/images/2022/06/20/a0B1.jpg)]
    test = MultipleTarget(url)
    test.detect()

    # 结果
    [外链图片转存中...(img-F5O6Atei-1656468386884)]
    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-G3F6pfjF-1656468386888)(https://i.niupic.com/images/2022/06/20/a0B2.jpg)]
    
    • 1
    • 2
    • 3
  • 相关阅读:
    Matplotlib绘制动图以及绘制平滑曲线
    海河实验室创新联合体成立 GBASE成为首批创新联合体(信创)成员单位
    wget什么意思
    如何修复损坏的excel文件?
    集成学习(随机森林)
    C#开源且免费的Windows桌面快速预览神器 - QuickLook
    华为 2024 届实习校园招聘-硬件通⽤/单板开发——第八套
    Java:更好的Java: JDK增强提案解释
    【自然语言处理】【实体匹配】CollaborER:使用多特征协作的自监督实体匹配框架
    电容 stm32
  • 原文地址:https://blog.csdn.net/qq_43815039/article/details/125515050