12.【Orangepi Zero2】基于orangepi_Zero_2 Linux的智能家居项目

基于orangPi Zero 2的智能家居项目

需求及项目准备

  • 语音接入控制各类家电,如客厅灯、卧室灯、风扇
  • 回顾二阶段的Socket编程,实现Sockect发送指令远程控制各类家电
  • 烟雾警报监测, 实时检查是否存在煤气泄漏或者火灾警情,当存在警情时及时触发蜂鸣器报警及语 音播报
  • 控制人脸识别打开房门功能,并语音播报识别成功或者失败
  • 局域网实时视频监控
  • OLED屏实话显示当前主板温度、警情信息及控制指令信息

人脸识别使用阿里SDK支持Python和Java接口,目的是复习巩固智能分类时引入C语言的Python调用。

此接口是人工智能接口,阿里云识别模型是通过训练后的模型,精准度取决于训练程度,人工智能范畴 在常规嵌入式设备负责执行居多。

说白的嵌入式设备负责数据采集,然后转发给人工智能识别后,拿到结果进行执行器动作。

系统框图

在这里插入图片描述

硬件接线

硬件

USB充电头(当前实测可用:5V/2.5A)x1、USB转TYPE-Cx1、SU-03Tx1、烟雾报警模块x1、4路继 电器x1、 OLEDx1、 电磁锁x1(5V吸合开锁)、 蜂鸣器x1、小风扇+电机x1(需要自行购买)、面包 板x1、 5号1.5V电池x6 、 2节电池盒x1、4节电池盒x1、带3路led灯小房子(3.3V可驱动, 需自行 购买搭建)

接线

在这里插入图片描述

在这里插入图片描述

语音模块配置

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

阿里云人脸识别方案

在之前树莓派的人脸识别方案采用了翔云平台的方案去1V1上传比对两张人脸比对,这种方案是可行,可 以继续采用。但为了接触更多了云平台方案,在Orange Pi Zero2里, 讲采用人脸搜索1:N方案,通过提 前在阿里云人脸数据库里存储人脸照片后,输入单张已授权人脸图像,与人脸库中人脸图片进行对比, 最终获取比对结果。

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

开通完后, 在”工作台->开发能力->人脸人体->人脸数据库管理 " 添加人脸照片样本 :

在这里插入图片描述

在这里插入图片描述

  • 数据库默认名字db_name/DbName:default
  • EntityId/实体Id

上传数据库后,安装阿里云人脸识别SDK:

pip install alibabacloud_facebody20191230

导入ALIBABA_CLOUD_ACCESS_KEY_ID和ALIBABA_CLOUD_ACCESS_KEY_SECRET环境变量:

vi ~/.bashrc #最后的结尾添加, 在垃圾分类的项目里如果已经添加过就不需要添加了
export ALIBABA_CLOUD_ACCESS_KEY_ID="你的KEY_ID"
export ALIBABA_CLOUD_ACCESS_KEY_SECRET="你的KEY_SECRECT"

在这里插入图片描述
在这里插入图片描述

可以拿同一人的照片和不同人的照片用官方python代码进行对比:

# -*- coding: utf-8 -*-
# 引入依赖包
# pip install alibabacloud_facebody20191230import os
import io
from urllib.request import urlopen
from alibabacloud_facebody20191230.client import Client
from alibabacloud_facebody20191230.models import SearchFaceAdvanceRequest
from alibabacloud_tea_openapi.models import Config
from alibabacloud_tea_util.models import RuntimeOptionsconfig = Config(# 创建AccessKey ID和AccessKey Secret,请参考https://help.aliyun.com/document_detail/175144.html。# 如果您用的是RAM用户的AccessKey,还需要为RAM用户授予权限AliyunVIAPIFullAccess,请参考https://help.aliyun.com/document_detail/145025.html。# 从环境变量读取配置的AccessKey ID和AccessKey Secret。运行代码示例前必须先配置环境变量。access_key_id=os.environ.get('ALIBABA_CLOUD_ACCESS_KEY_ID'),access_key_secret=os.environ.get('ALIBABA_CLOUD_ACCESS_KEY_SECRET'),# 访问的域名endpoint='facebody.cn-shanghai.aliyuncs.com',# 访问的域名对应的regionregion_id='cn-shanghai'
)search_face_request = SearchFaceAdvanceRequest()
#场景一:文件在本地
def alicloud_Search_Face():stream0 = open(r'/home/orangepi/smarthouse/face.jpg', 'rb')search_face_request.image_url_object = stream0#场景二:使用任意可访问的url#url = 'https://viapi-test-bj.oss-cn-beijing.aliyuncs.com/viapi-3.0domepic/facebody/SearchFace1.png'#img = urlopen(url).read()#search_face_request.image_url_object = io.BytesIO(img)search_face_request.db_name = 'default' #数据库默认名字db_name/DbName : defaultsearch_face_request.limit = 5runtime_option = RuntimeOptions()try:# 初始化Clientclient = Client(config)response = client.search_face_advance(search_face_request, runtime_option)# 获取整体结果print(response.body)if 'MatchList' in response.body.to_map()['Data']:message = response.body.to_map()['Data']['MatchList']scores = []for match in message:for item in match.get('FaceItems', []):score = item.get('Score')if score is not None:  # 确保分数不为 Nonescores.append(score)if scores:  # 确保至少有一个分数max_score = max(scores)value = round(max_score, 2)print(f"The max score = {value}")return valueelse:print("No scores found.")else:print("No matches found.")except Exception as error:# 获取整体报错信息print(error)# 获取单个字段print(error.code)# tips: 可通过error.__dict__查看属性名称if __name__ == "__main__":alicloud_Search_Face()#关闭流
#stream0.close()

一般比对成功的Python字典数据里的score会有大于0.6的值,而比对失败score普遍低于0.1。

例如下面是比对成功的数据:


orangepi@orangepizero2:~/smarthouse$ python3.10 face_test.py
{'Data': {'MatchList': [{'FaceItems': [{'Confidence': 85.15245, 'DbName': 'default', 'EntityId': 'liuyifei', 'FaceId': '150447260', 'Score': 0.814702570438385}, {'Confidence': 84.88723, 'DbName': 'default', 'EntityId': 'liuyifei', 'FaceId': '150447272', 'Score': 0.8113926649093628}, {'Confidence': 7.232084, 'DbName': 'default', 'EntityId': 'linfeng', 'FaceId': '150443939', 'Score': 0.041851237416267395}, {'Confidence': 4.7650957, 'DbName': 'default', 'EntityId': 'Pakho', 'FaceId': '150437504', 'Score': 0.027575060725212097}, {'Confidence': 0.0, 'DbName': 'default', 'EntityId': 'Zillion', 'FaceId': '156036363', 'Score': -0.005117176100611687}], 'Location': {'Height': 162, 'Width': 120, 'X': 220, 'Y': 205}, 'QualitieScore': 99.81394}]}, 'RequestId': '13B42F67-CDAF-5DEF-A3A4-B2ECFCB84679'}
The max score = 0.81

比对失败的数据则如下所示:


orangepi@orangepizero2:~/smarthouse$ python3.10 face_test.py
{'Data': {'MatchList': [{'FaceItems': [{'Confidence': 14.181928, 'DbName': 'default', 'EntityId': 'linfeng', 'FaceId': '150443939', 'Score': 0.08206918835639954}, {'Confidence': 9.166144, 'DbName': 'default', 'EntityId': 'linfeng', 'FaceId': '150443926', 'Score': 0.0530434250831604}, {'Confidence': 7.3621774, 'DbName': 'default', 'EntityId': 'liuyifei', 'FaceId': '150447272', 'Score': 0.042604073882102966}, {'Confidence': 4.4048343, 'DbName': 'default', 'EntityId': 'Pakho', 'FaceId': '150435069', 'Score': 0.02549027092754841}, {'Confidence': 3.6446795, 'DbName': 'default', 'EntityId': 'Pakho', 'FaceId': '150437504', 'Score': 0.021091341972351074}], 'Location': {'Height': 200, 'Width': 157, 'X': 97, 'Y': 134}, 'QualitieScore': 98.50028}, {'FaceItems': [{'Confidence': 5.9368124, 'DbName': 'default', 'EntityId': 'Zillion', 'FaceId': '156036363', 'Score': 0.03435565158724785}, {'Confidence': 4.0936313, 'DbName': 'default', 'EntityId': 'Pakho', 'FaceId': '150435069', 'Score': 0.023689374327659607}, {'Confidence': 2.6310804, 'DbName': 'default', 'EntityId': 'linfeng', 'FaceId': '150443939', 'Score': 0.015225759707391262}, {'Confidence': 2.4909613, 'DbName': 'default', 'EntityId': 'liuyifei', 'FaceId': '150447260', 'Score': 0.01441490650177002}, {'Confidence': 1.2927439, 'DbName': 'default', 'EntityId': 'linfeng', 'FaceId': '150443926', 'Score': 0.007480960339307785}], 'Location': {'Height': 119, 'Width': 135, 'X': 369, 'Y': 531}, 'QualitieScore': 51.177025}]}, 'RequestId': '62CA237A-CC70-5486-9909-22108C853CD1'}
The max score = 0.08

因此,就可以利用获取的最大score的值判断是否大于0.6来判断是否比对成功。

返回数据的说明:

Data:这是一个对象,其中包含了匹配列表的信息。
MatchList:这是一个数组,其中包含了匹配的结果。每个元素都是一个对象,代表一个匹配项。
FaceItems:这是一个数组,其中包含了匹配项中所有人脸的信息。每个元素都是一个对象,包含了一些关于该人脸的信息,如自信度(Confidence)、数据库名(DbName)、实体ID(EntityId)、面部ID(FaceId)和分数(Score)。
Location:这是一个对象,包含了人脸在原始图像中的位置信息,包括宽度(Width)、高度(Height)、左上角的x坐标(X)和y坐标(Y)。
QualitieScore:这是一个浮点数,表示了整个匹配过程的质量得分。

C语言调用阿里云人脸识别接口

face.c
#include <Python.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>void face_Init(void)
{Py_Initialize();PyObject *sys = PyImport_ImportModule("sys");PyObject *path = PyObject_GetAttrString(sys, "path");PyList_Append(path, PyUnicode_FromString("."));
}void face_Finalize(void)
{Py_Finalize();
}double alicloud_Search_Face(void)
{PyObject *pModule = PyImport_ImportModule("face");if (!pModule){PyErr_Print();printf("Error: failed to load face.py\n");goto FAILED_MODULE;}PyObject *pFunc = PyObject_GetAttrString(pModule, "alicloud_Search_Face");if (!pFunc){PyErr_Print();printf("Error: failed to load alicloud_Search_Face\n");goto FAILED_FUNC;}PyObject *pValue = PyObject_CallObject(pFunc, NULL);if (!pValue){PyErr_Print();printf("Error: function call failed\n");goto FAILED_VALUE;}double result = 0.00;if(!PyArg_Parse(pValue, "d", &result)){PyErr_Print();printf("Error: parse failed\n");goto FAILED_RESULT;}printf("result = %lf\n", result);FAILED_RESULT:Py_DECREF(pValue);
FAILED_VALUE:Py_DECREF(pFunc);
FAILED_FUNC:Py_DECREF(pModule);
FAILED_MODULE:return result;
}
main.c
#include <stdio.h>
#include <stdlib.h>
#include "face.h"int main()
{double face = 0.00;face_Init();face  = alicloud_Search_Face();printf("face = %f\n", face);face_Finalize();return 0;
}
face.py
# -*- coding: utf-8 -*-
# 引入依赖包
# pip install alibabacloud_facebody20191230import os
import io
from urllib.request import urlopen
from alibabacloud_facebody20191230.client import Client
from alibabacloud_facebody20191230.models import SearchFaceAdvanceRequest
from alibabacloud_tea_openapi.models import Config
from alibabacloud_tea_util.models import RuntimeOptionsconfig = Config(# 创建AccessKey ID和AccessKey Secret,请参考https://help.aliyun.com/document_detail/175144.html。# 如果您用的是RAM用户的AccessKey,还需要为RAM用户授予权限AliyunVIAPIFullAccess,请参考https://help.aliyun.com/document_detail/145025.html。# 从环境变量读取配置的AccessKey ID和AccessKey Secret。运行代码示例前必须先配置环境变量。access_key_id=os.environ.get('ALIBABA_CLOUD_ACCESS_KEY_ID'),access_key_secret=os.environ.get('ALIBABA_CLOUD_ACCESS_KEY_SECRET'),# 访问的域名endpoint='facebody.cn-shanghai.aliyuncs.com',# 访问的域名对应的regionregion_id='cn-shanghai'
)search_face_request = SearchFaceAdvanceRequest()
#场景一:文件在本地
def alicloud_Search_Face():stream0 = open(r'/home/orangepi/smarthouse/liuyifei_test.jpg', 'rb')search_face_request.image_url_object = stream0#场景二:使用任意可访问的url#url = 'https://viapi-test-bj.oss-cn-beijing.aliyuncs.com/viapi-3.0domepic/facebody/SearchFace1.png'#img = urlopen(url).read()#search_face_request.image_url_object = io.BytesIO(img)search_face_request.db_name = 'default' #数据库默认名字db_name/DbName : defaultsearch_face_request.limit = 5runtime_option = RuntimeOptions()try:# 初始化Clientclient = Client(config)response = client.search_face_advance(search_face_request, runtime_option)# 获取整体结果print(response.body)if 'MatchList' in response.body.to_map()['Data']:message = response.body.to_map()['Data']['MatchList']scores = []for match in message:for item in match.get('FaceItems', []):score = item.get('Score')if score is not None:  # 确保分数不为 Nonescores.append(score)if scores:  # 确保至少有一个分数max_score = max(scores)value = round(max_score, 2)print(f"The max score = {value}")return valueelse:print("No scores found.")else:print("No matches found.")except Exception as error:# 获取整体报错信息print(error)# 获取单个字段print(error.code)# tips: 可通过error.__dict__查看属性名称if __name__ == "__main__":alicloud_Search_Face()#关闭流
#stream0.close()

智能家居项目的软件实现

软件框架
语音监听线程
消息队列
网络监听线程
火灾监测线程
消息接收处理线程
GPIO引脚状态配置
OLED对指令状态的实时显示
语音播报线程
人脸识别
开关卧室灯
开关客厅灯
开关风扇
开门

整个项目开启4个监听线程, 分别是:

  1. 语音监听线程:用于监听语音指令, 当有语音指令过来后, 通过消息队列的方式给消息处理线程发 送指令。
  2. 网络监听线程:用于监听网络指令,当有网络指令过来后, 通过消息队列的方式给消息处理线程发 送指令。
  3. 火灾检测线程:当存在煤气泄漏或者火灾闲情时, 发送警报指令给消息处理线程。
  4. 消息监听线程: 用于处理以上3个线程发过来的指令,并根据指令要求配置GPIO引脚状态,OLED 屏显示、语音播报,还有人脸识别开门。

上述四个线程采用统一个对外接口接口,同时添加到监听链表中。

代码实现

之前讲过智能分类的项目,因为会用到语音模块、OLED显示、网络模块、这些代码都可以从智能分类的 项目中直接拷贝过来使用,另外添加之前准备好的人脸识别的代码 。 另外根据软件框架。再定义gdevice.h和control.h的头文件。

control.h
#ifndef _CONTROL_H_
#define _CONTROL_H_#include <stdlib.h>
#include <stdio.h>struct control
{char control_name[128]; //监听模块名称 int (*init)(void); //初始化函数void (*final)(void);//结束释放函数void *(*get)(void *arg);//监听函数,如语音监听void *(*set)(void *arg); //设置函数,如语音播报struct control *next;
};struct control *add_control_to_ctrl_list(struct control *phead, struct control *device);#endif
control.c
#include "control.h"struct control *add_control_to_ctrl_list(struct control *phead, struct control *ctrl_interface)
{
//    struct control *p = phead;if (phead == NULL){phead = ctrl_interface;printf("%s|%s|%d:\n", __FILE__, __FUNCTION__, __LINE__);return phead;}else{ctrl_interface->next = phead;phead = ctrl_interface;printf("%s|%s|%d:\n", __FILE__, __FUNCTION__, __LINE__);return phead;}return phead;
}
device.h
#ifndef _DEVICE_H_
#define _DEVICE_H_#include <stdio.h>
#include <stdlib.h>
#include <wiringPi.h>struct gdevice
{char dev_name[128]; //设备名称int key; //key值,用于匹配控制指令的值int gpio_pin; //控制的gpio引脚int gpio_mode; //输入输出模式int gpio_status; //高低电平状态int check_face_status; //是否进行人脸检测状态int voice_set_status; //是否语音语音播报struct gdevice *next;
};struct gdevice *add_device_to_gdevice_list(struct gdevice *phead, struct gdevice *device);struct gdevice *find_gdevice_by_key(struct gdevice *pdev, unsigned char key);int set_gpio_gdevice_status(struct gdevice *pdev);#endif
device.c
#include "device.h"struct gdevice *add_device_to_gdevice_list(struct gdevice *phead, struct gdevice *device)
{struct gdevice *p = phead;printf("%s|%s|%d:%p\n", __FILE__, __FUNCTION__, __LINE__, p);if(p == NULL){phead = device;printf("%s|%s|%d:\n", __FILE__, __FUNCTION__, __LINE__);return phead;}else{device->next = phead;phead = device;printf("%s|%s|%d:\n", __FILE__, __FUNCTION__, __LINE__);return phead;}return phead;
}struct gdevice *find_gdevice_by_key(struct gdevice *pdev, unsigned char key)
{struct gdevice *p = pdev;printf("%s|%s|%d:\n", __FILE__, __FUNCTION__, __LINE__);if(p == NULL){printf("%s|%s|%d:\n", __FILE__, __FUNCTION__, __LINE__);return NULL;}while(p != NULL){if(p->key == key){printf("%s|%s|%d:\n", __FILE__, __FUNCTION__, __LINE__);return p;}p = p->next;if(p == NULL){p = pdev;}}return NULL;
}#if 0struct gdevice
{char dev_name[128]; //设备名称int key; //key值,用于匹配控制指令的值int gpio_pin; //控制的gpio引脚int gpio_mode; //输入输出模式int gpio_status; //高低电平状态int check_face_status; //是否进行人脸检测状态int voice_set_status; //是否语音语音播报struct gdevice *next;
};#endifint set_gpio_gdevice_status(struct gdevice *pdev)
{
//    printf("\033[41;30m%s|%s|%d:pdev->gpio_status = %d\033[0m\n", __FILE__, __FUNCTION__, __LINE__, pdev->gpio_status);if (pdev != NULL){printf("%s|%s|%d:pdev->gpio_status = %d\n", __FILE__, __FUNCTION__, __LINE__, pdev->gpio_status);if (pdev->gpio_pin != -1){pinMode(pdev->gpio_pin, pdev->gpio_mode);printf("\033[45;30m%s|%s|%d:gpio_pin = %d, gpio_mode = %d\033[0m\n", __FILE__, __FUNCTION__, __LINE__, pdev->gpio_pin, pdev->gpio_mode);}if(pdev->gpio_status != -1){digitalWrite(pdev->gpio_pin, pdev->gpio_status);printf("%s|%s|%d:pdev->gpio_status = %d\n", __FILE__, __FUNCTION__, __LINE__, pdev->gpio_status);}return 0;}else{
//        printf("%s|%s|%d: \033[41;36m something here \033[0m\n", __FILE__, __FUNCTION__, __LINE__);return -1;}
}
剩余工程代码放在Github上

因为 .c 文件已经多达17个了,虽然是CV但是也很麻烦,干脆直接把整个工程放在 Github 上了。

https://github.com/Zillion6/orangePi_smart_house.git

git clone https://github.com/Zillion6/orangePi_smart_house.git

内置有两个版本的智能家居项目,一个是仅用结构体配置链表,另一个则是用 .inih 轻量级的C库构成链表。

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

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

相关文章

SkyWalking之P0业务场景输出调用链路应用

延伸扩展&#xff1a;XX业务场景 路由标签打标、传播、检索 链路标签染色与传播 SW: SkyWalking的简写 用户请求携带HTTP头信息X-sw8-correlation “X-sw8-correlation: key1value1,key2value2,key3value3” 网关侧读取解析HTTP头信息X-sw8-correlation&#xff0c;然后通过SW…

【JavaScript】【分享】关于this

前言 本文旨在总结实践中关于this关键字的应用经验&#xff0c;期待读者在评论区留言指正与补充&#xff0c;以促进共同学习与进步。 方向 宿主环境为浏览器&#xff08;网页&#xff09;&#xff0c;创建一个html文件用浏览器打开即可。如下&#xff1a; <!DOCTYPE htm…

探索未来制造,BFT Robotics引领潮流

“买机器人&#xff0c;上BFT” 在这个快速变化的时代&#xff0c;创新和效率是企业发展的关键。BFT Robotics&#xff0c;作为您值得信赖的合作伙伴&#xff0c;专注于为您提供一站式的机器人采购和自动化解决方案。 产品系列&#xff1a; 协作机器人&#xff1a;安全、灵活、…

油封包装的关键注意事项

油封是各种机械系统中不可或缺的部件&#xff0c;防止泄漏和污染。通过正确的包装措施来确保其质量对于其性能和寿命至关重要。本文提供了有效油封包装所需的综合注意事项。 1、选择合适的包装材料 选择合适的包装材料是第一步。材料应能够保护油封免受物理损坏、环境污染和化…

如何进行socket 长连接稳定性测试

进行Socket长连接稳定性测试时&#xff0c;需要关注多个方面以确保连接的稳定性和可靠性。以下是一些关键的测试步骤和考虑因素&#xff1a; 确保连接建立和断开正常&#xff1a; 验证Socket连接能否正确建立&#xff0c;包括处理任何潜在的连接超时或认证问题。 检查断开连接…

Linux C语言:指针和指针变量

一、指针的作用 使程序简洁、紧凑、高效有效地表示复杂的数据结构动态分配内存能直接访问硬件能够方便的处理字符串得到多于一个的函数返回值 二、内存、地址和变量 1、内存地址 2、变量和地址 1&#xff09;变量用来在程序中保存数据 比如: int k 58; //声明一个int变…

基于JSP技术的社区疫情防控管理信息系统

你好呀&#xff0c;我是计算机学长猫哥&#xff01;如果有相关需求&#xff0c;文末可以找到我的联系方式。 开发语言&#xff1a;JSP 数据库&#xff1a;MySQL 技术&#xff1a;JSPJavaBeans 工具&#xff1a;MyEclipse、Tomcat、Navicat 系统展示 首页 用户注册与登录界…

2024-5-7 石群电路-26

2024-6-7&#xff0c;星期五&#xff0c;15:00&#xff0c;天气&#xff1a;阴转小雨&#xff0c;心情&#xff1a;晴。今天虽然是阴雨天&#xff0c;但是心情不能差哦&#xff0c;离答辩越来越近了&#xff0c;今天学完习好好准备准备ppt&#xff0c;加油学习喽~ 今日观看了石…

Faster R-CNN:端到端的目标检测网络

本文回顾了由微软研究人员开发的 Faster R-CNN 模型。Faster R-CNN 是一种用于物体检测的深度卷积网络&#xff0c;在用户看来&#xff0c;它是一个单一的、端到端的统一网络。该网络可以准确快速地预测不同物体的位置。为了真正理解 Faster R-CNN&#xff0c;我们还必须快速概…

《接口自动化测试框架》代码片段 - 接口请求封装

抛砖引玉 requests模块是Python中发送HTTP请求的强大工具&#xff0c;它以其直观易用的API和人性化的设计赢得了广泛赞誉。 这个模块不仅提供了丰富的功能来定制HTTP请求&#xff0c;如设置请求头、传递URL参数等&#xff0c;还能够自动处理许多底层细节&#xff0c;如Cookie管…

重庆公司记账代理,打造专业财务管理解决方案的领先企业

重庆公司记账代理&#xff0c;作为专业的财务管理服务提供商&#xff0c;我们的目标是为公司的经营管理和决策提供科学、准确的财务数据支持&#xff0c;我们通过长期的专业经验和对市场的深入理解&#xff0c;为您提供一站式的记账服务和财务咨询。 专业团队 我们拥有一支由经…

如何移动 hiberfil.sys 文件来减少C盘空间

如何移动 hiberfil.sys 文件来减少C盘空间 hiberfil.sys 文件是什么&#xff1f; hiberfil.sys 文件是 Windows 系统在开启休眠功能后自动生成的内存镜像文件。这个文件保存了系统休眠时的内存内容&#xff0c;以便我们唤醒电脑之后可以快速恢复到休眠前的状态。这个文件通常…

基于JSP技术的师生交流平台

你好呀&#xff0c;我是计算机学长猫哥&#xff01;如果有相关需求&#xff0c;文末可以找到我的联系方式。 开发语言&#xff1a;Java 数据库&#xff1a;MySQL 技术&#xff1a;JSP技术 工具&#xff1a;Myeclipse、B/S架构 系统展示 首页 管理员登录界面 学生信息管理…

Qwen2开源发布,各方位全面升级!

今天&#xff0c;通义千问团队带来了Qwen2系列模型&#xff0c;Qwen2系列模型是Qwen1.5系列模型的重大升级。包括了&#xff1a; 5个尺⼨的预训练和指令微调模型, 包括Qwen2-0.5B、Qwen2-1.5B、Qwen2-7B、Qwen2-57B-A14B以及Qwen2-72B&#xff1b; 在中⽂英语的基础上&#xf…

Thermal-BST自动化工具在Flotherm建模中的应用与优势

引言 随着科技的不断发展&#xff0c;电子领域的需求也越来越广泛和多样化。然而&#xff0c;PCB板及其上的器件建模问题一直是电子工程师在设计过程中面临的重要挑战之一。软件中原有的PCB建模工具&#xff0c;转换出来的模型复杂&#xff0c;影响后期的网格划分&#xff0c;…

选择云桌面必看:影响云桌面性能的一些重要因素

当云桌面发展的如火如荼并被越来越多的人所追捧的时候&#xff0c;偶然在网上看到有人评论说云桌面太坑&#xff0c;说好的免维护和节省成本好像与想象中的还是不一样。云桌面真的太坑&#xff1f;那是因为你没做好这几点。 选择云桌面你该关注哪些指标&#xff1f; 其实从云…

查询SQL03:大的国家

问题描述 如果一个国家满足下述两个条件之一&#xff0c;则认为该国是 大国 &#xff1a; 面积至少为 300 万平方公里&#xff08;即&#xff0c;3000000 km2&#xff09;&#xff0c;或者 人口至少为 2500 万&#xff08;即 25000000&#xff09; 编写解决方案找出 大国 的国…

在一个繁忙的都市中,每天早上,一位咖啡店的店员都会用微笑和问候迎接每一位顾客。她的友善不仅让顾客感到温暖,也营造了一个愉快的消费环境。

在这个多元纷呈的世界里&#xff0c;我们每个人都在寻求着一种特殊的温度&#xff0c;那就是认可度。它如同冬日里的一缕阳光&#xff0c;温暖着我们的心灵&#xff1b;它似夏夜里的一阵清风&#xff0c;吹散了我们心头的烦忧。然而&#xff0c;认可度并非一成不变&#xff0c;…

亚马逊测评自养号技术全攻略:一站式解决方案

在跨境电商这行&#xff0c;产品测评可是个大问题。如果你的商品销量少&#xff0c;评价也不多&#xff0c;那买家就很难注意到你的产品&#xff0c;更别提下单购买了。毕竟&#xff0c;大家都喜欢跟风买那些已经有很多人好评的产品&#xff0c;而不是冒险尝试一个全新的。 我们…

替代UCC28250抗干扰支持预偏置启动|支持半桥全桥|增强型驱动器

1. 产品特性(替代UCC28250) ➢ 支持预偏置启动 ➢ 死区时间可调的同步整流输出 ➢ 支持电压模控制和电流模控制 ➢ 支持源边控制和副边控制 ➢ 5V&#xff0c;精度3%电压输出 ➢ 软启动和打嗝恢复时间可调 ➢ 同步整流软启动阈值和时间可调 ➢ 斜坡补偿信号斜率可调 ➢…