猪场智能饲养项目记录
项目流程与计划
- 获取猪场视频,
- 分类视频,划分数据集
- 提取关键帧,训练视觉分类模型
- 训练nas模型
- 提取音频,训练音频分类模型
- 训练音频和视频多模态模型
猪只视频分类依据
todo
提取关键帧
todo
训练音频和视频多模态模型
准备:
经过分类的视频
步骤:
将视频切分为5秒左右的短视频
提取音频
提取最后帧
切分视频
遍历处理数据集中所有长视频切分为一个个长度为5s的短视频。
输入
目标目录(target)结构
$ tree target/
target/
`-- 20221101
|-- full
| |-- 2022111010252022111010392097152.mp4
| `-- 202211119582022111110230.mp4
|-- hungry
| |-- 2022111110202211111282097152.mp4
| `-- 202211111032202211111130.mp4
`-- others
`-- 202211104110202211104202097152.mp4
输出
输出目录(output)结构
$ tree output/
output/
`-- 20221101
|-- full
| |-- 2022111010252022111010392097152-0.mp4
| |-- ……
| |-- 202211119582022111110230-20.mp4
| `-- 202211119582022111110230-5.mp4
|-- hungry
| |-- 2022111110202211111282097152-0.mp4
| |-- ……
| |-- 202211111032202211111130-30.mp4
| `-- 202211111032202211111130-5.mp4
`-- others
|-- 202211104110202211104202097152-0.mp4
|-- ……
|-- 202211104110202211104202097152-45.mp4
`-- 202211104110202211104202097152-5.mp4
4 directories, 31 files
batchclip脚本
准备:
将batchclip脚本
和target
、output
目录放在同一项目目录下。
使用:
. batchclip.sh
batchclip target\
参考:
Bash Shell相关脚本
遍历目录和子目录的所有文件
FFMPEG - Split Video into Separate Clips
https://missing-semester-cn.github.io/2020/shell-tools/
代码:
#!/bin/bash
batchclip(){
START=$(date)
echo "---------- 转换目录:$1,开始时间: $START -----------------------" > log.txt
for element in `getmp4 $1`
do
clip $element
done
END=$(date)
echo "---------- 转换目录:$1,开始时间: $START -----------------------" >> log.txt
echo "---------- 转换目录:$1,结束时间: $END -----------------------" >> log.txt
}
function getmp4(){
for element in `ls $1`
do
dir_or_file=$1"/"$element
if [ -d $dir_or_file ]
then
getmp4 $dir_or_file
else
echo $dir_or_file
fi
done
}
clip() {
A=0
DURATION="$(ffprobe -v error -show_entries format=duration -of default=noprint_wrappers=1:nokey=1 $1)"
DURATION=${DURATION%.*}
CLIPLENGTH=5
OUTPUT=$1
OUTPUT=${OUTPUT%.*}
OUTPUT=${OUTPUT/target/output}
echo $1-clip >> log.txt
OUTPUTDIR=${OUTPUT%//*}
if [ ! -d $OUTPUTDIR ]
then
mkdir -p $OUTPUTDIR
echo "mkdir $OUTPUTDIR, it was not exist." >> log.txt
fi
while [ "$A" -lt "$DURATION" ]
do
if [ -f ${OUTPUT}-${A}.mp4 ]
then
echo "${OUTPUT}-${A}.mp4 already exist." >> log.txt
else
ffmpeg -ss $A -i $1 -t $CLIPLENGTH -c:v copy ${OUTPUT}-${A}.mp4;
echo ${OUTPUT}-${A}.mp4 >> log.txt
fi
let "A=A+$CLIPLENGTH"
done
}