video

Published by onesixx on

데이터 다운로드

#이미지 
!wget -O ./data/rose.jpg \\
         https://thumb.mt.co.kr/06/2020/10/2020101522424982247_3.jpg
#동영상...same

Jupyter 에서 비디오 영상 플레이

from IPython.display import Video
Video('./data/Hanwoo_D03.mp4')
Video('./data/Hanwoo_D03.mp4', width=600, height=300)

비디오 자르기

#!pip install --trusted-host pypi.python.org moviepy
#!pip install imageio-ffmpeg

from moviepy.video.io.ffmpeg_tools import ffmpeg_extract_subclip
ffmpeg_extract_subclip("./data/Hanwoo_D03.mp4",
                       300, 306, 
                       targetname="./data/Hanwoo_D03_cut.mp4")  #360
https://abhitronix.github.io/vidgear/v0.2.1-stable/gears/writegear/compression/usage/#using-compression-mode-with-opencv
cv_net = cv2.dnn.readNetFromTensorflow(
    './pretrained/faster_rcnn_resnet50_coco_2018_01_28/frozen_inference_graph.pb', 
    './pretrained/config_graph.pbtxt')
import time

def get_detected_img(cv_net, img_array, score_threshold, use_copied_array=True, is_print=True):
    cv_net.setInput(cv2.dnn.blobFromImage(img_array, swapRB=True, crop=False))
    
    rows = img_array.shape[0]
    cols = img_array.shape[1]

    draw_img = None
    if use_copied_array:
        draw_img = img_array.copy()
    else:
        draw_img = img_array
    
    start = time.time()
    cv_out = cv_net.forward()
    for detection in cv_out[0,0,:,:]:
        class_id   = int(detection[1])
        score      = float(detection[2])
        if score > score_threshold:
            left   = detection[3] * cols
            top    = detection[4] * rows
            right  = detection[5] * cols
            bottom = detection[6] * rows
            cv2.rectangle(draw_img, (int(left), int(top)), (int(right), int(bottom)), 
                          color=(0,255,0), thickness=2) #Green
            
            caption = "{}: {:.4f}".format(labels_to_names_0[class_id], score)
            cv2.putText(draw_img, caption, (int(left), int(top - 5)), 
                        fontFace=cv2.FONT_HERSHEY_SIMPLEX, fontScale=0.4, 
                        color=(0,0,255), thickness=1) #Red
            ## print(caption)
    if is_print:
        print('Detection elapsed time:',round(time.time() - start, 2),"Secounds")

    return draw_img
from vidgear.gears import WriteGear
import cv2

def do_detected_video(cv_net, input_path, output_path, score_threshold, is_print):
    
    stream = cv2.VideoCapture(input_path)
    output_params= {"-vcodec":"libx264", "-crf": 0, "-preset": "fast"}
    writer= WriteGear(output_path, logging=True, **output_params)

    frame_cnt = int(stream.get(cv2.CAP_PROP_FRAME_COUNT))
    print('Total count of Frame:', frame_cnt)
    
    while True:
        (grabbed, frame) = stream.read()
        if not grabbed:
            print('End of the frame'); break
            
        img_frame = get_detected_img(cv_net, frame, score_threshold, use_copied_array=False, is_print=is_print)
        writer.write(img_frame)
    
    cv2.destroyAllWindows()
    stream.release()
    writer.close()
do_detected_video(cv_net, './data/John_Wick_small.mp4', './data/John_Wick_small_02.mp4', 0.5, True)
from IPython.display import Video
Video('./data/John_Wick_small_02.mp4')

h264/AVC/MPEG-4 AVC/MPEG-4 part 10

H.264 또는 MPEG-4 파트 10, Advanced Video Coding (MPEG-4 AVC)
동영상 녹화, 압축, 배포를 위한 방식들 중 현재 가장 보편적으로 사용되고 있는 포맷

MPEG-4 Visual should not be confused with MPEG-4 Part 10 which is commonly referred to as H.264 or AVC (Advanced Video Coding), and was jointly developed by ITU-T and MPEG.

AVC is currently one of the most commonly used formats for the recording, compression, and distribution of high definition video.

mpeg4 (MPEG-4 part 2)

(=MPEG-4 비주얼(MPEG-4 Visual) 또는 MPEG-4 ASP)

 MPEG(ISO/IEC의 동화상 전문가 그룹)에서 만든 디지털 영상 코덱
1999년에 최초로 공개 되었으며, 이후 2001년과 2004년에 개정안이 나왔다.
 DivXXvid 등이 이 코덱의 구현에 해당한다.

(MPEG-4 Visual) is a video compression technology developed by MPEG, similar to previous standards such as MPEG-1 and MPEG-2 and compatible with H.263. Several popular codecs including DivX and Xvid implement this standard.

이미지 처리

import os
import matplotlib.pyplot as plt
os.chdir('/home/oschung_skcc/my/git/mmdetection')

data_path = os.path.join(os.getcwd(), 'data', 'msc_pilot2')
imgs_path = data_path + '/train_tray/tray_A_1/'
anno_path = data_path + '/annotations/tray_a_1/annotations/'
anno_file = anno_path + 'instances_default.json'

pil

from PIL import Image

# PIL은 oepn()으로 image file을 읽어서 ImageFile객체로 생성.  
image = Image.open(imgs_path+'20221006_141538.jpg')
print('image type:', type(image))

scikit Image

from skimage import io

#skimage는 imread()를 이용하여 image를 numpy 배열로 반환함. 
image = io.imread(imgs_path+'20221006_141538.jpg')
print(f'image type: {type(image)} image shape: {image.shape}')

opencv

import cv2

# image = cv2.imread(imgs_path+'20221006_141538.jpg')
# image = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)
image = cv2.cvtColor(cv2.imread(imgs_path+'20221006_141538.jpg'), cv2.COLOR_BGR2RGB)

print(f'image type: {type(image)} image shape: {image.shape}')
plt.figure(figsize=(6, 6))
plt.imshow(image)
#plt.show()

Cf.

imgBRG = cv2.imread('./rose.jpg')
imgRGB = cv2.cvtColor(imgBRG, cv2.COLOR_BGR2RGB)
plt.imshow(imgRGB)

영상처리 (OpenCV)

Categories: vision

onesixx

Blog Owner

Subscribe
Notify of
guest

0 Comments
Inline Feedbacks
View all comments
0
Would love your thoughts, please comment.x
()
x