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

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()

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

学 Go 具体能干什么?

学习 Go (Golang) 后,你可以从事许多不同的工作和项目,Go 语言以其高性能、并发处理和简洁的语法而闻名,特别适合以下几个领域: 1. 后端开发 Go 在后端开发中非常流行,特别适合构建高性能的 Web 服务和 API。 Web 框…

脑机接口习题

9-12章习题 填空题 EEG电极分为 主动电极 和 被动电极 ,其中 被动电极 直接与放大器连接, 主动电极 包含一个1~10倍的前置放大。除抗混淆滤波器,放大系统也包含由电阻器、电容器构成的模拟滤波器,把信号频率内容限制在一个特定的…

【QT+VS】如何在现有VS项目中添加Qt界面?【全网最详细】

0. 前置步骤 参考如下链接文章中的 前3个步骤(1:下载Qt;2:安装Qt;3:安装Qt插件),完成环境的配置和安装。 深耕AI:如何联合Qt,VS,C++,来开发一个电脑版软件(简单有趣,详细) 本文的基础项目链接为: c++工程+图像分割预测+mmdet+实例分割+最新工程+简洁易懂+新手…

斯坦福2024人工智能指数报告 1

《人工智能指数报告》由斯坦福大学、AI指数指导委员会及业内众多大佬Raymond Perrault、Erik Brynjolfsson 、James Manyika、Jack Clark等人员和组织合著,旨在追踪、整理、提炼并可视化与人工智能(AI)相关各类数据,该报告已被大多…

Redis学习篇2:Redis在Spring中的应用

本文继上文开始讲述了Redis在IDEA中如何应用以及集成进入spring开发环境,以及如何使用Redis客户端。上一个文章:Redis学习篇1:初识Redishttps://blog.csdn.net/jialuosi/article/details/139057088 一、Redis在java中的客户端 二、SpringDat…

前缀和,差分算法理解

前缀和是什么: 前缀和指一个数组的某下标之前的所有数组元素的和(包含其自身)。前缀和分为一维前缀和,以及二维前缀和。前缀和是一种重要的预处理,能够降低算法的时间复杂度 说个人话就是比如有一个数组: …

基于ssm的蛋糕商城系统java项目jsp项目javaweb

文章目录 蛋糕商城系统一、项目演示二、项目介绍三、系统部分功能截图四、部分代码展示五、底部获取项目源码(9.9¥带走) 蛋糕商城系统 一、项目演示 蛋糕商城管理系统 二、项目介绍 系统角色 : 管理员、用户 一,管理员 管理员有…

Android硬件渲染流程

Android硬件渲染流程 一.渲染流程1.VSync信号的监听2.VSync信号触发绘制 二.渲染原理1.画布的获取1.1 画布的创建1.2 渲染指令列表的创建 2.绘制与渲染指令2.1 矩形的绘制2.2 硬件渲染指令2.3 节点的绘制 3.绘制的提交3.1 绘制结果的保存3.2 绘制结果的获取 4.层级的构建4.1 绘…

Docker 安装kingbase V8r6

下载 官网下载,注意:这里下载 Docker 版本v8r6 安装 # 导入镜像 docker load -i kingbase.tar# 重命名 docker tag [image-name]:[tag] [new-image-name]:[new-tag]# 删除 docker rmi [image-name]:[tag]# 创建容器 docker run -tid \ --privileged \…

2024-6-遥远的救世主

2024-6-遥远的救世主 2024-4-18 豆豆 fatux: 2021.5.26 看完电视剧《天道》之后购买本书,断断续续一直没有读完。 非常好奇,一个什么样的作者能写出如此奇书。老丁,一个智者,智者是多么孤独,因为找不到同…

Javascript特效之鼠标悬停特效【css】

先看一看效果&#xff0c;是不是很炫酷啊&#xff1f;&#xff1f; HTML代码&#xff1a; <!DOCTYPE html> <html><head><meta charset""UTF-8"" /><title>CSS特效&#xff1a;鼠标悬停效果</title><link rel&q…

Linux下Vision Mamba环境配置+多CUDA版本切换

上篇文章大致讲了下Vision Mamba的相关知识&#xff0c;网上关于Vision Mamba的配置博客太多&#xff0c;笔者主要用来整合下。 笔者在Win10和Linux下分别尝试配置相关环境。 Win10下配置 失败 \textcolor{red}{失败} 失败&#xff0c;最后出现的问题如下&#xff1a; https://…

深入了解数据库设计中的规范化与反规范化

目录 零、前言 一、一些基本术语 二、关系模式 2.1. 什么是关系模式 2.2. 示例 三、数据依赖 3.1. 函数依赖 3.1.1. 完全函数依赖 3.1.2. 部分函数依赖 3.1.3. 传递函数依赖 3.2. 多值依赖 3.3. 连接依赖 四、规范化 4.1. 第一范式&#xff08;1NF&#xff09; …

C++/ cuda kernel中的模版元编程识别 kernel 模版的数据类型

1&#xff0c;模版元编程 模板元编程是一种利用 C 模板系统在编译时进行计算和生成代码的技术。其原理基于模板特化、递归、模板参数推导等特性&#xff0c;通过模板实例化和展开&#xff0c;在编译时生成代码&#xff0c;以实现在编译期间进行复杂计算和代码生成的目的。 2&am…

Git--本地仓库

文章目录 工作区和暂存区工作区&#xff08;Working Directory&#xff09;版本库&#xff08;Repository&#xff09; 初始化git仓库添加文件到版本库步骤 查看修改内容查看工作区和暂存区状态已add文件已修改/新增 的未add文件git跟踪修改原理 查看提交历史版本回退撤销修改撤…

【组合数学】常考试题答案

一、单项选择题&#xff08;每小题3分&#xff0c;共15分&#xff09; 1. 用3个“1”和4个“0”能组成&#xff08; &#xff09;个不同的二进制数字。 A. 35 B. 36, C. 37, D. 38 2. 整除300的正整数的个数为&#xff08;  &#xff09;。 A. 14…

面试中算法(A星寻路算法)

一、问题需求&#xff1a; 迷宫寻路游戏中&#xff0c;有一些小怪物要攻击主角&#xff0c;现在希望你给这些小怪物加上聪 明的AI (Artificial Intelligence&#xff0c;人工智能&#xff09;&#xff0c;让它们可以自动绕过迷宫中的障碍物&#xff0c;寻找到主角的所在。 A星…

DNS服务的部署与配置(2)

1、dns的安装及开启 dnf install bind.x86_64 -y #安装 #Berkeley Internet Name Domain (BIND) systemctl enable --now named #启用dns服务&#xff0c;服务名称叫named firewall-cmd --permanent --add-servicedns #火墙设置 firewall-cmd --reload …

学 Java 具体能干什么?

学习 Java 后&#xff0c;你可以从事许多不同的工作和项目&#xff0c;涵盖了广泛的应用领域。以下是一些具体的应用场景和工作方向&#xff1a; 1. 企业级应用开发 Java 是企业级应用开发的首选语言之一&#xff0c;特别适合开发大规模、分布式、多层次的企业应用程序。 Jav…

使用 LangFuse 意外被挂马!我是怎么恢复系统稳定的?

在使用 LangFuse 过程中,被意外挂马!通过一番折腾服务恢复正常~ 本文将详细介绍应对恶意脚本和进程的完整方案,包括识别、清理、恢复和预防步骤。 阿里云扫到的信息 被执行的 Base64 SUlaQnRTCmV4ZWMgJj4vZGV2L251bGwKSUhDa0hQbmQ9Li8uJChkYXRlfG1kNXN1bXxoZWFkIC1jMjApCl…