Skip to content
GitLab
    • Explore Projects Groups Snippets
Projects Groups Snippets
  • /
  • Help
    • Help
    • Support
    • Community forum
    • Submit feedback
    • Contribute to GitLab
  • Sign in / Register
  • F five-video-classification-methods
  • Project information
    • Project information
    • Activity
    • Labels
    • Members
  • Repository
    • Repository
    • Files
    • Commits
    • Branches
    • Tags
    • Contributors
    • Graph
    • Compare
  • Issues 47
    • Issues 47
    • List
    • Boards
    • Service Desk
    • Milestones
  • Merge requests 7
    • Merge requests 7
  • CI/CD
    • CI/CD
    • Pipelines
    • Jobs
    • Schedules
  • Deployments
    • Deployments
    • Environments
    • Releases
  • Packages and registries
    • Packages and registries
    • Package Registry
    • Infrastructure Registry
  • Monitor
    • Monitor
    • Incidents
  • Analytics
    • Analytics
    • Value stream
    • CI/CD
    • Repository
  • Wiki
    • Wiki
  • Snippets
    • Snippets
  • Activity
  • Graph
  • Create a new issue
  • Jobs
  • Commits
  • Issue Boards
Collapse sidebar
  • Matt Harvey
  • five-video-classification-methods
  • Merge requests
  • !43

Create paths in an OS-agnostic way.

  • Review changes

  • Download
  • Email patches
  • Plain diff
Merged Matt Harvey requested to merge proper-paths into master 7 years ago
  • Overview 1
  • Commits 5
  • Pipelines 0
  • Changes 8

Fixes #37 (closed) and fixes #35 (closed).

Compare
  • master (base)

and
  • latest version
    301525df
    5 commits, 2 years ago

8 files
+ 53
- 53

    Preferences

    File browser
    Compare changes
da‎ta‎
1_move_‎files.py‎ +6 -6
2_extract‎_files.py‎ +14 -15
dat‎a.py‎ +5 -5
extract_f‎eatures.py‎ +2 -2
mode‎ls.py‎ +2 -2
trai‎n.py‎ +17 -18
train_‎cnn.py‎ +5 -4
validat‎e_cnn.py‎ +2 -1
data/1_move_files.py
+ 6
- 6
  • View file @ 301525df

  • Edit in single-file editor

  • Open in Web IDE


@@ -13,8 +13,8 @@ def get_train_test_lists(version='01'):
breakdowns we'll later use to move everything.
"""
# Get our files based on version.
test_file = './ucfTrainTestlist/testlist' + version + '.txt'
train_file = './ucfTrainTestlist/trainlist' + version + '.txt'
test_file = os.path.join('ucfTrainTestlist', 'testlist' + version + '.txt')
train_file = os.path.join('ucfTrainTestlist', 'trainlist' + version + '.txt')
# Build the test list.
with open(test_file) as fin:
@@ -44,14 +44,14 @@ def move_files(file_groups):
for video in videos:
# Get the parts.
parts = video.split('/')
parts = video.split(os.path.sep)
classname = parts[0]
filename = parts[1]
# Check if this class exists.
if not os.path.exists(group + '/' + classname):
if not os.path.exists(os.path.join(group, classname)):
print("Creating folder for %s/%s" % (group, classname))
os.makedirs(group + '/' + classname)
os.makedirs(os.path.join(group, classname))
# Check if we have already moved this file, or at least that it
# exists to move.
@@ -60,7 +60,7 @@ def move_files(file_groups):
continue
# Move it.
dest = group + '/' + classname + '/' + filename
dest = os.path.join(group, classname, filename)
print("Moving %s to %s" % (filename, dest))
os.rename(filename, dest)
data/2_extract_files.py
+ 14
- 15
  • View file @ 301525df

  • Edit in single-file editor

  • Open in Web IDE


@@ -25,13 +25,13 @@ def extract_files():
`ffmpeg -i video.mpg image-%04d.jpg`
"""
data_file = []
folders = ['./train/', './test/']
folders = ['train', 'test']
for folder in folders:
class_folders = glob.glob(folder + '*')
class_folders = glob.glob(os.path.join(folder, '*'))
for vid_class in class_folders:
class_files = glob.glob(vid_class + '/*.avi')
class_files = glob.glob(os.path.join(vid_class, '*.avi'))
for video_path in class_files:
# Get the parts of the file.
@@ -43,10 +43,9 @@ def extract_files():
# the info.
if not check_already_extracted(video_parts):
# Now extract it.
src = train_or_test + '/' + classname + '/' + \
filename
dest = train_or_test + '/' + classname + '/' + \
filename_no_ext + '-%04d.jpg'
src = os.path.join(train_or_test, classname, filename)
dest = os.path.join(train_or_test, classname,
filename_no_ext + '-%04d.jpg')
call(["ffmpeg", "-i", src, dest])
# Now get how many frames it is.
@@ -66,25 +65,25 @@ def get_nb_frames_for_video(video_parts):
"""Given video parts of an (assumed) already extracted video, return
the number of frames that were extracted."""
train_or_test, classname, filename_no_ext, _ = video_parts
generated_files = glob.glob(train_or_test + '/' + classname + '/' +
filename_no_ext + '*.jpg')
generated_files = glob.glob(os.path.join(train_or_test, classname,
filename_no_ext + '*.jpg'))
return len(generated_files)
def get_video_parts(video_path):
"""Given a full path to a video, return its parts."""
parts = video_path.split('/')
filename = parts[3]
parts = video_path.split(os.path.sep)
filename = parts[2]
filename_no_ext = filename.split('.')[0]
classname = parts[2]
train_or_test = parts[1]
classname = parts[1]
train_or_test = parts[0]
return train_or_test, classname, filename_no_ext, filename
def check_already_extracted(video_parts):
"""Check to see if we created the -0001 frame of this file."""
train_or_test, classname, filename_no_ext, _ = video_parts
return bool(os.path.exists(train_or_test + '/' + classname +
'/' + filename_no_ext + '-0001.jpg'))
return bool(os.path.exists(os.path.join(train_or_test, classname,
filename_no_ext + '-0001.jpg')))
def main():
"""
data.py
+ 5
- 5
  • View file @ 301525df

  • Edit in single-file editor

  • Open in Web IDE


@@ -22,7 +22,7 @@ class DataSet():
"""
self.seq_length = seq_length
self.class_limit = class_limit
self.sequence_path = './data/sequences/'
self.sequence_path = os.path.join('data', 'sequences')
self.max_frames = 300 # max number of frames a video can have for us to use it
# Get the data.
@@ -39,7 +39,7 @@ class DataSet():
@staticmethod
def get_data():
"""Load our data from file."""
with open('./data/data_file.csv', 'r') as fin:
with open(os.path.join('data', 'data_file.csv'), 'r') as fin:
reader = csv.reader(fin)
data = list(reader)
@@ -203,14 +203,14 @@ class DataSet():
def get_frames_for_sample(sample):
"""Given a sample row from the data file, get all the corresponding frame
filenames."""
path = './data/' + sample[0] + '/' + sample[1] + '/'
path = os.path.join('data', sample[0], sample[1])
filename = sample[2]
images = sorted(glob.glob(path + filename + '*jpg'))
images = sorted(glob.glob(os.path.join(path, filename + '*jpg')))
return images
@staticmethod
def get_filename_from_image(filename):
parts = filename.split('/')
parts = filename.split(os.path.sep)
return parts[-1].replace('.jpg', '')
@staticmethod
extract_features.py
+ 2
- 2
  • View file @ 301525df

  • Edit in single-file editor

  • Open in Web IDE


@@ -32,8 +32,8 @@ pbar = tqdm(total=len(data.data))
for video in data.data:
# Get the path to the sequence for this video.
path = './data/sequences/' + video[2] + '-' + str(seq_length) + \
'-features.txt'
path = os.path.join('data', 'sequences', video[2] + '-' + str(seq_length) + \
'-features.txt')
# Check if we already have it.
if os.path.isfile(path):
models.py
+ 2
- 2
  • View file @ 301525df

  • Edit in single-file editor

  • Open in Web IDE


@@ -47,7 +47,7 @@ class ResearchModels():
self.model = self.lstm()
elif model == 'lrcn':
print("Loading CNN-LSTM model.")
self.input_shape = (seq_length, 150, 150, 3)
self.input_shape = (seq_length, 80, 80, 3)
self.model = self.lrcn()
elif model == 'mlp':
print("Loading simple MLP.")
@@ -66,7 +66,7 @@ class ResearchModels():
sys.exit()
# Now compile the network.
optimizer = Adam(lr=1e-4, decay=1e-6)
optimizer = Adam(lr=1e-5, decay=1e-6)
self.model.compile(loss='categorical_crossentropy', optimizer=optimizer,
metrics=metrics)
0 Assignees
None
Assign to
0 Reviewers
None
Request review from
Labels
3
Client: Kotlin Enhancement: Feature Feature: Enum
3
Client: Kotlin Enhancement: Feature Feature: Enum
    Assign labels
  • Manage project labels

Milestone
5.1.1
5.1.1 (expired)
None
Time tracking
No estimate or time spent
Lock merge request
Unlocked
0
0 participants
Reference: OpenAPITools/openapi-generator!9143
Source branch: proper-paths

Menu

Explore Projects Groups Snippets