Python.exe Meldung: "Warn:0 terminating async callback"

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Getsu_73
User
Beiträge: 5
Registriert: Dienstag 17. Oktober 2023, 17:09

Hallo,

an meinem PC sind zwei USB Kameras angeschlossen.
Ich möchte die Helligkeit- und Kontrast-Werte im Python-Konsolenfenster ausgeben lassen.
-Dies klappt einwandfrei. -Jedoch erscheint zweimal folgende Fehlermeldung :

Code: Alles auswählen

[ Warn:0] terminating async callback
Was muss man ändern, um die Werte im Python-Konsolenfenster ausgeben zu lassen,
ohne die Fehlermeldung zu bekommen?

PS:
Um cv2 nutzen zu können, muss man es zuvor installieren, mit dem Befehl . .
python -m pip install opencv-python

Code: Alles auswählen

import cv2
import time
# - - - - - - - - - - - - - - - - -
time.sleep(1.5)
c0 = cv2.VideoCapture(0)
print('Device 0: Bri.  ' + str(int(c0.get(10))))
print('Device 0: Con.  ' + str(int(c0.get(11))))
print('Device 0: Saturation ' + str(int(c0.get(12))))
print('Device 0: Gamma ' + str(int(c0.get(22))))
print('Device 0: Hue   ' + str(int(c0.get(13))))
print
c0.release()
# - - - - - - - - - - - - - - - - -
time.sleep(1.5)
c1 = cv2.VideoCapture(1)
print('Device 1: Bri.  ' + str(int(c1.get(10))))
print('Device 1: Con.  ' + str(int(c1.get(11))))
print('Device 1: Saturation ' + str(int(c1.get(12))))
print('Device 1: Gamma ' + str(int(c1.get(22))))
print('Device 1: Hue   ' + str(int(c1.get(13))))
print
c1.release()
# - - - - - - - - - - - - - - - - -
time.sleep(1.5)
Sirius3
User
Beiträge: 18272
Registriert: Sonntag 21. Oktober 2012, 17:20

Zwei Sekunden suchen ergibt folgende Seite: https://github.com/opencv/opencv-python/issues/198
Bedeutet, man kann nichts dagegen tun, einfach ignorieren.
Um Strings zu formatieren benutzt man Formatstrings und nicht + mit str.
Ein einfaches Referenzieren der Funktion print hat keine Auswirkung, da fehlen die Klammern.
Wenn man etwas mehrmals macht, dann benutzt man Schleifen.
Kommentare sollten einen Mehrwert bieten, in dem sie erklären, warum etwas passiert, Kommentare, die nur aus Minuszeichen bestehen haben wenig Inhalt und können weg.

Code: Alles auswählen

import cv2
import time

for camera_index in [0, 1]:
    time.sleep(1.5)
    camera = cv2.VideoCapture(camera_index)
    print(f'Device 0: Bri.  {camera.get(10)}')
    print(f'Device 0: Con.  {camera.get(11)}')
    print(f'Device 0: Saturation {camera.get(12)}')
    print(f'Device 0: Gamma {camera.get(22)}')
    print(f'Device 0: Hue   {camera.get(13)}')
    print()
    camera.release()
time.sleep(1.5)
Benutzeravatar
__blackjack__
User
Beiträge: 14052
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

Den `release()`-Aufruf würde ich noch mit einem ``finally`` absichern. Warum man "Saturation" ausschreiben kann, "Brightness" und "Contrast" dann aber abkürzen muss, erschliesst sich mir nicht ganz. Und die magischen Zahlen bei den `get()`-Aufrufen gehen IMHO gar nicht. Da gibt es nicht ohne Grund Konstanten für.

Ungetestet:

Code: Alles auswählen

import time

import cv2


def main():
    for camera_index in [0, 1]:
        time.sleep(1.5)
        camera = cv2.VideoCapture(camera_index)
        try:
            for name in [
                "Brightness",
                "Contrast",
                "Saturation",
                "Gamma",
                "Hue",
            ]:
                value = camera.get(getattr(cv2, f"CAP_PROP_{name.upper()}"))
                print(f"Device {camera_index}: {name:<10} {value}")
            print()
        finally:
            camera.release()
    time.sleep(1.5)


if __name__ == "__main__":
    main()
“Vir, intelligence has nothing to do with politics!” — Londo Mollari
Getsu_73
User
Beiträge: 5
Registriert: Dienstag 17. Oktober 2023, 17:09

@Sirius3 Danke für den Link - die Meldung ...

[ Warn:0] terminating async callback

ist laut mehreren Postings im Internet ein Bug von älteren Python-Versionen. Die Fehlermeldung verschwand nach einem Update (von v2.7) auf v3.12 (python-3.12.0-amd64.exe).
Antworten