金鹏笔记

本文最后更新于 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
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
#!/bin/bash
var1=0
ntpdate cn.pool.ntp.org
while true
do
echo 1 > /sys/class/gpio/export
echo out > /sys/class/gpio/gpio1/direction
echo 1 > /sys/class/gpio/gpio1/value
sleep 5
echo on

var1=`date +%F`"-"`date +%H`"-"`date +%M`
echo pai_start
raspistill -o /home/gmt/jinpeng_pics/$var1.jpg -t 5000
echo pai_stop
echo -n "["`date` >> CPUtemp.log
echo -n "] " >> CPUtemp.log
python CPUtemp.py >> CPUtemp.log
echo cp_on
cp /home/gmt/jinpeng_pics/$var1.jpg /var/www/html/abc.jpg
echo cp_off
sleep 2
echo 0 > /sys/class/gpio/gpio1/value
echo 1 > /sys/class/gpio/unexport
echo off

sleep 300
done



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 的日志发现,视频在刚开始合成的时候就有一个进程 killffmpeg 进程,之后,我们在调查时发现,在开始合成视频的时候树莓派的可用内存几乎在一瞬间从2GB降低到几百MB,紧接着,ffmpeg 就又被_kill_了,于是,我们终于发现了问题的原因:__ffmpeg__在合成视频的时候占用了太多的内存,导致系统触发了OOM ( Out Of Momery ,内存溢出)机制,强行_kill_了内存占用最多的进程,那个把合成视频的 ffmpeg 进程_kill_掉的自然也是系统进程了。

​ 我很快就有了解决方案:把所有图片通过__rsync__命令同步到家里的 QNAP 上,并在 QNAP 上用 ffmpeg 成功合成了视频。


2.19

论文撰写

​ 所有的实验材料都准备完了,终于来到了最后的阶段——论文撰写。

​ 我把这些原始数据都分别放好,然后开始写论文。

​ 在我和爸爸的协助下,所有的框架都完成了,最后,我把这些原始数据全部浓缩成了图表、结论等直观的数据,填到论文里,就这样,一篇崭新的论文诞生了!


金鹏笔记
https://zlzlezhi.github.io/2024/02/20/jinpeng_biji/
作者
Mr.LeZhi
发布于
2024年2月20日
更新于
2024年2月21日
许可协议