728x90
반응형
OpenCV
import cv2
- 동영상 데이터 불러오기
cv2.VideoCapture(파일 경로)
video = cv2.VideoCapture(TUTORIAL_PATH + "/tutorial.mp4")
video.isOpened()
# True
- 영상 정보 확인
- video.get()으로 여러 정보 불러올 수 있음
video.get(cv2.CAP_PROP_FRAME_WIDTH) # 영상 가로길이 확인
# 640.0
video.get(cv2.CAP_PROP_FRAME_HEIGHT) # 영상 세로길이 확인
# 360.0
video.get(cv2.CAP_PROP_FPS) # FPS 확인
# 24.0
video.get(cv2.CAP_PROP_FRAME_COUNT)# 비디오 총 길이 (프레임이 총 몇개인지)
# 3288.0 -> 프레임 3288장으로 이루어진 영상임
# 영상 길이 확인 ==> 총 프레임 수 / FPS
print(round(video_length/video_fps))
# 137초
영상을 불러오고 다 사용한 뒤에는 release()를 해주어야 한다.
안해주면 계속 메모리를 차지하고 있어서 오버플로우가 난다.
video.release()
[ 동영상을 초 단위로 나눠서 이미지 저장하기 ]
video.read()
- (리턴값, 프레임)을 반환해준다.
- 다음에 이어서 나올 프레임이 있으면 리턴값=True
- frame이 해당 프레임의 이미지
TUTORIAL_IMAGE = TUTORIAL_PATH + "/image2"
TIME_MEASUREMENT_UNIT = 1 # 몇 초 단위로 이미지를 저장할 지 지정
# 해당하는 경로의 폴더가 존재하지 않으면 만들어줌
if not os.path.exists(TUTORIAL_IMAGE):
os.mkdir(TUTORIAL_IMAGE)
video = cv2.VideoCapture(TUTORIAL_PATH + "/tutorial.mp4")
while video.isOpened():
ret, frame = video.read() # read() : 리턴값과 프레임을 반환해줌 (읽어올 다음 프레임이 있으면 ret = True)
if ret:
# 현재 프레임 위치 (msec)
frame_sec = video.get(cv2.CAP_PROP_POS_MSEC)/1000
if frame_sec.is_integer(): # 초단위가 정수일때
if (frame_sec % TIME_MEASUREMENT_UNIT == 0): # 1초마다
filename = TUTORIAL_IMAGE + "/" + str(round(frame_sec)) + ".jpg"
cv2.imwrite(filename, frame) # 각 프레임의 이미지를 저장
else:
break
video.release()
- 코드로 이미지 확인해보기
openCV에서는 이미지를 그냥 불러오면 BGR의 순서로 이미지를 불러오기 때문에 정상적인 이미지를 보고 싶다면 RGB로 변환해주어야 한다.
cv2.cvtColor(cv2.COLOR_BGR2RGB)
image = cv2.imread(TUTORIAL_IMAGE + '/2800.jpg')
rgb_image = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)
plt.imshow(rgb_image)
glob
glob.glob() 함수는 파라미터에 지정한 경로와 확장자에 해당하는 파일명을 리스트로 반환해준다.
조건에는 *와 ?같은 와일드카드 문자만 지원한다.
- * : 임의의 길이의 모든 문자열
- ? : 한자리의 문자열
import glob
- 파일명 불러오기
video_list = glob.glob(VIDEO_PATH + '/*.mp4')
video_list
['/content/drive/MyDrive/KT_AIVLE_SCHOOL/11주차_미니프로젝트_3차/AIVLE3rd_individual/video/jung.mp4',
'/content/drive/MyDrive/KT_AIVLE_SCHOOL/11주차_미니프로젝트_3차/AIVLE3rd_individual/video/park.mp4',
'/content/drive/MyDrive/KT_AIVLE_SCHOOL/11주차_미니프로젝트_3차/AIVLE3rd_individual/video/sam.mp4',
'/content/drive/MyDrive/KT_AIVLE_SCHOOL/11주차_미니프로젝트_3차/AIVLE3rd_individual/video/sayuri.mp4']
그대로 불러오면 경로와 확장자까지 모두 포함되어있다.
mp4파일의 이름만 사용하기 위해 split()으로 '/'문자 단위로 나눠서 맨 마지막에 있는 내용을 다시 '.'으로 잘랐다.
print(video_list[0].split('/')[-1].split('.')[0])
print(video_list[1].split('/')[-1].split('.')[0])
print(video_list[2].split('/')[-1].split('.')[0])
print(video_list[3].split('/')[-1].split('.')[0])
# jung
# park
# sam
# sayuri
728x90
반응형
'인공지능 AI' 카테고리의 다른 글
Pytorch 기본 사용법 (0) | 2022.10.10 |
---|---|
[ ImageDataGenerator, ModelCheckpoint ] (0) | 2022.09.26 |
[ LightGBM ] (0) | 2022.09.11 |
[ 정규화 : RobustScaler ] (0) | 2022.09.10 |
[ Class Imbalance (클래스 불균형) ] (0) | 2022.09.10 |