머신러닝,딥러닝

youtube 8m tf record의 동영상 접근해보기

mcdn 2023. 5. 17. 13:38
반응형

 

1. tf record 훝어보기

 

만약 공식 사이트 / 캐글에서 tf_record를 저장했다면 

다음과 같이 하나의 tf_record에 담긴 정보를 읽을 수 있다.

 

https://www.kaggle.com/code/jesucristo/analysis-youtube8m-2019#Exploring-Data-(TFRecord-format)-using-a-subsample-of-the-YouTube-8M-video-&-frame-level-data. 

 

Analysis YouTube8m 2019 📹

Explore and run machine learning code with Kaggle Notebooks | Using data from The 3rd YouTube-8M Video Understanding Challenge

www.kaggle.com

import numpy as np # linear algebra
import pandas as pd # data processing, CSV file I/O (e.g. pd.read_csv)
import matplotlib.pyplot as plt
import csv
import networkx as nx
from subprocess import check_output
# from wordcloud import WordCloud, STOPWORDS
import tensorflow as tf
plt.style.use('ggplot')

# Input data files are available in the "../input/" directory.
# For example, running this (by clicking run or pressing Shift+Enter) will list the files in the input directory

import os
print(os.listdir("./"))

import warnings
warnings.filterwarnings('ignore')

# Any results you write to the current directory are saved as output.

vid_ids = []
labels = []
frame_lvl_record = './test0000.tfrecord'
frame_lvl_record = './validate0143.tfrecord'

for example in tf.compat.v1.python_io.tf_record_iterator(frame_lvl_record):
    tf_example = tf.train.Example.FromString(example)
    vid_ids.append(tf_example.features.feature['id']
                   .bytes_list.value[0].decode(encoding='UTF-8'))
    labels.append(tf_example.features.feature['labels'].int64_list.value)

print(tf_example)
print(vid_ids)
print(labels)

 

위 코드를 실행하면 tf_record 마다 저장된 비디오와 features를 받을 수 있다. 

맨 밑에서 vid_ids, labels를 프린트해보면 다음과 같은 예시 결과가 나온다. 

 

['a3xt', '0vxt', 'Tpxt', 'f9xt', 'Cmxt', 'Ogxt', 'odxt', 'LGxt', 'YJxt', '9Sxt', '8Hxt', 'jGxt', '3Zxt', 'J0xt', 'b1xt']
[[932], [533, 275, 25, 137, 607], [564, 239, 285, 811, 973], [325, 686], [772], [598, 232], [803, 204, 754, 678, 169, 663, 491, 888, 420, 73, 660], [738, 236], [603, 245, 913, 293, 648, 842, 858], [838, 499], [470, 759, 838, 239], [269, 401, 239, 294, 58, 27, 670], [274, 416, 75], [192, 892], [365, 811, 298, 713]]

 

이는 tf_record 안에 약 15개 정도 동영상이 있고 

그에 대응되는 label이 각각 들어갔다는 것을 알 수 있다. 

 

각 레이블은 'Car' , 'Art', ... 등  다양한 카테고리 값들이 담겨 있다. 

 

 

 

 

2. 동영상 id 구하기 

 

# With that video id, we can play the video
# apparently if you take the videoID, let's call it vvDD, 
# then you can put the following in a browser:
# http://data.yt8m.org/2/j/i/vv/vvDD.js
# so for rec_id = 5 of the first validation example, vvDD = Kt00,
# so pointing a browser here: http://data.yt8m.org/2/j/i/Kt/Kt00.js
# yields this: i("Kt00","MZYaCFJogqo");
# I'd be interested in a more pythonic way of doing that.

https://www.kaggle.com/code/senorcampos/the-peak-muffin-moment

 

 

위에서 구한 'a3xt' 라는 동영상 id는 youtube에서 직접 접근할 수 있는 동영상 아이디가 아니다. 

이를 진짜 동영상으로 접근하기 위해서는 특수한 사이트로 접근해서 읽어야 하는데 다음 주소와 같다. 

 

a3xt -> http://data.yt8m.org/2/j/i/a3/a3xt.js 

 

이처럼 a3xt를 두글자씩 끊어 봐서 a3 / a3xt 주소로 들어가면 된다. (이건 그냥 예시라서 없는 주소임)

 

만약 0vma라고 한다면? 

 

0vma -> http://data.yt8m.org/2/j/i/0v/0vma/js 

로 들어간다.  (이건 그냥 예시라서 없는 주소임)

 

 

실제 동영상에 한번 접근해보자. 

위 캐글 코드에서 얻은 비디오 아이디는 FF00이었다. 

 

FF00 -> http://data.yt8m.org/2/j/i/FF/FF00.js 

이건 진짜 있는 주소다. 

들어가면 이렇게 i(아이디, ,진짜아이디) 이렇게 묶여 있다!! 

저 아이디를 youtube.com/watch?v=여기에 

붙이면.. 

 

이렇게 진짜 동영상으로 접근 가능하다!!!!

 

 

3. curl 사용하기

 

사이트 일일이 들어가지 않고 커맨드 라인으로 빠르게 보고 싶다하면.. 

 

https://askubuntu.com/questions/822139/how-to-output-web-page-html-source-code-into-a-file

curl로 하면 command line에 프린트 가능 

 

curl http://data.yt8m.org/2/j/i/tm/tma.js

i("tma","NcujsdfZsw");

 

 

 

 

 

반응형