나는 Raspbian과 함께 Raspberry Pi 3 V1.2를 연구 중이다. 내 문제는 때로는 내 코드가 작동하고 (창이 열리 며 카메라 피드가 표시됨) 때로는 오류가 발생한다는 것입니다 (오류는 세그먼트 오류 임). 나는 코드가 가끔씩 만 작동한다는 것을 한번도 경험하지 못했습니다. 나는 컴파일러가 startVid 함수에있을 때 오류가 발생한다는 것을 알고있다. 누구나 아이디어가 있으십니까? 이미 도움을 주셔서 감사합니다.카메라 비디오 피드를 표시하려고하는 세그먼트 오류입니다. PyQt5
import sys
from PyQt5 import QtCore , QtWidgets, QtGui, QtMultimedia, QtMultimediaWidgets
from PyQt5.QtCore import QObject, pyqtSignal
from PyQt5.QtWidgets import QApplication
from PyQt5.QtMultimedia import QCamera, QCameraInfo, QMediaObject, QCameraViewfinderSettings, QCameraImageCapture
from PyQt5.QtMultimediaWidgets import QCameraViewfinder
class Camera(QObject):
def __init__(self, parent = QObject()):
super(Camera, self).__init__(parent)
self.cam = QCamera()
self.caminfo = QCameraInfo(self.cam)
self.camvfind = QCameraViewfinder()
self.camvfindset = QCameraViewfinderSettings()
self.cammode = self.cam.CaptureMode(1)
self.camimgcap = QCameraImageCapture(self.cam)
def iniCamera(self):
print(self.caminfo.description())
print(self.caminfo.availableCameras())
if self.cam.isCaptureModeSupported(self.cammode):
print("Capturemode supported")
def startVid(self):
self.camvfind.show()
self.cam.setViewfinder(self.camvfind)
self.cam.load()
self.camvfindset.setResolution(1280,720)
#print(self.cam.supportedViewfinderFrameRateRanges(self.camvfind))
self.camvfindset.setMinimumFrameRate(15)
self.cam.setCaptureMode(self.cammode)
self.cam.start()
if __name__ == '__main__':
app = QtWidgets.QApplication(sys.argv)
cam = Camera()
cam.iniCamera()
cam.startVid()
sys.exit(app.exec_())
내가 오류에 대한 자세한 내용은 강남을 사용 :
여기 내 코드입니다. 이것은 출력했다 :
Starting program: /usr/bin/python3 qt.py
[Thread debugging using libthread_db enabled]
Using host libthread_db library "/lib/arm-linux-gnueabihf/libthread_db.so.1".
[New Thread 0x720a7470 (LWP 20003)]
[New Thread 0x716ff470 (LWP 20004)]
** (python3:19975): WARNING **: Error retrieving accessibility bus address: org.freedesktop.DBus.Error.ServiceUnknown: The name org.a11y.Bus was not provided by any .service files
[New Thread 0x6ff00470 (LWP 20007)]
[New Thread 0x6f5ff470 (LWP 20008)]
[New Thread 0x6e6ab470 (LWP 20022)]
[Thread 0x6e6ab470 (LWP 20022) exited]
[New Thread 0x6e6ab470 (LWP 20023)]
[Thread 0x6e6ab470 (LWP 20023) exited]
Venus USB2.0 Camera
[<PyQt5.QtMultimedia.QCameraInfo object at 0x72fde030>]
Capturemode supported
Thread 1 "python3" received signal SIGSEGV, Segmentation fault.
0x7344b620 in platform_get_handle() from /opt/vc/lib/libEGL.so
여기에 확인 명령 (GDB) BT의 출력 :
(gdb) bt
0 0x733d4620 in platform_get_handle() from /opt/vc/lib/libEGL.so
1 0x733c9f2c in eglCreateWindowSurface() from /opt/vc/lib/libEGL.so
2 0x722e7004 in ??()
from /usr/lib/arm-linux-gnueabihf/qt5/plugins/xcbglintegrations/libqxcb-egl-integration.so
Backtrace stopped: previous frame identical to this frame (corrupt stack?)
나는 당신이있는 곳에서'del cam'을 호출하지 않을 것입니다. 이를 통해 Python이 GUI 이벤트 루프를 시작하기 전에 PyQt 객체를 삭제하도록 Python에 요청합니다. 해당 줄을 제거하고 도움이되는지 확인하십시오. –
글쎄, 난 그냥 몇 가지 물건을 시도했지만, 그래서 내가 더 이상 내 코드에서 델 캠을 가지고 일을하지 않았다. psutil을 사용하여 코드에서 메모리 사용량을 표시했습니다. 하지만 슬프게도 세분화 오류는 무작위로 발생하는 것으로 보입니다. 때로는 46528832 바이트를 표시 할 때 작동하고 때로는 49455104 바이트가 나올 때도 있습니다. – Xenoshell
PyQt의 버전 번호를 제공 할 수 있습니까 (모래는 PyQt가 컴파일되는 QT5의 버전입니까)? –