项目实训(五)—参数设置与调用接口

前言:

我们在服务器中专门建立了一个文件夹用于保存用户上传的视频、视频处理的中间结果以及最终果,结构如下:(每个用户都会有一个以ID命名的文件夹,这里我们创建的文件夹仅仅用于测试)

——EasyCut
  ——ID
    ——ID_VideoName
      ——Original_Video  //原视频地址
      ——SceneSeg_Video  //场景划分结果
      ——Key_Frame       //视频摘要结果
      ——Resources       //人脸检测和场景约束结果
      ——SceneFeature    //视频特征文件
      ——SceneSimilar    //场景视频聚类结果

1、命令行参数设置:

LGSS框架关于场景划分处理的原视频的地址、中间结果的保存地址以及划分结果的保存地址都是固定的,如果想要实际运用起来,需要将其设置为参数。

1、pre/ShotDetection/shotdetect.py

(1)原视频地址:运行时由 --video_path 指定:
项目实训(五)—参数设置与调用接口_第1张图片

(2)帧(frame)和镜头(shot)相关文件的保存目录:运行时由 --save_data_root_path 指定:
项目实训(五)—参数设置与调用接口_第2张图片
shot_stats 文件保存和读取地址:
项目实训(五)—参数设置与调用接口_第3张图片
shot_keyf 文件保存地址:
请添加图片描述
shot_txt 文件保存地址:
请添加图片描述

shot_spilt_video 文件保存地址:
请添加图片描述

2、lgss/config/demo.py
data_root 、shot_frm_path 、video_name:
项目实训(五)—参数设置与调用接口_第4张图片

3、lgss/run.py
config/demo 中的 data_root、shot_frm_path、video_name 由运行时的参数指定:
项目实训(五)—参数设置与调用接口_第5张图片
4、lgss/utilis/dataset_utilis.py:
最终划分结果的保存地址(即 scene_video):
项目实训(五)—参数设置与调用接口_第6张图片
shot_txt 文件的读取也在该程序中:
项目实训(五)—参数设置与调用接口_第7张图片

5、lgss/src/data/demo.py
通过切分出的镜头(shot)进行最后的场景划分时(即运行 lgss/run.py)需要读取 shot_keyf 文件:
项目实训(五)—参数设置与调用接口_第8张图片
6、lgss/utilis目录下的 iou.py 和 recall_time.py 中相关中间结果文件的地址也需要进行相应修改

测试:
1、运行 shotdetect.py:

python ShotDetection/shotdetect.py --print_result --save_keyf --save_keyf_txt --video_path /opt/data/private/xuyunyang/EasyCut/ID/ID_VideoName/Original_Video/demo.mp4  --save_data_root_path /opt/data/private/xuyunyang/EasyCut/ID/ID_VideoName/SceneSeg_Video

项目实训(五)—参数设置与调用接口_第9张图片项目实训(五)—参数设置与调用接口_第10张图片
2、运行 run.py:

python run.py config/demo.py /opt/data/private/xuyunyang/EasyCut/ID/ID_VideoName demo

项目实训(五)—参数设置与调用接口_第11张图片

2、调用接口

运行场景划分、视频摘要、人脸检测算法、特征提取、场景聚类、场景约束等需要多次通过命令行、使用多个参数,为了更方便地在后端使用,需要将这相应的算法连起来,对外提供一个调用接口:

1、执行场景划分、视频摘要、特征提取、人脸检测、场景约束算法:
新建一个接口文件 algorithm_run.py ,使用 subprocess.call ( ) 来执行命令行:

import subprocess
import argparse
from app import start

if __name__ == '__main__':
  
    parser = argparse.ArgumentParser("Single Video ShotDetect")
    parser.add_argument('ID')
    parser.add_argument('ID_VideoName')
    parser.add_argument('video_name')
    args = parser.parse_args()

    #SceneSeg
    path_root='/opt/data/private/xuyunyang/2022419/SceneSeg'
    save_path='/opt/data/private/xuyunyang/EasyCut/'+args.ID+'/'+args.ID_VideoName
    command1='python '+path_root+'/pre/ShotDetection/shotdetect.py --print_result --save_keyf --save_keyf_txt --video_path '+save_path+'/Original_Video/'+args.video_name+' --save_data_root_path '+save_path+'/SceneSeg_Video'
    retcode1=subprocess.call(command1,shell=True)
    command2='python '+path_root+'/lgss/run.py '+path_root+'/lgss/config/demo.py '+save_path+' '+args.video_name.split('.')[0]
    retcode2=subprocess.call(command2,shell=True)

    # key frame
    command3='python /opt/data/private/xuyunyang/run.py --ID '+args.ID+' --ID_VideoName '+args.ID_VideoName+' --video_name '+args.video_name
    retcode3=subprocess.call(command3,shell=True)

    #extract_ sceneFeature
    path_root2='/opt/data/private/xuyunyang/2022419/SceneFeatureExtract/'
    command4='python '+path_root2+'extract_video_feature.py --ID '+args.ID+' --ID_VideoName '+args.ID_VideoName+' --VideoName '+args.video_name.split('.')[0]
    retcode4=subprocess.call(command4,shell=True)

    # face detect
    start(args.ID,args.ID_VideoName,args.video_name)

    #scene_gennerate
    command5='python '+path_root2+'scene_gennerate.py --ID '+args.ID+' --ID_VideoName '+args.ID_VideoName
    retcode5=subprocess.call(command5,shell=True)

    print('END ALL')

2、执行场景划分、视频摘要、特征提取、场景聚类算法:
新建一个接口文件 algorithm2_run.py:

import subprocess
import argparse

  
if __name__ == '__main__':

    parser = argparse.ArgumentParser("Single Video ShotDetect")
    parser.add_argument('ID')
    parser.add_argument('ID_VideoName')
    parser.add_argument('video_name')
    args = parser.parse_args()

    #SceneSeg
    path_root='/opt/data/private/xuyunyang/2022419/SceneSeg'
    save_path='/opt/data/private/xuyunyang/EasyCut/'+args.ID+'/'+args.ID_VideoName
    command1='python '+path_root+'/pre/ShotDetection/shotdetect.py --print_result --save_keyf --save_keyf_txt --video_path '+save_path+'/Original_Video/'+args.video_name+' --save_data_root_path '+save_path+'/SceneSeg_Video'
    retcode1=subprocess.call(command1,shell=True)
    command2='python '+path_root+'/lgss/run.py '+path_root+'/lgss/config/demo.py '+save_path+' '+args.video_name.split('.')[0]
    retcode2=subprocess.call(command2,shell=True)

    # key frame
    command3='python /opt/data/private/xuyunyang/run.py --ID '+args.ID+' --ID_VideoName '+args.ID_VideoName+' --video_name '+args.video_name
    retcode3=subprocess.call(command3,shell=True)

    #extract_ sceneFeature
    path_root2='/opt/data/private/xuyunyang/2022419/SceneFeatureExtract/'
    command4='python '+path_root2+'extract_video_feature.py --ID '+args.ID+' --ID_VideoName '+args.ID_VideoName+' --VideoName '+args.video_name.split('.')[0]
    retcode4=subprocess.call(command4,shell=True)

    #clustering
    command5='python '+path_root2+'clustering.py --ID '+args.ID+'  --ID_VideoName '+args.ID_VideoName
    retcode5=subprocess.call(command5,shell=True)

    print('END ALL')

你可能感兴趣的:(项目实训,计算机视觉)