- 2024-10-02
-
回复了主题帖:
三极管怎么这样子接啊
感觉可以啊
- 2024-09-22
-
回复了主题帖:
如果给电源加上AI,那会怎么样?
变形金刚第一集,如果汽车人基地的电源有AI,就不会修复威震天,就没有后面那些事情了,对吧?所以电源有AI非常重要!
-
回复了主题帖:
如果给电源加上AI,那会怎么样?
电源+AI,我突然想到一个词:狗眼看人低的门卫
- 2024-08-22
-
回复了主题帖:
读书入围名单: 《动手学深度学习(PyTorch版)》,配套视频、源码等
个人信息无误,确认可以完成阅读分享计划
- 2024-07-15
-
回复了主题帖:
玩具示波器的后续
是的,玩具而已
- 2024-07-05
-
上传了资料:
AI活动的源码
-
回复了主题帖:
《Rust实战》书友互动剧终:信号、中断和异常
如何灵活使用中断?
- 2024-07-03
-
回复了主题帖:
【颁奖】调查:量身定制你的 M0 单片机!参与问卷有好礼!
已扫码确认信息
- 2024-06-17
-
回复了主题帖:
《Rust实战》书友互动第九集:时间与时间保持
nemon 发表于 2024-6-11 15:09
如果想实现类似c语言中#if来导入库的功能,用什么形式?
顺便问个偏门问题吧——哪家NTP服务 ...
NTP时钟这个我知道答案哦,NTP时钟是分等级的,如果没有上级时钟的NTP源(比如一个封闭网络中选取的一台服务器),那么时钟精度肯定是不高的,但是如果网络中全部设备的时钟都更随这个时钟源,那么即使这个时钟源一天只有23个小时,也是可以作为一级时钟源,从时钟源取得时钟并将自己作为NTP时钟源的化,需要降低时钟源等级。
另外NTP时钟设计的时候,似乎没有考虑到多路径的情况,如果每次收发包的路径不同,路径延迟不一样,获取的时钟自然会有误差。
-
回复了主题帖:
《Rust实战》书友互动第九集:时间与时间保持
qinyunti 发表于 2024-6-11 23:08
做个简单的个人感想分享,说实话看到现在,对本书的一大感觉是,翻译太"直",机翻感觉 ...
里面也有一些疏漏还没校正,我记得以前买书,都附有一张勘错(甚至隔段时间还会专门收到更新的)。现在长大点,书读少了,发现值得精读的书也少了。。。
- 2024-06-11
-
回复了主题帖:
[Rust]夜来无事,刷题
tang5722917 发表于 2024-6-11 17:16
无符号64 int 最大才4294967295,你数过h()里面的数有多少个0吗
u64才这么点大?我还以为可以支持到2的64次方呢。。。
- 2024-06-04
-
回复了主题帖:
《Rust实战》书友互动第八集:网络,这个很熟悉...
nemon 发表于 2024-6-4 12:24
问个开放性问题吧——你觉得UDP和TCP哪个更好用?
UDP响应快,但是因为缺少握手,在多径的情况往往会出现乱序——在上层纠正乱序很麻烦。
TCP协议非常方便,但高速方案上不适合——比如组播
-
发表了主题帖:
[Rust]优化代码
早上发了一个非常基础的题目,尝试做了一遍,发现不成功。
https://bbs.eeworld.com.cn/thread-1283777-1-1.html
除了数据量大一点,其它都还比较easy,上午和朋友们讨论了一下,主要有两个方向改进:
关于f(n):
首先建立一个质数数组,对于给定n值,只取小于n的前k项,逆序比较,如果是其因数,则退出,快速获得最大质因数。
关于h(n):
我们知道h(x)是一个非单调递增序列,是在x∈[2,n]取最大的g(x),而g(x)是若干项的和,因此不需要对每个小于n的数字进行计算,当计算出x=n时的g(n),如果f(n+9)<f(n),则g(n+1)=g(n),否则计算h(n+1)与g(n)进行比较,取其大值作为h(n+1)的值。
-
发表了主题帖:
[Rust]夜来无事,刷题
不知大家听过欧拉计划没有http://pe-cn.github.io/problems/
随机拉一题出来玩玩,比如碰巧拉到526
记f(n)是n的最大质因数。
记g(n) = f(n) + f(n+1) + f(n+2) + f(n+3) + f(n+4) + f(n+5) + f(n+6) + f(n+7) + f(n+8),即从n开始连续九个数的最大质因数之和。
记h(n)为2 ≤ k ≤ n中g(k)的最大值。
题目本身很简单,实现也很容易
但一跑起来就卡住了,显然是算法有问题,不知道大家有没有什么解题思路?
-
回复了主题帖:
《Rust实战》书友互动第七集:文件与存储
大家碰到文件权限问题没有,我打开一个文件,碰见了所属权问题,可是我已经是administrator了。。。
- 2024-05-30
-
发表了主题帖:
#AI挑战营终点站#以web方式呈现数字识别
本帖最后由 tobot 于 2024-5-30 23:27 编辑
0x01 数字识别的GUI呈现
为了显示数字识别(包括具体数字和数字所在位置),需要有一个GUI界面,本来准备使用LVGL做在LCD屏上,但无奈出差在外,手边材料不足。于是考虑借助网络传输,将数据使用浏览器呈现出来。
浏览器中需要包含两个部分:原始图像采集和结果输出。
使用python的flask模块来搭建http server。并且在循环中用yield返回一个生成器,这样就可以多次采集数据并以视频方式呈现在网页中。具体方案包括:
1)图像采集:
使用opencv-python(cv2)从摄像头采集图像,采集出来的图像为单一的画面帧,设置一个循环,不断地从摄像头读取帧。
2)生成器函数:
创建一个生成器函数,该函数包含一个无限循环,将采集到的图像以压缩格式发送出来,
使用yield关键字返回。
3)处理图像并返回
与原始图像类似,再做一个生成器返回处理完成的图像。
4)视频流处理:
创建两个路由,分别调用生成器函数,实现在网页逐帧返回图像数据。这样就生成一个“视频流”。
5)网页呈现:
在flask的模板中,通过标签调用视频流。
6)数据传输:
为了减少延迟和带宽消耗,考虑对图像数据进行压缩,使用JPEG格式。
0x02 图像处理
1)图像分割
将采集到的图像变为灰度图,经过腐蚀和退化,二值化,并且使用cv2.canny函数描边,再通过cv2.boundingRect切出最小矩形。将矩形边框略微放大一点,采集二值化的图像。
2)数字识别
由于训练采用mnist图集,图片大小都是28*28,且为黑底白字,因此需要将分割后图像进行预处理,以适应模型的输入格式。放入之前推理过程,进行数字识别,并返回结果。
3)结果生成
定义一副白色背景图片,根据采集图像矩形的位置和高度和推理返回值,写出对应数字。完成后的图像作为最终结果返回。
0x03 系统安装
在原生的操作系统中,python的库不全,需要重新编译。
按照https://wiki.luckfox.com/zh/Luckfox-Pico/Luckfox-Pico-SDK部署SDK环境,新安装Ubuntu 22.04之后,更新并安装对应软件。
安装完成后,继续按照文档git,文档中直接git,会发现权限不够,需要增加sudo。命令为
sudo git clone https://gitee.com/LuckfoxTECH/luckfox-pico.git
视网络情况,可能需要几分钟~几小时来拉取(我这边就是几小时的那种)。
关于编译环境配置和SDK安装写得挺详细,不用再重复。
完成后先编译一次,再使用menuconfig增加需要的python库文件,重新编译并烧入。
使用adb方式把写好的代码放入开发板。
0x04 使用
板卡运行代码,主机使用浏览器打开网页,在浏览器中就可以看到原始图像和识别后的结果了。
0x05 最终效果
[localvideo]6864c2fd23c3cda6a9ae962384425fc6[/localvideo]
0x06 改进想法
1)识别错误
从结果上看,目前手写数字推理的正确率不高,远远达不到训练时90%以上的正确率,推测有可能是用于训练的数据集与真正用来识别的数据集有一定差异,这个一方面考虑改进增加训练数据的多样性和数量,重新训练;另外自制的网络结构过于简单(只有三层),这个可能也是拟合度不高的原因之一,考虑尝试更复杂的网络结构,多做几个卷积,增加网络的深度和宽度(必然带来效率降低);训练时可以试试调参和损失函数,比如对学习率、批量大小、优化器等,但具体方向并不明确,只能摸索。
2)代码效率
目前看来效率不高,图像明显卡顿,这个一方面是性能原因,另一方应该是优化不足造成。具体如何优化目前还没太好思路。
3)图像分割
可以看到在有些画面中,同一个数字被分割成了多个图片分别识别,这个一方面是手写数字可能有笔画不连续的情况,另一方面腐蚀的时候有可能把连通图给腐蚀成多个图片,具体怎么优化这方面,我觉得也只能尝试调整图像处理矩阵来优化。
其它
二值化图像时,实际上我是取了个巧,选择特定光照下的图片,事实上,图片在不同亮度下,很可能结果完全不一样。要把数字识别真正进入实用环节,还有很长一段路需要走。
- 2024-05-27
-
回复了主题帖:
《rust实战》读后感(第3~6章)
lugl4313820 发表于 2024-5-26 17:24
出差十多天,看来没有得时间完成任务了。
我也在出差啊,而且是五一节后就一直在外面了。。。,每天晚上工作到深夜
- 2024-05-26
-
发表了主题帖:
《rust实战》读后感(第3~6章)
本帖最后由 tobot 于 2024-5-26 15:04 编辑
Rust是一种系统编程语言,它注重安全性、速度和并发性。这里一并把3~6章的读后感一次性发出来吧。
第三章
学习Rust的复合数据类型,让我对面向对象编程有了全新的认识。Rust通过结构体(structs)、枚举体(enums)和特性(traits)等机制,实现了解耦和抽象,使得代码更加模块化和可维护。
首先,Rust的结构体让我印象深刻。它允许我们将相关的数据组合在一起,形成一个有意义的对象。通过使用impl关键字,我们可以在结构体上定义方法,实现与数据相关的操作。这种方法使得代码更加清晰和易于理解。同时,结构体还可以与所有权和生命周期等机制相结合,确保数据的安全性和有效性。
其次,枚举体是Rust中另一个强大的复合数据类型。它允许我们定义一组具有共有行为的变体,每个变体可以包含不同类型的数据。这使得我们可以用枚举体来表示复杂的层次结构和数据模式,同时还可以通过模式匹配来处理不同的变体。这种灵活性和表达能力让枚举体成为了解决问题的有力工具。
此外,Rust的特性(traits)也为共有行为提供了抽象。特性定义了一组方法,可以由任何类型实现。这使得我们可以为不同的类型提供共有行为,实现多态和代码复用。特性的另一个重要作用是作为约束条件,用于泛型和泛型参数。这使得我们可以编写更加通用和灵活的代码,同时保持类型安全和性能。
在学习Rust的复合数据类型过程中,我深刻体会到了它的优势。首先,它使得代码更加模块化和可维护。通过将数据和行为封装在一起,我们可以更好地组织和管理代码。其次,它提高了代码的可读性和易理解性。通过定义清晰的结构体和枚举体,我们可以更直观地表达数据和逻辑。最后,它增强了代码的灵活性和可扩展性。通过特性和泛型等机制,我们可以编写更加通用和可重用的代码。
第四章
Rust的独特之处在于其编译时内存安全检查,这让开发者能够编写出既安全又高效的代码。所有权则是其中最重要的概念之一。
Rust通过所有权机制来管理内存,每个数据只能有一个所有者。当数据不再被使用时,Rust会自动释放其内存。这种机制避免了内存泄漏的问题,同时也提高了内存使用效率。所有权机制让开发者对内存的使用有了更清晰的认识,从而编写出更加安全和高效的代码。——当然,这也是要求开发者得有更加清晰的思维。
借用是Rust中的另一个重要概念,Rust允许我们借用数据的引用,而不是直接获取其所有权。这样,我们可以在不转移所有权的情况下使用数据,提高了代码的灵活性和复用性。然而,Rust对借用有着严格的规则,如借用检查。这保证了在编译阶段就能发现潜在的数据竞争和内存安全问题。
生命周期是Rust确保引用安全的关键机制。Rust通过生命周期参数来描述引用的有效期限,从而确保引用始终指向有效的数据。生命周期使得我们可以编写出既安全又高效的并发代码,避免了数据竞争和内存泄漏等问题。虽然生命周期的理解和使用有一定难度,但它在保证代码安全性方面发挥着至关重要的作用。
在学习Rust的生命周期、所有权和借用机制过程中,我深刻体会到了Rust在内存管理方面的优势。首先,它提供了一种清晰、简单的内存管理方式,让开发者能够专注于业务逻辑而非内存细节。其次,它提高了代码的安全性和稳定性。通过编译时检查,Rust避免了运行时内存错误,降低了系统崩溃的风险。最后,它增强了代码的灵活性和复用性。通过借用和生命周期机制,我们可以编写出更加通用和可扩展的代码。
总之,学习Rust过程中会遇到一些困难,但只要理解了含义,会发现编写Rust代码是非常安全的,至少在内存使用这块,比大多数软件做得更好。
第五章
这一章讲的是数据类型,同时用一个CPU模拟器作为例子来巩固概念。与第二章的数据类型相比,这章的重点在于浮点数,如何表示浮点数、使用浮点数,这章都有详细介绍,但个人感觉Rust在浮点数这块做得并不算出彩。
第六章
内存管理在任何语言中都不能跳过去,在本章介绍指针,很奇怪的是,在Rust中只有FILO的“栈”而没有FIFO的“队列”,感觉队列在实际应用中可能更加广泛,于是尝试写了一个队列的小程序,见附件。
- 2024-05-16
-
发表了主题帖:
#AI挑战营第三站#更新系统
首先在网页(https://wiki.luckfox.com/zh/Luckfox-Pico/Luckfox-Pico-prepare)找到官方镜像下载链接:(https://pan.baidu.com/share/init?surl=Mhf5JMpkFuZo_TuaGSxBYg&pwd=2sf8),
考虑到要用推理啥的,肯定要不少空间,所以考虑使用mount sd版本的buildroot。
还是扫描一下看看
看起来增加了telnet(TCP23)、ssh(tcp22)功能,根据
登录看看
增加路由
增加dns解析,但还是解析不到地址,根据提示,感觉是没连到dns服务器
感觉像是一开始就没通
抓包看看,居然traceroute都变成udp的包了
不确定原因,使用工具登录再看看,虽然有这么个提示
但仍然可以登录
使用sftp也是可以的
如果不能远程安装文件,只能想办法把安装包拷贝到本地使用。
- 2024-05-15
-
发表了主题帖:
#AI挑战营第三站#初识Luckfox Pico开发板
本帖最后由 tobot 于 2024-5-15 23:31 编辑
包装盒上虽然写的是Luckfox Pico Mini B M,但从板上丝印看是Luckfox Pico Pro/Max,从参数介绍来看,相差还是比较大的
使用type-c的usb口连接板卡,可以发现设备管理器-中多出一个“Remote NDIS based Internet Sharing Device”设备。
同时,网络连接中,也会增加一块网卡。
设置网卡ip地址
由于内测的ip地址不一样,用nmap扫描一下看看:
进一步扫描端口,发现该地址的telnet(tcp23)、ssh(tcp22)都没有打开,但是开启了tcp5555。
推测可以用adb连接,搜索
连接,可以看看里面有些什么
跑个测试试试
随便敲了点东西,跑的时间还挺长的。
看看cpu和内存信息