2017-10-28 2 views
0

Ich versuche Frames aus Video zu lesen, aber das Video ist nutzlos nach dem Extrahieren von Frames. Also entscheide ich mich für das TempFile-Modul. Allerdings ist der Rahmen, den ich cv2.VideoCapture(NamedTempFile.name) verwende, immer schwarz. Ich frage mich, ob dies der richtige Weg ist. Wenn nicht, gibt es einen besseren Weg? Ich füge den Video-Capture-Teil meines Codes unten an.
Auch bezweifle ich, dass die get_temp_video Funktion falsch sein könnte.Wie benutze ich OpenCV, um Video von einer NamedTempFile in Python zu lesen


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() 

Antwort

0

ich das Problem bin zu raten, mit Ihrer Funktion upload_to_some_where, da der Rest des Codes für mich gut funktioniert. Zu Testzwecken habe ich Ihren Code leicht modifiziert:

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

Vielen Dank für Ihre Antwort. Ich finde wo der Fehler ist. Genau wie Ihre Antwort eine Logik in upload_to_some_where Funktion ist falsch, –

Verwandte Themen