gpt4 book ai didi

python - 在 linux 中模拟设备驱动程序崩溃。让python重新加载它

转载 作者:太空狗 更新时间:2023-10-29 11:30:46 25 4
gpt4 key购买 nike

我有一个使用 uvcvideo 模块在 Linux 中运行的网络摄像头。我正在使用 Python 应用程序访问网络摄像头并显示图像。

如果网络摄像头由于某种原因不再工作,我希望 python 程序能够处理它。已经通过卸载模块进行了测试。如果我在运行 python 代码之前卸载模块,工作正常,但如果强制它在使用中卸载,我会得到以下反馈。

VIDIOC_DQBUF: Inappropriate ioctl for device

如果我杀死 python 代码,然后重新启动它,整个机器就会卡住。

我要运行的代码是

import pygame
import Image
from pygame.locals import *
import sys
import time, os

import opencv
from opencv import highgui

camera = highgui.cvCreateCameraCapture(0)
fps = 10.0
pygame.init()
window = pygame.display.set_mode((640,480))
pygame.display.set_caption("WebCam Demo")
screen = pygame.display.get_surface()

while True:
events = pygame.event.get()
for event in events:
if event.type == QUIT or event.type == KEYDOWN:
sys.exit(0)
while True:
try:
ima = highgui.cvQueryFrame(camera)
im = opencv.adaptors.Ipl2PIL(ima)
break;
except TypeError:
print 'No camera'
os.system('sudo modprobe uvcvideo')
time.sleep(1)
camera = highgui.cvCreateCameraCapture(0)

pg_img = pygame.image.frombuffer(im.tostring(), im.size, im.mode)
screen.blit(pg_img, (0,0))
pygame.display.flip()
pygame.time.delay(int(1000 * 1.0/fps))

它是 http://www.jperla.com/blog/2007/09/26/capturing-frames-from-a-webcam-on-linux/ 的修改版本它使用 openvc 版本 1.x 而不是 2.x。

关于如何使这项工作有任何想法吗?

最佳答案

你是说 USB 摄像头吗?我不知道在使用模块时强制卸载,但这不会发生,也不是相机不再工作的良好模拟。首先尝试优雅地处理相机断开/重新连接。

我不知道您在模拟驱动程序崩溃时想要达到什么目的,但是您无法使用用户代码处理驱动程序崩溃,这可能会导致 oops 或其他问题。一旦内核代码变得疯狂,没有任何防御性编程可以拯救您。

现在,如果驱动程序代码出现错误(错误不同于崩溃),那么它应该返回给你,你只能重试或退出。如果您的应用程序打算由任何 UVC 相机使用,那么请购买支持 UVC 的 USB 相机,并使用它(断开/重新连接)。

至于硬件故障,除了设置超时之外,您无能为力。您可以在代码中做的是,如果您发现驱动程序存在特定 问题,则避免触发此特定 问题。例如,如果您知道从分辨率 x 更改为分辨率 y 会导致相机死机或驱动程序出错,那么请避免这样做。

但我不会花太多时间来处理您一无所知的假设性崩溃。相反,您应该尝试练习错误代码路径。例如,如果您的系统内存不足会怎样?或者,如果您的系统负载如此之大,以至于您的应用跟不上传入的帧。

关于python - 在 linux 中模拟设备驱动程序崩溃。让python重新加载它,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2243674/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com