智能产品综合开发 - 智能家居(智能语音机器人)

1 实训选题目的

        本次实训选择的题目是“智能家居”,旨在为人们提供高效,便利的居住环境,摆脱以往必须手动操作的麻烦,通过语音就能达到控制相关设备的目的,智能语音对话:通过语音和机器人对话,询问想要知道的相关信息,节省自己手动搜索的时通过本项目,我们将能够将所学的人工智能专业知识进行综合应用,包括但不限于Linux操作系统、Python程序设计、人工智能数据处理、机器学习技术及应用、计算机视觉技术、响应式网页设计、创新创业教育、数据库基础、软件工程和人工智能产品开发等。本项目要求小组成员能够灵活运用这些知识,开发出具有一定创新性和实用价值的人工智能产品,以解决实际生活中的温湿度监测需求,提高生活质量和环境舒适度。

2 实训任务目的

        通过本次“智能家居”的实训任务,目的是使团队成员掌握树莓派硬件的基本组成,并能够完成树莓派硬件的搭建、新版64位桌面版系统的烧录安装以及SSH、VNC、用户密码等基础配置。这些步骤将为团队成员提供远程控制树莓派的能力,为后续的温湿度检测系统开发打下坚实的基础。此外,本任务还将帮助团队成员熟悉树莓派的操作系统环境,确保在后续的开发过程中能够有效地进行编程和调试,实现智能家居的各项功能,包括数据采集、处理、存储和可视化展示。通过本实训,学生将学会如何将理论知识应用于实际问题,提高解决实际问题的能力,并增强团队合作和项目管理的技能。

3 实训介绍

(一)必备功能说明:

1.树莓派主板作为系统的控制中心
树莓派负责接收来自传感器和麦克风的输入信号,处理后输出合成语音、报警信号或设备控制指令,是整个智能家居系统的核心。

2.温湿度检测功能
温湿度传感器实时检测环境的温度和湿度,并通过数字接口传输数据。树莓派接收到数据后处理并分析,为后续设备联动提供支持。

3.天气播报功能
用户通过语音指令查询天气(如“今天的天气怎么样”)。树莓派调用高德天气API获取实时天气信息,并通过百度AI语音合成API生成语音播报内容,例如:“今天晴,气温25到30摄氏度,空气质量优良。”

4.音乐播放功能
用户可通过语音指令(如“播放音乐”或“播放指定歌曲”)控制音乐播放。树莓派解析语音指令后,从本地音乐库或在线音乐平台匹配对应的歌曲,通过扬声器输出音频。

5.语音聊天功能
系统通过麦克风接收用户语音输入,将其转换为文本后传递至百度聊天AI接口,解析用户输入并生成相应回复。回复内容通过百度AI语音合成模块转化为语音播报,实现自然人机对话。

6.拍照功能
用户通过语音指令(如“拍照”)触发系统操作,树莓派控制摄像头进行拍照,并将捕捉到的图像保存至本地或上传至指定设备。

7.智能灯光控制功能
用户通过语音指令控制灯光(如“开灯”或“关灯”)。树莓派通过GPIO接口发送信号控制智能灯的开关,实现灯光自动化管理。

8.湿度播报功能
系统根据温湿度传感器数据实时播报湿度信息。树莓派将传感器数据处理后,通过百度AI语音合成模块生成语音播报内容(如“当前湿度为60%,请注意通风”)。

        通过本次实训,我们的目标是开发一个功能齐全、用户友好且具有一定智能的智能家居系统,以提高用户对环境舒适度的控制能力,并为环境监测提供科学依据。

4 实训组件

  1. 树莓派主板1块
  2. 树莓派电源适配器1个
  3. 40P软排线1根
  4. 温湿度传感器1个
  5. 面包板1个
  6. 跳线若干
  7. 电阻若干(用于温湿度传感器电流限制)
  8. 杜邦线若干(用于连接面包板上的组件)
  9. 显示器1个
  10. SD卡1张
  11. 网络线1根
  12. 外壳和保护套1个
  13. 麦克风
  14. 扬声器

5 实训原理

以下是智能家居的核心工作原理:

  1. 树莓派主板作为系统的控制中心
    树莓派负责处理来自传感器的输入信号和麦克风的语音信号,并输出合成语音、报警信号或设备控制指令,构建智能家居系统的核心逻辑。
  2. 温湿度传感器检测功能
    温湿度传感器用于实时检测周围环境的温度和湿度,通过数字接口将数据发送给树莓派,供后续计算和设备联动使用。
  3. 天气播报功能
    用户通过语音指令(如“今天天气怎么样”)查询天气,树莓派调用高德地图API获取实时天气数据,包括气温、湿度、风速等信息。随后,系统利用百度AI语音合成API将天气信息生成自然流畅的语音,通过扬声器向用户播报。例如:“今天晴,气温25到30摄氏度,空气质量良好。”
  4. 音乐播放功能
    用户通过麦克风输入语音指令(如“播放音乐”或“播放周杰伦的歌”),树莓派调用百度AI语音识别API将语音转换为文本,并解析用户意图。接着,系统匹配本地或在线音乐库的音乐资源,通过扬声器播放对应歌曲。
  5. 语音聊天功能
    用户通过麦克风输入语音内容,树莓派调用百度AI语音识别API将语音转换为文本,并通过百度聊天AI接口生成相应的回复文本。随后,系统调用百度AI语音合成API将回复内容转换为语音,通过扬声器实现自然语音交互。
  6. 拍照功能
    用户通过语音指令(如“拍照”)触发拍照功能,树莓派控制摄像头拍摄图像,并将拍摄的图片保存至本地存储或上传至用户指定设备。
  7. 灯光控制功能
    用户通过语音指令(如“开灯”或“关灯”),树莓派解析指令后,通过GPIO接口控制灯光设备的开关状态,实现灯光的智能化管理。
  8. 湿度播报功能
    系统根据温湿度传感器的数据实时分析环境湿度,并调用百度AI语音合成API将湿度信息生成语音播报内容,例如:“当前湿度为60%,建议开启加湿器。”

 6 最终代码展示

dht_speak.py

import RPi.GPIO as GPIO
import time
from aip import  AipSpeech
import my_baidu_voice as myVoice
import requests
import os
import sysdef init():GPIO.setmode(GPIO.BOARD)time.sleep(1)def get_readings(ch):data=[]j = 0b = Trueout =chdataArr =[]GPIO.setup(out, GPIO.OUT)GPIO.output(out,GPIO.HIGH)GPIO.output(out,GPIO.LOW)time.sleep(0.019)print('test2')GPIO.output(out,GPIO.HIGH)GPIO.setup(out,GPIO.IN,pull_up_down=GPIO.PUD_UP)for i in range(0,10000):info = GPIO.input(11)dataArr.append(info)print(dataArr)signArr = []countArr = []nowItem = 0nextItem = 0dataArrlen = len(dataArr)count = 0for i in range(dataArrlen):nextIndex = i+1if i < dataArrlen and nextIndex < dataArrlen :nowItem = dataArr[i]nextItem = dataArr[i+1]if nowItem == nextItem:count += 1else:if nowItem == 1:signArr.append(nowItem)countArr.append(count)count =0print(signArr)print(countArr)for index in range(len(countArr)):item = countArr[index]if index >0:if item < 50:data.append(0)else:data.append(1)index += 1#print(data)return datadef data_check(data):#print(data)humidity_bit = data[0:8]humidity_point_bit = data[8:16]temperature_bit = data[16:24]temperature_point_bit = data[24:32]check_bit = data[32:40]humidity = 0humidity_point = 0temperature = 0temperature_point = 0check = 0for i in range(8):humidity += humidity_bit[i] * 2 ** (7-i)humidity_point += humidity_point_bit[i] * 2 ** (7-i)temperature += temperature_bit[i] * 2 ** (7-i)temperature_point += temperature_point_bit[i] * 2 **(7-i)check += check_bit[i]* 2 ** (7-i)return [humidity , humidity_point , temperature , temperature_point,check]def loopDHT():init()while True:data = get_readings(11)humidity,humidity_point,temperature,temperature_point,check = data_check(data)sumData = humidity + humidity_point + temperature + temperature_pointif check == sumData:T_value = str(temperature) + "." + str(temperature_point)H_value = str(humidity) + "." + str(humidity_point)print("temperature:",T_value,"*C,  humidity:", H_value,"%")string = "今天是2023年10月29日,我是Bowen,为你播报当前的温湿度。当前温度是:" + T_value + "度,  湿度是百分之:" + H_value + "。下课的时候,记得还原多媒体教室,鼠标,键盘,显示器,显示器连接线要插好"print(string)myVoice.reply(string)breakif __name__ == "__main__":init()while True:data = get_readings(11)humidity,humidity_point,temperature,temperature_point,check = data_check(data)sumData = humidity + humidity_point + temperature + temperature_pointif check == sumData:T_value = str(temperature) + "." + str(temperature_point)H_value = str(humidity) + "." + str(humidity_point)print("temperature:",T_value,"*C,  humidity:", H_value,"%")string = "今天是2023年10月29日,我是Bowen,为你播报当前的温湿度。当前温度是:" + T_value + "度,  湿度是百分之:" + H_value + "。下课的时候,记得还原多媒体教室,鼠标,键盘,显示器,显示器连接线要插好"print(string)myVoice.reply(string)break

light.py:

import RPi.GPIO as GPIO
import timeGPIO.setmode(GPIO.BOARD)
GPIO.setwarnings(False)
GPIO.setup(11,GPIO.OUT)# TEST
def ligtNo(pin):GPIO.output(pin,1)def ligtOFF(pin):GPIO.output(pin,0)if __name__=="__main__":ligtOFF(11)

musicPlayer.py:

import os,sys,time
import requests,json
import my_baidu_voice as myVoicedef playmusic():myVoice.reply('主人,您想听哪首歌曲')myVoice.toPCM()song_name=myVoice.getVoice()[:-1]url = 'http://music.163.com/api/search/get/web?csrf_token=hlpretag=&hlposttag=&s='+song_name+'&type=1&offset=0&total=true&limit=10' #%song_nameprint(url)res = requests.get(url)music_json = json.loads(res.text)if(music_json["result"]["songCount"]!=0):songid = music_json["result"]["songs"][0]["id"]#url ='http://music.163.com/song/media/outer/url?id=%s.mp3'%songidmyVoice.reply('马上播放歌曲%s'%song_name)os.system('mplayer %s'%url)else:print("没有找到你想听的歌曲,将为您播放本地音乐")localmusic()if __name__ =="__main__":
playmusic()

my_baidu_voice.py:

import os,sys,time
from aip import AipSpeech# ******baidu voice
APP_ID = "41177555"
API_KEY = "TgtSMBTeatDnfqP88f1eIrd0"
SECRET_KEY = "72lRjlCFQ9rWzLR7WDL9Qz2MhEjpI2CM"
client = AipSpeech(APP_ID,API_KEY,SECRET_KEY)def toPCM():print('toPCM--------')# record 3s voice 16Kos.system('arecord -d 3 -r 16000 -c 1 -t wav -f S16_LE audio.wav')# change wav to pcmos.system('ffmpeg -y -i audio.wav -acodec pcm_s16le -f s16le -ac 1 -ar 16000 audio.pcm')# get local voice file
def get_file_content(filePath):with open(filePath,'rb') as fp:return fp.read()def reply(body):result = client.synthesis(body,'zh','1',{'vol':10,'spd':5})if not isinstance(result,dict):with open('replay.mp3','wb') as f:f.write(result)os.system('mplayer replay.mp3')# get voice to txt
def getVoice():if os.path.exists('audio.pcm'):# upload audio.pcmresults =client.asr(get_file_content('audio.pcm'),'pcm',16000,{'dev_pid':1537,})voice = results['result'][0]print(voice)return voice

myCamera.py:

import os,sys,time
import cv2
import requests,json
import my_baidu_voice as myVoicedef camera():count_down =3#path = os.path.expanduser('~/pictures')#curtime = time.strftime('%Y-%m-%d-%H:%M:%S',time.localtime(time.time()))#file = os.path.join(path,"%s.jpg"% curtime)file = "nowPic.jpg"say = "收到,%d 秒后启动拍照"%count_downmyVoice.reply(say)txt = 'raspistill '+'-o '+file +' -t '+str(count_down * 1000) + ' -w 640 -h 480'os.system(txt)nowPic= cv2.imread("nowPic.jpg")cv2.imshow('nowPic',nowPic)k = cv2.waitKey(0)if k==27:cv2.destroyAllWindows()if __name__=="__main__":camera()

robotchat.py:

import os,sys,time
import requests,json
import my_baidu_voice as myVoicedef robotchat():myVoice.reply('主人,您想聊点什么...')while True: myVoice.toPCM()msg = myVoice.getVoice()[:-1]url = 'http://api.qingyunke.com/api.php?key=free&appid=0&msg='+msghtml=requests.get(url)content = html.json()["content"].replace('{br}','')myVoice.reply(content)if(msg == '不聊了'):breakif __name__ =="__main__":robotchat()

smart-home.py:

import os,sys,time
import speech_recognition as sr
import my_baidu_voice as myVoice
import musicPlayer as myMusicPlayer
import voice_weather_simple as myWeather
import robotchat as myRobotChat
import myCamera as myCamera
import dht_speak as myDht
import light as mylightdef recognize(rate=16000,lang="en-US"):r= sr.Recognizer()mic = sr.Microphone(sample_rate=rate)while True:with mic as source:print(" waiting for calling")audio = r.listen(source)keyword = r.recognize_sphinx(audio,language=lang)print(keyword)if(keyword == "小溪"):myVoice.reply("你好,我在...你要我做什么,请说")xiaoxi()time.sleep(0.3)def xiaoxi():myVoice.toPCM()command = myVoice.getVoice()print('---command',command)if command.find('天气') !=-1:myWeather.getweather()if command.find('音乐') !=-1:myMusicPlayer.playmusic()if command.find('聊天') !=-1:myRobotChat.robotchat()if command.find('拍照') !=-1:myCamera.camera()if command.find('开灯') !=-1:mylight.ligtNo(11)myVoice.reply('ok')if command.find('关灯') !=-1:mylight.ligtOFF(11)myVoice.reply('ok ')if command.find('温湿度') !=-1:myDht.loopDHT()elif command ==u'再见':myVoice.reply('再见,时刻等待你的召唤')if __name__ == "__main__":recognize()#myCamera.camera()

smart-home2.py:

import requests,json
import my_baidu_voice as myVoicedef getweather():myVoice.reply('主人,你是想查今天的天气,还是明天的天气,还是后天的天气?')myVoice.toPCM()reponseTime = myVoice.getVoice()if (reponseTime.find('今天') !=-1):url = 'https://restapi.amap.com/v3/weather/weatherInfo?city=500000&key=cceb4902d8051cab2943778e7fc3ba5f'response = requests.get(url)weather_dict = response.json()['lives'][0]print(weather_dict)weatherText = weather_dict['city']+weather_dict['weather']+ '今天,风向:'+weather_dict["winddirection"]+',风力:'+weather_dict["windpower"]+',温度:'+weather_dict["temperature_float"]+',湿度:'+weather_dict["humidity_float"]myVoice.reply(weatherText)if (reponseTime.find('明天') !=-1):url = 'https://restapi.amap.com/v3/weather/weatherInfo?city=500000&key=cceb4902d8051cab2943778e7fc3ba5f&extensions=all'response = requests.get(url)weather_dict = response.json()['forecasts'][0]casts_dict = weather_dict['casts'][1]weatherText = weather_dict['city'] +'明天,'+ casts_dict['date']+',' +casts_dict['dayweather']+ ',风向:' +casts_dict["daywind"]+',风力:'+casts_dict["daypower"]+',温度:'+casts_dict["daytemp"]+'.'myVoice.reply(weatherText)if (reponseTime.find('后天') !=-1):url = 'https://restapi.amap.com/v3/weather/weatherInfo?city=500000&key=cceb4902d8051cab2943778e7fc3ba5f&extensions=all'response = requests.get(url)weather_dict = response.json()['forecasts'][0]casts_dict = weather_dict['casts'][2]weatherText = weather_dict['city'] +'后天,'+ casts_dict['date']+',' +casts_dict['dayweather']+ ',风向:' +casts_dict["daywind"]+',风力:'+casts_dict["daypower"]+',温度:'+casts_dict["daytemp"]+'.'myVoice.reply(weatherText)if __name__ =="__main__":getweather()

7 参考文献

[1] 戴礼荣,张仕良.深度语音信号与信息处理:研究进展与展望 [J].数据采集与处理,2014,29(02):171-179.

[2] 林枫亭,罗艺,孔凡立,等.一种基于云平台的智能机器人语音 交互系统设计[J].电子测试,2018(Z1):40-42.

[3] 杨国庆,黄锐,李健,等.智能服务机器人语音交互的设计与实 现[J].科技视界,2020(09):129-131.

[4] 秦伟.基于语音的人机交互平台的设计与实现[D].武汉:华中 科技大学,2019.

[5] Shenzhen Aukey Smart Information Technology Co., Ltd.. "AI Voice Interaction Method, Device And System" in Patent Application Approval Process (USPTO 20200105268)[J]. Telecommunications Weekly, 2020.

[6] YAO D, KATIE S T. Bridging the gap in mobile interaction design for children with disabilities: Perspectives from a pediatric speech language pathologist[J]. International Journal of Child Computer Interaction, 2020:23-24.

[7] 杨加平.面向指控系统的嵌入式语音交互技术设计与实现[J]. 机械与电子,2015(04):72-74.

[8] 廖彬全,罗佩,马远佳.基于智能语音交互系统的翻译机器人[J]. 信息与电脑(理论版),2019,31(17):110-112.

[9] 陈鑫源.智能语音交互技术及其标准化[J].电声技术,2018, 42(05):78-80.

[10] 郝欧亚,吴璇,刘荣凯.智能语音识别技术的发展现状与应用 前景[J].电声技术,2020,44(03):24-26

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

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

相关文章

企业如何落地搭建商业智能BI系统

随着新一代信息化、数字化技术的应用&#xff0c;引发了新一轮的科技革命&#xff0c;现代化社会和数字化的联系越来越紧密&#xff0c;数据也变成继土地、劳动力、资本、技术之后的第五大生产要素&#xff0c;这一切都表明世界已经找准未来方向&#xff0c;前沿科技也与落地并…

docker搭建nginx

一. 直接启动nginx镜像 1. 下载nginx镜像 docker pull nginx 2. 运行镜像 docker run -p 8080:80 --name web -d nginx 3. 网址查看 xx.xx.xx.xx:8080 二. 挂在文件启动nginx镜像 1. 拷贝docker文件到本地 docker cp web:/etc/nginx/nginx.conf /root/data/config/nginx…

Java开发工程师最新面试题库系列——Java基础部分(附答案)

如果你有更好的想法请在评论区留下您的答案&#xff0c;一起交流讨论# 面向对象有哪些特征&#xff1f; 答&#xff1a;继承、封装、多态 JDK与JRE的区别是什么&#xff1f; 答&#xff1a;JDK是java开发时所需环境&#xff0c;它包含了Java开发时需要用到的API&#xff0c;JRE…

DICOM医学影像应用篇——窗宽窗位概念、原理及实现详解

目录 窗宽窗位调整&#xff08;Windowing&#xff09;在DICOM医学影像中的应用 窗宽窗位的基本概念 窗宽&#xff08;Window Width, WW&#xff09; 窗位&#xff08;Window Level, WL&#xff09; 窗宽窗位调整的基本原理 映射逻辑 数学公式 窗宽窗位调整的C实现 代码…

尚硅谷学习笔记——Java设计模式(一)设计模式七大原则

一、介绍 在软件工程中&#xff0c;设计模式&#xff08;design pattern&#xff09;是对软件设计中普遍存在&#xff08;反复出现&#xff09;的各种问题&#xff0c;提出的解决方案。我们希望我们的软件能够实现复用性、高稳定性、扩展性、维护性、代码重用性&#xff0c;所以…

网络原理->DNS协议和NAT协议解

前言 大家好我是小帅&#xff0c;今天我们来了解应用层的DNS协议和NAT技术 个人主页&#xff1a;再无B&#xff5e;U&#xff5e;G 文章目录 1.重要应⽤层协议DNS(Domain Name System)1.1 DNS背景 2. NAT技术3. 总结 1.重要应⽤层协议DNS(Domain Name System) DNS是⼀整套从域…

虚拟机ubuntu-20.04.6-live-server搭建OpenStack:Victoria(一:工具、环境准备-controller node)

文章目录 一、软件准备A. 下载ubuntu-live-server&#xff1a;B. 下载并安装Xshell&#xff1a; 二、安装Ubuntu&#xff08;控制节点主机&#xff09;A. 开启服务B. 先预安装C. 虚拟机设置D. 安装系统 三、连接XshellA. 配置网络接口B. 连接 Xshell 一、软件准备 温馨提示&…

面试——HashMap的并发问题

HashMap是线程不安全&#xff0c;在并发使用HashMap时会发生下列问题&#xff1a; 数据丢失 HashMap底层数据结构为数组&#xff0c;之后如果发送了哈希冲突&#xff0c;那么数据会以列表的形式保存在这个下标下&#xff0c;当数据长度大于8时&#xff0c;则会转为红黑树。 存…

Vue+Elementui el-tree树只能选择子节点并且支持检索

效果&#xff1a; 只能选择子节点 添加配置添加检索代码 源码&#xff1a; <template><div><el-button size"small" type"primary" clearable :disabled"disabled" click"showSign">危险点评估</el-button>…

Pod 动态分配存储空间实现持久化存储

配置 Pod 以使用 PersistentVolume 作为存储 ​ 关于持久卷的介绍&#xff0c;可以看官方文档 https://kubernetes.io/zh-cn/docs/concepts/storage/persistent-volumes/ ​ 持久卷根据存储位置&#xff0c;可以使用本地存储和云存储&#xff0c;如果有云服务平台&#xff0c…

AIGC引领金融大模型革命:未来已来

文章目录 金融大模型的应用场景1. **金融风险管理**2. **量化交易**3. **个性化投资建议**4. **金融欺诈检测和预防**5. **智能客户服务** 金融大模型开发面临的挑战应对策略《金融大模型开发基础与实践》亮点内容简介作者简介获取方式 在AIGC&#xff08;Artificial Intellige…

数据库(MySQL黑马)

基础篇 MySQL概述 数据库概述 数据库相关概念 主流的关系型数据库管理系统 MySQL数据库的安装与启动 下载&#xff1a;MySQL :: MySQL Community Downloads 安装步骤 MySQL―8.0.40超详细保姆级安装教程_mysql8.0.40安装教程-CSDN博客文章浏览阅读1k次。_mysql8.0.40安装教…

MySQL8 CTE解决不定层级树形迭代问题

MySQL Common Table Expressions&#xff08;CTE&#xff0c;公用表表达式&#xff09;是在MySQL 8.0及更高版本中引入的一种高级SQL构造&#xff0c;它允许用户定义一个临时的结果集&#xff0c;这个结果集可以在同一个查询中被多次引用&#xff0c;从而简化复杂的查询逻辑和提…

第六届国际科技创新学术交流大会暨信息技术与计算机应用学术会议(ITCA 2024)

重要信息 会议官网&#xff1a;itca2024.iaecst.org 会议时间&#xff1a;2024年12月06-08日 会议地点&#xff1a;中国-广州&#xff08;越秀国际会议中心&#xff09; 会议简介 第六届信息技术与计算机应用学术会议(ITCA 2024) 依旧作为第六届国际科技创新学术交流大会…

详解MVC架构与三层架构以及DO、VO、DTO、BO、PO | SpringBoot基础概念

&#x1f64b;大家好&#xff01;我是毛毛张! &#x1f308;个人首页&#xff1a; 神马都会亿点点的毛毛张 今天毛毛张分享的是SpeingBoot框架学习中的一些基础概念性的东西&#xff1a;MVC结构、三层架构、POJO、Entity、PO、VO、DO、BO、DTO、DAO 文章目录 1.架构1.1 基本…

golang debug调试

1. 本地调试 1&#xff1a;Add Configurations 添加配置文件&#xff08;Run kind &#xff1a;Directory&#xff09; 2&#xff1a;进入run运行窗口 3&#xff1a;debug断点调试模式 1. Resume Program (继续运行) 图标: ▶️ 或 ► 快捷键: F9&#xff08;Windows/Linux&a…

单点登录深入详解之技术方案总结

技术方案之CAS认证 概述 CAS 是耶鲁大学的开源项目&#xff0c;宗旨是为 web 应用系统提供一种可靠的单点登录解决方案。 CAS 从安全性角度来考虑设计&#xff0c;用户在 CAS 输入用户名和密码之后通过ticket进行认证&#xff0c;能够有效防止密码泄露。 CAS 广泛使用于传统应…

redis大key和热key

redis中大key、热key 什么是大key大key可能产生的原因大key可能会造成什么影响如何检测大key如何优化删除大key时可能的问题删除大key的策略 热key热key可能导致的问题解决热key的方法 什么是大key 大key通常是指占用内存空间过大或包含大量元素的键值对。 数据量大&#xff…

vue3实现自定义导航菜单

一、创建项目 1. 打开HBuilder X 图1 2. 新建一个空项目 文件->新建->项目->uni-app 填写项目名称&#xff1a;vue3demo 选择项目存放目录&#xff1a;D:/HBuilderProjects 一定要注意vue的版本&#xff0c;当前选择的版本为vue3 图2 点击“创建”之后进入项目界面 图…

Windows Qtcreator不能debug 调试 qt5 程序

Windows下 Qt Creator 14.0.2 与Qt5.15.2 正常release打包都是没有问题的&#xff0c;就是不能debug&#xff0c;最后发现是两者不兼容导致的&#xff1b; 我使用的是 编译器是 MinGW8.1.0 &#xff0c;这个版本是有问题的&#xff0c;需要更新到最新&#xff0c;我更新的是Mi…