Hilfe TXT4: Kamera-Bild auf Display

Alles rund um TX(T) und RoboPro, mit ft-Hard- und Software
Computing using original ft hard- and software
Forumsregeln
Bitte beachte die Forumsregeln!
Antworten
Benutzeravatar
uffi
Beiträge: 430
Registriert: 24 Jan 2014, 16:21
Wohnort: München

Hilfe TXT4: Kamera-Bild auf Display

Beitrag von uffi » 08 Mär 2026, 10:52

Hallo Community,

ich benötige Eure Hilfe. Habe gerade den TXT4.0 in Betrieb genommen und versuche mit einem ersten Programm nach der Hilfefunktion ein Kamerabild auf das Display zu bekommen.
TXT4Cam2Display.PNG
TXT4Cam2Display.PNG (107.84 KiB) 194 mal betrachtet
Dabei gibt es folgende Fehlermeldung:

Code: Alles auswählen

Programm startet...

Exception in thread Thread-4:
Traceback (most recent call last):
  File "/usr/lib/python3.5/threading.py", line 914, in _bootstrap_inner
    self.run()
  File "/usr/lib/python3.5/threading.py", line 862, in run
    self._target(*self._args, **self._kwargs)
  File "/usr/lib/python3.5/site-packages/fischertechnik/controller/txt4/Txt4Camera.py", line 141, in __update
    value=image
  File "/opt/ft/workspaces/KameraDisplay/KameraDisplay.py", line 15, in image_callback
    base64 = frame_to_base64(event.value)
  File "/opt/ft/workspaces/KameraDisplay/KameraDisplay.py", line 26, in frame_to_base64
    result = "data:image/jpeg;base64," + base64.b64encode(image).decode("utf-8")
AttributeError: 'NoneType' object has no attribute 'b64encode'
Anscheinend ist kein Bild da. Der Kameraprozeß wurde aber gestartet mit:

Code: Alles auswählen

# auto generated content from camera configuration
from lib.controller import *
import fischertechnik.factories as txt_factory

TXT_M_USB1_1_camera.set_rotate(False)
TXT_M_USB1_1_camera.set_height(120)
TXT_M_USB1_1_camera.set_width(160)
TXT_M_USB1_1_camera.set_fps(15)
TXT_M_USB1_1_camera.start()
Wo liegt mein Fehler?

Danke, Dirk

Benutzeravatar
calliope
Beiträge: 140
Registriert: 11 Mär 2025, 12:02

Re: Hilfe TXT4: Kamera-Bild auf Display

Beitrag von calliope » 08 Mär 2026, 11:26

Ich würde in der base64 Zeile die Variable bild und nicht Ereignis einsetzen.
I²C für Calliope, TXT 4.0 und RX Controller.
https://git.fischertechnik-cloud.com/users/i2c/projects

Benutzeravatar
uffi
Beiträge: 430
Registriert: 24 Jan 2014, 16:21
Wohnort: München

Re: Hilfe TXT4: Kamera-Bild auf Display

Beitrag von uffi » 08 Mär 2026, 12:21

Danke für den Tipp, leider blieb die Fehlermeldung die gleiche. Habe aber nun den Code direkt als python code so eingegeben und komme ein Stück weiter:

Code: Alles auswählen

import base64
import cv2
import fischertechnik.factories as txt_factory
import time
from lib.camera import *
from lib.controller import *

#your python code
TXT_M_USB1_1_camera.set_rotate(False)
TXT_M_USB1_1_camera.set_height(240)
TXT_M_USB1_1_camera.set_width(320)
TXT_M_USB1_1_camera.set_fps(15)
TXT_M_USB1_1_camera.start()

def frame_to_base64(frame):
  result = ""
  success, image = cv2.imencode(".jpeg", frame, [1, 30])
  if success:
    result = "data:image/jpeg;base64," + base64.b64encode(image).decode("utf-8")
  return result

time.sleep(3)
while True:
  #your python code
  while True:
    bild = TXT_M_USB1_1_camera.read_frame()
    if bild is not None:
      base64 = frame_to_base64(bild)
      if base64 is not None:
        display.set_base64_image("txt_image", base64)
        break
Nun gibt es etwas später eine Fehlermeldung bei dem Versuch das Bild zu reskalieren (für das Display?):

Code: Alles auswählen

Programm startet...

VIDIOC_DQBUF: Invalid argument
Exception in thread Thread-3:
Traceback (most recent call last):
  File "/usr/lib/python3.5/threading.py", line 914, in _bootstrap_inner
    self.run()
  File "/usr/lib/python3.5/threading.py", line 862, in run
    self._target(*self._args, **self._kwargs)
  File "/usr/lib/python3.5/site-packages/fischertechnik/camera/VideoStream.py", line 118, in __update
    frame = imutils.resize(frame, width=self.__width, height=self.__height)
  File "/usr/lib/python3.5/site-packages/imutils/convenience.py", line 69, in resize
    (h, w) = image.shape[:2]
AttributeError: 'NoneType' object has no attribute 'shape'
Hat dazu jemand eine Idee?

Danke, Dirk

Benutzeravatar
uffi
Beiträge: 430
Registriert: 24 Jan 2014, 16:21
Wohnort: München

Re: Hilfe TXT4: Kamera-Bild auf Display

Beitrag von uffi » 08 Mär 2026, 14:23

Hab nun eine funktionierende Lösung, der Fehler in meinem ersten Ansatz ganz oben war, dass der Name des base64 Bildes mit dem Namen in dem camera change listener ("image") übereinstimmen muss.
TXT4Cam2Display2.PNG
TXT4Cam2Display2.PNG (27.98 KiB) 125 mal betrachtet

Code: Alles auswählen

import base64
import cv2
import time
from lib.camera import *
from lib.controller import *
from lib.display import *

image = None


def image_callback(event):
  global image
  image = frame_to_base64(event.value)
  display.set_base64_image("txt_image", image)


TXT_M_USB1_1_camera.add_change_listener("image", image_callback)


def frame_to_base64(frame):
  result = ""
  success, image = cv2.imencode(".jpeg", frame, [1, 30])
  if success:
    result = "data:image/jpeg;base64," + base64.b64encode(image).decode("utf-8")
  return result


while True:
  pass
Damit wird das Kamera Bild tatsächlich auf dem Display angezeigt.

Gruß, Dirk

Antworten