Loading

猪场智能饲养项目记录

项目流程与计划

  • 获取猪场视频,
  • 分类视频,划分数据集
  • 提取关键帧,训练视觉分类模型
  • 训练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脚本targetoutput目录放在同一项目目录下。
使用:

. 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
}
posted @ 2023-01-31 16:52  丘野  阅读(26)  评论(0编辑  收藏  举报