金鹏笔记
本文最后更新于 2024年2月21日 上午
1.15
购买物品
我购买了一些物品来做实验。
我购买的东西如下:
**1.**恒温箱
__2.__树莓派 zero 2w
__3.__红外摄像头
__4.__红外补光灯
__5.__蚕豆
我购买恒温箱是因为需要一个可控的温度环境,而树莓派和红外摄像头及补光灯是用来在黑暗时获得清晰照片的,最后的蚕豆是用来作为实验对象的。
1.20
自提恒温箱
由于我们的恒温箱是在咸鱼上购买的,运费又很贵,所以爸爸选择了自提。
自提的地点在一个名叫 金盏村 的村子,爸爸开车到达金盏村后又给卖家打了电话,根据卖家的指引到达了取货的地点,上了楼,又从楼上搬下个大白铁箱子,隔近了一看,才知道这就是实验用的恒温箱。
之后,我们把恒温箱装在车上,高高兴兴的回了家
1.22
编写拍照程序
我使用树莓派来作为我拍摄延时摄影的工具,所以我编写了一个自动拍摄延时摄影的 shell 程序。
程序分为了5部分:对时,打开补光灯,__拍照__,关闭补光灯,等待
其中第一个执行的是对时,这个部分需要在主循环开始前使用__ntp date命令进行对时。对时完毕后会进入主循环,这个主循环是 while True__,它是一个死循环,也就是说这个程序只能通过kill或者__control + C or Z__来退出。进入主循环后程序就会开始第二个部分:打开补光灯。这个动作需要写一个/dev__目录下的文件就可以打开GPIO从而启动补光灯。接下来就是最关键的环节:__拍照 了。拍照是通过调用树莓派独有的__raspill命令完成的,我们可以在命令后面加上-o xxx来指定文件名,而当你把文件名指定为当前的时间时,我们就可以获得以日期命名的图片了。关闭补光灯这个步骤同样要写入/dev__目录下的文件,只不过这次要额外删除GPIO的文件。最后的这个步骤就是等待了,由于我需要每5分钟拍摄一张图片,所以我们需要执行一条__sleep 300__命令。
1.25
制作光照试验箱
我需要一个箱子来进行隔绝外界的光线,以便进行光照有关的实验。
我首先找来了一个多余的纸箱,然后在这个箱子上打开一个大孔,并把灯和摄像头的线从这个孔塞进去,再把树莓派粘在外面,接上从箱内引出的摄像头CSI排线,就完成了光照实验箱的制作,我给树莓派通上电源,放入植物,进行拍摄延时摄影。
1.30
树莓派zero 2w向树莓派 4B 代码移植
除了树莓派zero外,我还有一个树莓派4b,因此我想再搭建一套环境进行并行实验,步骤如下:
1.复制代码到Pi 4B
2.调试
在调试的过程中遇到了一些问题,首先是无法执行 __ntp date,解决方案是执行命令sudo apt-get install ntp来安装ntp,其次是照片总是被命名为var1.jpg而不是期望的年-月-日-时-分.jpg,经过我的一番排查后发现,导致这个原因是因为我我误将raspill -o $var1.jpg写为了raspill -o var1.jpg__,在加入了 $ 之后,代码恢复了正常。
最后我成功使用树莓派4B移植了定时拍照的代码。
1 | |
2.7
拍摄光照-恒夜组
这是我第一次用我制做的光照试验箱进行实验,所以我选择了一组较简单的恒夜作为第一组。
由于我上次已经编写好了程序,所以这次我直接挑选了一盆比较矮的花,刚好勉强塞进箱子里,最后打开树莓派,启动程序就可以开始拍摄延时摄影了!
2.10
温度-对照组实验
今天,大部分实验已经做完了,只剩下温度的两组实验,而这两组实验是需要恒温箱的,所以我们不能并行做实验,因此,我选择了这组实验。
由于树莓派4B的发热太严重,容易影响恒温箱恒定的温度,所以在恒温箱里我们都用树莓派zero 2w来作为延时摄影的相机。
我把树莓派用热熔胶粘在恒温箱门的内壁,之后把电源线从门缝中穿过,插在电源上,调整好摄像头的角度,最后,由于光照条件是恒夜,我们还要把恒温箱的玻璃窗贴上不透明的遮光板,给树莓派换上红外摄像头和红外补光灯,启动树莓派,调好恒温箱温度,树莓派就可以自动开始拍摄图片了,而我们只需要定时通过操作面板升高/降低恒温箱内的温度就可以了。
2.12
温度-实验组实验
现在实验已经只剩最后一组了,这一组依然需要恒温箱,但这次我就只能拿一个比较高的花来实验。
我费了九牛二虎之力终于把植物塞了进去,这时,树莓派又突然从箱门上掉了下来,于是,我只能把树莓派再重新粘回去,重新调整摄像头角度,最后终于开始了这组实验。
2.18
合成视频
我们的温度-对照组实验已经做完了,为了方便我们分析和观察,我们需要合成一个视频。
我们选择了__ffmpeg__命令做为合成视频的工具,但是,在合成视频的时候经常遇到各种各样的问题。
最开始,我们遇到的问题是 ffmpeg 不识别图片,经过一番搜索后,我得知:这个错误是由于我们的命令名称指定的方式不对,我们把代码从__ffmpeg -i '2024*.jpg' out.mp4换成了ffmpeg -pattern_type glob -i '2024*.jpg' out.mp4__之后,解决了这个问题。
虽然命令能开始合成了,但是我发现每次合成的视频都只有1帧就结束了,于是我们查看 ffmpeg 的日志发现,视频在刚开始合成的时候就有一个进程 kill 了 ffmpeg 进程,之后,我们在调查时发现,在开始合成视频的时候树莓派的可用内存几乎在一瞬间从2GB降低到几百MB,紧接着,ffmpeg 就又被_kill_了,于是,我们终于发现了问题的原因:__ffmpeg__在合成视频的时候占用了太多的内存,导致系统触发了OOM ( Out Of Momery ,内存溢出)机制,强行_kill_了内存占用最多的进程,那个把合成视频的 ffmpeg 进程_kill_掉的自然也是系统进程了。
我很快就有了解决方案:把所有图片通过__rsync__命令同步到家里的 QNAP 上,并在 QNAP 上用 ffmpeg 成功合成了视频。
2.19
论文撰写
所有的实验材料都准备完了,终于来到了最后的阶段——论文撰写。
我把这些原始数据都分别放好,然后开始写论文。
在我和爸爸的协助下,所有的框架都完成了,最后,我把这些原始数据全部浓缩成了图表、结论等直观的数据,填到论文里,就这样,一篇崭新的论文诞生了!