【问题标题】:Python webcam recordPython 网络摄像头记录
【发布时间】:2017-02-18 16:03:47
【问题描述】:

我想创建一个网络摄像头流媒体应用程序,记录网络摄像头流,例如大约 30 秒,并将其保存为 myFile.wmv。现在要获得实时摄像头,我知道这段代码:-

import cv2
import numpy as np
c = cv2.VideoCapture(0)

while(1):
    _,f = c.read()
    cv2.imshow('e2',f)
    if cv2.waitKey(5)==27:
        break
cv2.destroyAllWindows()

但我不知道如何记录给定的秒数并将其保存为当前目录中的文件,

请有人指出正确的方向

谢谢

【问题讨论】:

    标签: python python-2.7 opencv video webcam


    【解决方案1】:

    关于时间

    为什么不用pythontime function?特别是time.time()看这个answer about time in python

    NB OpenCV 应该有(或有)自己的计时器,但我不能确定它是否适用于当前版本。

    关于记录/保存

    看看这个other answer

    【讨论】:

    • 嗯,谢谢,但是关于如何删除在测试此answer 期间出现的那个框的任何想法@
    • @HellfireCharchitPb 你指的是哪个盒子?
    【解决方案2】:

    OpenCV 允许您录制视频,但不能录制音频。我从 JRodrigoF 遇到了这个脚本,它使用 openCV 录制视频和 pyaudio 录制音频。我在一个类似的项目中使用了一段时间;但是,我注意到有时线程会挂起,这会导致程序崩溃。另一个问题是 openCV 不能以可靠的速率捕获视频帧,并且 ffmpeg 在重新编码时会扭曲视频。

    https://github.com/JRodrigoF/AVrecordeR

    我想出了一个新的解决方案,它记录的可靠性和质量要高得多。它目前仅适用于 Windows,因为它使用 pywinauto 和内置的 Windows 相机应用程序。脚本的最后一点通过检查视频名称的时间戳来进行一些错误检查以确认视频成功录制。

    https://gist.github.com/mjdargen/956cc968864f38bfc4e20c9798c7d670

    import pywinauto
    import time
    import subprocess
    import os
    import datetime
    
    def win_record(duration):
        subprocess.run('start microsoft.windows.camera:', shell=True)  # open camera app
    
        # focus window by getting handle using title and class name
        # subprocess call opens camera and gets focus, but this provides alternate way
        # t, c = 'Camera', 'ApplicationFrameWindow'
        # handle = pywinauto.findwindows.find_windows(title=t, class_name=c)[0]
        # # get app and window
        # app = pywinauto.application.Application().connect(handle=handle)
        # window = app.window(handle=handle)
        # window.set_focus()  # set focus
        time.sleep(2)  # have to sleep
    
        # take control of camera window to take video
        desktop = pywinauto.Desktop(backend="uia")
        cam = desktop['Camera']
        # cam.print_control_identifiers()
        # make sure in video mode
        if cam.child_window(title="Switch to Video mode", auto_id="CaptureButton_1", control_type="Button").exists():
            cam.child_window(title="Switch to Video mode", auto_id="CaptureButton_1", control_type="Button").click()
        time.sleep(1)
        # start then stop video
        cam.child_window(title="Take Video", auto_id="CaptureButton_1", control_type="Button").click()
        time.sleep(duration+2)
        cam.child_window(title="Stop taking Video", auto_id="CaptureButton_1", control_type="Button").click()
    
        # retrieve vids from camera roll and sort
        dir = 'C:/Users/michael.dargenio/Pictures/Camera Roll'
        all_contents = list(os.listdir(dir))
        vids = [f for f in all_contents if "_Pro.mp4" in f]
        vids.sort()
        vid = vids[-1]
        # compute time difference
        vid_time = vid.replace('WIN_', '').replace('_Pro.mp4', '')
        vid_time = datetime.datetime.strptime(vid_time, '%Y%m%d_%H_%M_%S')
        now = datetime.datetime.now()
        diff = now - vid_time
        # time different greater than 2 minutes, assume something wrong & quit
        if diff.seconds > 120:
            quit()
        
        subprocess.run('Taskkill /IM WindowsCamera.exe /F', shell=True)  # close camera app
        print('Recorded successfully!')
    
    
    win_record(2)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-01-27
      • 2012-06-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-03-18
      相关资源
      最近更新 更多