树莓派与Win11通信【一对一】(四)

news2024/9/23 23:24:15

树莓派与Win11通信【一对一】(四)

树莓派与Win11通信【一对一】(四)的代码优化版,

最近给代码添加了打开摄像头与否的验证,以及文件的保存,定时拍摄

1.Server端

import socket
import time
# from picamera2 import Picamera2
from datetime import datetime

from PIL import Image
from io import BytesIO
import numpy as np
from detect_by_cv import *
import socket
import cv2
import numpy as np
from detect_by_cv import Yolov5
from PIL import Image
from io import BytesIO


def main():
    global ret, cap
    yolo = Yolov5()
    server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    server_socket.bind(('127.0.0.1', 8083))  # 使用服务器的IP地址
    server_socket.listen(1)
    print("服务器启动,等待连接...")

    while True:  # 主循环,用于接受新的连接
        client_socket, addr = server_socket.accept()
        print(f"接受到来自 {addr} 的连接")

        try:
            while True:
                # 每2秒启动一次摄像头进行拍照
                time.sleep(2)  # 等待2秒
                try:
                    cap = cv2.VideoCapture(0)  # 尝试打开摄像头
                    if not cap.isOpened():  # 检查摄像头是否成功打开
                        raise IOError("摄像头打开失败")

                    ret, frame = cap.read()
                except Exception as cap_error:
                    photo = cv2.imread('./Serverimg/fail/fail.jpg')
                    im = Image.fromarray(cv2.cvtColor(photo, cv2.COLOR_BGR2RGB))
                    buffer = BytesIO()
                    im.save(buffer, format='JPEG')
                    buffer = buffer.getvalue()
                    client_socket.sendall(len(buffer).to_bytes(4, 'big'))
                    client_socket.sendall(buffer)

                    # 发送最大最小值数据
                    max_min_str = f"fail,fail,fail,fail"

                    client_socket.sendall(len(max_min_str).to_bytes(4, 'big'))
                    client_socket.sendall(max_min_str.encode())
                finally:
                    cap.release()  # 确保摄像头资源被释放

                if ret:
                    box, scores, classid, _ = yolo.detect(frame)
                    resultlist = []
                    for i in range(len(classid)):
                        resultlist.append([classid[i], box[i], scores[i]])
                    for item in resultlist:
                        category, bbox, confidence = item
                        clslist = ["fire"]
                        # 边界框坐标
                        x, y, x2, y2 = bbox
                        # 绘制边界框和置信度文本
                        cv2.rectangle(frame, (x, y), (x2, y2), (0, 255, 0), 2)
                        label = f'{confidence:.2f},{clslist[category]}'
                        cv2.putText(frame, label, (x, y - 10), cv2.FONT_HERSHEY_SIMPLEX, 0.9, (0, 255, 0), 2)
                    save_directory = "./Serverimg"
                    if not os.path.exists(save_directory):
                        os.makedirs(save_directory)

                    # 生成以当前时间戳为文件名的图片
                    timestamp = datetime.now().strftime("%Y%m%d_%H%M%S")
                    filename = f"{timestamp}.jpg"
                    filepath = os.path.join(save_directory, filename)
                    cv2.imwrite(filepath, frame)

                    # 检查目录中的图片数量,如果达到50张,删除最早的图片
                    files = [os.path.join(save_directory, f) for f in os.listdir(save_directory) if f.endswith('.jpg')]
                    files.sort(key=os.path.getmtime)

                    if len(files) > 10:
                        os.remove(files[0])  # 删除最早的文件

                    photo = frame

                    im = Image.fromarray(photo)
                    if im.mode != 'RGB':
                        im = im.convert('RGB')
                    buffer = BytesIO()
                    im.save(buffer, format='JPEG')
                    buffer = buffer.getvalue()

                    max_pixel_value = np.max(photo)
                    min_pixel_value = np.min(photo)
                    max_min_str = f"{max_pixel_value},{min_pixel_value},{max_pixel_value},{min_pixel_value}"

                    # 发送图像数据长度和数据
                    client_socket.sendall(len(buffer).to_bytes(4, 'big'))
                    client_socket.sendall(buffer)

                    # 发送最大最小值数据
                    client_socket.sendall(len(max_min_str).to_bytes(4, 'big'))
                    client_socket.sendall(max_min_str.encode())

        except Exception as e:
            print(f"发生异常: {e}")
        finally:
            client_socket.close()
            print("等待新的连接...")

if __name__ == '__main__':
    main()

2.效果

效果1

大家可以看到,下面我尝试打开1,失败,因为本地只有0,往客户端发送的一张预存的照片

image-20240203192448929

效果2

可以看到,一开始时间戳最早的在后面已经被清除了

image-20240203193237500

3.结语

到此为止,本系列yolov5与win11通信的教程已经结束,大家有需要可以自己继续开发

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

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

相关文章

解决浏览器端 globalThis is not defined 报错

解决浏览器端 globalThis is not defined 报错 前言解决办法&#xff1a; 前言 在使用低版本火狐浏览器出现报错globalThis is not defined 解决办法&#xff1a; 在vue的index.html 中添加 this.globalThis || (this.globalThis this) <head><script>this.g…

vue3-自定义指令

自定义指令 vue 除了内置的制指令&#xff08;v-model v-show 等&#xff09;之外&#xff0c;还允许我们注册自定义的指令。 vue 复用代码的方式&#xff1a; 组件&#xff1a;主要是构建模块。 组合式函数&#xff1a;侧重有状态的逻辑。 自定义指令&#xff1a;主要是为…

day10笔记

API 显示->索引->搜索框输入->回车查看信息 字符串 直接赋值进串池(会先找,有复用) new出来的在堆里面 字符串比较 ""引用数据类型比较的是地址值 一模一样的比较 忽略大小写的比较 Scanner输入的数据是new出来的 遍历字符串 public class StringDe…

【ELK】logstash快速入门

1.概述 1.1.什么是logstash&#xff1f; 之前我们聊了es&#xff0c;并且用docker搭建了一个eskibana的环境。es目前最普遍的用法是用来存储日志的&#xff0c;然后结合kibana对日志做一些可视化的工作。既然要收集日志&#xff0c;就面临着一个问题&#xff1a; 各个系统的…

微信小程序(三十三)promise异步写法

注释很详细&#xff0c;直接上代码 上一篇 新增内容&#xff1a; 1.promise异步与普通异步的写法区别 2.promise异步的优势 源码&#xff1a; index.wxml <view class"preview" bind:tap"onChoose"><image src"{{avatar}}" mode"…

Python—数据可视化Seaborn大全:参数详解与实战案例全解析【第52篇—python:Seaborn大全】

文章目录 Seaborn库常用绘图详解与实战引言安装与导入一、散点图参数说明实战案例 二、直方图参数说明实战案例 三、线性关系图参数说明实战案例 四、热力图参数说明实战案例 五、分布图参数说明实战案例 六、箱线图参数说明实战案例 七、联合分布图参数说明实战案例 八、小提琴…

计算机设计大赛 深度学习 机器视觉 人脸识别系统 - opencv python

文章目录 0 前言1 机器学习-人脸识别过程人脸检测人脸对其人脸特征向量化人脸识别 2 深度学习-人脸识别过程人脸检测人脸识别Metric Larning 3 最后 0 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 &#x1f6a9; 深度学习 机器视觉 人脸识别系统 该项目…

Elasticsearch(ES) 创建带有分词器规则的索引

上文 Elasticsearch(ES) 下载添加IK分词器 带大家 下载 并使用了 IK 分词器 我们先启动 ES 服务 然后 我们来说 IK分词器 怎么用 设置分词器 我们还是要发put请求 创建索引时 通过参数设置 这里 我们put请求 类型要换成 json的 我们先加一个这样的模板 {"mappings&quo…

如何把vue项目打包成桌面程序 electron-builder

引入 我们想要把我们写的vue项目,打包成桌面程序&#xff0c;我们需要使用electron-builder这个库 如何使用 首先添加打包工具 vue add electron-builder 选择最新版本 下载完毕 我们可以看到我们的package.json中多了几行 electron:build&#xff1a;打包我们的可执行程序 e…

【开源】基于JAVA+Vue+SpringBoot的教学资源共享平台

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 数据中心模块2.2 课程档案模块2.3 课程资源模块2.4 课程作业模块2.5 课程评价模块 三、系统设计3.1 用例设计3.2 类图设计3.3 数据库设计3.3.1 课程档案表3.3.2 课程资源表3.3.3 课程作业表3.3.4 课程评价表 四、系统展…

#从零开始# 在深度学习环境中,如何用 pycharm配置使用 pipenv 虚拟环境

为Python项目创建虚拟环境 在深度学习环境和一般python环境中安装pipenv基本一致&#xff0c;只需要确认好pipenv指定的python版本即可,安装pipenv前&#xff0c;可以通过python --version来确认安装版本 快捷键&#xff1a;crtl alt S 查看interpreter&#xff0c;查看所有…

C++棋类小游戏2

今天给大家带来我花了1周时间自创的小游戏的升级版&#xff0c;博主还是一名小学生&#xff0c;希望大家提提意见。这是我写的最长的C代码&#xff0c;希望大家喜欢&#xff0c;不要抄袭&#xff0c;任何编译器都可以。 以前版本——C自创棋类小游戏-CSDN博客 C内容提示&…

揭秘备忘录模式:打造灵活高效的状态管理解决方案

备忘录模式&#xff08;Memento Pattern&#xff09;是一种行为设计模式&#xff0c;它允许在不暴露对象内部状态的情况下捕获和恢复对象的内部状态。这种模式主要用于实现撤销操作。 在 Java 中&#xff0c;备忘录模式通常包括以下三个角色&#xff1a; 发起人&#xff08;O…

jmeter-03界面介绍

文章目录 主界面介绍工具栏介绍测试计划介绍线程组介绍线程组——选择测试计划&#xff0c;右键-->添加-->线程-->线程组1.线程数2.准备时长(Ramp-up)3.循环次数4.same user on each iteratio5.调度器 主界面介绍 工具栏介绍 新建测试计划&#xff1a;创建一个空白的测…

Django模型(四)

一、数据操作初始化 from django.db import models# Create your models here. class Place(models.Model):"""位置信息"""name = models.CharField(max_length=32,verbose_name=地名)address = models.CharField(max_length=64,null=True,verbo…

记录在树莓派中部署PI-Assistant开源项目(GPT语音对话)的BUG

核心 在部署PI-Assistant&#xff08;https://github.com/Lucky-183/PI-Assistant&#xff09;项目中&#xff0c;首先要进行环境安装&#xff0c;官网文档中提供的安装命令如下&#xff1a; pip install requests arcade RPi.GPIO pydub numpy wave sounddevice pymysql cn2…

Endnote常见设置(硕士毕业论文参考文献修改)

1、根据大多数期刊或学校使用的标准&#xff0c;英文名首字母大写后续字母小写。 2、需要手动调整Endnote中的参考文献相关内容 3、关于姓名大小写设置 AS IS是不更改大小写&#xff0c;EndNote库中文献的大小是什么样&#xff0c;Word中就显示什么样。选择Normal为首字母大…

【Langchain+Streamlit】打造一个旅游问答AI

利用LangchainStreamlit打造一个交互简单的旅游问答AI机器人&#xff0c;如果你有openai账号,可以按照如下的网址直接体验&#xff0c;如果你没有的话可以站内私信博主要一下临时key体验一下&#xff1a; 产品使用传送门—— http://101.33.225.241:8501/ 这里有演示效果和代码…

[word] word小数点对齐怎么设置 #微信#其他#其他

word小数点对齐怎么设置 使用Word编辑文档的时候&#xff0c;如果有小技巧的话&#xff0c;可以解决很多遇到的问题&#xff0c;也让工作更高效的完成&#xff0c;下面给大家分享word小数点对齐怎么设置的小技巧。 1、设置格式 选中内容&#xff0c;点击段落一一制表符&#…

86 SRC挖掘-教育行业平台规则批量自动化

目录 涉及资源&#xff1a; 专属SRC范围小&#xff0c;所以难度大一些 CNVD挖到的漏洞要有一些影响面&#xff0c;才能拿到证书 教育漏洞平台给的面是很大的&#xff0c;给很多目标&#xff0c;我们按照常规思路来讲的话&#xff0c;自己去手工测试和提交这些漏洞&#xff0c…