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

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

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

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

1.Server端

import socket
import time
# from picamera2 import Picamera2
from datetime import datetimefrom 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 BytesIOdef main():global ret, capyolo = 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 = itemclslist = ["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 = frameim = 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.hqwc.cn/news/450029.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【数据结构 09】哈希

哈希算法:哈希也叫散列、映射,将任意长度的输入通过散列运算转化为固定长度的输出,该输出就是哈希值(散列值)。 哈希映射是一种压缩映射,通常情况下,散列值的空间远小于输入值的空间。 哈希运…

Axure 动态面板初使用 - 实现简单的Banner图轮播效果

实现简单的Banner图轮播效果 使用工具版本实现的效果步骤过程 使用工具版本 Axure 9 实现的效果 步骤过程 1、打开Axure工具,从元件库拖个动态面板到空白页; 2、给面板设置一个常用的banner尺寸,举个栗子:343151(移动端我常用…

Scratch:引领孩子们步入编程世界的魔法石

Scratch,一款由麻省理工学院(MIT)开发的面向儿童的编程软件,以其独特的交互性和直观性,正逐渐成为孩子们学习编程的首选工具。它不仅降低了编程的门槛,还激发了孩子们对编程的浓厚兴趣,为未来的…

查看阿里云maven仓中某个库有哪些版本

起因 最近项目上有做视频业务,方案是使用阿里云的短视频服务,其中也有使用到阿里云的上传SDK,过程中有遇一个上传SDK的内部崩溃,崩溃栈如下: Back traces starts. java.lang.NullPointerException: Attempt to invok…

【Leetcode】目前300题,大部分二刷,总感觉自己是在背答案一样,怎么破?

1,一开始学习的时候,就是刚学完数据结构算法,刚开始做题,说实话,一个easy题目都需要半个小时,甚至好几个小时,非常正常,因为这个阶段你是在学习,不是在做题,要…

Nonterrestrial Networks (NTN) for 5G and Beyond

Overview In this paper, we’ll take a look at the current state of NTNs, some of the new applications being explored, and crucially, the technical challenges that we’ll need to overcome to make it a viable market. Finally, we’ll get an overview of the w…

2024 年 10 款最佳免费无限的数据恢复软件工具

十大无限的数据恢复软件工具 数据丢失可能是一场噩梦,无论是由于意外删除、系统崩溃还是硬件故障。值得庆幸的是,有多种数据恢复软件工具可以帮助您检索珍贵的文件和文档。在本文中,我们将探讨可以拯救世界的十大最佳免费无限数据恢复软件工…

electron项目在内网环境的linux环境下进行打包

Linux需要的文件: electron-v13.0.0-linux-x64.zip appimage-12.0.1.7z snap-template-electron-4.0-1-amd64.tar.7z 下载慢或者下载失败的情况可以手动下载以上electron文件复制到指定文件夹下: 1.electron-v13.0.0-linux-x64.zip 复制到~/.cache/electron/目录下…

C/C++ - 容器vector

目录 容器特性 构造函数 默认构造函数 填充构造函数 范围构造函数 拷贝构造函数 内存布局 大小函数 size() 函数 capacity() 函数 empty() 函数 resize() 函数 增加函数 push_back(const T& value) emplace_back(Args&&... args) push_back和empla…

HDMI2.1之eARC简介-Dolby Atmos和DTS:X

文章目录 eARC目的更大的带宽更高质量音频支持对象型音频与CEC(Consumer Electronics Control)的兼容性: 适应流媒体发展Dolby AtmosDTS:X高分辨率音频更高的音频位深度和采样率低延迟音频 对象型音频格式独立对象三维定位动态音场适应性和灵…

Unity C#高级特性 Partial 详细使用案例

文章目录 实例 1:分隔UI逻辑实例 2:Unity编辑器自动生成代码实例 3:数据模型分割实例 4:序列化扩展实例 5:多视图架构实例 6:Unity编辑器自定义 inspectors 在Unity中,部分类(Partia…

【文本到上下文 #8】NLP中的变形金刚:解码游戏规则改变者

一、说明 欢迎来到我们对不断发展的自然语言处理 (NLP) 领域的探索的第 8 章。在本期中,我们将重点介绍一项重塑 NLP 格局的突破性创新:Transformers。在我们之前对 seq2seq 模型、编码器-解码器框架和注意力机制的讨论之后&#…