yolov8报警图片写入minio服务器 Rabbitmq发送地址

news2024/9/22 23:24:34

OSError [WinError 1455]页面文件太小,无法完成操作”解决方案“_深度学习_yangshejun-GitCode 开源社区 (csdn.net)

python对RabbitMQ的简单使用_python rabbitmq-CSDN博客

【Windows安装RabbitMQ详细教程】_rabbitmq windows-CSDN博客

Windows 10安装Minio 文件服务器-CSDN博客

发送到minio服务器

import collections
import os
import time
import cv2
import numpy as np
from ultralytics import YOLO
from threading import Thread, Lock
import minio
minio_client = minio.Minio('10.160.86.76:9000',
                  access_key='minioadmin',
                  secret_key='minioadmin',
                  secure=False)
shared_model_1 = YOLO("yolov8n.pt")
model_results = {shared_model_1: []}
lock = Lock()
os.makedirs('stream1/images', exist_ok=True)
os.makedirs('stream1/videos', exist_ok=True)
frame_rate = 30
record_length = 10  # seconds
target_class_value1 = 0  # e.g. class 1
results_list1 = collections.deque(maxlen=frame_rate * record_length)
def predict(model, image_path):
    results = model.predict(image_path, show=True, stream=True)
    last_save_time1 = time.time()
    with lock:
        model_results[model] = results
    for result in model_results[model]:
        print('model_results[model]', model_results[model])
        if model == shared_model_1:
            boxes = result.boxes
            results_list1.append(result)
            output_dir = 'stream1'
            if boxes.cls.numel() != 0:
                cls_tensor = boxes.cls
                cls_list = cls_tensor.cpu().numpy().tolist()
            else:
                cls_list = [99999]
            if target_class_value1 in cls_list and (
                    time.time() - last_save_time1) > record_length:
                timestamp = int(time.time())
                img_filepath = f"{output_dir}/images/{timestamp}.jpg"
                cv2.imwrite(img_filepath, result.plot(boxes=True))

                with open(img_filepath, 'rb') as file_data:
                    file_stat = os.stat(img_filepath)
                    minio_client.put_object('iot-db-img', f'{timestamp}.jpg', file_data,
                                            file_stat.st_size)

                last_save_time1 = time.time()

Thread(target=predict, args=(shared_model_1, "0")).start()  # " "填写地址

import boto3
import pika
import time

# 初始化Minio客户端
s3 = boto3.client('s3',
                 endpoint_url='http://10.160.86.76:9000', # 这需要替换成你的Minio服务器地址
                 aws_access_key_id='minioadmin',  # 这需要替换成你的access key
                 aws_secret_access_key='minioadmin')  # 这需要替换成你的secret key

# 初始化RabbitMQ连接和通道
connection = pika.BlockingConnection(pika.URLParameters('amqp://guest:guest@localhost:5672/%2F')) # 这需要替换成你的RabbitMQ服务器信息
channel = connection.channel()

# 声明队列
channel.queue_declare(queue='image_urls')

# 获取bucket中的初始对象列表
response = s3.list_objects(Bucket='iot-db-img') # 你需要把bucket's name替换为你自己的
old_keys = {content['Key'] for content in response.get('Contents', [])}

while True:
    # 循环获取新的对象列表
    response = s3.list_objects(Bucket='iot-db-img')
    new_keys = {content['Key'] for content in response.get('Contents', [])}

    # 找出新添加的图片
    added_keys = new_keys - old_keys

    for key in added_keys:
        image_url = f"http://10.160.86.76:9000/iot-db-img/{key}" # 这需要替换成你的Minio服务器和bucket信息

        # 发送新图片的URL到RabbitMQ
        channel.basic_publish(exchange='',
                            routing_key='image_urls',
                            body=image_url)

    # 更新旧的图片列表
    old_keys = new_keys

    # 每次循环后休息一段时间以免对服务器造成过大压力
    time.sleep(1)

# 关闭RabbitMQ连接
connection.close()

接收端测试

import os
import pika
import requests

# establishes a connection with RabbitMQ
connection = pika.BlockingConnection(pika.URLParameters('amqp://guest:guest@localhost:5672/%2F'))
channel = connection.channel()

# declare queue
channel.queue_declare(queue='image_urls')

def callback(ch, method, properties, body):
    image_url = body.decode()
    image_name = os.path.basename(image_url)
    response = requests.get(image_url)

    # Check if the response is ok
    if response.status_code == 200:
        # save the image to the local
        with open(os.path.join(r'E:\ultralytics-main\rabbit\rabbit', image_name), 'wb') as f:
            f.write(response.content)
        print(f"Image saved: {image_name}")
    else:
        print(f"Unable to download image, response code: {response.status_code}, url: {image_url}")

    ch.basic_ack(delivery_tag=method.delivery_tag)

# start the message consumer
channel.basic_consume(queue='image_urls', on_message_callback=callback)

print(' [*] Waiting for messages. To exit press CTRL+C')
channel.start_consuming()

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1698747.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

以前:不会用电脑;现在:不会用AI

购买特价商务机票需要一些策略和灵活性。、 提前规划:商务舱票价通常在出发日期的2-3个月前最便宜。尽早规划您的行程并开始关注票价。 使用比价工具:使用Skyscanner、Kayak等比价网站来比较不同航空公司的商务舱票价。这些网站可以显示多个航空公司的价…

IOT技术怎么落地?以宝马,施耐德为例

物联网技术 物联网(IoT)技术正逐渐成为数字化工厂转型的核心驱动力。本文将通过实际案例,探讨IoT技术如何促进制造业的数字化转型,提高生产效率,降低成本,并提升产品质量。 1. 物联网技术简介 物联网技术通…

Vue项目如何进行XSS防护

前言 在目前主推网络安全的情况下,很多开发项目都需要在上线前进行渗透测试,当符合渗透测试标准及没有安全漏洞即可正常上线,当前还会有代码审计的,这个另当别论。 如何对XSS进行防护 在很多的富文本编辑器项目中,x…

gcc g++不同版本切换命令

sudo update-alternatives --config g sudo update-alternatives --config gcc ubuntu20.04 切换 gcc/g 版本_ubuntu降低g版本-CSDN博客

MDK安装

MDK安装 1 MDK的差异2 切换MDK3 安装芯片支持包注意点 1 MDK的差异 不同版本MDK有略微的差别,比如:MDK536.EXE,支持版本5的交叉编译链。如下图所示: 而MDK539.EXE不支持版本5的交叉编译链,所以工作的时候&#xff0c…

是的,我换logo了!

大家好,我是记得诚。 当你收到推文的时候,会发现记得诚换logo了! 之前是这样的。 现在是这样的。 这个新logo(头像)是2年前在淘宝上请人做的,价值37人民币,但一直没有换上。当时还发了一个朋友…

netcat一键开始瑞士军刀模式(KALI工具系列六)

目录 1、KALI LINUX简介 2、netcat工具简介 3、在KALI中使用netcat 3.1 目标主机IP(win) 3.2 KALI的IP 4、命令示例 4.1 测试某IP的端口是否打开 4.2 TCP扫描 4.3 UDP扫描 4.4 端口刺探 4.5 直接扫描 5、即时通信 5.1 单击对话互联 5.2 传…

初中英语优秀作文分析-002Who stole the cupcake-谁偷了纸杯蛋糕?

更多资源请关注纽扣编程微信公众号 记忆树 1 One Sunday afternoon, Leslie was at home with her kids, 3-year-old Angel, 6-year-old Carl, and 7-year-old Tony. 翻译 一个周日的下午,Leslie和她的孩子们在家,他们是3岁的Angel,6岁的…

告别红色波浪线:tsconfig.json 配置详解

使用PC端的朋友,请将页面缩小到最小比例,阅读最佳! tsconfig.json 文件用于配置 TypeScript 项目的编译选项。如果配不对,就会在项目中显示一波又一波的红色波浪线,警告你这些地方的类型声明存在问题。 一般我们遇到这…

[LDAP: error code 34 - invalid DN]

目前我的项目版本: Spring版本:5.3.15SpringBoot版本:2.6.3 完整错误 org.springframework.ldap.InvalidNameException: [LDAP: error code 34 - invalid DN]; nested exception is javax.naming.InvalidNameException: [LDAP: error code 34 - invalid DN]at org.s…

STM32—HAL-PWM-舵机180(每个频率对应每个角度)

1开启时钟 2开启定时器和通道设置为PWM模式 3将定时时间设置为50Hz(20ms)//每25为1ms 4代码编写 4.1开启PWM 4.2改PWM的占空比 4.3效果0~180度在0度 源码 /* USER CODE BEGIN Header */ /******************************************************************************…

OceanBase SQL 诊断和调优实践——【DBA从入门到实践】第七期

数据库作为绝大多数应用系统储存数据的核心系统,在用户系统需要访问数据时,有着至关重要的作用。在这些交互中,SQL 语言是应用与数据库系统之间“沟通”的桥梁,它负责将应用的指令传达给数据库。因此,SQL 的性能好坏直…

SHAP值加持医学独立危险因素鉴定分析

SHAP值加持医学独立危险因素鉴定分析 医学独立危险因素鉴定是医学数据分析中的重要形式,旨在从众多临床因素中识别出对临床结局产生重大影响的因素,并通过干预这些因素来改善临床结果。例如,通过识别吸烟是肺癌的危险因素,倡导戒…

【数学代码】求两点之间的距离

Hello!大家好,今天讲讲求两点之间的距离。 已知点A的坐标为(x1,y1),点B的坐标为(x2,y2),求两点之间的直线距离。 首先,我先讲明,要解决这个问题,需要用到勾…

信息学奥赛初赛天天练-12-数论-整除问题

更多资源请关注纽扣编程微信公众号 整除的性质 1 整除性 若 𝑎 和 𝑏 都为整数, 𝑎 整除 𝑏 是指 𝑏 是 𝑎 的倍数,𝑎 是 𝑏 的约数(或者叫 因…

在线软件包管理

1.APT工作原理 APT(Advanced Packaging Tool)是Debian系列Linux操作系统中广泛使用的包管理工具,它为用户提供了从软件仓库搜索、安装、升级和卸载软件包的功能。其工作原理具体分析如下: 1. **集中式软件仓库机制**&#xff1a…

Android:使用Kotlin搭建MVVM架构模式

一、简介Android MVVM架构模式 MVVM全称:Model、View、ViewModel; Model:负责数据的请求、解析、过滤等数据层操作,其中Repository: 提供数据的 API(从本地或者网络)。View:负责视图部分展示Vie…

可以通过哪些方式邀请媒体报道宣传?

在我个人的职业生涯中,曾经历过一段为了公司新产品的推广,而独自踏上了寻找媒体曝光机会的征途。这段经历至今仍历历在目,它不仅是一段挑战自我的过程,也是我深刻理解到传统媒体联系方式局限性的重要转折点。 起初,我满怀激情地决定通过直接联系媒体来获取免费的宣传机会。我天…

Java进阶学习笔记26——包装类

包装类: 包装类就是把基本类型的数据包装成对象。 看下API文档: deprecated:极力反对、不赞成的意思。 marked for removal:标识为去除的意思。 自动装箱:基本数据类型可以自动转换成包装类。 自动拆箱:…

Flutter仿照微信实现九宫格头像

一、效果图 2、主要代码 import dart:io; import dart:math;import package:cached_network_image/cached_network_image.dart; import package:flutter/material.dart;class ImageGrid extends StatelessWidget {final List<String> imageUrls; // 假设这是你的图片URL…