У меня есть видео, которое отображает футбольный матч. Файл состоит из нескольких открывающих рекламных роликов, фактического совпадения и конца / перерыва в перерыве. В результате видеофайл всегда длиннее самого совпадения, и существует несоответствие между началом игры и началом файла.
Я хочу использовать соотношение между наблюдаемым временем распознавания и временем воспроизведения видео, чтобы сделать точную оценку gameTime
для каждого кадра в видео. Например, когда окно результатов не отображается (повторы, неточные OCR-результаты). Должно быть линейное соотношение между videoTime
и gameTime
, потому что одна секунда в видео также является одной секундой в матче.
Я знаю, что могу извлечь время воспроизведения видео с помощью следующее:
import cv2
video = cv2.VideoCapture('crystal_palace-arsenal_trimmed_Trim.mp4')
mspf = 1000 / video.get(cv2.CAP_PROP_FPS)
if __name__ == '__main__':
counter = 0
while True:
ret, frame = video.read()
if ret:
counter += 1
videoTime = counter * mspf
mspf
- это миллисекунды на кадр и равно 33.33
. Теперь очень просто определить videoTime
.
Далее я собираюсь определить ocrTime
, используя мой код. Например, на приведенном ниже рисунке показан следующий вывод:
00:25
Итак, gametime
изначально имеет вид mm:ss
. Я переписываю gameTime
в миллисекунды следующим образом:
def seconds_since(time):
minutes = int(time.split(':')[0])
seconds = int(time.split(':')[1])
total_seconds = (minutes * 60) + seconds
return total_seconds * 1000
В большинстве случаев это работает хорошо. Однако иногда мой код не дает правильного вывода, и ocrTime
равно N/A
.
Фрагмент вывода при запуске всего вместе выглядит следующим образом:
Frame: 4105, videoTime: 136834, gametime: N/A
Frame: 4115, videoTime: 137167, gametime: N/A
Frame: 4119, videoTime: 137300, gametime: 80000
Frame: 4121, videoTime: 137367, gametime: 80000
Frame: 4123, videoTime: 137434, gametime: 80000
Frame: 4125, videoTime: 137500, gametime: 80000
Frame: 4127, videoTime: 137567, gametime: 80000
Frame: 4129, videoTime: 137634, gametime: 80000
Frame: 4131, videoTime: 137700, gametime: 80000
Frame: 4133, videoTime: 137767, gametime: 80000
Frame: 4135, videoTime: 137834, gametime: 80000
Frame: 4137, videoTime: 137900, gametime: 80000
Frame: 4139, videoTime: 137967, gametime: 80000
Frame: 4141, videoTime: 138034, gametime: 80000
Frame: 4143, videoTime: 138100, gametime: 80000
Frame: 4145, videoTime: 138167, gametime: 80000
Frame: 4147, videoTime: 138234, gametime: 80000
Frame: 4149, videoTime: 138300, gametime: 80000
Frame: 4151, videoTime: 138367, gametime: 80000
Frame: 4153, videoTime: 138434, gametime: 80000
Frame: 4155, videoTime: 138500, gametime: 80000
Frame: 4157, videoTime: 138567, gametime: 80000
Frame: 4159, videoTime: 138634, gametime: 80000
Frame: 4161, videoTime: 138700, gametime: 80000
Frame: 4163, videoTime: 138767, gametime: 80000
Frame: 4165, videoTime: 138834, gametime: 80000
Frame: 4167, videoTime: 138900, gametime: 80000
Frame: 4169, videoTime: 138967, gametime: 80000
Frame: 4171, videoTime: 139034, gametime: 80000
Frame: 4173, videoTime: 139100, gametime: 80000
Frame: 4175, videoTime: 139167, gametime: 80000
Frame: 4177, videoTime: 139234, gametime: 81000
Frame: 4179, videoTime: 139300, gametime: 81000
Frame: 4181, videoTime: 139367, gametime: 81000
Frame: 4183, videoTime: 139434, gametime: 81000
Теперь я хочу запустить регрессию, чтобы найти перехват и коэффициент, и использовать только counter
определить мои теоретические gameTime
для каждого кадра. Однако существует наложение, поскольку несколько точек данных videoTime
дают одинаковое значение gameTime
. Поскольку каждая videoTime
точка данных уникальна, в gameTime
есть много дубликатов. Посоветуйте, пожалуйста, как мне преодолеть это препятствие?
Заранее спасибо,