光伏产业,简称PV(photovoltaic)。作为清洁能源之一,与水电、风电、核电等相比,太阳能发电没有任何排放和噪声,应用技术成熟,安全可靠。光伏产业作为高效、可再生的能源产业,对实现碳中和目标具有重要的作用和意义。通过推动光伏发电的发展和应用,可以减少温室气体的排放,推动能源转型,促进可持续发展。
在国家能源安全及双碳战略大背景下,光伏产业发展迅猛,累计装机容量增长迅速,提高光伏发电效能异常检出效率的需求也随之增多。本文以光伏电站为例,说明阿里云物联网平台在光伏发电领域的数据服务应用。
光伏电站的运维现状 传统运维工作的内容 光伏电站的运维流程需要运维人员具备专业知识和技能,能够灵活应对系统运行中的各种情况,并保证光伏系统的稳定运行和发电效益。运维内容主要有以下几点:
监测和数据采集:通过安装在光伏组件或光伏电站中的传感器,对发电量、温度、辐照度等数据进行监测和采集。这些数据可以用于分析光伏系统的性能和运行状况。故障诊断和预警:通过对监测数据的分析和处理,运维人员可以及时发现光伏系统中的故障和异常情况,并进行诊断和预警。这有助于及时采取修复措施,减少系统的停机时间和损失。维护和保养:定期对光伏组件、逆变器、支架等设备进行检查、清洁和维护,确保其正常运行和发电效率。维护工作还包括检查电缆、连接件等部分,以保证系统的安全和可靠性。效能优化:通过数据分析和运行参数的调整,对光伏系统进行效益优化。例如,根据实际辐照度情况调整组件的倾角和朝向,优化系统的发电效果。故障处理:当光伏系统发生故障时,运维人员需要及时进行故障处理和修复,确保系统的正常运行。这可能涉及到更换故障部件、修复电缆连接、调整逆变器等工作。数据分析和报告:运维人员根据监测数据进行分析和评估光伏系统的运行情况和发电效率,并编制相应的报告。这有助于了解系统的性能和问题,并提出改进建议。安全管理:光伏系统的运维还需要注意安全管理,包括对人员和设备的安全保护,防止事故和意外发生。 图:光伏电站典型的运维流程
传统运维工作的难点痛点 光伏电站的传统运维工作流程中可能面临以下一些痛点:
人工监测和诊断成本高:传统运维流程中,对光伏系统的监测和故障诊断主要依赖于人工操作和观察。这需要大量的人力资源和时间成本,并且存在人为判断和误差的可能性。故障响应时间慢:由于传统运维流程中的故障诊断存在时延,导致故障响应时间较长。这可能影响光伏系统的正常运行和发电效率,增加维修和运营成本。数据管理和分析困难:传统运维流程中的数据采集和管理通常依赖于手动操作和纸质记录,存在数据丢失和错误的风险。同时,数据分析和报告的过程相对繁琐,缺乏自动化和智能化的手段。效能优化受限:传统运维流程中的效能优化通常依赖于人工经验和常规操作,缺乏针对性和实时性。这可能导致系统无法充分发挥潜力,影响发电效率和经济收益。安全风险:传统运维流程中对安全管理的重视程度有限,容易出现人员和设备的安全隐患,增加事故和意外发生的风险。 因此,急需通过引入新技术和改进传统运维流程,提高光伏电站可以运维效率和可靠性,降低运营成本,提高发电效率和经济收益。
物联网平台对光伏电站的支持 智能化监测和诊断:引入智能监测系统和故障诊断技术,实现对光伏系统的实时监测和自动故障诊断,提高运维效率和准确性。数据自动化管理和分析:建立光伏系统的数据自动采集和管理平台,实现数据的自动化记录、存储和分析,提高数据的可靠性和分析效率。利用大数据和人工智能:应用大数据和人工智能技术,对光伏系统的数据进行深度分析和预测,实现智能化的效能优化和维修决策。远程监控和维护:利用远程监控技术,实现对光伏系统的远程控制和维护,降低运维成本和提高故障响应速度。加强安全管理:加强对人员和设备的安全培训和管理,建立完善的安全管理体系,减少安全风险。 下图为阿里云物联网平台对光伏电站运维流程的具体支持,主要体现在[功率时序P-T算法检测模型]和[I-V曲线故障诊断模型]这两大核心能力上。
基于功率时序曲线几何形态分析的光伏低效站点检测 功率时序曲线图定义 光伏站点的P-T(功率Power-时间Time)曲线记录了光伏站点在一天中的发电过程。
光伏发电系统的功率时序曲线具有强烈的非线性,在光线充足、电池无故障的情况下,一个工作站点的正常功率时序曲线图应该随着日出日落进行时间,形成一个几何形态近似于一个开口向下的马蹄形抛物线,且开口向下,光滑均匀。该抛物线顶点对应的功率即为该日最大输出功率点。
但当出现外界干扰,例如阴雨、遮挡或电池内部故障(例如短路、老化等),其功率时序曲线则复杂多变,锯齿增多,线型不饱满,显著偏离饱满的马蹄形抛物线。
如下图所示:
功率时序算法检测模型的基础定义 阿里云物联网平台数据服务中,提供P-V功率时序曲线诊断算法模型,应用于光伏智能运维检测。功率时序曲线是智能化光伏运维中的一个重要指标,该模型通过对功率时序曲线的特征分析,可以发现潜在的发电低效站点并进行预警,引导运维人员及时定位排查,从而降低运维成本并提高电站的经济回报。
数据服务提供单站点检测和多站点排序的功率时序曲线诊断算法:
单站点检测:精准检测单个站点的发电效能。示例场景:上传某电站的日内发电功率曲线,并结合日内的光照强度时序数据和电站额定功率配置,算法自动判断该站点是否出现了发电低效故障。多站点排序:对多个站点的发电效能进行排序。示例场景:圈选一批地域临近的电站,上传其日内发电功率曲线,算法判断功率曲线与马蹄形抛物线理想曲线的接近程度,对曲率偏离的站点进行预警。 使用说明文档:功率时序曲线诊断_阿里云物联网平台-阿里云帮助中心
功率时序算法检测模型的原理介绍 阿里云物联网平台的数据服务提供数据智能功能,基于算法动态检测电站发电效能,即通过横向比较和历史比较电站发电功率时序曲线,来检测出发电效能存在异常的电站。
功率时序算法检测模型的数据要求 【模型输入数据】:
历史功率时序:Power-Time曲线。历史气象时序:温度,光照。电站电气参数:额定发电功率 【模型输出数据】:
电站是否低效 【数据计算的过程描述】:
基于I-V曲线分析的光伏阵列智能故障检测 I-V曲线图定义 I-V(电流-电压)曲线图体现了电子设备的的多项性能指标,能够很好的反应系统老化,异常等多种不稳定因素。
I-V曲线故障诊断模型的基础定义 阿里云物联网平台的数据服务中,提供光伏智能运维的IV曲线诊断算法,通过对组串式光伏发电阵列的I-V曲线进行分析,结合环境光强度、环境温度等影响因素,对组串式光伏发电阵列的I-V曲线进行分析,检测系统可能出现的故障,进而提高设备的运行效率,保障电站高效运行。
该模型通过机器学习算法,代替人工运维,能够极大地提高大型集中式光伏电让和分布式户用/商用光伏电站的运维效率,降低人工成本,提高发电经济性。
例如,光伏阵列部分遮挡是光伏电站发电过程中经常会出现的故障。当出现部分遮挡时,会导致阵列发电功率下降,造成经济损失。此外,被遮挡的组件会出现热点效应hotspot,在局部产生高温,导致组件烧毁损坏,进而产生安全隐患。在出现遮挡故障时,I-V曲线会携带明显特征,通过I-V扫描诊断可以发现总是,及时排除故障。
使用说明文档:I-V曲线诊断_阿里云物联网平台-阿里云帮助中心
I-V曲线故障诊断模型的原理介绍 Random Forest:集成学习的一种,通过融合多个不同的弱分类器,形成一个强分类器。XgBoost:集成学习的一种,通过不断的反复迭代逼近真实结果。Convolutional Neural Network:多层卷积神经网络,简称CNN,具有强大的图像特征提取器,能够在细粒度和粗粒度获取图像特征,获得极佳的检测效果。Support Vector Machine:经典的线性分类器,通过采用不同的核函数实现非线性的分类目标。 为验证算法效果,我们采集了近60w条测试数据,涵盖健康状态和5种故障状态,共6种场景。测试结果表明,机器学习算法取得了令人满意的检测准确率。
I-V曲线故障诊断模型的数据要求 【模型输入数据】:
气象数据:环境光强度,环境温度。组串配置参数:并联组串数,单串串联模组数。模组电气参数:开路电压,短路电流,电压温度系数,电流温度系数,电池片数量。I-V曲线:I-V曲线扫描数据 【模型输出数据】:
6种状态(1种健康态+5种故障态)的概率分布 【数据计算的过程描述】:
业务价值 随着光伏发电装机规模的逐步增大,同时伴随着国家上网电价的政策补贴消退,行业逐步走向精细化运营,来保障企业利润。运营成本主要是设备的折旧和运维成本,其中运维成本构成比例中,人员成本约占比约50%,测试设备占比约15%。
对于实际工况,我们的最佳实践为部署算法模型并进行按日调度,每日输入所有受监控站点的功率时序曲线数据,输出可疑的低效站点,并触发相应的运维告警。这将极大的缓解人工肉眼进行逐个筛查所带来的运维压力,提高运维的效率和质量。
以10MW村级光伏电站为例,有智能算法的协作,基于85%准确率和召回率运算,假设200个逆变器有10个发电效能异常,算法将上报10~12个左右的可能异常的逆变器。运维人员优先关注这部分逆变器,可以大大提高运维效率和问题解决速度。
https://blog.csdn.net/lvyaer_1122/article/details/130598451
微信小程序支付API有两个,分别是 wx.chooseWXPay 和 wx.pay。
wx.chooseWXPay 是用于唤起微信支付的API,它支持扫码支付、JSAPI支付、APP支付等。它返回一个Promise对象,可以在then方法中处理支付结果。
wx.pay 是用于发起微信支付的API,它支持H5支付和扫码支付。它返回一个XML数据,可以在回调函数中处理支付结果。
以下是两个API的参数列表:
wx.chooseWXPay 参数:
body:订单描述信息,显示在支付结果页面的订单信息中。out_trade_no:商户订单号,需保持唯一性。total_fee:订单总金额(单位:分),订单金额需大于1元。spbill_create_ip:用户在商户appid下的唯一IP地址。notify_url:接收微信支付结果通知的回调地址。trade_type:支付类型,取值如下:JSAPI,MWEB,APP,WAP等。openid:用户在商户appid下的唯一标识。 wx.pay 参数:
body:订单描述信息,显示在支付结果页面的订单信息中。out_trade_no:商户订单号,需保持唯一性。total_fee:订单总金额(单位:分),订单金额需大于1元。spbill_create_ip:用户在商户appid下的唯一IP地址。notify_url:接收微信支付结果通知的回调地址。trade_type:支付类型,取值如下:JSAPI,MWEB,APP,WAP等。openid:用户在商户appid下的唯一标识。timestamp:生成签名的时间戳。nonce:生成签名的随机串。serial:商户号在微信支付平台的序列号。sign:签名结果。 以下是使用 wx.chooseWXPay API 的代码示例:
wx.chooseWXPay({ body: '测试订单', // 订单描述信息 out_trade_no: '123456789', // 商户订单号 total_fee: 100, // 订单总金额(单位:分) spbill_create_ip: '127.0.0.1', // 用户在商户appid下的唯一IP地址 notify_url: 'http://example.com/notify', // 接收微信支付结果通知的回调地址 trade_type: 'JSAPI', // 支付类型,这里选择JSAPI支付 openid: 'oUpF8uMuAJO_M2CJIS-vCjM7564t', // 用户在商户appid下的唯一标识 success: function(res) { console.log(res.data) // 支付成功后的回调数据 }, cancel: function(res) { console.log(res.data) // 用户取消支付的回调数据 } })
CSS 的逻辑组合伪类有 4 种,分别是::not()、:is()、:where()和:has()。
否定伪类:not() 否定伪类,是在元素与括号里面的参数不匹配的时候,就会对这个伪类进行匹配。比如::not(span):{color:red},这就会匹配不是 span 元素的其他所有元素,包括 html 和 body。
否定伪类:not()的几个特点:
:not()的优先级是 0,因为它的优先级是由括号里面的参数来定的;:not()伪类可以同时判断多个选择器,比如input:not(:disabled):not(:read-only) {},表示匹配不属于禁用状态同时也不处于只读状态的 input 元素;not()支持多个表达式,比如:.cs-li:not(li, dd) {},还有另外一种写法:.cs-li:not(li):not(dd) {}。但是这两种写法,要考虑兼容性问题;:not()也支持选择符,比如:input:not(.a > .b) { border: red solid; }; :is() :is()伪类,是把括号里面的选择都分配出去。语法如下:
:is(article) p {} :is(article, section) p {} :is(.article[class], section) p {} .some-class:is(article:not([id]), section) p {} is 这个伪类最大的作用,就是在简化选择器。比如我们要设置多个 div 内的图片样式,样式代码如下:
.div-a > img, .div-b > img, .div-c > img, .div-d > img { display: block; width: 100%; height: 100%; border-radius: 50%; } 通过 is 伪类来简化一下:
一、升压\降压电路原理分析 1、升压电路
电荷泵升压电路 Vout=Va+5V
5V_PLUS=0V时,Va给C2充电,C2上节点电压比C2下节点电压高Va;
5V_PLUS=5V时,C2电压不能突变,C2上节点电压依然比C2下节点电压高Va,但C2下节点电压变成了5V,则C2上节点电压为5V+Va;
2、降压电路
电荷泵降压电路 此时Va为负压 二级管方向要反向
Vout=Va-5V
5V_PLUS=5V时,电流回路C1-D1,C1下节点电压依然比C1上节点电压高5V-Va,D3反向截止;
5V_PLUS=0V时,C1电压不能突变,C1下节点电压依然比C1上节点电压高5V-Va,但此时C1下节点接地,电流回路C1-C2-D3,Vout=Va-5V;
3、其他的优秀讲解
二、电荷泵电路在液晶电路中的应用
在液晶显示器驱动电路中,主要有三组电压:
1、TFT栅极开启电压VGH
2、TFT栅极关闭电压VGL
3、VCOM电压。
这三组电压一般为:VGH电压值在15 ~ 20V,VGL电压值在-7.0 ~ -10V;VCOM在10V左右。
1、10V的VCOM电压由DC-DC芯片直接得到。
2、VGH 16.4V电压.
10V电压经过电容C10的滤波后,通过BAV99的1、3管脚给C8进行充电,此时B点位左边为0,A1为10。B点电平是电感输出的高低电平0与10V,当B点电平为10V时,由于电容放电无法突变,A1点上升到20V,在经过BAV99的32管脚进行放电,接着被两个BZT52B8V2稳压管稳定在16.4V左右。
3、VGL -7.2V电压
当B点电平为10V时,会给C9进行充电,电流经过BAV99的32管脚接地,所以A2点电平为0V.当B点电平为0V时,C9左边相当于接地,由于电容的电压不能突变,右边表现形式逐渐变为-10V,BAV99的31管脚导通,再经过两个BZT52B3V6稳压管的稳压稳定在-7.2V左右。
玩转Spring中强大的spel表达式!值得推荐的好文:https://zhuanlan.zhihu.com/p/174786047
在日常的远程服务器管理和文件传输过程中,经常需要将远程服务器上的文件下载到本地进行进一步处理或备份。Xshell 是一款常用的 SSH 客户端工具,提供了丰富的命令和功能来支持远程服务器的管理和文件传输。本文将介绍如何使用 Xshell 中的 sz 命令将文件从远程服务器下载到本地。
什么是 sz 命令? sz 命令是一种基于 ZMODEM 协议的文件传输命令,用于从远程服务器下载文件到本地计算机。ZMODEM 协议是一种用于在串行通信中进行高效文件传输的协议,其特点是传输速度快、传输效率高。
使用 sz 命令下载文件的步骤 连接到远程服务器:首先,在 Xshell 中通过 SSH 连接到目标远程服务器。
切换到文件所在目录:使用 cd 命令切换到包含要下载文件的目录。
查看文件列表:执行 ls 命令查看当前目录下的文件列表,确认要下载的文件名。
执行 sz 命令:执行 sz filename 命令,将 filename 替换为要下载的文件名。例如:sz example.txt。
选择保存位置:Xshell 将弹出文件保存对话框,选择要保存文件的本地目录,然后点击确定。
下载文件:文件将开始下载到你选择的本地目录。
注意事项 权限要求:下载文件需要在服务器上具有相应的读取权限。软件要求:本地计算机需要安装 ZMODEM 文件传输软件(例如,lrzsz)来支持文件传输。如果尚未安装该软件,请先进行安装。 结语 通过 Xshell 中的 sz 命令,我们可以方便地将远程服务器上的文件下载到本地,为远程服务器管理和文件传输提供了便利。同时,ZMODEM 协议的高效传输特性也保证了文件传输的速度和稳定性。希望本文能够帮助大家更加方便地进行远程文件管理和传输操作。
以上就是使用 Xshell 中的 sz 命令将文件从远程服务器下载到本地的介绍,希望对大家有所帮助。
ESP32的ADC可用于测量模拟信号,如温度、湿度和光强度等。ESP32可以将模拟的的电压信号转换为数字信号,然后进行进一步的处理,如输出到显示屏或发送到服务器。往往第一次使用的时候会发现测量的值跟预期的结果不一样。
举个例子 读取39管脚的电压并打印:
from machine import Pin from machine import ADC import time def main(): pin = Pin(39, Pin.IN) #将39管脚作为输入 adc = ADC(pin) #指定为ADC val = adc.read() #读取值 print(val) if __name__ == "__main__": main() 如果39管脚的电压>=950mv,将会打印出4095。
如果用read_u16()方法读取,将会得到65535。
出现这样的结果与ESP32的电压测量电路有关。
基准电压和ADC原理 ESP32内部ADC的基准电压通常为 1.1V,不同封装可能会略有不同。ADC在接近基准电压时线性较差(特别是在较高衰减时),其最低测量电压约为 100mV,低于或等于100mV的电压读数为0,也就是说不能用ESP32直接测量低于100mv的电压。
ESP32的ADC模块包括电压参考电路、采样保持电路、比较器、采样电路和SAR(Successive Approximation Register,连续逼近寄存器)。电压参考电路为ADC提供参考电压,采样保持电路可使输入信号在采样周期内保持不变。比较器根据参考电压和输入信号的大小关系输出比较结果。采样电路将放大器输出的信号放大,并将放大器输出的反向电压反馈到比较器以实现反馈控制。SAR将比较器的输出与任意精度DAC中的数字比较器相比较,以实现逐步逼近转换。因此在逐步逼近测量电压的时候,测量精度会降低。为了扩大测量的范围,需要对测量信号进行一定程度的衰减。
输入信号衰减量 由于ADC的基准电压为1.1V所以,ESP32的ADC在无衰减的情况下,能测量的电压范围为100mV至950mV,要读取高于基准电压的电压,就需要使用atten参数指定输入衰减。其有效值(近似线性测量范围)为:
ADC.ATTN_0DB:无衰减(100mV - 950mV)
ADC.ATTN_2_5DB:2.5dB 衰减(100mV - 1250mV)
ADC.ATTN_6DB:6dB 衰减(150mV - 1750mV)
ADC.ATTN_11DB:11dB 衰减(150mV - 2450mV)
还是刚才的例子 读取39管脚的电压并打印:
from machine import Pin from machine import ADC import time def main(): pin = Pin(39, Pin.
符号常量 #include Pi 3.1415926
符号常量Pi代表3.1415926,定义符号常量用#include。
常变量 const float pi=3.1415926
常变量pi代表3.1415926,定义常变量用const。
区别
虽然两者都代表3.1415926,但是符号常量定义时使用#include是预编译指令,只是用符号常量代表一个字符串,在编译时会进行字符替换,编译后符号常量就不存在了,符号常量是不分配存储空间的。而常变量是变量,只是这个变量的值不改变,是会分配存储空间的。
从使用的角度看,常变量具有符号常量的优点,而且使用方便,有了常变量,可不必多使用符号常量。
**单片机设计介绍,基于单片机环境监测温湿度PM2.5系统设计
文章目录 一 概要二、功能设计设计思路 三、 软件设计原理图 五、 程序六、 文章目录 一 概要 设计一个基于单片机环境监测温湿度PM2.5的系统是一个非常有意义的项目。以下是一个基本的介绍:
系统概述:
这个系统主要包含以下几个部分:单片机(如Arduino或Microchip等),传感器(用于测量温湿度和PM2.5浓度),以及显示设备(如LED显示屏或液晶屏)。系统将通过传感器实时监测环境中的温湿度和PM2.5浓度,并将数据通过单片机发送到显示设备上,以方便用户观察。
传感器选择: 温湿度传感器:用于测量环境中的温度和湿度。可以选择如DHT11,SHT1x等常见的温湿度传感器。PM2.5传感器:用于测量空气中的PM2.5颗粒浓度。可以选择如TCS34727等常见的PM2.5传感器。 这些传感器通常可以提供精确的测量结果,并且与单片机兼容。
单片机选择: 单片机是系统的核心,负责接收传感器数据,处理数据,并将数据发送到显示设备上。可以选择如Arduino,Microchip等常见单片机。这些单片机通常具有丰富的库和文档,方便开发。
显示设备选择: 显示设备用于展示环境数据。可以选择LED显示屏或液晶屏。液晶屏通常具有更好的显示效果,但价格相对较高。
设计流程:
连接传感器和单片机:将传感器连接到单片机上,确保信号线正确连接。编写代码:根据所选单片机的编程语言(如Arduino语言或Microchip C语言),编写代码以接收传感器数据,处理数据,并将数据发送到显示设备上。测试和调试:在连接好的系统中进行测试和调试,确保系统能够正确地读取传感器数据并显示在显示设备上。添加其他功能:根据需要,可以添加其他功能,如报警功能,数据存储等。 总结:
这个系统设计可以帮助用户实时监测环境中的温湿度和PM2.5浓度,以便及时采取措施保护环境。在设计过程中,选择合适的传感器和单片机,编写正确的代码并进行测试和调试是非常重要的步骤。同时,还可以根据需要添加其他功能以增强系统的实用性。
二、功能设计 基于单片机环境监测温湿度PM2.5系统设计,实时检测环境中的温湿度值,并检测控制的PM2.5颗粒,同时可以设定报警范围值,也可以通过led灯指示当前的控制各参数的状态。
设计思路 设计思路
文献研究法:搜集整理相关单片机系统相关研究资料,认真阅读文献,为研究做准备;
调查研究法:通过调查、分析、具体试用等方法,发现单片机系统的现状、存在问题和解决办法;
比较分析法:比较不同系统的具体原理,以及同一类传感器性能的区别,分析系统的研究现状与发展前景;
软硬件设计法:通过软硬件设计实现具体硬件实物,最后测试各项功能是否满足要求。
三、 软件设计 本系统原理图设计采用Altium Designer19,具体如图。在本科单片机设计中,设计电路使用的软件一般是Altium Designer或proteus,由于Altium Designer功能强大,可以设计硬件电路的原理图、PCB图,且界面简单,易操作,上手快。Altium Designer19是一款专业的整的端到端电子印刷电路板设计环境,用于电子印刷电路板设计。它结合了原理图设计、PCB设计、多种管理及仿真技术,能够很好的满足本次设计需求。
————————————————
仿真实现
本设计利用protues8.7软件实现仿真设计,具体如图。
Protues也是在单片机仿真设计中常用的设计软件之一,通过设计出硬件电路图,及写入驱动程序,就能在不实现硬件的情况进行电路调试。另外,protues还能实现PCB的设计,在仿真中也可以与KEIL实现联调,便于程序的调试,且支持多种平台,使用简单便捷。
————————————————
原理图 五、 程序 本设计利用KEIL5软件实现程序设计,具体如图。作为本科期间学习的第一门编程语言,C语言是我们最熟悉的编程语言之一。当然,由于其功能强大,C语言是当前世界上使用最广泛、最受欢迎的编程语言。在单片机设计中,C语言已经逐步完全取代汇编语言,因为相比于汇编语言,C语言编译与运行、调试十分方便,且可移植性高,可读性好,便于烧录与写入硬件系统,因此C语言被广泛应用在单片机设计中。keil软件由于其兼容单片机的设计,能够实现快速调试,并生成烧录文件,被广泛应用于C语言的编写和单片机的设计。
————————————————
六、 文章目录 目 录
摘 要 I
Abstract II
引 言 1
1 控制系统设计 2
1.1 主控系统方案设计 2
机器学习1一元线性回归 前言一、回归概念高尔顿(达尔文表兄)提出 二、线性回归适用场景三、线性回归方程一元线性回归多元线性回归方程 拟合直线的原则梯度下降算法凸函数和非凸函数梯度下降学习率例如 代价函数一元函数梯度下降上代码实战(房价预测) 前言 本人是技术控所以先从应用开始,最后再进入科普机器学习历史环节
提示:以下是本篇文章正文内容,下面案例可供参考
一、回归概念 高尔顿(达尔文表兄)提出 研究父辈身高和字辈身高关系通过大量统计表明矮个子的父辈的子女平均身高高于父辈,高个子身高的父辈子女平均身高低于父辈。通俗的讲,姚明的孩子身高超过姚明的概率很低,潘长江的孩子超过潘长江的概率很高。大自然有种力量让物种趋于平均。这种现象就叫回归 二、线性回归适用场景 身高体重预测房价预测等等 三、线性回归方程 一元线性回归 f(x) = w1*x+w0
多元线性回归方程 f(x1,x2…xn) = w0+w1X1+w2X2+…wn*Xn 代码如下(示例):
拟合直线的原则 最小二乘法
数学必备知识
导数概念
复合函数求导法则
偏导数
极大值,极小值概念
梯度概念 真实值和预测值的误差最小每个点和直线的距离平方和最小
梯度下降算法 凸函数和非凸函数 梯度下降学习率 梯度下降算法中被称作为学习率或者步长,意味着我们可以通过α来控制每一步走的距离
例如 代价函数 一元函数梯度下降 上代码实战(房价预测) import numpy as np import matplotlib.pyplot as plt data = np.genfromtxt('data.csv',delimiter=',') x_data = data[:,0] y_data = data[:,1] plt.scatter(x_data,y_data) plt.show() w = 0 b = 0 alf = 0.0001 counter = 100 def costFunc(w,b,x_data,y_data): totErr = 0; for i in range(len(x_data)): totErr += (y_data[i]-(w*x_data[i]+b))**2 return totErr/float(len(x_data)) def gradient_decent(x_data,y_data,w,b,alf,counter): m = float(len(x_data)) for i in range(counter): w_temp = 0 b_temp = 0 for j in range(len(x_data)): w_temp += (1/m) * (w*x_data[j]+b-y_data[j])*x_data[j] b_temp += (1/m) * (w*x_data[j]+b-y_data[j]) w = w-alf*w_temp b = b-alf*b_temp if i%5==0: print("
文章目录 登入流程1、下载USG6000V的镜像包2、导入USG6000V的镜像包3、配置防火墙web页面4、修改本机vmnet1网卡的ipv4地址5、在eNSP上添加云6、配置防火墙管理地址,开启http服务7、关闭电脑防火墙8、访问web页面 登入流程 1、下载USG6000V的镜像包 链接:https://pan.baidu.com/s/1HH1l56_qGhlVdT5u0hs49g?pwd=u9ya
提取码:u9ya
可以选择从以上链接下载安装包存放;
2、导入USG6000V的镜像包 启动防火墙,根据提示,导入准备好的镜像包
3、配置防火墙web页面 双击防火墙进入ctl防火界面
输入默认账号密码,并修改新密码(修改密码必须包含数字、大写字母、小写字母,长度大于八位);
默认账号密码:admin\Admin@123
输入正确账户密码后会提醒修改密码输入 y 回车后提醒如下:
输入旧密码
输入新密码
确认新密码
4、修改本机vmnet1网卡的ipv4地址 打开控制面板-网络和Internet,修改vmnet1的ipv4地址。
使用“win+r - cmd - ipconfig”验证修改的ip地址
5、在eNSP上添加云 添加云使得本机电脑可以喝eNSP建立连接,使得电脑的浏览器可以访问防火墙的web页面
6、配置防火墙管理地址,开启http服务 g0/0/0口默认是防火墙的管理口,查看接口下的默认管理ip为192.168.0.1,但需要与连接的电脑虚拟vmnet1网卡同一网段。
开启https、http服务
7、关闭电脑防火墙 8、访问web页面 打开浏览器,输入“192.168.40.2”或“https://192.168.40.2:8443/”访问防火墙的web页面
本文作者: 是肉肉肉肉啊
本文链接: https://blog.csdn.net/Arouroua/article/details/134666593?spm=1001.2014.3001.5502
版权声明: 本博客所有文章除特别声明外,如需转载,请联系作者注明出处并附带本文链接!
d3dcompiler_47.dll缺失怎么修复?其实在我们使用计算机操作的过程中,有时会遇到一些由dll文件错误导致的问题,其中d3dcompiler_47.dll丢失就是这样一种。那么究竟d3dcompiler_47.dll缺失是什么意思,为何它会发生丢失,以及如何解决这个问题呢?本文将提供你需要的所有答案。
一.d3dcompiler_47.dll缺失是什么意思 dll文件,全称是Dynamic Link Libraries动态链接库。在Windows操作系统中,很多应用程序都会共享dll文件,因为这能够节约系统资源和硬盘空间。而d3dcompiler_47.dll具体是Direct3D HLSL Compiler DLL,它主要负责处理和运行与运行3D游戏和软件等与图形有关的程序。当系统或应用程序提示“无法找到或者丢失d3dcompiler_47.dll”时,就说明这个文件有问题,导致无法正常运行。
二.为何会出现d3dcompiler_47.dll丢失的情况 出现这种情况可能有以下几种原因:
- 原有d3dcompiler_47.dll被误删除或覆盖;
- 恶意软件可能会破坏dll文件,
- Windows注册表指向的dll文件路径有误;
- 硬件问题也可能导致文件损坏。
三.d3dcompiler_47.dll丢失的解决方法 方法a. 重新启动电脑 优点:有时系统可能只是暂时性出错,重启可以解决大部分小问题。
缺点:如果是dll文件本身有问题,则此方法效果不明显。
步骤:
在屏幕左下角点击“开始”按钮,然后点击设置按钮。
在窗口开启后,点击"电源"选项。
在弹出的菜单中选择“重新启动”。
系统会自动关闭并再次启动计算机。等待一段时间后,电脑即完成了重启。
请注意:如果你有正在进行的工作或软件在运行,记得先保存好数据,否则重新启动可能会导致数据丢失。
方法b. 重新安装有问题的软件 优点:重新安装软件会同时安装所需的dll文件,如果是因为软件自身的问题导致的 dll 缺失,那么这个方法十分有效。
缺点:安装过程需要时间,且如果问题源于系统层面,该方法将不能解决问题。
步骤:
1.卸载软件:
a. 在桌面点击屏幕左下角的"开始"按钮或者按键盘上的"windows"键。
b. 输入“控制面板”并选择找到的结果打开。
c. 在控制面板视窗中,选择“程序”选项。
d. 在新的窗口中,选择“卸载程序”。
e. 在程序列表中,找到你想要卸载的软件,点击后选择上方的“卸载”。
f. 根据提示完成卸载过程。
2.重装软件:
a. 从官方网站下载最新版本的需要安装的软件。
b. 找到下载的安装包,双击打开。
c. 根据安装向导进行操作,一般流程是接受许可协议,选择安装路径,然后等待安装完成。
d. 安装完成后重启计算机。
这样就成功地进行了软件的重新安装。请注意在卸载和重新安装时尽量选择官方渠道,避免非法源头提供的软件可能伴随的病毒风险。
方法c. 从网站下载dll文件 Microsoft 提供了DirectX用户运行时Web安装程序,用户可以从该页面下载并安装最新版的d3dcompiler_47.dll。
优点:直接从源头解决问题,一般解决效果较好。
缺点:需要用户有一定的电脑使用基础。
首先在浏览器中打开一个可信任的 DLL 文件网站,(不少DLL文件的下载网站并无官方背景,使用时需谨慎)。
在网站的搜索栏中,输入你需要的 DLL 文件名。例如 "
1.自己主机网络中没有vmnet8或1 那是因为没有在VMware虚拟网络编译器中配置好主机连接。
勾选上图所示应用安装即可。
2.上个问题中如果勾选失败或者勾选后会自动消失解决如下 1.首先确认自己的服务是否打开。
windows键+R,打开电脑运行窗口,输入services.msc进入服务,在服务中找到device install service和device setup manager两个服务并且打开。
2.下载ccleaner软件清理注册表将失败的错误的注册表全部修复清理。
(上面的这些选项尽可能全选确保无误)
3.做完以上步骤之后在去勾选连接就可以安装上了vmnet了。
linux dig命令 1.最常用的查询命令 dig baidu.com 2 . 根据记录类型进行查询,比如MX,CNAME,NS,PTR等,只需将类型加在命令后面即可。 dig a.shifen.com ns 3 . 指定域名DNS服务器测试解析是否生效的命令,以下以指定阿里云云解析DNS服务器和公共DNS服务器作为查询解析是否生效的示例 dig aliyun.com @ns3.aliyun.com dig aliyun.com @114.114.114.114 4 . 另外一个重要的功能是dig+trace参数,使用这个参数之后将显示从根域逐级查询的过程,trace查询可以看到根域、 顶级域、以及一级域名的权威服务器的地址,及其各自的返回结果,这样对于追踪DNS解析中的问题有很大的帮助。 dig aliyun.com +trace 5.需要逐级查询解析的递归过程,且指定localDNS。 dig 域名 @指定的localdns地址 +trace 7 . 可通过指定客户机IP,查询权威DNS返回的解析地址,来判断智能解析调度的精准度。 dig @权威DNS服务器域名 +subnet=指定客户机IP dig @ns3.aliyun.com aliyun.com +subnet=1.1.1.1 如果出现这种错误,是因为bind版本过老导致,
sudo yum update bind-utils
1.应用场景
主要用于利用ER图快速实现项目需求开发实现. 2.学习/操作
1.文档阅读 chatgpt
& 其他资料
ER图-相关
ER 图是什么?这一篇让你搞懂 ER 图!_数据分析_产品海豚湾_InfoQ写作社区
2.整理输出 2.1 是什么 ER 图也称实体-联系图(Entity Relationship Diagram),提供了表示实体类型、属性和联系的方法,用来描述现实世界的概念模型。
ER 图由下面三个要素组成:
实体:通常是现实世界的业务对象,当然使用一些逻辑对象也可以。比如对于一个校园管理系统,会涉及学生、教师、课程、班级等等实体。在 ER 图中,实体使用矩形框表示。
属性:即某个实体拥有的属性,属性用来描述组成实体的要素,对于产品设计来说可以理解为字段。在 ER 图中,属性使用椭圆形表示。
联系:即实体与实体之间的关系,这个关系不仅有业务关联关系,还能通过数字表示实体之间的数量对照关系。例如,一个班级会有多个学生就是一种实体间的联系。
ER 图是什么?这一篇让你搞懂 ER 图!
2.2 为什么需要「应用场景」 ER 图是一种可视化工具,用于表示和理解数据库中的实体(或数据对象),以及它们之间的关系。这种图形表示方法可以帮助我们更好地理解数据间的逻辑关系,以便进行更有效的数据库设计。
简单说:
ER图:改变数据库设计流程的神器!
2.3 什么时候出现「历史发展」 TBD
2.4 怎么实践 TBD
后续补充
...
3.问题/补充
TBD
后续补充
...
HTTP代理是一种常见的网络代理服务器,它可以在客户端和服务器之间充当中间人,帮助客户端访问互联网资源。在实际应用中,我们可能需要配置HTTP代理来实现网络访问。本文将介绍HTTP代理的配置方法。
HTTP代理的配置方法
HTTP代理的配置方法主要有以下几种:
使用浏览器的代理设置
大多数现代浏览器都提供了自己的代理配置选项。用户可以在浏览器的设置中找到代理设置,然后输入代理服务器的地址和端口号即可。这种方式只会对浏览器中的网络访问生效,对于其他应用程序的网络访问不会产生影响。
使用系统代理设置
在Windows、MacOS和Linux等操作系统中,用户可以在系统设置中找到代理设置,然后输入代理服务器的地址和端口号即可。这样配置后,所有支持HTTP代理的应用程序都将使用该代理服务器进行网络访问。需要注意的是,不同操作系统的设置方法可能会略有不同。
使用命令行参数
一些应用程序支持在启动时通过命令行参数来指定代理服务器。例如,使用curl命令时可以通过-x参数指定代理服务器的地址和端口号,如:
curl -x http://proxy.example.com:8080 http://www.example.com/
这种方式适用于需要经常切换代理服务器的情况,但需要在每次使用应用程序时手动输入命令行参数。
使用环境变量
一些应用程序支持通过环境变量来指定代理服务器。例如,在Linux中可以使用http_proxy和https_proxy环境变量来指定HTTP和HTTPS代理服务器的地址和端口号,如:
export http_proxy=http://proxy.example.com:8080
export https_proxy=http://proxy.example.com:8080
这种方式适用于需要在多个应用程序中使用同一代理服务器的情况,但需要手动设置环境变量。
以上是HTTP代理的常见配置方法。在实际应用中,我们需要根据具体情况选择合适的配置方法。需要注意的是,代理服务器的地址和端口号需要与实际情况相符,否则将无法正常访问网络资源。同时,使用代理服务器也可能会对网络访问速度和安全性产生影响,需要谨慎使用。
C:\Users\Administrator>pip install mysqlclient Looking in indexes: https://pypi.tuna.tsinghua.edu.cn/simple Collecting mysqlclient Downloading https://pypi.tuna.tsinghua.edu.cn/packages/50/5f/eac919b88b9df39bbe4a855f136d58f80d191cfea34a3dcf96bf5d8ace0a/mysqlclient-2.1.1.tar.gz (88 kB) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 88.1/88.1 kB 5.2 MB/s eta 0:00:00 Preparing metadata (setup.py) ... done Building wheels for collected packages: mysqlclient Building wheel for mysqlclient (setup.py) ... error error: subprocess-exited-with-error × python setup.py bdist_wheel did not run successfully. │ exit code: 1 ╰─> [29 lines of output] running bdist_wheel running build running build_py creating build creating build\lib.win-amd64-cpython-37 creating build\lib.win-amd64-cpython-37\MySQLdb copying MySQLdb\__init__.
脚本编写纯属个人爱好,部分功能并不完善,可以在测试环境玩玩,
#!/bin/bash #******************************************************************** #Author: HEhandsome #Date: 2023-05-29 #FileName: csh.sh #BLOG: https://www.cnblogs.com/smlience #Description: 路漫漫其修远兮,吾将上下而求索 #******************************************************************** . /etc/os-release set -u #需要手动执行一下 set -e #cd /data rm -rf ./* 如果data不存在,后面rm就不会执行 color () { RES_COL=60 MOVE_TO_COL="echo -en \\033[${RES_COL}G" SETCOLOR_SUCCESS="echo -en \\033[1;32m" SETCOLOR_FAILURE="echo -en \\033[1;31m" SETCOLOR_WARNING="echo -en \\033[1;33m" SETCOLOR_NORMAL="echo -en \E[0m" echo -n "$1" && $MOVE_TO_COL echo -n "[" if [ $2 = "success" -o $2 = "0" ] ;then ${SETCOLOR_SUCCESS} echo -n $"
只在centos7.9上测试了安装mysql5.7版本,脚本只是个人学习之余爱好,有问题希望大佬帮忙指正和修改建议
#!/bin/bash #******************************************************************** #Author: HE-handsome #QQ: #Date: 2022-10-14 #FileName: binary-mysql.sh #email: #URL: #Description:路漫漫其修远兮,吾将上下而求索 #******************************************************************** . /etc/os-release version=5.7.36 URL=https://downloads.mysql.com/archives/get/p/23/file/mysql-${version}-linux-glibc2.12-x86_64.tar.gz DATA_DIR=/data/mysql install_mysql() { echo -e "\e[1;36m 安装依赖包 \e[0m" if [ $ID == "rocky" -o $ID == "centos" ];then yum -y install libaio numactl-libs ncurses-compat-libs else apt update &> /dev/null apt -y install libaio numactl-libs ncurses-compat-libs fi if id mysql &> /dev/null;then echo -e "\e[1;36m 用户已存在 \e[0m" else groupadd -g 336 -r mysql && useradd -g mysql -s /sbin/nologin -d /data/mysql -r -u 336 mysql echo -e "
delete 语句执行删除是每次从表中删除一行,并且同时将改行的删除操作作为事务记录在日志中保
存以便进行回滚。
truncate 则是一次从表中删除所有的数据并不把单独的删除操作记录计入日志,删除行是不能恢复
的。执行速度很快
drop 是将表所占的空间全部释放掉。
在删除速度上, drop>truncate>delete
想要删除部分数据用delete,想要删除表用drop。 想保留表但是把数据删除,如果和事务无关用truncate
**独立硬盘冗余阵列(RAID, Redundant Array of Independent Disks),旧称廉价磁盘冗余阵列(Redundant Array of Inexpensive Disks),简称磁盘阵列。**
利用虚拟化存储技术把多个硬盘组合起来,成为一个或多个硬盘阵列组,目的为提升性能或数据冗余,或是两者同时提升。
1. RAID 0:
最少两块或以上硬盘组合到一起实现RIAD0,
一份数据分别存在两块硬盘上,读写同时进行,在所有的raid中速度最快,但是没有冗余,所以其中一块损坏所有数据都将丢失
总结:读写性能提升,无容错能力
2. RAID 1
亦称镜像盘,两块以上硬盘 ,存储相同数据,实现冗余。读性能提升写性能略微下降
3. RAID 5
至少三块或者三块硬盘以上,所有磁盘轮流充当校验盘,最多允许损坏一块,充当校验盘的空间,不能存储数据,可用容量是N分之N-1
4. RAID-10--RAID 1+0
先两两组成raid1,在组合成raid0,每组镜像最多损坏一块磁盘 最少有4快盘组合,只要一半的磁盘使用率。 5. RAID-01--RAID 0+1
和raid-10相反,多块磁盘先实现raid0,再组合成raid1
1. 父元素节点下的子元素节点逆序 HTMLElement.prototype.childRevers = function () { var all_num = this.childElementCount; if (all_num) { while(all_num--){ this.appendChild(this.children[all_num]); } } } // 获取 ul 父节点对象 var oul = document.getElementsByTagName('ul')[0]; oul.childRevers(); 效果:
使用前:
使用后:
2. insertAfter() 方法(相对于 insertBefore() 方法) Node.prototype.insertAfter = function (obj, beforEle) { // 判断该元素是否有下个兄弟元素 if (beforEle.nextElementSibling) { // 有的话使用 insertBefore 在下一个兄弟元素之前添加 beforEle.parentElement.insertBefore(obj, beforEle.nextElementSibling); } else { // 没有的话直接appendChild添加 beforEle.parentElement.appendChild(obj); } } // 要插入的元素 var op = document.createElement('p'); // 父元素 var oul = document.
一、理论 国家统计局同比、环比计算公式
增长速度是反映经济社会某一领域发展变化情况的重要数据,而同比和环比是反映增长速度最基础、最核心的数据指标,也是国际上通用的指标。在统计中, 同比和环比通常是同比变化率和环比变化率的简称,用于表示某一事物在对比期内发展变化的方向和程度。
一、同比基本概念
同比是以上年同期为基期相比较,即本期某一时间段与上年某一时间段相比, 可以理解为今年第 n 月与去年第 n 月的比较。如,2019 年 12 月份与 2018 年 12 月份相比较,2019 年上半年与 2018 年上半年相比较就是同比。同比增长率是指本期和上一年同期相比较的增长率,计算公式为:同比增长率=(本期数-同期数)/同期数×100%。例如,某公司 2019 年上半年利润 3000 万元,为本期数, 同期数就是 2018 年上半年的利润 2000 万元,同比增长率为(3000 - 2000)/ 2000×100% = 50%,即某公司 2019 年上半年利润同比增长 50%。
二、环比基本概念
环比是与上一个相邻统计周期相比较,表明统计指标逐期的发展变化 , 可以理解为第 n 月与第 n-1 月的比较。如,2019 年 12 月份与 2019 年 11 月份相比较,2019 年 1 月份与 2018 年 12 月份相比较就是环比。环比增长率是指本期和上期相比较的增长率,计算公式为:环比增长率 =(本期数-上期数)/上期数 ×100%。例如,某公司 2019 年 6 月份营业额为 100 万元,为本期数,上期数就是 2019 年 5 月份营业额 80 万元,环比增长率为(100 - 80)/ 80×100% =25%,即某公司 2019 年 6 月份营业额环比增长 25%。
起因: 写好备用。
代码:
// 直接把方法写在了原型上,通过原型调用 /** * 倒计时 * time_str String 到期时间('2023-11-28 16:50:00') * dom_obj Object 需要显示的倒计时的dom对象 */ Date.prototype.countdown = function (time_str, dom_obj) { let timer = setInterval(function () { let remaining = new Date(time_str).getTime() - new Date().getTime(); if (remaining > 0) { // 计算 let day = Math.floor(remaining / 1000 / 60 / 60 / 24); let hour = Math.floor((remaining / 1000 / 60 / 60) % 24); let min = Math.
基于FPGA的五子棋游戏设计
本文基于FPGA设计五子棋游戏,使用按键输入,使用VGA接口输出。五子棋的棋具与围棋相同,棋子分为黑白两色,棋盘为10×10,棋子放置于棋盘线交叉点上。两人对局,各执一色,轮流下一子,先将横、竖或斜线的5个或5个以上同色棋子连成不间断的一排者为胜。
VGA技术介绍:
VGA 接口就是显卡上输出模拟信号的接口,也叫 D-Sub 接口。VGA 接口是一种 D
型口,上面共有 15 针空,分成三排,每排五个。VGA 接口是目前中低端电脑配置上的主流口。
VGA显示中,FPGA需要产生5个信号:R、G、B三基色信号,行同步信号HS,场同步信号VS。以上接口的5个孔对应着我们FPGA中产生的5个重要的信号,其中R、G、B是数据信号;HS、VS是控制信号。下面是VGA 显示模块与CRT 显示器的控制框图:
像素是产生各种颜色的基本单元。根据物理学中的混色原理,三色发光的亮度比例适当,可呈现白色。适当的调整发光比例可以出现不同的颜色。三基色混色原理示意图如下图所示:
对于显示器来说,RGB三个信号其实是模拟信号,其电平的高低,可以表示颜色的深浅。利用这个原理,我们就可以产生丰富的色彩。为了控制电压的高低,我们就必须用到DA芯片。例如下图中,FPGA产生RGB三种信号,这时RGB都是多位的数字信号。DA芯片根据数字信号的值,产生不同电压的模拟信号rgb。
DE1-SoC板上有一个15针D-SUB连接器,用于VGA输出。VGA同步信号直接从Cyclone V SoC FPGA和Analog器件ADV7123三路10位高速视频DAC(仅使用较高的8位)转换从数字到模拟的信号代表三种基本颜色(红色,绿色和蓝色)。 它可以支持高达SXGA标准(1280 * 1024),信号以100MHz传输。 下图显示FPGA和VGA之间连接的信号。
显示器采用光栅扫描方式,即轰击荧光屏的电子束在 CRT 屏幕上从左到右(受水平同步信号 HSYNC 控制)、从上到下(受垂直同步信号 VSYNC 控制)做有规律的移动。电子束采用光栅扫描方式,从屏幕左上角一点开始,向右逐点进行扫描,形成一条水平线;到达最右端后,又回到下一条水平线的左端,重复上面的过程;当电子束完成右下角一点的扫描后,形成一帧。此后,电子束又回到左上方起点,开始下一帧的扫描。这种方法也就是常说的逐行扫描显示。
完成一行扫描的时间称为水平扫描时间,其倒数称为行频率;完成一帧(整屏)扫描的时间称为垂直扫描时间,其倒数称为场频率,即刷新一屏的频率,常见的有60Hz,75Hz等等。标准的VGA显示的场频60Hz。
行时序和场时序都需要同步脉冲(Sync a)、显示后沿(Back porch b)、显示时序段(Display interval c)和显示前沿(Front porch d)四部分。VGA工业标准显示模式要求:行同步,场同步都为负极性,即同步脉冲要求是负脉冲。
VGA支持的规格
我们以第一个分辨率640/480来分析,其刷新速率是60Hz,每幅图像有525行,每行有800个值。也就是说完成一幅图像约是1s/60=16.6ms,完成一行约为16.6ms/525=31.75us,完成一个像素传送约来31.75us /800=40ns。因此为了方便设计,接口的时候设为25MHz最方便,每个时钟送一个数据。
VGA时序设计
根据上节的介绍,VGA时序要求如下
VGA时序代码设计
/**********VGA驱动**********/ always@(posedge vga_clk or negedge rst_n)begin if(!rst_n)begin hcount <= 10'd0; end else if(hcount == 10'd799)begin hcount <= 10'd0; end else begin hcount <= hcount+1'b1; end end always@(posedge vga_clk or negedge rst_n)begin if(!
爬虫(Web Scraping)是指通过编程自动化地获取互联网上的信息的过程。爬虫的目的通常是从网页中抓取数据,进行数据分析、处理或展示。以下是爬虫的基本流程和一些重要的概念:
爬虫基本流程:
确定目标: 确定要爬取的网站或网页。
发送请求: 使用编程语言(如Python)发送HTTP请求,获取网页内容。
解析页面: 对获取的页面进行解析,提取出所需的信息。
存储数据: 将提取的信息存储到本地文件、数据库或其他数据存储方式中。
定期更新: 如果需要定期获取信息,可以设置定时运行爬虫。
爬虫的一些重要概念:
User-Agent: 请求头中的一部分,用于标识爬虫的身份。有些网站会检测User-Agent,如果检测到是爬虫,则可能限制访问。
Cookie: 网站为了识别用户身份而存储在用户本地的数据。在爬虫中,有时需要使用Cookie来模拟用户登录状态。
HTTP请求: 使用HTTP协议进行通信,通过GET或POST请求获取网页内容。
HTML解析: 使用解析库(如BeautifulSoup、lxml等)对HTML进行解析,提取所需的信息。
XPath和CSS选择器: 用于在HTML中定位元素的语法,便于提取信息。
Robots.txt: 一种标准,规定了哪些页面可以被爬虫访问,哪些不可以。
反爬虫: 一些网站采取反爬虫策略,如限制请求频率、验证码、动态加载等,爬虫需要相应地处理这些情况。
代理: 通过代理服务器发送请求,避免被封IP。
数据存储: 将爬取到的数据存储到本地文件或数据库中。
爬虫技术在数据采集、搜索引擎、舆情监测等领域有广泛的应用,但在使用爬虫时需要遵守法律法规和网站的使用规定,以及尊重隐私和版权。
示例:
import os import urllib.request from urllib.parse import quote import re import urllib.error import requests import time # 设置请求头获取Cookie get_cookie_headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) " "Chrome/92.0.4515.159 Safari/537.36 "} get_cookie_html = "
1、基于java的ebuy电商项目系统(源代码+讲解视频)
2、基于java的学生选课管理系统(源代码+讲解视频+数据库)
3、基于java的新闻网网站系统(源代码+讲解视频+数据库)
4、基于java的HTML5的实时聊天工具的设计与实现(源代码+讲解视频)
5、基于java的SSH框架的物流配送管理系统(源代码+讲解视频+数据库)
6、基于java的音乐推荐系统(源代码+讲解视频+数据库)
7、基于java的校园即时服务平台系统(源代码+讲解视频+数据库)
8、基于java的出租公司管理系统(源代码+讲解视频+数据库)
9、基于java的企业办公OA系统(源代码+讲解视频+数据库)
10、基于java的计算机专业认证在线考试系统(源代码+讲解视频+数据库)
11、基于java的毕业设计管理系统(源代码+讲解视频+数据库)
12、基于java的校园二手交易市场(源代码+讲解视频+数据库)
13、基于java的个人博客项目(源代码+讲解视频+数据库)
14、基于java的宿舍管理系统(源代码+讲解视频+数据库)
15、基于java的聊天系统(源代码+讲解视频+数据库)
16、基于jsp的健身俱乐部会员系统设计与实现(项目报告+答辩PPT+源代码+数据库+截图+部署视频)
17、基于java的远程视频会议系统毕业设计与实现(源代码+项目报告)
18、基于Java的敬老院管理系统设计与实现(项目报告+答辩PPT+源代码+数据库+截图+部署视频)
19、基于Java的学生成绩在线管理系统设计与实现(源代码+数据库+部署文档+部署视频)
20、基于Java的教务查询系统设计与实现(源代码+数据库+部署文档+部署视频)
21、基于Java的学生宿舍管理系统设计与实现(源代码+数据库+部署文档+部署视频)
22、基于jsp的网上体育商城系统设计与实现(项目报告+答辩PPT+源代码+数据库+截图+部署视频)
23、基于jsp的农产品销售管理系统设计与实现(项目报告+答辩PPT+源代码+数据库+截图+部署视频)
24、基于jsp的网络spider技术的网络新闻分析系统设计与实现(项目报告+源代码+数据库+部署视频)
25、基于jsp的码头船只出行管理系统设计与实现(项目报告+答辩PPT+源代码+数据库+截图+部署视频)
26、基于jsp的网上购物系统设计与实现(项目报告+答辩PPT+源代码+数据库+截图+部署视频)
27、基于jsp的网上招聘系统设计与实现(项目报告+答辩PPT+源代码+数据库+截图+部署视频)
28、基于jsp的物流信息网系统设计与实现(项目报告+答辩PPT+源代码+数据库+部署视频)
29、基于jsp的酒店管理系统设计与实现(项目报告+答辩PPT+源代码+数据库+部署视频)
30、基于jsp的企业电子投票系统设计与实现(项目报告+答辩PPT+源代码+数据库+截图+部署视频)
31、基于jsp的网上购书系统设计与实现(项目报告+答辩PPT+源代码+数据库+截图+部署视频)
32、基于jsp的网上订餐管理系统设计与实现(项目报告+答辩PPT+源代码+数据库+截图+部署视频)
33、基于jsp的网上招标系统设计与实现(项目报告+答辩PPT+源代码+数据库+截图+部署视频)
34、基于jsp的企业快信系统设计与实现(项目报告+答辩PPT+源代码+数据库+截图+部署视频)
35、基于Java的饮食分享平台系统设计与实现(源代码+数据库+部署文档+部署视频)
36、基于jsp的企业员工信息管理系统设计与实现(项目报告+答辩PPT+源代码+数据库+部署视频)
37、基于jsp的文章发布系统设计与实现(项目报告+答辩PPT+源代码+数据库+截图+部署视频)
38、基于jsp的挖掘机配件营销系统设计与实现(项目报告+答辩PPT+源代码+数据库+截图+部署视频)
39、基于jsp的企业合同管理系统设计与实现(项目报告+源代码+数据库+部署视频)
40、基于jsp的动漫论坛系统设计与实现(项目报告+答辩PPT+源代码+数据库+部署视频)
41、基于jsp的电脑彩票销售管理系统设计与实现(项目报告+答辩PPT+源代码+部署视频)
42、基于jsp的个人博客系统设计与实现(项目报告+答辩PPT+源代码+数据库+截图+部署视频)
43、基于jsp的户籍管理系统设计与实现(项目报告+答辩PPT+源代码+数据库+截图+部署视频)
44、基于jsp的进销存管理系统设计与实现(项目报告+答辩PPT+源代码+数据库+截图+部署视频)
45、基于jsp的高校固定资产管理系统设计与实现(项目报告+答辩PPT+源代码+数据库+截图+部署视频)
46、基于jsp的城市公交查询系统设计与实现(项目报告+答辩PPT+源代码+数据库+截图+部署视频)
47、基于jsp的电子书下载系统设计与实现(项目报告+答辩PPT+源代码+数据库+截图+部署视频)
48、基于jsp的记账管理系统设计与实现(项目报告+答辩PPT+源代码+数据库+部署视频)
49、基于jsp的合同管理系统设计与实现(项目报告+源代码+数据库+部署视频)
50、基于jsp的电子服务网站系统设计与实现(项目报告+源代码+数据库+部署视频)
51、基于jsp的高校网上订餐系统设计与实现(项目报告+答辩PPT+源代码+数据库+截图+部署视频)
52、基于jsp的车辆管理系统设计与实现(项目报告+源代码+数据库+部署视频)
53、基于Java的图书管理系统设计与实现(源代码+数据库+部署文档+部署视频)
54、基于Java的飞机大战游戏系统设计与实现(项目报告+源代码+部署视频)
55、基于Java的陶瓷工厂进销存管理系统设计与实现(项目报告+答辩PPT+源代码+数据库+部署视频)
56、基于Java的叮当书城系统设计与实现(源代码+数据库+部署文档+部署视频)
57、基于Java的搜索引擎系统设计与实现(项目报告+开题报告+答辩PPT+源代码+数据库+部署视频)
58、基于Java的出租车计价器系统设计与实现(项目报告+答辩PPT+源代码+数据库+截图+部署视频)
59、基于Java的商品供应管理系统设计与实现(项目报告+答辩PPT+源代码+数据库+部署视频)
60、基于Java的俄罗斯方块游戏系统设计与实现(项目报告+答辩PPT+源代码+数据库+截图+部署视频)
61、基于ssh的婴幼儿产品销售系统设计与实现(项目报告+答辩PPT+源代码+数据库+截图+部署视频)
62、基于Java的扫雷游戏系统设计与实现(项目报告+答辩PPT+源代码+数据库+截图+部署视频)
63、基于Java的私人牙科诊所管理系统设计与实现(项目报告+答辩PPT+源代码+数据库+截图+部署视频)
64、基于Java的家教系统设计与实现(源代码+数据库+部署视频)
65、基于ssh的任务调度系统设计与实现(项目报告+答辩PPT+源代码+数据库+截图+部署视频)
66、基于Java网站即时通讯系统设计与实现(项目报告+答辩PPT+源代码+数据库+截图+部署视频)
67、基于Java的旅游网站系统设计与实现(项目报告+答辩PPT+源代码+数据库+截图+部署视频)
68、基于Java的人力资源管理系统设计与实现(源代码+数据库+部署文档+部署视频)
69、基于Java的健身房管理系统设计与实现(源代码+数据库+部署文档+部署视频)
这个问题是由选错GPU编号导致,改成正确的就好。
问题 RuntimeError: CUDA error: invalid device ordinal CUDA kernel errors might be asynchronously reported at some other API call, so the stacktrace below might be incorrect. For debugging consider passing CUDA_LAUNCH_BLOCKING=1. Compile with `TORCH_USE_CUDA_DSA` to enable device-side assertions. 解决办法 "cuda:2"改成"cuda:0"
参考资料 CUDA error: invalid device ordinal when using python 3.9
文章目录 基础命令挂载新硬盘/分区添加内存交换分区swaplvm分区管理模式 基础命令 查看目录文件大小
du -sh /backup du -sh /backup/* du -sh * 查看磁盘挂载信息
df -lhT 查看某个目录挂载在哪个分区,以及分区的磁盘使用情况
df [目录] #例如:df /home 查看设备列表
fdisk -l 分区核心指令
fdisk /dev/sdb # 对磁盘/dev/sdb进行分区管理 a :设置可引导标记 b :修改bsd的磁盘标签 c :设置DOS操作系统兼容标记 d :删除一个分区 l :显示已知的分区类型,其中82为Linux swap分区,83为Linux分区 m :显示帮助信息 n :增加一个新的分区 o :创建一个新的空白的DOS分区表 p :显示磁盘当前的分区表 q :退出fdisk程序,不保存任何修改 s :创建一个新的空白的Sun磁盘标签 t :改变一个分区的系统号码(比如把Linux Swap分区改为Linux分区) u :改变显示记录单位 v :对磁盘分区表进行验证 w :保存修改结果并退出fdisk程序 x :特殊功能 查看磁盘UUID
blkid 查看已挂载的分区和未挂载的分区
lsblk 可以看到有哪些分区挂载,哪些分区没有挂载
或者,查看已挂载的分区情况
1.打开控制面板>程序和功能>查看已安装的更新。
2.在卸载更新列表中,鼠标右键卸载KB5031356补丁,重启电脑就可以了。
ps:大部分人的电脑这样是可以的,周围的同事也都能打开了,但是我的电脑找不到KB5031356补丁,所以还是打不开。
* ———————————————————— *
如果找不到KB5031356补丁,就只能试一下这个方法。
1.在电脑桌面单击右键,选择新建->快捷方式。
2.如下图,在输入框中输入mshta.exe javascript:open();close(),点击下一步。
3.输入快捷方式的名称,点击完成。
4.点击桌面新建的快捷方式图标,打开界面如下图。
* ———————————————————— *
省时间下边的不要看了,2023年10月之前的IE可以按照以下修改。
有一些软件后台还依赖于老版的IE,现在IE默认的都是打开edge,所以还得设置一下。
1.首先打开IE浏览器点击“工具”图标(或者在IE浏览器直接按快捷键Alt+X),点击“Internat选项”后选择“高级”选项卡,取消勾选“启用第三方浏览器扩展*”如下图。
2.点击确定就可以了。
任何人只要有权访问加密数据就能对其进行解密吗? 是的,TDE 旨在让客户能够透明地在数据库中进行加密,而不会影响现有应用。以加密格式返回数据会破坏大多数现有应用。TDE 的优势在于,加密不会产生传统数据库加密解决方案所产生的开销,传统的方案通常需要对应用进行更改,包括使用数据库触发器和视图,因而费时费力,成本高昂。不过,客户可以使用 Oracle Database Vault 保护应用数据,防止 DBA 及其他超级用户的不当使用,还可以对数据库和应用实施强大的访问权限控制。
TDE 会带来哪些开销? 表 A:TDE 会带来哪些开销? TDE 表空间加密
(Oracle Database 11g)TDE 列加密
(Oracle Database 10gR2、
Oracle Database 11g)存储没有额外的存储开销。TDE 列加密带来的存储开销为每个加密值 1 到 52 个字节。 必需:对于 AES,填充到下一个 16 字节;对于 3DES168,填充到下一个 8 字节。所以,如果一个值需要 9 个字节的存储空间,加密该值将需要额外 7 个字节的存储空间(对于 AES)。可选:额外 20 个字节的完整性检查可选:如果为加密列指定了“SALT”,每个值将需要额外 16 个字节的存储空间。了解这些数字有助于进行存储规划,但 DBA 和开发人员不用手动为 TDE 列加密扩大列存储空间,因为在将某列标记为“encrypted”时,TDE 会透明地完成这项任务。
用户可以选择 'no salt' 选项来减少所需额外存储空间(可节省 16 个字节),还可以选择 'nomac' 选项(10.2.0.4、11.1.0.7 和 Oracle Database 11g 第 2 版中提供该选项)来消除为每个加密字段计算和存储 20 字节散列值而需要的额外的 CPU 周期和磁盘空间。
目录
DDPM基本原理
DDPM中的Unet模块
Unet模块介绍
Unet流程示意图
DownBlock和UpBlock
MiddleBlock
文生图模型的一般公式
总结
本文部分内容参考文章:https://juejin.cn/post/7251391372394053691,https://zhuanlan.zhihu.com/p/563661713,感谢博主的辛苦工作,本文尽量去繁就简去理解DDPM的原理
论文地址: http://arxiv.org/abs/2006.11239
代码地址1: https://github.com/hojonathanho/diffusion (论文对应代码 tensorflow)
DDPM基本原理 DDPM(Denoising Diffusion Probalistic Models)的目标是学习训练数据的分布,产出尽可能符合训练数据分布的真实图片。训练过程分为两步:
Diffusion Process (又被称为正向扩散)
如下图,正向扩散的过程进行了1000步的加噪,每一步time_step都往图片上加入一个高斯分布的噪声,直到图片变为一个纯高斯分布的噪声。完成Dif fusion Process过程。
Denoise Process(又被称为逆向去噪)
如下图,逆向去噪的过程从第T个timestep开始,模型的输入为加噪后的图像xt与当前timestep。输入timestep的目的是由于模型每一步去噪用的都是同一个模型,所以需要告诉模型进行的是哪一步去噪。因此,timestep类似于transformer中的位置编码,将一个常数转换为一个向量再和输入的图片进行相加。模型中蕴含一个噪声预测器(UNet),它会根据当前的输入预测出噪声,然后,将当前图片减去预测出来的噪声,就可以得到去噪后的图片。重复这个过程,直到还原出原始图片x0为止。
DDPM中的Unet模块 Unet模块介绍 在Encoder部分中,UNet模型会逐步压缩图片的大小;在Decoder部分中,则会逐步还原图片的大小。同时在Encoder和Deocder间,还会使用“残差连接”,确保Decoder部分在推理和还原图片信息时,不会丢失掉之前步骤的信息。Unet模块的输入为加噪的图像和当前的TimeStep, 示意图如下:
Unet流程示意图 如下图,左半边为UNet的Encoder部分,右半边为UNet的Deocder部分,最下面为MiddleBlock。输入为一张32*32*3大小的图片,在Encoder部分的第二行,输入是一个16*16*64的图片,它是由上一行最右侧32*32*64的图片压缩而来(DownSample)。对于这张16*16*64大小的图片,在引入time_embedding后,让它们一起过一层DownBlock,得到大小为16*16*128的图片。再引入time_embedding,再过一次DownBlock,得到大小同样为16*16*128的图片。对该图片做DowSample,就可以得到第三层的输入,也就是大小为8*8*128的图片。由此不难知道,同层间只做channel上的变化,不同层间做图片的压缩处理。
DownBlock和UpBlock 这个模块非常重要,已知Unet模块的输入为图像和timestep,那么就需要将timestep转换为一个向量并和图像相加,才外还需要用Attention机制。那么这两个trick是怎么发挥作用的呢?如下图所示,TimeEmbedding层采用和Transformer一致的三角函数位置编码,将常数转变为向量。Attention层则是沿着channel维度将图片拆分为token,做完attention后再重新组装成图片(注意Attention层不是必须的,是可选的)。虚线部分即为“残差连接”(Residual Connection) ,而残差连接之上引入的虚线框Conv的意思是,如果in_c = out_c,则对in_c做一次卷积,使得其通道数等于out_c后,再相加;否则将直接相加。
MiddleBlock 和DownBlock与UpBlock过程类似,接在下采样和上采样的中间。
文生图模型的一般公式 训练完成的DDPM模型可以产生逼真的图片,然后就可以进一步用文字信息去引导它产生符合我们意图的模型了。通常来说,文生图模型遵循以下公式
Text Encoder: 一个能对输入文字做语义解析的Encoder,一般是一个预训练好的模型。在实际应用中,CLIP模型由于在训练过程中采用了图像和文字的对比学习,使得学得的文字特征对图像更加具有鲁棒性,因此它的text encoder常被直接用来做文生图模型的text encoder(比如DALLE2)
Generation Model: 输入为文字token和图片噪声,输出为一个关于图片的压缩产物(latent space)。这里通常指的就是扩散模型,采用文字作为引导(guidance)的扩散模型原理,如DDPM、DDIM等扩散模型。
Decoder: 用图片的中间产物作为输入,产出最终的图片。Decoder的选择也有很多,同样也能用一个扩散模型作为Decoder。
总结 Stable Diffusion主要包含三个模块:
VAE模块:Variational Auto Encoder, ELBO loss, KL loss, GAN,Variational Auto Encoder
目录
模型概述
Transformer输入
Word Embedding
Positional Encoding
Transformer的输出
Self Attention
Multi-Head Attention
Encoder结构
最后层的输出
Masked Multi-Head Attention
Decoder输入
Decoder的输出
Transformer训练和推理过程
《Attention is All You Need》
论文地址:https://arxiv.org/abs/1706.03762
原理解读:https://blog.csdn.net/m0_47256162/article/details/127339899
本文的内容参考来自👆这篇博客,感谢博主的辛苦工作~
模型概述 Transformer模块主要包含Encoders和Decoders两个部分
Transformer输入 以一个翻译的例子理解transformer原理过程:
整个模型的输入是中文我爱你,目标是将其翻译成英文的I love you,但是对于中文我爱你模型是无法训练的,要将其数值化再送入模型当中。将中文转成数值一般有两种方法:
One Hot编码:形成高维向量,向量的维度为词袋大小,如果是中文,向量的维度就是所有汉字的数量,然后是哪个字就将对应位置变为1,其它位置为0。
Embedding词嵌入:通过网络进行训练或者通过一些训练好的模型将其转化成连续性的向量。(常用)
Word Embedding Embedding可以使用一些预训练好的模型比如word2vec得到,通过Embedding会将每个字形成一个连续型向量,这里假设嵌入维度为5,所以是使用一个维度为5的向量来表示一个字。嵌入后输入的向量维度为[序列长度, 嵌入维度], [3, 5]。
Positional Encoding 由于Transformer中使用的是自注意力机制来提取信息,虽然处理每个字的时候能够考虑到所有字对其的影响,但是并没有考虑到各个字相互之间的位置信息,也就是上下文,例如如果输入序列变为爱我你,如果仅使用自注意力机制那么输出应该是一样的,所以需要添加整个序列的位置信息。
在Transformer中使用的是位置编码来表示单词的顺序信息,位置信息也是通过Embedding进行表示,对于位置编码来说有两种方式可以得到:
通过Embedding进行训练
通过公式计算
Transformer中使用公式将每个位置信息进行编码,然后将这个编码信息和对应位置词的编码进行相加,让自注意力机制同时考虑词的顺序信息,同时又可考虑到所有输入的词。
Transformer的输出 对于Transformer的输出就是翻译出的:I love you,由于需要预测出每个字需要翻译为哪个词,所以这是个多分类问题(Softmax),相当于做词个数个多分类问题,每个位置对应的输出的维度应为所有单词的个数,每个维度对应预测为该词的概率,概率最大位置对应的词就是该位置预测出翻译的词。输出n个词,每个词对应的维度为词袋的个数,第一个位置预测为I,说明对应该向量I单词对应的概率最大。
Self Attention Transformer中最重要的模块就是自注意力机制,Self-Attention自注意力机制有三个输入,分别是Q(查询)、K(键)、V(值)。经过注意力机制后就会得到词个数个新的编码向量,新的编码向量由于采用了注意力机制就会考虑到其它词对其的影响,影响程度就由注意力分数所影响。
注意力机制有几个步骤:
根据输入向量x计算对应q、k、v
用自己的查询向量q和其它词的k做点积来计算注意力分数
将得到的注意力分数进行Softmax
将注意力分数与各个词的v向量相乘得到加权表示向量
为了得到Q、K、V,需要使用三个不同的权重矩阵,然后与输入矩阵相乘,然后将输入矩阵X映射到一个新的维度空间,然后就可以利用得到的Q、K、V计算相应的注意力分数和加权向量。得到的Q、K、V行代表的是每个词,就是每个词对应的q向量。
由上面可知Q、K、V矩阵,然后利用Q和K相乘得到不同词之间的注意力分数。
为了提高并行度,利用矩阵进行运算,将Q和K的转置相乘,这样就会得到一个方型矩阵,矩阵的每个元素代表每个词对其它词的注意力分数。
然后对得到的注意力分数进行Softmax操作来归一化,这样每一行的分数加起来就为1。然后利用归一化后的注意力分数然后与V进行相乘得到各个词的加权向量,得到的Z每一行代表每个词的新的编码向量。
Multi-Head Attention Transformer中采用的是Multi-Head Attention(多头注意力机制),它可以类比CNN中的多个kernel,CNN中每个kernel可以理解为提取不同模式的特征图,所以这里也引入了这个机制,不同的头可以提取出不同的语义信息。多头注意力机制就是采用了多个的Self-Attention,这样每一次就会得到多组的Z,比如这里我们设置头的个数为8,那么我们就会得到8个Z矩阵。
在Ubuntu的命令行系统中连接WiFi的步骤如下:
打开终端,输入以下命令安装必要的软件: sudo apt-get update sudo apt-get install wireless-tools wpasupplicant 扫描可用的WiFi网络: sudo iwlist wlan0 scan 其中,wlan0是无线网卡的名称,可以根据实际情况进行修改。
编辑WiFi配置文件: sudo nano /etc/wpa_supplicant/wpa_supplicant.conf 在文件末尾添加以下内容:
network={ ssid="WiFi名称" psk="WiFi密码" } 其中,ssid是WiFi名称,psk是WiFi密码。
运行以下命令连接WiFi: sudo wpa_supplicant -B -i wlan0 -c /etc/wpa_supplicant/wpa_supplicant.conf sudo dhclient wlan0 其中,wlan0是无线网卡的名称,可以根据实际情况进行修改。
如果连接成功,终端会输出IP地址等信息。
如果出现如下报错:
ctrl_iface exists and seems to be in use - cannot override it Delete ‘/var/run/wpa_supplicant/wlo1’ manually if it is not used anymore Failed to initialize control interface ‘/var/run/wpa_supplicant’. You may have another wpa_supplicant process already running or the file was left by an unclean termination of wpa_supplicant in which case you will need to manually remove this file before starting wpa_supplicant again.
HTTP请求方法 HTTP请求方法一共有9种,为 GET、POST、HEAD、OPTIONS、PUT、PATCH、DELETE、TRACE、CONNECT。
GET 【获取资源】本质就是发送一个请求来取得服务器上的某一资源。资源通过一组HTTP头和呈现数据(如HTML文本,或者图片或者视频等)返回给客户端。GET请求中,永远不会包含呈现数据。 即GET请求只用来向服务器获取资源,而GET请求本身不应该携带任何呈现数据。
POST 【传输实体文本】向指定资源提交数据进行处理请求。数据被包含在POST请求体中(例如提交表单或者上传文件)。POST 请求可能会导致新的资源的建立或已有资源的修改。
几种注解的区别 @GetMapping 用于将GET请求映射到控制器处理方法上。具体来说,@GetMapping是一个作为快捷方式的组合注解等价于 @RequestMapping(method = RequestMethod.GET)。
@PostMapping 用于将POST请求映射到控制器处理方法上。具体来说,@PostMapping是一个作为快捷方式的组合注解等价于@RequestMapping(method = RequestMethod.POST)。
@RequestMapping 用于将任意HTTP 请求映射到控制器方法上。@RequestMapping表示共享映射,如果没有指定请求方式,将接收GET、POST、HEAD、OPTIONS、PUT、PATCH、DELETE、TRACE、CONNECT所有的HTTP请求方式。@GetMapping、@PostMapping、@PutMapping、@DeleteMapping、@PatchMapping 都是HTTP方法特有的快捷方式@RequestMapping的变体。
@RequestMapping 注解可以在控制器类的级别和/或其中的方法的级别上使用。
在类的级别上的注解会将一个特定请求或者请求模式映射到一个控制器之上。之后你还可以另外添加方法级别的注解来进一步指定到处理方法的映射关系。
需要注意的是,大多数控制器方法都应该映射到一个特定的HTTP方法,而不是使用@RequestMapping共享映射。
参考博客链接:https://blog.csdn.net/demo_yo/article/details/123595846
1. 苍穹外卖的模块 苍穹外卖大方向上主要分为管理端和用户端
管理端使用vue开发,主要是商家来使用,提供餐品的管理功能,主要有下面几个模块:
员工模块,提供员工账号的登录功能和管理功能分类、菜品、套餐模块,分别对分类、菜品和套餐进行增删改查和启用禁用订单模块,可以搜索和查看订单,变更订单状态统计模块,统计营业额、用户、订单和销量排名,还有Excel报表导出功能工作台模块,提供今日运营数据数据以及订单、菜品、套餐的总览 用户端使用微信小程序开发,主要是给用户提供点餐功能
登录模块,调用微信小程序登录接口实现登录功能
菜品、套餐模块,用于查询菜品、套餐的信息
购物车模块,在购物车中添加或删除套餐菜品
订单模块,提供下单、微信支付、查询订单、取消订单、再来一单、催单功能。
2. 管理端账号密码的登录流程 登录的本质就是对员工表进行查询操作
首先要接收前端发送的账号和密码然后根据账号在数据库员工表进行查询,如果没有查到,说明此账号不存在,可以直接给前端返回一个提示,如果查询到了说明这个账号存在接下来就要进行前端传入密码和数据库查询到的密码比对,由于数据库的密码是加密保存的,所以在比对之前,还需要对前端传入的秘密进行加密;如果比对失败,说明用户提供的密码不对,可以直接给前端返回一个提示;如果比对没有问题,说明用户提供的账户和密码是正确的,此时登录成功登录成功之后,需要生成一个标识用户身份的token,返回给前端,前端会将token保存起来用户后面访问系统的时候,需要携带着这个token,而我们后端需要编写一个拦截器,用于拦截请求,校验token校验通过,则放行请求,正常访问;校验失败,则禁止通行,返回提示 3. 前端小程序的微信登录流程 微信登录的核心是通过微信小程序提供的临时凭证code换取永久凭证openid的过程
首先微信小程序会向微信官方申请一个临时登录code然后,小程序带着code向后台服务发送请求后台接收到code后,会调用微信官方接口验证code是否合法,如果合法,官方会返回一个openid;这个openid就是此用户在我们系统中的唯一标识,同时也代表用户身份合法后台服务接收到来着微信的openid之后,会去数据库查询一下是否存在此账户;如果存在,代表这是一个老用户,如果不存在,则代表这是一个新用户首次使用我们的系统,我们需要将其信息保存到用户表中登录成功之后,需要生成一个标识用户身份的token,返回给前端,前端会将token保存起来用户后面访问系统的时候,需要携带着这个token,而我们后端需要编写一个拦截器,用于拦截请求,校验token校验通过,则放行请求,正常访问;校验失败,则禁止通行,返回提示 4. ThreadLocal 在项目中的应用 ThreadLocal 称为线程局部变量,可以为每个线程单独提供一份存储空间,它的特点是:线程之内,数据共享;线程之间,数据隔离。
在我们的项目中经常使用ThreadLocal来存储用户的登录信息,具体的做法是:
每次用户访问后台都需要经过拦截器鉴权,如果鉴权通过,我们就将登录用户的信息保存到ThreadLocal中
接下来,在项目的各个代码中就可以轻松的从ThreadLocal中获取用户信息了
最后,当请求访问完服务离开的时候,还会再次经过拦截器,这个时候就可以清理掉ThreadLocal中的内容了
5. 项目是如何进行异常处理的 在我们的项目中,异常处理都是通过spring的全局异常处理器来实现的,核心是两个注解:
一个是@RestControllerAdvice,标注在类上,可以定义全局异常处理类对异常进行拦截一个是@ExceptionHandler,标注在异常处理类中的方法上,可以声明每个方法能够处理的异常类型 在我们的项目中,将异常分为了三大类:
在苍穹外卖项目的全局异常处理器中一般定义三种异常:
第一类是指定异常,指定异常指的是用户操作产生的与程序设计相关的异常,比如说字段重复异常、Validation校验异常等等,这类异常捕获之后,我们会根据异常的消息提示,给前端一个确定的返回结果第二类是业务异常处理,业务异常是由于用户不正当操作产生的与业务相关的的异常,这种异常往往需要我们自定义,然后在程序的相关位置手动抛出,在抛出的时候还会指定异常提示信息。然后异常处理器捕获之后,直接将异常提示消息返回给前端第三种异常时兜底异常,此处主要捕获的是不属于上面两种异常的异常,一般是一些程序员代码不够严谨引发的运行时异常,对于这些异常,我们处理方案是首先要把错误记录到日志系统中,然后给前端一个类似于服务器开小差了之类的统一提示 6. 项目是如何存储文件的 在我使用过的文件存储中,主要有三类存储方式
直接将文件保存到服务到硬盘,这种方式操作方便,但是扩容困难,而且安全保障不高,现在基本不再使用使用一些付费的第三方存储服务,比如阿里云或者七牛云,这种方式无需自己公司提供服务器和相关软件,并且安全性和扩展性都不需要自己再进行考虑,但是不适合存储一些敏感文件将文件保存在公司自己搭建的一些分布式系统中,比如我们公司用过MinIO和FastDFS,它需要我们自己准备服务器,安装维护软件,好处是文件都存放在自己的服务器上,隐私性比较好 至于如何选择服务器,我认为目前主要考虑的就是分布式文件存储系统和第三方服务
如果文件是隐私性比较高,建议使用自己搭建的分布式文件存储系统如果文件隐私性不高,可以考虑使用第三方服务 我们项目中主要存储的文件是一些菜品或者套餐的图片,不涉及什么隐私问题,所以选择了阿里云服务
7. 项目是如何进行参数校验的 我们项目中的校验是使用validation技术实现的,它的核心是一些具有特定意义的注解
这些注解主要标注在请求参数或者是参数对象对应类的属性上,每个注解都有自己的校验规则。
如果我们输入的请求参数不符合对应的校验规则,系统就会抛出异常,此时我们只需要在全局异常处理器中捕获异常,然后给前端提示即可。
我们常用的注解有下面这些:
@Null 可以标注在任意类型元素上,被标注的元素必须为null
@NotEmpty 可以标注 在字符串,集合,数组,map上,被标注的元素必须不能为 null ,也不能是空串
@Range 标注在字符串和数值的大小必须在指定的范围内,对于null无效
@Digits(integer(数值的位数) =3 , fraction(小数的位数)=2)
@size(min=,max=) 可以标注在字符串,数组,集合,map用于控制长度
@Email 邮箱
@URL 合法的地址
8. 如何理解分组校验 很多情况下,我们会将校验规则写到实体类中的属性上,而这个实体类有可能作为不同功能方法的参数使用,而不同的功能对象参数对象中属性的要求是不一样的。比如我们在新增和修改一个用户对象时,都会接收User对象作为请求参数,但是新增要求对象的id为空,而修改则要求id字段不能为空。这个时候就需要使用到分组校验了分组校验其实就是定义多套校验规则,对于指定的功能,我们按照要求指定它使用哪套规则即可
d3dx9_39.dll丢失你们都遇到过么?其实这个dll文件的丢失,一般是喜欢玩游戏的朋友会经常遇到的,小编觉得很有必要来给大家详细的说一下这方面的事情,教大家关于d3dx9_39.dll丢失问题及其解决方法,好了,我们废话也不多说,直接进入正题。
一.d3dx9_39.dll文件简介 "d3dx9_39.dll"是一种被DirectX引用的动态链接库(DLL)文件。DirectX是由微软公司开发的一套接口,包含了使电脑能够高效率地运行富集成图像的应用程序的功能,如3D图像和全屏视频等。根据使用的DirectX的版本,这些文件名可以略有不同,以说明该文件与哪个版本最为相关。
二.d3dx9_39.dll文件丢失的原因 可能会有许多原因导致"d3dx9_39.dll"文件丢失。其中最常见的原因是某个病毒或恶意软件感染了你的电脑,从而导致文件被删除或破坏。另一个原因可能是电脑上某个软件卸载过程中将这个共享的DLL文件错误地删除了。还有可能在电脑磁盘进行整理或清理时,误操作删除了这个文件。
三.解决d3dx9_39.dll丢失问题的方法 要解决d3dx9_39.dll文件丢失的问题,主要有以下几种解决办法:
重新安装DirectX: 重新安装DirectX的操作步骤如下:
步骤1:卸载当前的DirectX
打开'控制面板'。
点击'程序'或者'程序和功能'(视具体系统的不同有所差异)。
在窗口中找到DirectX,点击它。
选择'卸载/更改',然后按照系统提示来完成卸载过程。
注意:在Windows 8和10的最新版本中,并没有提供直接卸载DirectX的选项。在这种情况下,你可以跳过这一步,直接进行步骤2。
步骤2:下载新版DirectX
打开浏览器,访问微软的官方网站。
在搜索框输入"DirectX",并点击搜索。
从搜索结果中找到最新版的DirectX下载页面(通常会包含名字如“DirectX End-User Runtime Web Installer”或“DirectX 12”等),点击进入。
点击'下载'按钮,等待下载完成。
步骤3:安装新版DirectX
双击下载好的DirectX安装程序(.exe文件)。
按照屏幕上的指示接受许可协议,然后点击'下一步'。
如果你不希望装额外的辅助软件,记得取消勾选'安装Bing Bar'类似的选项。
点击'下一步',然后等待DirectX安装结束。
安装完成后,重启你的计算机,让新的设置生效。
完成以上步骤后,你就成功地卸载并重新安装了DirectX,此时运行需要DirectX支持的应用程序,应该不会再遇到丢失d3dx9_39.dll文件的问题。
从DLL下载网站下载并替换d3dx9_39.dll: 步骤1:在线搜索
首先,打开你的网络浏览器,将"d3dx9_39.dll download"输入到你的搜索引擎(如Google,百度等)进行搜索。
步骤2:找到可靠的DLL文件下载站点
在搜索结果中,选择一个比较可信赖的网站进行下载。需要注意的是,由于许多网站可能存在安全风险,在点击下载之前,务必确保你的选择相对安全。
步骤3:下载d3dx9_39.dll
在找到的下载页面上,通常会给出不同版本的d3dx9_39.dll文件供用户选择,你可以根据你的操作系统是32位还是64位,下载对应的版本。点击下载后,文件通常会被保存在默认的下载文件夹。
步骤4:解压下载的zip文件
下载的DLL文件通常为zip格式,需要解压后使用。右键点击已下载的zip文件,然后选择“解压缩”或“提取所有”,然后遵循提示。
步骤5:复制d3dx9_39.dll文件
接下来,你需要将解压后的d3dx9_39.dll文件复制进你的系统文件夹。如果你的系统是32位的,那么复制到C:\Windows\System32\目录;如果是64位的,复制到C:\Windows\SysWOW64\目录。
步骤6:注册d3dx9_39.dll
点击"开始"按钮,输入"cmd"进入命令行模式。如果你是Windows 10用户,需要右键命令提示符并选择以管理员身份运行。
在命令提示符窗口,针对32位系统,输入"regsvr32 C:\Windows\System32\d3dx9_39.dll";而对于64位系统,输入"regsvr32 C:\Windows\SysWOW64\d3dx9_39.dll",然后按回车。
完成以上步骤后,你应该已经成功地下载并替换了丢失的d3dx9_39.dll。如果重新启动电脑后,丢失d3dx9_39.dll的问题仍然存在,你可能需要尝试其他的解决方法。
使用dll修复工具: 在任意的浏览器上车俞入:dll修复.site 然后按确认Enter键就可以了
进入站点之后下载,直接使用就可以了
点击一键修复dll错误的按钮,就会自动的帮你扫描电脑系统中缺失的dll文件
等扫描完毕后,再点击修复,然后静待修复完成就可以了。
最后就是关机重启一下就能修复d3dx9_39.dll完成。(也可以选择手动修复,在dll修复工具上,选择手动修复,然后输入d3dx9_39.dll文件,直接查找,下载安装就可以了。)
如果想要快速的修复d3dx9_39.dll文件,那么建议使用dll修复工具,它的一键修复工具会方便很多。
DLL修复工具_一键修复所有dll缺失msvcp140.dll丢失的解决方法–电脑修复精灵
四.d3dx9_39.dll文件属性 文件名称: d3dx9_39.dll
描述: 它属于 DirectX 模块的一部分,具体是Direct3D 9 Extensions 系列模块,主要用于提供在Windows环境下运行或者开发游戏时所需要的各种3D图像处理功能。
2023年11月
微信小程序,经常出现部分设备出现无法调起照片选择,无法调起拍照,无法调起蓝牙等情况,离奇的是过几天又自己好了。
如果出现类似事件,可以尝试补充隐私协议授权声明,过审后即可恢复
vuex状态管理watch监听在ios上存在的bug记录 场景:使用this.$store.watch监听某个state值变化,触发事件
预期:监听到每一次变化,均做对应处理
实际:在ios上连续触发三次及以上改变,仅能监听到第一次和最后一次
解决:还是老老实实用回调函数吧
万字总结:全文阅读时间预计15分钟 一、什么是Prompt二、Prompt的类型2.1单词标签 (Word Tags)2.2自然语言 (Natural Language)2.3 Emoji和颜文字 (Emoji and emoticons)2.4标点符号 (Punctuation) 三、如何撰写Prompt3.1主题 (Subject)3.2 媒介 (Medium)3.3 风格 (Style)3.4艺术家 (Artist)3.5网站 (Website)3.6质量 (Quality)3.7附加细节 (Additional details)3.8色彩色调 (Color)3.9 灯光 (Lighting)3.10反向提示词 (Negative Prompt) 四、Prompt进阶4.1长度 (length)4.2词序 (word order)4.3 权重 (weight)4.4 提示编辑 (Prompt editing)4.5 交替渲染 (Alternating rendering)4.6 可组合扩散 (Composable diffusion)4.7 提示矩阵 (prompt matrix)4.8 提示词相关性 (CFG Scale) 五、Prompt(提示词)手册 本文系统、专业、详尽地介绍了Stable Diffusion的提示词Prompt的大量专业知识。大家可以通过polychat.cn体验文中提到的Stable Diffusion的强大能力,无论移动端还是pc端,点开即可体验,支持中文输入
一、什么是Prompt Prompt,译为提示词,指的是以书面或口头语言形式向计算机系统发出的指令。这些指令可以指导网络生成更加符合要求的输出结果。在图像生成领域,Prompt 可以用来指导生成理想的图像。
在 SD(Stable Diffusion) 中,Prompt 被分为正向提示词 (Positive Prompt) 和反向提示词 (Negative Prompt)。
正向提示词是指你想要在画面中看到的东西,例如一个美丽的日落或者是一只可爱的小狗。反向提示词是指你想要避免在画面中出现的东西,例如障碍物或者是不必要的元素。
使用 Prompt 可以帮助图像生成算法更加准确地生成所需的图像,并且可以大大提高生成的图像的质量和效果。
三、Selenium 1.初识Selenium 1.1什么是Selenium? Selenium是一个浏览器自动化测试框架,是一款用于Web应用程序测试的工具。框架底层使用JavaScript模拟真实用户对浏览器进行操作。测试脚本执行时,浏览器自动按照脚本代码做出点击,输入,打开,验证等操作,就像真实用户所做的一样,从终端用户的角度测试应用程序。使浏览器兼容性测试自动化成为可能,尽管在不同的浏览器上依然有细微的差别。使用简单,可使用Java,Python等多种语言编写用例脚本。
1.2 Selenium的准备 以Chrome为例:
首先在pycharm中安装selenium软件包,版本不要太高,不然会闪退,测试是3.5版本。(补:后续更新到selenium3.10运行无影响)
然后http://chromedriver.storage.googleapis.com/index.html网站中找到对应版本的chromedriver下载win32就可以了,解压之后复制粘贴到项目文件夹的一级目录下。
准备工作完成。
2. Selenium的使用 2.1为什么要使用Selenium 先看下面一段代码
import urllib.request url = 'https://www.jd.com' response = urllib.requst.urlopen(url) content = response.read().decode('utf-8') print(content) 在控制台搜索J_seckill(京东秒杀模块的id),无匹配字段,原因是:模拟浏览器获取不了京东秒杀的内容,因为网站检测到了是模拟浏览器,所以需要用selenium。
2.2 Selenium的基本使用 selenium的使用会调用chrome,所以当弹出页面后需要在设置中将默认搜索引擎改成百度。
获取京东网站中的京东秒杀源码
# 导入selenium from selenium import webdriver # 创建浏览器对象 path = 'chromedriver.exe' browser = webdriver.Chrome(path) # 访问网站 url = 'https://www.jd.com' browser.get(url) # page_source获取网页源码 content = browser.page_source print(content) 在控制台搜索J_seckill可以看到京东秒杀模块。
2.3 Selenium的元素定位 from selenium import webdriver url = 'https://www.jd.com' path = 'chromedriver.
完成人:中国科学院大学 孙翔宇
指导老师:庄建(英特尔边缘计算创新大使,中国科学院高能物理研究所, 研究员)
1. 序言 1.1 爱克斯板介绍 AIxBoard™爱克斯板开发者套件是一款功能强大的小型计算机,专为支持入门级边缘人工智能应用程序和设备而设计。无论是在人工智能学习、开发还是实训等应用场景下,它都能完美胜任。
该开发板是类树莓派的x86主机,可支持Linux Ubuntu及 完整版Windows操作系统。板载一颗英特尔4核处理器,最高运行频率可达2.9 GHz,且内置核显(iGPU),板载 64GB eMMC存储及LPDDR4x 2933MHz(4GB/6GB/8GB),内置蓝牙和Wi-Fi模组,支持USB 3.0、HDMI视频输出、3.5mm音频接口,1000Mbps以太网口。完全可把它作为一台mini小电脑来看待,且其可集成一块Arduino Leonardo单片机,可外拓各种传感器模块。
此外, 其接口与Jetson Nano载板兼容,GPIO与树莓派兼容,能够最大限度地复用树莓派、Jetson Nano等生态资源,无论是摄像头物体识别,3D打印,还是CNC实时插补控制都能稳定运行。可作为边缘计算引擎用于人工智能产品验证、开发;也可以作为域控核心用于机器人产品开发。
然而,虽然爱克斯板具有如上的诸多优点。但由于其运行的Windows或者Linux系统都是非实时性的操作系统,难以用于对实时性要求较高的工业环境中。而实时性的PLC环境通常较为封闭,难以使用python,Openvino等外界程序。
1.2 CODESYS介绍 CODESYS是一款工业自动化领域的一款开发编程系统(CODESYS是Code System的简写),应用领域涉及工厂自动化、汽车自动化、嵌入式自动化、过程自动化和楼宇自动化等等。CODESYS软件可以分为两个部分,一部分是运行在各类硬件中的RTE(Runtime Environment),另一部分是运行在PC机上的IDE。因此CODESYS的用户既包括生产PLC、运动控制器的硬件厂商,也包括最终使用PLC、运动控制器的用户。
目前全球有近400家的控制系统生产制造商是CODESYS的用户:如ABB、施耐德电气SchneiderElectric、伊顿电气EATON、博世力士乐Rexroth、倍福BECKHOFF、科控KEBA、日立HITACHI、三菱自动化MITSUBISHI、欧姆龙OMRON、研华科技、凌华科技ADLINK、新汉电脑、和利时集团、SUPCON 中控集团、步科自动化KINCO、深圳雷赛、汇川技术、深圳合信、深圳英威腾、华中数控、固高科技等等。
简单来说,CODESYS可以说是PLC界的安卓,许多PLC厂商都以CODESYS作为其PLC的内核。
此外,CODESYS可以将任何一款arm架构或者x86架构的处理器变为实时的PLC系统。CODESYS结合AIxBoard,我们能够得到一个可以用于工业控制检测领域的一款功能强大的人工智能小型计算机。
1.3 实验仿真介绍 通常而言,如果想要进行CODESYS控制实验,需要购买支持CODESYS的PLC控制器、支持EtherCAT通讯协议的步进电机驱动器、步进电机、滚珠丝杠平台、以及对整套系统的供电电源。购置一整套实验设备不仅费时费力费钱,并且占用空间极大,不便于初学者进行学习。
通过使用CODESYS对AIxBoard的软PLC配置,并结合着Factory软件仿真,能够极大的减少学习成本。
2. 前期准备 CODESYS软件分三层架构,可用下图来表示:
图1 CODESYS软件架构示意图
其中开发层(IDE)可使用CODESYS Development System(具有完善的在线编程和离线编程功能)、编译器及其配件组件、可视化界面编程组件等对CODESYS程序进行开发与部署。本文使用的版本为CODESYS V3.5 SP17,下载与安装教程可见:CODESYS 3.5.17.0 软件安装_codesys安装教程_小 Co的博客-CSDN博客。
2.1 开发层主机前期准备 在安装完CODESYS后,还需要根据需求下载安装部分CODESYS软件包,由于本文需要在运行有Ubuntu的AIxBoard上部署CODESYS Runtime,并通过共享内存实现与外界程序通信,故需安装的软件包有以下几种:
CODESYS Control for Linux SLCODESYS Edge Gateway for LinuxShared Memory Communication 完成安装后,可在包管理器中查看到这三个软件包。
图2 在CODESYS中安装软件包
安装完成三个软件包后,重启CODESYS,随后能够在工具中最下面一行找到Update Linux,点击后会打开一个能够与安装了Linux系统的AIxBoard进行通信部署的界面。
1.编译参考 详细的cmake编译选项,参考:Building LLVM with CMake — LLVM 18.0.0git documentation
2.编译脚本 utils.bash build-llvm.sh 依赖 utils.bash 脚本
#!/usr/bin/env bash COLOR_FATAL=$'\033[41;38m' COLOR_ERROR=$'\033[1;31m' COLOR_WARN=$'\033[1;33m' COLOR_NOTE=$'\033[1;32m' COLOR_INFO=$'\033[1;34m' COLOR_TRACE=$'\033[0;37m' COLOR_RESET=$'\033[0m' log_colored () { if [ -t 1 ]; then echo -n $1 fi shift echo -e "[$PROG_NAME] $*" if [ -t 1 ]; then echo -e -n $COLOR_RESET fi } log_fatal () { log_colored $COLOR_FATAL $* exit -1 } log_error () { log_colored $COLOR_ERROR $* } log_warn () { log_colored $COLOR_WARN $* } log_note () { log_colored $COLOR_NOTE $* } log_info () { log_colored $COLOR_INFO $* } log_trace () { log_colored $COLOR_TRACE $* } prog_log_fatal () { log_fatal "
代码:
https://github.com/xingxinghuo1000/meteor_monitor_scripts.git
由于代码做了较大调整,废弃了sikuli部分。本篇文章为旧的,不要看了,最新文章请看:
用python自行开发的流星监控系统meteor_monitor(第二篇)-CSDN博客
背景 著名的流星监控软件ufocapturehd2有几个缺陷,不能忍
1、吃性能,我的工控电脑2.4GHz的4核心CPU,发现流星后,录制出来的视频,会严重丢帧
2、收费。还相当的贵。大概700多元? 用破解版当然也可以,这里不推荐
调研过程 1、解决如何录制的问题
我发现win10自身的相机app,可以以非常低的cpu消耗,录制720p,50fps的视频,非常流畅。如果能够写个脚本。离线分析录制出来的mp4文件,把录制和分析解耦,就整体搞定了性能的问题。
调研过其他几个软件,都不如win10自带的app好用
2、如何自动化录制视频,并分段
视频必须得分段,如果不分段,录制一个晚上,一个视频文件40GB,中途如果不小心断电了,整个晚上录制的文件,就变得不可读,这是不能接受的
曾经尝试过,使用pywinauto库,做自动化,发现相机这个app,没有具体按钮的句柄,spyxx工具无法探查出来。
那就上万能工具sikuliX吧,这个工具是使用模式识别方式,点击按钮,不论这个按钮在屏幕哪里,只要匹配到了,就能点。
参考资料: sikulix自动化测试 - 简书
3、如何存储视频
首先为了节省cpu消耗,必须保存到本地硬盘中。但工控的本地硬盘,一般不会很大
所以视频可以通过一个脚本,定时同步到nfs上,或者samba服务中,
这样就解决了性能和容量的两难问题
同步脚本和录制时间,需要一个标记,来表示为视频录制已完成,这里采用了大数据里常用的.done文件。每一个mp4文件,都对应一个.done文件,没有.done文件,就代表没有录制完
4、离线分析
由于视频存储在了nas中(可能是nfs或者samba)。分析端,可以是多机共同参与的,即分布式分析。这样可以提升分析的效率,尽早拿到结果
需要对视频做一个文件锁的功能,防止多机冲突。
每一个mp4。都对应一个.lock文件,如果发现了.lock文件锁,则看看里面的内容,是不是自己锁定的,如果是,就处理,如果是其他机器锁定的,则跳过这个文件
分析思路:使用帧差法,通过python+opencv来实现这个算法,不算难
参考资料:python+opencv实现移动侦测(帧差法) - 杰晶网络,每天都更新的互联网资源网! 更新日期:2022/6/15
part1-视频自动录制部分 先上代码
具体代码如下: https://github.com/xingxinghuo1000/meteor_monitor_scripts/tree/master/sikuli_open_camera.sikuli
如何使用:
1、把相机的应用,固定到任务栏,必须的,否则sikuli没法启动相机
2、安装JDK,下载sikuliX的jar包,放在D盘根目录
3、仅支持windows,双击start_camera_record_by_sikuli.bat文件,即可运行
开发过程和踩坑记录
1、先做最小的Demo,实现点击录制按钮,和停止录制的按钮
2、再做基本的控制,比如启动相机app,关闭相机app。 启动相机,无法通过cmd命令启动(python中是 os.popen方式执行cmd),必须通过点击任务栏按钮才行。不知道为什么,如果有大神知道,可以告知
3、判断何时开始录制,何时停止录制,这需要获取当地的日出和日落时间,我写了一个比较简单的实现,直接写死在代码里,如果您有需要,可以修改代码,修改为您当地的时间,然后再运行
4、稳定性:对于停止按钮和录制按钮的判断,sikulix支持设置阈值,调整了一下,才准确搞定。按照默认的参数,会有误判,非常坑人
5、调整参数,比如视频分段的时间间隔,多久停止一下,再重新录制。我设置的是200多秒。不要太长,免得保存视频时造成卡顿
效果 进程常驻内存,定时判断时间,是否该录制视频。每隔一段时间,自动停止录制,再开始录制
part2-视频定时同步功能 脚本代码:https://github.com/xingxinghuo1000/meteor_monitor_scripts/tree/master/video_sync
执行过程:
1、扫描目标目录,视频是否已超过100GB,如果超过则删除老的文件,
2、轮训查看源视频目录,找出所有mp4文件
3、检查mp4文件是否有对应的.done文件,
4、如果有则复制到目标目录,复制完,在目标目录写入.done文件,同时删除源目录的视频文件
5、不断循环
注意:
为了防止网络问题,对于传输了一半的文件,删掉重新同步
如果出了网络问题,程序会进入exception逻辑,sleep一段时间后重试
会不会出现传输了一半的文件,被下游处理呢?
答:不会,没有.done文件,下游是不会处理这个视频文件的
后续可以扩展的地方
1、目标路径,可以是一个ftp地址,
不过这次,没有支持这个功能,没太大必要。大多数windows都支持samba服务,直接挂载到本地,作为本地路径使用即可
代码:
GitHub - xingxinghuo1000/meteor_monitor_scripts
本篇为最新代码的方案介绍和使用介绍。第一篇已经过时了,不建议看 。只看这一篇即可。
背景 著名的流星监控软件ufocapturehd2有几个缺陷,不能忍
1、吃性能,我的工控电脑2.4GHz的4核心CPU,发现流星后,录制出来的视频,会严重丢帧
2、收费。还相当的贵。大概700多元? 用破解版当然也可以,这里不推荐
使用方法 推荐硬件 主机:
windows系统,win10 win11. 小主机, cpu 2.4GHz, 4核心.
不推荐Linux系统, 因为显卡驱动不容易安装,需要较高的技术水平.
不推荐树莓派, 原因同Linux系统.
摄像头的选择:
推荐使用 索尼 MX291 摄像头. CMOS底比较大,适合拍摄星空
如果您的摄像头CMOS尺寸太小, 则噪点会比较多. 所以推荐IMX291这款, 如果使用IMX485, 则更好.
如何使用 建议在windows使用,原因是显卡驱动程序比较容易安装. 在Ubuntu下intel核心显卡驱动安装比较困难,无法使用h264_qsv编码
本程序默认使用mjpeg码流, 如果cpu支持硬件编码h264,则可以尝试使用h264_qsv编码器
如果是windows环境 , 且是 Intel核心显卡, 则可以尝试h264_qsv编码, nvdia显卡尝试 h264_nvenc, amd显卡尝试 h264_amf
如果是Ubuntu环境, 请尝试 mjpeg 编码, 经过我的测试, 2.4GHzCPU 只能达到15fps, 如果需要更高比如30fps,则对CPU要求也会很高.
如果您在Ubuntu环境,安装好了显卡驱动程序, Intel核心显卡可以尝试 h264_qsv 编码, nvdia显卡尝试 h264_nvenc, amd显卡尝试 h264_amf
如果是树莓派, 且编译了带h264_omx编码的ffmpeg, 则编码器使用 h264_omx
使用 arthas 的trace 命令分析方法耗时瓶颈:
可以看出 bindReloadZoneTimeLimite 耗时最久,
通过分析Bind 底层,将业务粒度进行拆分,加入并发执行
再次使用arthas 追踪单个方法耗时时间:
核心耗时方法,速度优化将近4倍,总方法耗时优化1.5倍
随着人工智能、大数据、物联网、云计算等前沿技术的快速发展,各行各业的数据量迎来了爆发式增长。与此同时,数据的时效性、复杂性和多样性也日益增加。根据AI智能分析 ,预计到2025年,全球约有30%的数据需要实时处理。如何对数据进行实时计算与处理就成为研究的焦点和热点。英特尔作为实时计算领域的领军企业,一直致力于实时计算的研发创新与应用落地。
在万众瞩目的期盼下,多名英特尔顶级专家精心打造了工业实时计算的初级和中级课程:
英特尔工业实时计算初级课程:适合零基础的同学;学完本课程后,能够高效掌握实时计算的核心概念、在x86平台上构建实时系统以及了解英特尔实时解决方案及其应用场景。 学习链接:https://bss.csdn.net/IntelRealTimeJunior/index
特别为大家推荐的是英特尔工业实时计算的中级课程:适合于有一定技术背景的开发人员,对行业实战案例进行深度讲解,助力学员成为该领域的专家;完成本系列课程学习后,还可获得英特尔官方发放的认证证书。 同时我们准备了视频版和网页互动版两个版本。视频版:借助本地环境,边学习边应用;互动版:不用配置环境,直接学习加实操。
视频版学习链接:https://bss.csdn.net/IntelRealTimeIntermediate/index
互动版学习链接:51OpenLab-一站式ICT创新服务平台
英特尔中级课程包括四节课程,每节课程不仅包括了概念的系统性讲解,而且还提供了极其详细的逐步操作指南。首节课程是对英特尔® 工业边缘控制平台ECI进行系统性的介绍,具体包括下载镜像、安装镜像和安装组件包的逐步操作方法。第二节课程介绍如何搭建系统并实现基于 Xenomai 和 EtherCAT 的运动控制,具体包括安装 Xenomai 系统、EtherCAT主站及其工具、启动 EtherCAT主机和进行鉴权性检测、运动控制硬件环境的搭建和运行运动控制示例。第三节课程重点介绍了使用英特尔ECI搭建CODESYS运行环境并运行Robotics Pick and Place 程序的详细步骤。
最后一节课程是中级课程的重中之重,极其细致的讲解了基于时间敏感网络的实时OPC UA发布订阅模型的实战练习。逐步指导大家完成环境搭建,建立时间同步和时间敏感网络配置、编译和运行 OPC UA发布订阅模型的示例程序,并比较一般网络环境与时间敏感网络环境的传输性能差异。通过学习本节课程,大家可以理解 OPC UA发布订阅模型的核心概念,掌握时间敏感网络测试方法、测试床搭建以及性能分析的方法。
如果大家对上述内容不太熟悉,那么建议先学习工业实时计算的初级课程,然后再进一步学习中级课程。初级课程的主要内容包括实时计算介绍、基于Linux的实时系统、英特尔时序协调运算、时间敏感网络、负载整合等内容。
英特尔工业实时计算系列课程是英特尔精心打造的系列课程,课程内容贴近工业实际需求,同时融合英特尔在实时计算的软硬件、解决方案等方面的深厚技术积累。能够帮助大家从零开始了解实时计算,了解如何在英特尔X86平台上开发搭建实时系统,掌握关键的实时技术,助力早日成为领域专家。考虑到大家强烈的学习热情,英特尔决定在不久的将来推出工业实时计算的高级课程,旨在满足同学们深入学习、追求卓越的需求。
Python中numpy数组的合并有很多方法,如
np.append()
np.concatenate()
np.stack()
np.hstack()
np.vstack()
np.dstack()
其中最泛用的是第一个和第二个。第一个可读性好,比较灵活,但是占内存大。第二个则没有内存占用大的问题。
假设有两个数组a,b分别为:
>>> a array([0, 1, 2], [3, 4, 5], [6, 7, 8]) >>> b = a*2 >>> b array([ 0, 2, 4], [ 6, 8, 10], [12, 14, 16]) 1、水平组合 >>> np.hstack((a,b)) array([ 0, 1, 2, 0, 2, 4], [ 3, 4, 5, 6, 8, 10], [ 6, 7, 8, 12, 14, 16]) >>> np.concatenate((a,b),axis=1) array([ 0, 1, 2, 0, 2, 4], [ 3, 4, 5, 6, 8, 10], [ 6, 7, 8, 12, 14, 16]) 2、垂直组合 >>> np.
Nginx 是开源、高性能、高可靠的 Web 和反向代理服务器,而且支持热部署,几乎可以做到 7 * 24 小时不间断运行,即使运行几个月也不需要重新启动。在工作中,我们经常会用到需要搭建文件服务器的情况,这里就以在linux下搭建文件服务器为例,解释编译nginx和搭建服务器的过程。
一、nginx编译安装 1、下载nginx nginx下载网站wget下载命令 wget http://nginx.org/download/nginx-1.25.2.tar.gz 2、解压压缩包 tar -zxvf nginx-1.25.2.tar.gz 3、创建用户和用户组 useradd -M -s /sbin/nologin nginx 4、编译安装nginx # 依次执行下面命令 cd nginx-1.25.2 ./configure \ --prefix=/usr/local/nginx \ --user=nginx \ --group=nginx \ --without-http_rewrite_module \ --without-http_gzip_module make && make install #让系统识别nginx的操作命 ln -s /usr/local/nginx/sbin/nginx /usr/local/sbin/ 如果在编译过程中报错需要依赖包,执行以下命令安装依赖
#nginx的配置及运行需要pcre、zlib、openssl等软件包的支持,因此需要安装这些软件的开发包,以便提供相应的库和头文件。 yum -y install pcre-devel zlib-devel openssl-devel gcc gcc-c++ make 依赖安装完成重新执行./configure命令
5、检查、启动、重启、停止 nginx服务的命令 nginx -t #检查配置文件是否配置正确 #启动 nginx #停止 cat /usr/local/nginx/logs/nginx.