MCPcopy Create free account
hub / github.com/OpenImagingLab/FlashVSR / KeyFrameMatcher

Class KeyFrameMatcher

diffsynth/extensions/FastBlend/api.py:92–148  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

90
91
92class KeyFrameMatcher:
93 def __init__(self):
94 pass
95
96 def extract_number_from_filename(self, file_name):
97 result = []
98 number = -1
99 for i in file_name:
100 if ord(i)>=ord("0") and ord(i)<=ord("9"):
101 if number == -1:
102 number = 0
103 number = number*10 + ord(i) - ord("0")
104 else:
105 if number != -1:
106 result.append(number)
107 number = -1
108 if number != -1:
109 result.append(number)
110 result = tuple(result)
111 return result
112
113 def extract_number_from_filenames(self, file_names):
114 numbers = [self.extract_number_from_filename(file_name) for file_name in file_names]
115 min_length = min(len(i) for i in numbers)
116 for i in range(min_length-1, -1, -1):
117 if len(set(number[i] for number in numbers))==len(file_names):
118 return [number[i] for number in numbers]
119 return list(range(len(file_names)))
120
121 def match_using_filename(self, file_names_a, file_names_b):
122 file_names_b_set = set(file_names_b)
123 matched_file_name = []
124 for file_name in file_names_a:
125 if file_name not in file_names_b_set:
126 matched_file_name.append(None)
127 else:
128 matched_file_name.append(file_name)
129 return matched_file_name
130
131 def match_using_numbers(self, file_names_a, file_names_b):
132 numbers_a = self.extract_number_from_filenames(file_names_a)
133 numbers_b = self.extract_number_from_filenames(file_names_b)
134 numbers_b_dict = {number: file_name for number, file_name in zip(numbers_b, file_names_b)}
135 matched_file_name = []
136 for number in numbers_a:
137 if number in numbers_b_dict:
138 matched_file_name.append(numbers_b_dict[number])
139 else:
140 matched_file_name.append(None)
141 return matched_file_name
142
143 def match_filenames(self, file_names_a, file_names_b):
144 matched_file_name = self.match_using_filename(file_names_a, file_names_b)
145 if sum([i is not None for i in matched_file_name]) > 0:
146 return matched_file_name
147 matched_file_name = self.match_using_numbers(file_names_a, file_names_b)
148 return matched_file_name
149

Callers 2

detect_framesFunction · 0.85

Calls

no outgoing calls

Tested by

no test coverage detected