차창 영상에서 가속도 찾기!?(yahoo hackday2021)

생방송 발표회에서 광설을 흉내내서 믿기지 않을 정도로 미끄러졌어요...

개시하다


처음으로 해킹데이에 참가한 지 일주일이 지났다.
배운 것을 정리하기 위해 글을 쓰기로 결심했고, 그동안 보살핌을 받은 Qiita의 기사를 쓰려고 노력했다.
처음 쓰는 거라 불완전한 부분이 있을 수 있으니 봐주세요.

카탈로그

  • 제품 개요
  • 이번에 소개한 기술
  • 실장 내용
  • 싱크로율 을 추측 하다
  • 유사도에 근거하여 가속도를 추측하다
  • 제품(실제 발표)
  • 더 기술력이 있다면,, (반성)
  • 참고 문헌
  • 제품 개요 발표 당일은 긴급사태 선언의 날로, 아이러니한 의미를 담아 전동차 출퇴근 체험 세트를 제작했다. 구체적으로 링을 자신의 집에 설치해 영상에 맞춰 출퇴근을 체험할 수 있다.
    이번에 소개한 기술 실장에서는 영상(차창의 풍경)에서 어느 정도의 가속도를 예측했다. 이번에는 제가 그것을 소개하는 것을 허락해 주십시오. 창의력은 애니메이션에서 일정 시간마다 정지화를 추출하여 시간적으로 인접한 이미지의 유사도를 찾아 속도를 추측하는 것이다. 유사도 높음→잘 움직이지 않음→느림 유사도 낮음→빠르게 이동→빠르게 이번에 원하는 것은 가속도이기 때문에 유사도가 어떻게 변하는지에 주목해 대략적인 가속도를 추측했다. 애니메이션에서 정지 그림 추출하기 extract_images.py import cv2 import os def save_all_frames(video_path, dir_path, basename, ext='jpg'): cap = cv2.VideoCapture(video_path) if not cap.isOpened(): return os.makedirs(dir_path, exist_ok=True) base_path = os.path.join(dir_path, basename) digit = len(str(int(cap.get(cv2.CAP_PROP_FRAME_COUNT)))) n = 0 while True: ret, frame = cap.read() if ret: cv2.imwrite('{}_{}.{}'.format(base_path, str(n).zfill(digit), ext), frame) n += 1 print(n) else: return save_all_frames('video_path', 'dir_path', 'sample_video_img') save_all_frames('video_path', 'dir_path', 'sample_video_img', 'png') video_path = 'video_path' dir_path = 'output_path' save_all_frames(video_path, dir_path, 'train') 보도를 참고했기 때문에 중추 부분은 참고 문헌을 참고하세요. 이후의 편의를 위해 저장된 파일 이름을 변경했습니다. 싱크로율 을 추측 하다 hist_matching.py import cv2 import os def add_zeros(path_number): if (len(path_number) == 1): return '000' + path_number elif (len(path_number) == 2): return '00' + path_number elif (len(path_number) == 3): return '0' + path_number else: return path_number IMG_DIR = os.path.abspath(os.path.dirname(__file__)) + 'data_path' IMG_SIZE = (200, 200) temp = 0 for i in range(6901): # print(i) j = i + 1 i = str(i) j = str(j) i = add_zeros(i) j = add_zeros(j) target_img_path = IMG_DIR + 'train_' + i + '.jpg' target_img = cv2.imread(target_img_path) target_img = cv2.resize(target_img, IMG_SIZE) target_hist = cv2.calcHist([target_img], [0], None, [256], [0, 256]) comparing_img_path = IMG_DIR + 'train_' + j + '.jpg' # print('FILE: %s : %s' % ('train_' + i + '.jpg', 'train_' + j + '.jpg')) comparing_img = cv2.imread(comparing_img_path) comparing_img = cv2.resize(comparing_img, IMG_SIZE) comparing_hist = cv2.calcHist([comparing_img], [0], None, [256], [0, 256]) ret = cv2.compareHist(target_hist, comparing_hist, 0) # print(file, ret) print(ret - temp) temp = ret 보도를 참고했기 때문에 중추 부분은 참고 문헌을 참고하세요. 데이터의 파일 이름을 변경했습니다. 아니오, 앞의 제로 매립 함수의 존재를 알고 있지만, 늘 좋지 않다고 생각해서 스스로 했습니다 싱크로율 을 추측 하다 analysis.py import matplotlib.pyplot as plt import time y = [] input_file = open('speed.txt', 'r', encoding = 'utf_8') i = 0 while True: line = input_file.readline() if line: i += 1 y.append(1 - float(line)) time.sleep(0.33) print(1 - float(line)) else: break # RGB 히스토그램당 계산 및 드로잉 for i, channel in enumerate(colors): histgram = cv2.calcHist([img_a], [i], None, [256], [0, 256]) plt.plot(histgram, color=channel) plt.xlim([0, 256])
    그래프와 이미지를 비교해 보면 좋은 느낌이 가장 흥분되는 순간이다.
    제품(실제 발표) 더 기술력이 있다면,, (반성) 영상과 도표를 비교해 보면 실제로 멈췄지만 속도 변화가 있다는 것을 깨닫는 부분도 있다.(애니메이션 2:30, 차트 x:3500 정도) 정차하던 중 맞은편 전차가 출발해 유사도가 달라졌기 때문이다. 나도 가속도의 방향을 추구하고 싶다. 농담이 지나쳐서 가장 중요한 기술을 전달하지 못했다. 참고 문헌
  • 이번에 이용한 영상.
  • 애니메이션에서 프레임별로 정지 그림 추출하기
  • 싱크로율 추출
  • 좋은 웹페이지 즐겨찾기