Eu estou escrevendo no Python 3.5, usando PyQt5, Ubuntu Mate Xenial e um Raspberry Pi. Eu tenho uma tonelada de saída do gdb e obviamente meu código. Tenho certeza que meu código não está errado (eu escrevi no fórum Qt e eles verificaram isso), mas algo com o meu sistema operacional ou algo não está instalado.
Meu código deve abrir uma janela com um feed de câmera usb. Eu quero mais adicionado a isso, mas eu só quero gerenciar essa parte do meu projeto.
A saída do gdb só acontece se eu usar python3 qt5.py
para executar meu código. Se eu uso sudo python3 qt5.py
o código executado muito bem e também abre o feed da câmera, mas então a tela fica bloqueada e eu tenho que fazer o login novamente.
De qualquer forma aqui está o meu código e ele para exatamente em self.cam = QCamera (QCameraInfo.defaultCamera ()):
import sys
from PyQt5 import QtCore , QtWidgets, QtGui, QtMultimedia, QtMultimediaWidgets
from PyQt5.QtCore import QObject, pyqtSignal, pyqtSlot
from PyQt5.QtWidgets import QApplication, QPushButton, QMainWindow
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)
print("3")
self.cam = QCamera(QCameraInfo.defaultCamera()) #"/dev/video0".encode()
print("4")
self.caminfo = QCameraInfo(self.cam)
self.camvfind = QCameraViewfinder()
self.camvfindset = QCameraViewfinderSettings()
self.cammode = self.cam.CaptureMode(0)
self.camimgcap = QCameraImageCapture(self.cam)
def iniCamera(self):
print(self.caminfo.description())
print(self.caminfo.availableCameras())
for caminfo in QCameraInfo.availableCameras():
print(caminfo.deviceName())
if self.cam.isCaptureModeSupported(self.cammode):
print("Capturemode supported")
def startVid(self):
#self.camimgcap.CaptureDestination(2)
self.camvfind.show()
self.cam.setViewfinder(self.camvfind)
self.cam.setCaptureMode(self.cammode)
self.cam.start()
if __name__ == '__main__':
print("1")
app = QtWidgets.QApplication(sys.argv)
print("2")
cam = Camera()
print("4")
cam.iniCamera()
cam.startVid()
sys.exit(app.exec_())
As saídas do gdb são: Esta é apenas a compilação do meu código
(gdb) run qt5.py
Starting program: /usr/bin/python3 qt5.py
Cannot parse expression '.L1185 4@r4'.
warning: Probes-based dynamic linker interface failed.
Reverting to original interface.
[Thread debugging using libthread_db enabled]
Using host libthread_db library "/lib/arm-linux-gnueabihf/libthread_db.so.1".
1
[New Thread 0x72b39470 (LWP 4134)]
2
3
[New Thread 0x6de10470 (LWP 4139)]
[Thread 0x6de10470 (LWP 4139) exited]
[New Thread 0x6de10470 (LWP 4140)]
[Thread 0x6de10470 (LWP 4140) exited]
este é o backtrace:
(gdb) bt
#0 __libc_do_syscall () at ../sysdeps/unix/sysv/linux/arm/libc-do-syscall.S:46
#1 0x76f21c0a in __GI_ppoll (fds=0x7001a8, nfds=1, timeout=<optimized out>,
sigmask=0x0) at ../sysdeps/unix/sysv/linux/ppoll.c:50
#2 0x73389e12 in pa_mainloop_poll ()
from /usr/lib/arm-linux-gnueabihf/libpulse.so.0
#3 0x7338a290 in pa_mainloop_iterate ()
from /usr/lib/arm-linux-gnueabihf/libpulse.so.0
#4 0x6de2888c in conf_pulse_hook_load_if_running ()
from /usr/lib/arm-linux-gnueabihf/alsa-lib/libasound_module_conf_pulse.so
#5 0x6e01c9f2 in ?? () from /usr/lib/arm-linux-gnueabihf/libasound.so.2
Backtrace stopped: previous frame identical to this frame (corrupt stack?)
e aqui estão os tópicos de informações:
(gdb) info threads
Id Target Id Frame
* 1 Thread 0x76ff6300 (LWP 4204) "python3" __libc_do_syscall ()
at ../sysdeps/unix/sysv/linux/arm/libc-do-syscall.S:46
2 Thread 0x72b39470 (LWP 4206) "QXcbEventReader" 0x76f21b90 in poll ()
at ../sysdeps/unix/syscall-template.S:84
Se você realmente leu até aqui, obrigado. Eu sei que coletei bastante os dados. Se você tiver alguma dúvida, não hesite em perguntar.