Run Qml application on raspberry pi - qt

I have compiled the qt-everywhere-opensource-src-5.9.8 on raspberry pi3 successfully. But when I run the qml application in raspberry,I am getting error message like,
pi#raspberrypi:~/testqml $ ./testqml -platform linuxfb:fb=/dev/fb0
JIT is disabled for QML. Property bindings and animations will be very slow. Visit https://wiki.qt.io/V4 to learn about possible solutions for your platform.
This plugin does not support createPlatformOpenGLContext!
Failed to create OpenGL context for format QSurfaceFormat(version 2.0, options QFlagsQSurfaceFormat::FormatOption(), depthBufferSize 24, redBufferSize -1, greenBufferSize -1, blueBufferSize -1, alphaBufferSize -1, stencilBufferSize 8, samples -1, swapBehavior QSurfaceFormat::SwapBehavior(DoubleBuffer), swapInterval 1, profile QSurfaceFormat::OpenGLContextProfile(NoProfile))
Aborted
I already tried this link "QML Peformance on Raspberry Pi 3" ,but same problem happened.

Related

AML - Web service TimeoutError

We created a webservice endpoint and tested it with the following code, and also with POSTMAN.
We deployed the service to an AKS in the same resource group and subscription as the AML resource.
UPDATE: the attached AKS had a custom networking configuration and rejected external connections.
import numpy
import os, json, datetime, sys
from operator import attrgetter
from azureml.core import Workspace
from azureml.core.model import Model
from azureml.core.image import Image
from azureml.core.webservice import Webservice
from azureml.core.authentication import AzureCliAuthentication
cli_auth = AzureCliAuthentication()
# Get workspace
ws = Workspace.from_config(auth=cli_auth)
# Get the AKS Details
try:
with open("../aml_config/aks_webservice.json") as f:
config = json.load(f)
except:
print("No new model, thus no deployment on AKS")
# raise Exception('No new model to register as production model perform better')
sys.exit(0)
service_name = config["aks_service_name"]
# Get the hosted web service
service = Webservice(workspace=ws, name=service_name)
# Input for Model with all features
input_j = [[1, 2, 3, 4, 5, 6, 7, 8, 9, 10], [10, 9, 8, 7, 6, 5, 4, 3, 2, 1]]
print(input_j)
test_sample = json.dumps({"data": input_j})
test_sample = bytes(test_sample, encoding="utf8")
try:
prediction = service.run(input_data=test_sample)
print(prediction)
except Exception as e:
result = str(e)
print(result)
raise Exception("AKS service is not working as expected")
In AML Studio, the deployment state is "Healthy".
We get the following error when testing:
Failed to establish a new connection: [WinError 10060] A connection attempt failed because the connected party did not properly respond after a period of time, or established connection failed because connected host has failed to respond'
Log just after deploying the AKS Webservice here.
Log after running the test script here.
How can we know what is causing this problem and fix it?
Did you try service.get_logs(). Please also try a local deployment first. https://learn.microsoft.com/en-us/azure/machine-learning/how-to-deploy-local-container-notebook-vm
I'm not sure what's the difference between Webservice and AKSWebservice, but give the AKS variant a try link. I would also try to isolate whether this is an AKS issue by deploying through ACI and validating your dependencies and scoring script.
We checked the AKS networking configuration and realized it has an Azure CNI profile.
In order to test the webservice we need to do it from inside the created virtual network.
It worked well!

JetBrains Toolbox crash on Windows: "Failed to create OpenGL context for format QSurfaceFormat"

I've recently updated my graphic card drivers and the JetBrains Toolbox app stopped working.
Sometimes it displays an icon next to the system clock that disappears after a couple of seconds, sometimes it displays a black dialog box, but I managed to select all text and copy it:
---------------------------
Toolbox
---------------------------
Failed to create OpenGL context for format QSurfaceFormat(version 2.0, options QFlags<QSurfaceFormat::FormatOption>(), depthBufferSize 24, redBufferSize -1, greenBufferSize -1, blueBufferSize -1, alphaBufferSize 8, stencilBufferSize 8, samples 0, swapBehavior QSurfaceFormat::SwapBehavior(DefaultSwapBehavior), swapInterval 1, profile QSurfaceFormat::OpenGLContextProfile(NoProfile)) .
This is most likely caused by not having the necessary graphics drivers installed.
Install a driver providing OpenGL 2.0 or higher, or, if this is not possible, make sure the ANGLE Open GL ES 2.0 emulation libraries (libEGL.dll, libGLESv2.dll and d3dcompiler_*.dll) are available in the application executable's directory or in a location listed in PATH.
---------------------------
OK
---------------------------
I've checked, the libEGL.dll, libGLESv2.dll and D3Dcompiler_47.dll files are present in the app folder, so this is not the issue.
Actually, I found the real solution on the Community forum:
I could solve the problem by moving the following dll's to another folder which is not in the PATH folders.
I move libEGL.dll, libGLESV2.dll, opengl32sw.dll from the folder C:\Users\USERNAME\AppData\Local\JetBrains\Toolbox\bin to the new folder -> C:\Users\USERNAME\AppData\Local\JetBrains\Toolbox\bin\tmp. Or delete it. After moving the files and restarting jetbrains-toolbox.exe, I get a welcome window and then a login window.
Try setting an environment variable as follows:
JETBRAINS_TOOLBOX_NO_SOFTWARE_OPEN_GL = 1
or
JETBRAINS_TOOLBOX_NO_SOFTWARE_OPEN_GL = true
According to Jetbrains Issue Tracker this bug should be fixed in version 1.7
Update
This issue was fixed in 1.7.3593.

Raspberry Pi2 running Buildroot with QT5 Set screen resolution

I'm in development of a QT5 application for RPi2 running build root. Initially I'm trying out QTQuick 2 with QML, and running into the issue where the app launches with a resolution of 1280x720 instead of the intended 1920x1080 on an 8" HDMI display.
I don't know if the change I need to make is somewhere within the running OS, or some value within the QT app in order to fix the resolution.
Logging Screen.width and Screen.height in QML outputs the following:
qml: x: 1280 y: 720
I have tried setting env variables as mentioned in this similar post by creating a file in /etc/profiles.d/ with the following.
export QT_QPA_EGLFS_WIDTH=1920
export QT_QPA_EGLFS_HEIGHT=1080
export QT_QPA_EGLFS_PHYSICAL_WIDTH=177
export QT_QPA_EGLFS_PHYSICAL_HEIGHT=100
export QT_QPA_EGLFS_DEPTH=24
export QT_QPA_EGLFS_ALWAYS_SET_MODE=1
# Logging
#export QT_DEBUG_PLUGINS=1
export QT_QPA_EGLFS_DEBUG=1
#export QSG_INFO=1
export QT_LOGGING_RULES=qt.qpa.*=true
However that results in the app not detecting the variables set
Unable to query physical screen size, defaulting to 100 dpi.
To override, set QT_QPA_EGLFS_PHYSICAL_WIDTH and QT_QPA_EGLFS_PHYSICAL_HEIGHT (in millimeters).
If I manually source a file containing the values the error above is not output, indicating I believe that they have been seen by QT but still no change is reflected.
I am SSH'ing into the Pi to make changes and run the QT app, and I have also tried using fbset to change there resolution, which does seem to set the terminal into 1080p, but not the app when ran.
fbset -xres 1920 -yres 1080
Here is the logging output when the app is ran.
qt.qpa.egldeviceintegration: EGL device integration plugin keys: ("eglfs_brcm")
qt.qpa.egldeviceintegration: EGL device integration plugin keys (sorted): ("eglfs_brcm")
qt.qpa.egldeviceintegration: Trying to load device EGL integration "eglfs_brcm"
qt.qpa.egldeviceintegration: Using EGL device integration "eglfs_brcm"
qt.qpa.input: evdevkeyboard: Using device discovery
qt.qpa.input: udev device discovery for type QFlags(0x8)
qt.qpa.input: Found matching devices ()
qt.qpa.input: evdevmouse: Using device discovery
qt.qpa.input: udev device discovery for type QFlags(0x1|0x2)
qt.qpa.input: Found matching devices ()
qt.qpa.input: evdevtouch: Using device discovery
qt.qpa.input: udev device discovery for type QFlags(0x2|0x4)
qt.qpa.input: Found matching devices ()
qml: x: 1280 y: 720
Created context for format QSurfaceFormat(version 2.0, options QFlags(), depthBufferSize 24, redBufferSize -1, greenBufferSize -1, blueBufferSize -1, alphaBufferSize -1, stencilBufferSize 8, samples -1, swapBehavior 2, swapInterval 1, profile 0) with config:
EGL_BUFFER_SIZE: 16
EGL_ALPHA_SIZE: 0
EGL_BLUE_SIZE: 5
EGL_GREEN_SIZE: 6
EGL_RED_SIZE: 5
EGL_DEPTH_SIZE: 24
EGL_STENCIL_SIZE: 8
EGL_CONFIG_CAVEAT: 12344
EGL_CONFIG_ID: 17
EGL_LEVEL: 0
EGL_MAX_PBUFFER_HEIGHT: 2048
EGL_MAX_PBUFFER_PIXELS: 4194304
EGL_MAX_PBUFFER_WIDTH: 2048
EGL_NATIVE_RENDERABLE: 1
EGL_NATIVE_VISUAL_ID: 107544
EGL_NATIVE_VISUAL_TYPE: 12344
EGL_SAMPLES: 0
EGL_SAMPLE_BUFFERS: 0
EGL_SURFACE_TYPE: 1639
EGL_TRANSPARENT_TYPE: 12344
EGL_TRANSPARENT_BLUE_VALUE: 0
EGL_TRANSPARENT_GREEN_VALUE: 0
EGL_TRANSPARENT_RED_VALUE: 0
EGL_BIND_TO_TEXTURE_RGB: 1
EGL_BIND_TO_TEXTURE_RGBA: 1
EGL_MIN_SWAP_INTERVAL: 0
EGL_MAX_SWAP_INTERVAL: 2147483647
Realised buildroot hadn't copied over a config.txt to the boot partition of the SD card. Copied across a minimal config and set configured a few arguments as stated in this thread.
hdmi_ignore_edid=0xa5000080
hdmi_group=1
hdmi_mode=16
That forced the RPi into 1080p mode and now my QT app is displaying correctly at 1920x1080.

pyside qt4.8 os x core profile/3.2 compatibility (yes, I've read the other posts)

No matter what I've tried, I cannot get a proper 3.2 context in pyside using qt 4.8. I have triple checked via the gl extensions manager, and my computer is certainly capable (100% of 4.1 core features).
"simple" version doesn't work...
f = QGLFormat()
f.setProfile(QGLFormat.CoreProfile)
f.setVersion(3,2)
QGLFormat.setDefaultFormat(f)
In fact, I cannot even successfully create a glcontext...
class GLView(QGLWidget):
def __init__(self,name,parent=None):
QGLWidget.__init__(self,parent)
c = QGLContext(QGLFormat())
logger.critical(c.create()) #returns False
This is after a QApplication exists and a MainWindow class is created and shown...
If I try to set the format on the built-in QGLWidget context, it fails as well --
self.context().setFormat(f)
self.context().makeCurrent()
"Cannot make invalid context current". Similarly does not work even if coreprofile is not specified, and version is set at 2.1.
Moving any of these to the initializeGL callback makes no difference.
I've looked at the following questions, which have not resolved my issue
PyQt4 OpenGL: Enabling OpenGL Core Profile - solution was to move to qt5 (no official pyside release for this yet)
PyOpenGL cannot compile shader - on debian, does not have same problem as os x
Getting OpenGL context newer than 2.1 with Qt 4 and Mavericks - unresolved
Qt & OpenGL OS X: GLSL shader version only 120 on Mountain Lion - c++, same code does not work in pyside, as seen above
Any help on this would be greatly appreciated.
Thanks,
K

Finding Source of a UNIX Signal from Coredump

This has been long pending question in my mind. I see that GDB tells us the signal causing process termination.
How do I find the source of the signal from a core?
In two different occasions my two application received SIGEMT and SIGUSR1. I know that there are other applications in production which can send these signals.
Also, I know that the sender information can be seen within running program and the data would be present in siginfo_t structure. But I don't have that luxury and in fact we don't have handler for this signal at all.
Recent-enough versions of the Linux kernel store this information in the core file. And, recent-enough versions of gdb can read it. Then you can use print $_siginfo with a core file just as you would when debugging live.
You can also read this information from core dump by eu-readelf:
$ eu-readelf --notes coredump | head
Note segment of 3180 bytes at offset 0x4a0:
Owner Data size Type
CORE 336 PRSTATUS
info.si_signo: 6, info.si_code: 0, info.si_errno: 0, cursig: 6
sigpend: <>
sighold: <>
pid: 28046, ppid: 3774, pgrp: 28046, sid: 3774
utime: 0.000000, stime: 0.002895, cutime: 0.000000, cstime: 0.000000
orig_rax: 35, fpvalid: 1
Note info.si_signo: 6, which means that process was killed by SIGABRT.

Resources