Code suddenly stops at self.cam = QCamera() , PyQt5.9.2, Qt5.9.3, Python3.5
-
@Xenoshell
I asked earlier:Does it only give the libpulse/libasound if a certain line is in your Python script, and not if it is removed, then you'd have an idea what is related to what?
So, if I were you, under
gdb
, I'd try commenting in & commenting out theQCamera()
line, and report whether your debugger only shows thelibpulse
error if & only if you have that line in there. then you'd know for sure whetherQCamera()
has anything to do withlibpulse
....I'd also try
QCamera("video0")
orQCamera("/dev/video0")
or whatever it is, instead of plainQCamera()
. I'd probably also tryQCamera("rubbish")
. These are all things for you to play with to try to understand just what causes the problem/hang, it's up to you.... -
@JNBarchan
I commentedQCamera()
and obviously i also need to comment the stuff that is in correlation toself.cam
because otherwise i would get a simple error becauseself.cam
is not there. Then i also dont get the libpulse error, well tbh there is not much to compile because about half the code is commented.
I tried usingQCamera("/dev/video0)
and also video0, this results in the error:TypeError: arguments did not match any overloaded call: QCamera(QObject parent=None): argument 1 has unexpected type 'str' QCamera(QByteArray, QObject parent=None): argument 1 has unexpected type 'str' QCamera(QCameraInfo, QObject parent=None): argument 1 has unexpected type 'str' QCamera(QCamera.Position, QObject parent=None): argument 1 has unexpected type 'str'
I can follow you that this should be right but how are you supposed to initialize QCamera if you need the QCameraInfo or a QByteArray?
Are you supposed to initalize without anything -> find out the QByteArray -> initialize QCamera with the correct QByteArray?Thanks again for your help
-
@Xenoshell
For the way to invokeQCamera()
, sorry, I misremembered the constructor, and thought it took a string. It takes a byte array of the name instead. From Python, you'll usestr.encode()
, e.g."/dev/video0".encode()
.Maybe it's not a good idea to try to create an "empty"
QCamera()
. Try using a constructor which does take an actual camera. One of:- `QCamera(QCameraInfo.defaultCamera())
QCamera("/dev/video0".encode())
- One of the available cameras returned by the loop:
for caminfo in QCameraInfo.availableCameras(): print(caminfo.deviceName()) acam = QCamera(caminfo)
I hope one of the above works instead of the default constructor. Maybe only root can create the empty one (though have to say I'm dubious)....
Now that I think I understand what your code is intending to do, I believe you always intended
QCamera(QCameraInfo.defaultCamera())
. Don't forget the docs admonition:QCameraInfo QCameraInfo::defaultCamera()
Returns the default camera on the system.
The returned object should be checked using isNull() before being used, in case there is no default camera or no cameras at all.
See also availableCameras(). -
-
@Xenoshell
Then at this point I'm afraid I'm stumped.QCamera(QCameraInfo.defaultCamera())
should definitely not hang. I don't know what is going on in the Qt code which will cause something to do so unless run as root. (I just wonder whether something might be prompting for, say, root password to allow access, and that's why it hangs/goes black....)You need one of the experts who knows what the Qt code does to get you anywhere now, I think....
-
You can't without lots of chocolate...
Minimal PyQt5 example that shows a viewfinder using the default camera:
import sys from PyQt5.QtWidgets import QApplication from PyQt5.QtMultimedia import QCamera, QCameraInfo from PyQt5.QtMultimediaWidgets import QCameraViewfinder if __name__ == '__main__': app = QApplication(sys.argv) camera = QCamera(QCameraInfo.defaultCamera()); viewfinder = QCameraViewfinder() viewfinder.show() camera.setViewfinder(viewfinder); camera.start() sys.exit(app.exec_())
Does it work for you ?
-
@SGaist
Nope doesnt work. Its the same thing. Without sudo it doesnt do anything and with sudo it just locks up and i have to login again. I cant find a reason why the raspberry pi just locks up. For me thats the strangest thing to happen. I had my code once on Raspbian but now i am on Ubuntu Mate since i always got a segmentation fault on Raspbian. -
@SGaist
We have established that for the OPQCamera(QCameraInfo.defaultCamera())
--- or indeedQCamera(
anything-at-all-or-nothing)
--- hangs unless he runs it viasudo
. (The only thing I don't think he has clarified is whetherQCamera("nosuchcamera".decode())
succeeds returning an invalid camera object or also hangs --- but I suspect the latter.)What would be nice to know from an expert is: from the Qt source code, what does just a minimal
QCamera()
constructor actually do? It seems to invoke something in the OS/multimedia --- perhaps something which requires a permission --- but what?? -
@Xenoshell
Hmm, have a look at new post which has arrived: https://forum.qt.io/topic/85920/error-running-camera-example/2This confirms your suspicion that
libpulse
has something to do with cameras and perhapsQCamera
. I don't know what to tell you to do about it, but maybe check what you have installed in that light (libpulse
&libpulse-dev
)? -
@JNBarchan
I knew it! Sadly installing libpulse-dev did nothing for my problem. Everything stays the same.
Does that mean that maybe my installation of Qt5 or PyQt5 is faulted? I know that i didnt managed to install PyQt5/Qt5 with the QtMultimedia because somehow the command didnt work and i then just used the repository to get qtmultimediaEDIT: i just checked the groups again and if something strikes my eye. I saw that i am not in the pulse and pulse-access group. I dont think its gonna do anything, though.
-
@Xenoshell
Well it's possible (it would only be your Qt installation, not your PyQt). I don't know how you went about it, as I only fetch from Ubuntu repositories (apt-get
) for all things Qt, never from Qt themselves. If you're saying you did a "max-and-match" --- some things one way, some another --- you might not have a consistent/correctly located set of libraries. You might want to clarify what you mean by:i didnt managed to install PyQt5/Qt5 with the QtMultimedia because somehow the command didnt work and i then just used the repository to get qtmultimedia
as anything which "didn't work" in this area could be a clue....
However, this would be implicated if your code always "hung". But the fact that it does work as root but not as you makes one assume that your installation does work.
Deffo think you should post here your problems/try again with anything which "did not work right" during install, especially if it's to do with multimedia....
-
@JNBarchan
Well i wanted to install Qt5 from source but in the default installation is not QtMultimedia. So i wanted to use the command to install also QtMultimedia but somehow the command didnt get recognized so i just didnt install QtMulti from source but installed it with a repository. The help command didnt do much for using the correct command, because im quite sure i can read. -
@Xenoshell
Look, I don't know your situation, but maybe it's possible that your multimedia is "out of sync" with the rest of your Qt installed? Like I said, I'm surprised then that it works for root but not other users, but who knows....Since no-one else seems to be posting to help you on your camera issue, you might want to try a new thread purely about how to correctly install Qt with multimedia under your OS, get it all sorted out properly, and then see if miraculously that solves your problem....
-
Just so you know, I was @JNBarchan but now I have had a change of identity and I am @JonB!
@Xenoshell has raised the new installation question to (begin to) sort this out at https://forum.qt.io/topic/85955/reinstall-qt5-with-qtmultimedia-using-ubuntu-mate
-
@JonB I just tried my code after the installation and somehow it doesnt stop at qcamera anymore, but now the window that pops out is black and i get a bunch of errors in the terminal.
1 2 3 4 5 Venus USB2.0 Camera: Venus USB2 [<PyQt5.QtMultimedia.QCameraInfo object at 0x72ddd3f0>] /dev/video0 6 (python3:2758): GLib-GObject-WARNING **: g_object_set_valist: object class 'GstVaapiSink' has no property named '0\xff\xf7\x81\xbb' (python3:2758): GLib-GObject-WARNING **: g_object_set_valist: object class 'GstVaapiSink' has no property named '0\xff\xf7Ż' (python3:2758): GLib-GObject-WARNING **: g_object_set_valist: object class 'GstVaapiSink' has no property named '0\xff\xf7 \xbc' (python3:2758): GLib-GObject-WARNING **: g_object_set_valist: object class 'GstVaapiSink' has no property named '0\xff\xf7M\xbc' libva info: VA-API version 0.39.0 libva info: va_getDriverName() returns 0 libva info: Trying to open /usr/lib/arm-linux-gnueabihf/dri/vc4_drv_video.so libva info: va_openDriver() returns -1 libva info: VA-API version 0.39.0 libva info: va_getDriverName() returns 0 libva info: Trying to open /usr/lib/arm-linux-gnueabihf/dri/vc4_drv_video.so libva info: va_openDriver() returns -1 7 libva info: VA-API version 0.39.0 libva info: va_getDriverName() returns 0 libva info: Trying to open /usr/lib/arm-linux-gnueabihf/dri/vc4_drv_video.so libva info: va_openDriver() returns -1 libva info: VA-API version 0.39.0 libva info: va_getDriverName() returns 0 libva info: Trying to open /usr/lib/arm-linux-gnueabihf/dri/vc4_drv_video.so libva info: va_openDriver() returns -1 libva info: VA-API version 0.39.0 libva info: va_getDriverName() returns 0 libva info: Trying to open /usr/lib/arm-linux-gnueabihf/dri/vc4_drv_video.so libva info: va_openDriver() returns -1 libva info: VA-API version 0.39.0 libva info: va_getDriverName() returns 0 libva info: Trying to open /usr/lib/arm-linux-gnueabihf/dri/vc4_drv_video.so libva info: va_openDriver() returns -1 libva info: VA-API version 0.39.0 libva info: va_getDriverName() returns 0 libva info: Trying to open /usr/lib/arm-linux-gnueabihf/dri/vc4_drv_video.so libva info: va_openDriver() returns -1 libva info: VA-API version 0.39.0 libva info: va_getDriverName() returns 0 libva info: Trying to open /usr/lib/arm-linux-gnueabihf/dri/vc4_drv_video.so libva info: va_openDriver() returns -1 libva info: VA-API version 0.39.0 libva info: va_getDriverName() returns 0 libva info: Trying to open /usr/lib/arm-linux-gnueabihf/dri/vc4_drv_video.so libva info: va_openDriver() returns -1 libva info: VA-API version 0.39.0 libva info: va_getDriverName() returns 0 libva info: Trying to open /usr/lib/arm-linux-gnueabihf/dri/vc4_drv_video.so libva info: va_openDriver() returns -1 CameraBin error: "Internal data flow error." CameraBin error: "Internal data flow error."
I dont know if now this is because my installation of qt5 is faulted or something else. Do i have to reinstall PyQt5 too?
@SGaist here is my code again.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("/dev/video0".encode()) #QCameraInfo.defaultCamera() 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("5") cam.iniCamera() print("6") cam.startVid() print("7") sys.exit(app.exec_())
-
@Xenoshell
Well I think that's actually progress!!Experts will know better than I, but obviously it looks like there are issues which need fixing, which hopefully will then mean you can use the camera OK!
You do not have to do any PyQt re-installs. However, you should ensure that the version of PyQt matches whatever version you have now for Qt. And don't blame me if they don't match, I have a nasty feeling I might have read somewhere that PyQt only goes up to Qt 5.9 at present till the new year. If your Qt is 5.10 we'll have to hope that PyQt 5.9 works sufficiently with it --- you'd have to Google.
But before you look at PyQt, wait for an expert here to explain what your error messages indicate.
P.S.
You say it used to work when run assudo
. Is that still the case now, or same behaviour regardless? -
@SGaist @JonB, hello i wish you a happy new year. I am gonna be now more active. SGaist, can you please interpret the newest output i recieved? My screen doesnt lock up anymore and all but i still have a black screen?
Maybe thats a dumb question but do i need a .ui file for all of this to work? Currently i have besides the qt5.py file no other related to all this? I figured that i can add all of the GUI stuff after the code actually works. Am i wrong with that assumption?
Greets
Xeno