【问题标题】:Automation of video recording on booting of raspberry pi3在启动树莓派 pi3 时自动录制视频
【发布时间】:2018-01-08 20:43:30
【问题描述】:

我编写了一个 python 代码,其中包含一些 opencv 代码来玩我的网络摄像头。我已将它附加到 raspi 3。我希望在启动(启动)时,它会自动开始录制视频.. 我正在为此使用 crontab。

我的 Python 代码:

import cv

if __name__ == "__main__":
# find the webcam
capture = cv2.VideoCapture(0)
capture1 = capture
# video recorder
fourcc = cv2.cv.CV_FOURCC(*'XVID')  #cv2.VideoWriter_fourcc() does not exist
videoOut = cv2.VideoWriter('out1.avi', fourcc, 10.0, (640, 480))
videoOut1 = cv2.VideoWriter('out2.avi', fourcc, 10.0, (640, 480))
# record video
while (capture.isOpened() and capture1.isOpened()):
    ret, frame = capture.read()
    ret1, frame1 = capture1.read()
    if ret:
        videoOut.write(frame)
        cv2.imshow('Video Stream', frame)



    else:
        break
    if ret1:
        frame1 = cv2.flip(frame1,1)
        videoOut1.write(frame1)
        cv2.imshow('Video Stream1', frame1)

    else:
        break

    # Tiny Pause
    key = cv2.waitKey(1)

capture1.release()
videoOut1.release()
capture.release()
videoOut.release()
cv2.destroyAllWindows()

然后我制作了一个看起来像这样的 bash 脚本,

cd /
cd absolute path to my python file directory
sudo python cam22.py
cd /

cam22.py 是我的 python 文件的名称

然后我使用 conrab 在运行时通过编写运行这个 bash 脚本

@reboot path to my bash file

重启后在同一目录下生成了两个avi文件,但没有录制视频,网络摄像头没有运行,但是当我自己执行这个bash文件运行python文件时,它运行完美。

按照 cmets 中的建议,我创建了一个日志文件,它显示错误日志显示 (Video Stream:542): Gtk-Warning **: cannot open display:

【问题讨论】:

  • 很难说,但如果你想记录错误,只需写@reboot path to my bash file >> logfile 就知道实际发生了什么。
  • 尝试删除cron 进程可能无法使用的屏幕和键盘交互 - imshow()waitkey()...
  • @Bhavyanshu 错误日志显示(视频流:542):Gtk-Warning **:无法打开显示:
  • 该错误消息符合我的建议。 cron 进程没有显示 - 请尝试删除 imshow()wait key()destroyAllWindows() 以及与屏幕或终端/键盘有关的任何内容。

标签: python bash opencv cron raspberry-pi3


【解决方案1】:

正如 Mark Setchell 在 cmets 中所建议的,在删除 imshow()、waitkey() 后它可以正常工作。

【讨论】:

    【解决方案2】:

    如果生成了两个文件,这意味着 crontab 工作正常。 这也意味着由于格式拼写错误而无法生成视频 .avi 将其更改为 .AVI 并尝试一次

    fourcc = cv2.cv.CV_FOURCC('D', 'I', 'V', 'X')
    videoOut = cv2.VideoWriter('output1.AVI', fourcc, 20, (640, 480), 1)
    videoOut2 = cv2.VideoWriter('output2.AVI', fourcc, 20, (640, 480), 1)
    

    【讨论】:

    • 您好先生,我认为文件格式应该不是问题,因为当我手动运行此代码时,视频录制开始并正确保存。 bash 文件也可以完美运行,我已经测试过了。我已经编辑了问题并添加了错误日志。 @Abhishek Soni
    • 那么我认为这与硬件有关,请尝试在程序开始时添加一些睡眠,如果有任何进展,请告诉我
    • 我从昨天开始就一直在做这个,甚至尝试了2分钟! @Abhishek Soni
    猜你喜欢
    • 2022-11-27
    • 2022-12-05
    • 1970-01-01
    • 2017-04-22
    • 2022-01-24
    • 2021-06-08
    • 2016-03-16
    • 1970-01-01
    • 2020-03-29
    相关资源
    最近更新 更多