记录一下。
① 首先买一台香港或者国外的云服务器。例如随便找一家主机厂商(不推荐腾讯云阿里云感觉有点危险,除此之外感觉都可以),我使用的是这个,选的是Ubuntu系统,配置无所谓,个人用没关系。
② 登录服务器:
安装pip:
12apt-get update apt-get install python3-pip
安装shadowsocks服务器:
1pip install shadowsocks
启动服务器:
12345ssserver -p <这里是端口号> -k <这里是密码> -m rc4-md5 -d start# 后面的`rc4-md5`是加密方式,其实无所谓# 例如:# ssserver -p 443 -k Ladder -m rc4-md5 -d start
如果要关闭服务器,就是:
1ssserver -d stop
③ 需要翻墙的设备上进行客户端配置。
参考:https://shadowsocksool.com/
我使用的是NekoRay,不过其他的也可以。
服务器-手动输入配置,名称随便写,地址写前面买的主机ip,端口写前面启动s...
[TOC]
异或哈希可以用来快速查询序列中的数是否出现了kkk次。
异或哈希入门:区间集合判同
问题:如何判断一个序列是否是另一个序列排列组合,也就是排序后是否相同,或者说元素的集合是否相同(不关心顺序)。
由异或的性质(交换律),可以知道,一个序列如果排序后和另一个序列相等,这两个序列的异或结果相同,相当于一个哈希了。但实际上还有一个问题:排序后相同的序列,异或结果一定相同;但是异或结果一定相同的序列,不一定排序后相同。
这个冲突的概率如何呢?假设序列长度为nnn,每种元素都由111到nnn的一个数编码,异或的结果也是nnn。序列长度为nnn,排序后不同的类型序列数的规模最大项是n2n^2n2的,映射到的哈希空间的最大项是nnn的,肯定冲突。
如果想要用类似的方式的方式来快速判断,需要想办法扩大哈希空间。因此选用111到2642^{64}264的数编码,这样哈希空间的最大项就到了2642^{64}264,可以很大程度上减少碰撞概率。例如,n=1e6n=1e6n=1e6的时候,碰撞概率是
p≈(106)2264≈5.42×10−8p\approx\frac{(10^6)^2...
[TOC]
数学建模笔记1 分类与聚类
重新整理一下数学建模笔记以及代码。
对于一堆数据,分类就是指定了类别,进行划分。聚类分析主要用于将数据分类,使得同类的数据点彼此相似,而不同类之间的数据点则相对不同。
分类模型是已知类别的,聚类模型是未知类别而要进行划分的。
一. 分类模型
分类模型中,最简单的是二分类,也就是
1 logistic回归模型(逻辑回归)
二元逻辑回归
朴素的逻辑回归,适用于二分类模型。在高中数学学过的线性回归拟合中,可以把二维平面上的散点拟合成直线,这其实有点像。
简单来说,对于一组数据(可以视为一堆nnn维的向量α\alphaα,不妨视为列向量),我们需要把它分成两类,一类我们设为0,一类我们设为1。我们可以考虑,想个办法构造出一个预测函数P(α⃗)P(\vec{\alpha})P(α),这个预测函数,输入单个数据,也就是nnn维向量,输出一个000到111的数值,越接近000表示越可能是类型000,越接近111表示越可能是类型111:
P(α⃗)∈[0,1]P(\vec{\alpha}) \in [0,1]
P(α)∈[0,1]
相当于输...
[TOC]
ESP32联网语音助手
在做的项目需要一个联网语音部分,联网接入大模型或者其他的API,同时给OpenMV发信号,单独做出来好了()。
ESP32回顾
先来点个灯回顾一下ESP32的基础操作。Arduino IDE选ESP32 Dev Module。烧录一个点灯程序:
1234567891011121314uint8_t led_pin = 2;void setup(){ pinMode(led_pin, OUTPUT);}void loop(){ digitalWrite(led_pin, HIGH); delay(500); digitalWrite(led_pin, LOW); delay(500);}
一. 语音模块
例程
选了语音模块是SYN6288。
烧录示例代码,烧录时不能接线,猜测是串口的原因。
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950...
狠补一下一些不太熟的东西。
可持久化线段树
可持久化数组
要求维护一个数组,进行mmm次操作,每次操作都生成一个新的版本(版本编号从111到mmm)。操作如下:
① 在某个给定历史版本上的基础上,该版本修改某个数的值。
② 在某个给定历史版本的基础上,该版本不修改任何值,但要求查询第xxx个数。
朴素的实现肯定是爆时间空间的。考虑有什么方法维护,可持久化线段树可以维护。对于线段树,单次修改实际上只修改了一个长度为logn\log nlogn的路径。那我们重新建树就行了,每次的新树,继承了前一个版本的树的剩余节点,新增的节点只有logn\log nlogn个。
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990template<typename T>class Persi...
调HC蓝牙模块的时候重新记录一下,便于后面查阅。
HC-05模块(SPP蓝牙)
HC05模块是支持主从的SPP蓝牙模块。配置还是比较容易的。
首先要有两个HC05蓝牙模块和两个USB转TTL,然后按照RX-TX、TX-RX成对连接。然后一个计划配置成主机,另一个配置成从机。
HC-05主机配置
手指长按模块上按键,然后给模块上电,即可进入AT模式。此时模块上的灯慢闪。要是灯没亮就是供电不足,要接5V。
波特率设成38400,现在发送AT,会回复AT。(注意末尾要加\r\n,如果串口助手末尾无追加,就要自己输入,不要输出多余的字符)。
12ATOK
① 设置、查询蓝牙名字:
12345678# 查询名字AT+NAME?+NAME:CH-05-ZOK# 设置蓝牙名字AT+NAME="EDC-master"OK
② 查询设备地址
123AT+ADDR?+ADDR:0020:12:080515OK
③ 查询设置模块角色
12345678# 查询角色AT+ROLE?+ROLE:1OK# 设置角色(1:主机 0:从机)AT+ROLE=1OK
④ 查询设置配对码
1...
[TOC]
两天备战一下电赛。准备 速成 回顾一下OpenMV芝士,顺便记录一下。
参考资料:【API】OpenMV常用功能
环境配置
OpenMV最新版本的IDE感觉有很多问题,因此推荐安装4.0.14版本的IDE,个人感觉这个版本的是bug比较少、支持固件寄了后直接重新烧录的,非常方便。
一. OpenMV基础命令
1. 摄像头基础配置
参考文档
123456789101112131415161718# Cam - By: wlate - Fri Jul 26 2024import sensor, image, timesensor.reset()sensor.set_pixformat(sensor.RGB565)sensor.set_framesize(sensor.QVGA)sensor.set_auto_gain(False) # 自动增益sensor.set_auto_whitebal(False) # 自动白平衡sensor.set_auto_exposure(True) # 自动曝光时间sensor.skip_fram...
A - Split the Multiset
正着做是从n拆解到1,反着就是从n个1合并到n,那就尽可能每次合并k个,模拟一下就行(虽然感觉正着想反着想没区别)。
12345678910void solve(void){ int n,k; cin>>n>>k; int ans=0; while (n>=k){ ans+=n/k; n=(n/k)+(n%k); } cout<<ans+(n!=1)<<endl;}
B - Make Majority
首先全1肯定直接YES了,全0也直接NO。然后从样例数据可以看出来,直接把连续的0合并成一个0,最优。然后是从有0有1的段落进一步合并,因为每次我们要把k个0改掉,要付出至少k+1个1,这样1的个数是随着吞并次数的增加越来越少的,因此我们直接进行一次[1,n]的吞并,显然如果这次不能把所有数都吞成1,之后也再也不会有机会的。直接判断即可。
1234567891011121314...
搬运一下之前写的博客。
寒假浅浅研究了一下智能车赛中的极端光照和赛道反光的解决方案,记录一点思考。
一般来讲,现在比赛中比较流行的针对不同光照强度的算法是otsu算法(大津法)。这种算法针对不同的光照条件动态设置全局阈值,解决了在宏观上光照条件不同的情况,并且经过前缀和优化和间接采样的otsu,时间上非常快,TC264芯片一般2ms以内可以跑完一张图(好像是)。
但是这个方法但是无法很好解决小范围光照不同的情况。例如在一张图中,前半部分和后半部分光照不同,或者更极端一点,反光的情况,如下图。
原图(反光情况)
OTSU全局处理结果
这种情况下,只用otsu就不太够用。虽然可以通过硬件上增加偏振片来一定程度处理,但是感觉也要在算法上为可能的逆天光照做一点准备。
直方图均衡化
参考文章:https://blog.csdn.net/weixin_43981425/article/details/106884136
这篇文章里写可以考虑将灰度值重新映射,重新分配灰度值,使得直方图均衡。感觉这个思路很有意思,而且实现起来速度会很快。
但是仔细想想我认为不太可行。因为实际上我们要解...
之前校赛就有在用逆透视了,不过都是硬套学长写好的公式乱写。寒假重新来梳理一下这个算法。参考的是opencv库的函数,例如getPerspectiveTransform(opencv/modules/imgproc/src/imgwarp.cpp Line 3432)
写得有点乱,可能一些地方会有错误,不过大致意思应该没问题,代码跑出来效果还可以()。
和网上其他一些佬的做法应该有所不同,目前比较广为流传的标定方法是四点标定法,通过原图和逆透视后的图,用四个点(x,y),总计8个参数,调用opencv库进行标定,不方便在下位机中直接调参。因此我改成只用3个参数(起始行yuy_uyu、平行赛道斜率kkk、赛道起始点列数yly_lyl)进行标定,并且3个参数和物理世界有比较直接的对应关系,调整摄像头角度时可以直接调整kkk即可;如果想增加前瞻,就调整yuy_uyu;如果更改了摄像头高度,调整yly_lyl。
[TOC]
一. 基本数学模型
透视变换可以用以下的公式表示。设(x,y)(x,y)(x,y)是原图像中的点,(x′,y′)(x',y')(x′,y′...