如何解决使用Raspberry Pi 4和PiCam时出现分段错误
我正在为University的一个项目工作,我正在尝试创建一个程序,该程序每4秒钟左右使用PiCam拍摄一张图片,然后计算图像的亮度。
程序在第一个循环中运行,但是在出现分段错误
时在第二个循环中中断错误如下:
mmal: mmal_vc_port_enable: failed to enable port vc.null_sink:in:0(OPQV): ENOSPC
mmal: mmal_port_enable: failed to enable connected port (vc.null_sink:in:0(OPQV))0x15fb150 (ENOSPC)
mmal: mmal_connection_enable: output port couldn't be enabled
Backend terminated or disconnected.Fatal Python error: Segmentation fault
Current thread 0xb6f25ad0 (most recent call first):
File "/usr/lib/python3/dist-packages/picamera/mmalobj.py",line 1331 in _get_framesize
File "/usr/lib/python3/dist-packages/picamera/mmalobj.py",line 1325 in __repr__
File "/usr/lib/python3/dist-packages/thonny/backend.py",line 864 in export_value
File "/usr/lib/python3/dist-packages/thonny/backend.py",line 880 in export_variables
File "/usr/lib/python3/dist-packages/thonny/backend.py",line 927 in _export_stack
File "/usr/lib/python3/dist-packages/thonny/backend.py",line 1027 in _prepare_user_exception
File "/usr/lib/python3/dist-packages/thonny/backend.py",line 1218 in wrapper
File "/usr/lib/python3/dist-packages/thonny/backend.py",line 1259 in execute_source
File "/usr/lib/python3/dist-packages/thonny/backend.py",line 815 in _execute_source
File "/usr/lib/python3/dist-packages/thonny/backend.py",line 801 in _execute_file
File "/usr/lib/python3/dist-packages/thonny/backend.py",line 403 in _cmd_Run
File "/usr/lib/python3/dist-packages/thonny/backend.py",line 204 in handle_command
File "/usr/lib/python3/dist-packages/thonny/backend.py",line 146 in mainloop
File "/usr/lib/python3/dist-packages/thonny/backend_launcher.py",line 87 in <module> Use 'Stop/Restart' to restart.
这是我的代码:
import PIL
from PIL import Image
from picamera import PiCamera
from time import sleep
def take_picture():
#setting the camera
camera = PiCamera()
#resolution to (min = 64x64)(max = 2592,1944)
camera.resolution = (64,64)
#camera take picture
camera.capture('/home/pi/Desktop/image1.jpg')
#END take_picture
def current_average_luma():
take_picture()
img = Image.open("/home/pi/Desktop/image1.jpg") #opens image
luma=0 #sum of the luma of each pixels
pixels = img.width*img.height #number of pixels
for x in range(img.width):
for y in range(img.height):
(r,g,b) = img.getpixel((x,y))#get colour touple
luma += (0.2126*r + 0.7152*g + 0.0722*b) #calculate luma of RGB data,then add to total
#END for
#END for
img.close()#ensure to properly close the image
return luma/pixels #return average of all pixels
#END average_luma
while (1):
print("the average luma of the image is: ",current_average_luma()) #print light value
sleep(4)
#END while
我不确定如何解决此问题或导致此问题的原因。任何建议表示赞赏
Picture of entire error message
解决方法
代码是通过以下方式修复的:
from PIL import Image
from picamera import PiCamera
from time import sleep
def current_average_luma(camera):
camera.capture('/home/pi/Desktop/image1.jpg')#camera take picture
img = Image.open("/home/pi/Desktop/image1.jpg") #opens image
luma=0 #sum of the luma of each pixels
pixels = img.width*img.height #number of pixels
for x in range(img.width):
for y in range(img.height):
(r,g,b) = img.getpixel((x,y))#get colour touple
luma += (0.2126*r + 0.7152*g + 0.0722*b) #calculate luma of RGB data,then add to total
#END for
#END for
img.close()#ensure to properly close the image
return luma/pixels #return average of all pixels
#END average_luma
#MAIN
camera = PiCamera()#setting the camera
camera.resolution = (64,64)#set resolution
while (1):
print("the average luma of the image is: ",current_average_luma(camera)) #print light value
sleep(4)
#END while
问题在于对take_picture()的重复函数调用创建了多个相机对象,从而产生了冲突。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。