2017-10-28 7 views
0

비디오에서 프레임을 읽으려고하지만 프레임을 추출한 후에 비디오가 쓸모가 없습니다. 그래서 TempFile 모듈을 사용하기로 결정했습니다. 그러나 나가 얻는 cv2.VideoCapture(NamedTempFile.name)를 이용하는 구조는 항상 까맣다. 이것이 올바른 방법인지 궁금합니다. 그렇지 않다면, 더 좋은 방법이 있습니까? 아래 코드에서 비디오 캡처 부분을 첨부합니다.
또한 get_temp_video 함수가 잘못되었을 수도 있습니다. 나머지 코드는 나를 위해 잘 작동하기 때문에 나는이 문제를 추측하고OpenCV를 사용하여 Python의 NamedTempFile에서 비디오를 읽는 방법


def get_temp_video(url, temp_file): 
    r = requests.get(url, stream=True) 
    for chunk in r.iter_content(chunk_size=1024): 
     if chunk: 
      temp_file.write(chunk) 
    return temp_file 


def get_frame(video_url): 
    named_temp_file = NamedTemporaryFile() 
    named_temp_file = get_temp_video(video_url, named_temp_file) 
    named_temp_file.seek(0) 
    video = cv2.VideoCapture(named_temp_file.name) 
    while video.isOpened(): 
     ret, frame = video.read() 
     if ret: 
      temp_file = TemporaryFile() 
      np.save(temp_file, frame) 
      temp_file.seek(0) 
      upload_to_some_where(temp_file.read()) 
      temp_file.close() 
     else: 
      break 
    video.release() 
    named_temp_file.close() 

답변

0

는 함수 upload_to_some_where 함께. 테스트 목적으로 코드를 약간 수정했습니다.

def get_temp_video(url, temp_file): 
    r = requests.get(url, stream=True) 
    for chunk in r.iter_content(chunk_size=1024): 
     if chunk: 
      temp_file.write(chunk) 
    return temp_file 


def get_frame(video_url): 
    named_temp_file = NamedTemporaryFile() 
    named_temp_file = get_temp_video(video_url, named_temp_file) 
    named_temp_file.seek(0) 
    video = cv2.VideoCapture(named_temp_file.name) 
    while video.isOpened(): 
     ret, frame = video.read() 
     if ret: 
      # For testing purpose 
      cv2.imshow("frame", frame) 
      if cv2.waitKey(25) == ord('q'): 
      break 
      ############################## 
      # temp_file = TemporaryFile() 
      # np.save(temp_file, frame) 
      # temp_file.seek(0) 
      # upload_to_some_where(temp_file.read()) 
      # temp_file.close() 
     else: 
      break 
    video.release() 
    named_temp_file.close() 

if __name__=='__main__': 

    get_frame('http://samples.mplayerhq.hu/MPEG-4/MPEG4%20by%20philips.mp4') 
+0

답변 해 주셔서 감사합니다. 오류가있는 곳을 찾습니다. 당신의 대답처럼 일부 논리는 upload_to_some_ 기능이 잘못되어 있습니다. –