tian-ming 2021-12-08 21:03 采纳率: 0%
浏览 9
已结题

运行R-C3D网络代码,使用ffmpeg进行视频预处理时出现 PermissionError: [WinError 5] 拒绝访问 的报错


```python
#util.py

import subprocess
import shutil
import os, errno
import cv2
#import scipy.io
import glob
from collections import defaultdict
import shutil
import math
from sklearn.cluster import KMeans
import matplotlib.pyplot as plt
import numpy as np

def dataset_label_parser(meta_dir, split, use_ambiguous=False):
  class_id = defaultdict(int)
  with open(os.path.join(meta_dir, 'detclasslist.txt'), 'r') as f:
    lines = f.readlines()
    for l in lines:
      cname = l.strip().split()[-1]
      cid = int(l.strip().split()[0])
      class_id[cname] = cid
      if use_ambiguous:
        class_id['Ambiguous'] = 21
    segment = {}
    #video_instance = set()
  for cname in class_id.keys():
    tmp = '{}_{}.txt'.format(cname, split)
    with open(os.path.join(meta_dir, tmp)) as f:
      lines = f.readlines()
      for l in lines:
        vid_name = l.strip().split()[0]
        start_t = float(l.strip().split()[1])
        end_t = float(l.strip().split()[2])
        #video_instance.add(vid_name)
        # initionalize at the first time
        if not vid_name in segment.keys():
          segment[vid_name] = [[start_t, end_t, class_id[cname]]]
        else:
          segment[vid_name].append([start_t, end_t, class_id[cname]])

  # sort segments by start_time
  for vid in segment:
    segment[vid].sort(key=lambda x: x[0])

  if True:
    keys = list(segment.keys())
    keys.sort()
    with open('segment.txt', 'w') as f:
      for k in keys:
        f.write("{}\n{}\n\n".format(k,segment[k]))

  return segment

def get_segment_len(segment):
  segment_len = []
  for vid_seg in segment.values():
    for seg in vid_seg:
      l = seg[1] - seg[0]
      assert l > 0
      segment_len.append(l)
  return segment_len

def mkdir(path):
  try:
    os.makedirs(path)
  except OSError as e:
    if e.errno != errno.EEXIST:
      raise

def rm(path):
  try:
    shutil.rmtree(path)
  except OSError as e:
    if e.errno != errno.ENOENT:
      raise

def ffmpeg(filename, outfile, fps):
  command = ["D:/编辑软件/ffmpeg-2020-12-09-git-7777e5119a-full_build/bin", "-i", filename, "-q:v", "1", "-r", str(fps), outfile]
  pipe = subprocess.Popen(command,stdout = subprocess.PIPE, stderr = subprocess.STDOUT)
  #pipe = subprocess.Popen(command,shell=True, stdout = subprocess.PIPE, stderr = subprocess.STDOUT)
  pipe.communicate()


def resize(filename, size = (171, 128)):
  img = cv2.imread(filename, 100)
  img2 = cv2.resize(img, size, interpolation=cv2.INTER_LINEAR)
  cv2.imwrite(filename, img2, [100])

# get segs_len from segments by: segs_len = [ s[1]-s[0] for v in segments.values() for s in v ]
def kmeans(segs_len, K=5, vis=False):
  X = np.array(segs_len).reshape(-1, 1)
  cls = KMeans(K).fit(X)
  print( "the cluster centers are: ")
  print( cls.cluster_centers_)
  if vis:
    markers = ['^','x','o','*','+']  
    for i in range(K):  
      members = cls.labels_ == i  
      plt.scatter(X[members,0],X[members,0],s=60,marker=markers[min(i,K-1)],c='b',alpha=0.5)  
      plt.title(' ')  
      plt.show()  



```#generte_frame.py

import os
import shutil
from util import *
import json
import glob
#from multiprocessing import Process,Manager

fps = 25
ext = '.mp4'
VIDEO_DIR = 'C:/Users/86150/Desktop/pureEnglish/R-C3D.pytorch-master/preprocess/thumos14/UCFsec'
FRAME_DIR = 'C:/Users/86150/Desktop/pureEnglish/R-C3D.pytorch-master/preprocess/thumos14/FREAM'

META_DIR = os.path.join(FRAME_DIR, 'annotation_')

def generate_frame(split):
  SUB_FRAME_DIR = os.path.join(FRAME_DIR, split)
  mkdir(SUB_FRAME_DIR)
  segment = dataset_label_parser(META_DIR+split, split, use_ambiguous=True)
  video_list = segment.keys()
  for vid in video_list:
    filename = os.path.join(VIDEO_DIR, split, vid+ext)
    outpath = os.path.join(FRAME_DIR, split, vid)
    outfile = os.path.join(outpath, "image_%5d.jpg")
    mkdir(outpath)
    ffmpeg(filename, outfile, fps)
    for framename in os.listdir(outpath):
      resize(os.path.join(outpath, framename))
    frame_size = len(os.listdir(outpath))
    print (filename, fps, frame_size)

generate_frame('val')
#generate_frame('test')
#generate_frame('testing')

  • 写回答

0条回答 默认 最新

    报告相同问题?

    问题事件

    • 系统已结题 12月16日
    • 创建了问题 12月8日

    悬赏问题

    • ¥15 封装的 matplotlib animation 不显示图像
    • ¥15 python摄像头画面无法显示
    • ¥15 关于#3d#的问题:d标定算法(语言-python)
    • ¥15 cve,cnnvd漏洞扫描工具推荐
    • ¥15 图像超分real-esrgan网络自己训练模型遇到问题
    • ¥15 如何构建全国统一的物流管理平台?
    • ¥100 ijkplayer使用AndroidStudio/CMake编译,如何支持 rtsp 直播流?
    • ¥15 用js遍历数据并对非空元素添加css样式
    • ¥15 使用autodl云训练,希望有直接运行的代码(关键词-数据集)
    • ¥50 python写segy数据出错