TXT Kamera mit OpenCV (Python)

Hallo Kids, hier ist eine Ecke extra für euch!
Ihr könnt hier Fragen aller Art stellen, die wir euch gerne so schnell wie möglich beantworten.
Ihr dürft hier aber auch gerne eure Modelle einfach mal anderen Fischertechnikern vorstellen.
Antworten
jonathan
Beiträge: 3
Registriert: 10 Sep 2022, 11:26

TXT Kamera mit OpenCV (Python)

Beitrag von jonathan » 12 Sep 2022, 16:58

Hallo,

ich möchte gerne mit OpenCV (Python) Bilder der USB-Kamera am TXT verarbeiten können.

Beispielcode:
#! /usr/bin/env python3
# -*- coding: utf-8 -*-

import ftrobopy
import time
import cv2
import numpy as np

txt = ftrobopy.ftrobopy('192.168.178.44', 65000)

txt.startCameraOnline()
time.sleep(2.5)

frame = txt.getCameraFrame()

bild = np.array(frame)

grau = cv2.cvtColor(bild, cv2.COLOR_RGB2GRAY)


Ich bekomme folgenden Fehler:

cv2.error: OpenCV(4.2.0) ../modules/imgproc/src/color.simd_helpers.hpp:92: error: (-2:Unspecified error) in function 'cv::impl::{anonymous}::CvtHelper<VScn, VDcn, VDepth, sizePolicy>::CvtHelper(cv::InputArray, cv::OutputArray, int) [with VScn = cv::impl::{anonymous}::Set<3, 4>; VDcn = cv::impl::{anonymous}::Set<1>; VDepth = cv::impl::{anonymous}::Set<0, 2, 5>; cv::impl::{anonymous}::SizePolicy sizePolicy = cv::impl::<unnamed>::NONE; cv::InputArray = const cv::_InputArray&; cv::OutputArray = const cv::_OutputArray&]'
> Invalid number of channels in input image:
> 'VScn::contains(scn)'
> where
> 'scn' is 1

Was muss ich tun, damit das (auch nur auf dem TXT) funktioniert?

Viele Grüße
Jonathan

Benutzeravatar
elektrofuzzis
Beiträge: 192
Registriert: 25 Jun 2016, 09:40

Re: TXT Kamera mit OpenCV (Python)

Beitrag von elektrofuzzis » 12 Sep 2022, 20:18

Hallo Jonathan,

Laut Dokumentation von ftRoboPy (https://github.com/ftrobopy/ftrobopy/bl ... manual.pdf) gibt die getCameraFrame-Methode ein Bild im jpeg-Format zurück. Du versuchst dieses hier mit np.array() als rohe Pixeldaten zu nutzen.
Du hast nun zwei Möglichkeiten:

1. Speichere die Datei als .jpg-Datei und lade sie mit cv2.imread():

Code: Alles auswählen

with open("datei.jpg", "wb") as datei:
    datei.write(frame)

bild = cv2.imread("datei.jpg")
2. Lade das Bild mit der Pillow-Bibliothek
Dazu musst du zuerst Pillow via pip installieren

Code: Alles auswählen

pip install Pillow
Danach kannst du so dein Bild laden:

Code: Alles auswählen

from io import BytesIO
from PIL import Image

frame_jpgdaten = BytesIO(frame)
geladenes_bild = Image.open(frame_jpgdaten)
bild = np.asarray(geladenes_bild)

Notiz:
1) Ich habe den zweiten Weg nicht ausprobiert, sollte aber funktionieren.
2) Die io-Bibliothek ist Teil der Standartbibliothek von Python, muss also nicht seperat installiert werden


Gruss

Christian

jonathan
Beiträge: 3
Registriert: 10 Sep 2022, 11:26

Re: TXT Kamera mit OpenCV (Python)

Beitrag von jonathan » 13 Sep 2022, 15:00

Vielen Dank für die Antwort.
Jedoch erhalte ich bei beiden Möglichkeiten den Fehler:
TypeError: a Bytes-like object is required, not ‘list‘


Gruß
Jonathan

Benutzeravatar
elektrofuzzis
Beiträge: 192
Registriert: 25 Jun 2016, 09:40

Re: TXT Kamera mit OpenCV (Python)

Beitrag von elektrofuzzis » 13 Sep 2022, 18:35

Hallo,

Ich sehe was du meinst.

Füge mal diese Zeile vor den Versuchen ein:

Code: Alles auswählen

frame = bytearray(frame)
Übrigens ist der zweite Weg der potentiell schnellere.

Gruß

Christian

jonathan
Beiträge: 3
Registriert: 10 Sep 2022, 11:26

Re: TXT Kamera mit OpenCV (Python)

Beitrag von jonathan » 16 Sep 2022, 16:43

Ok, Danke.

Es funktioniert jetzt. Aber leider nur im online Modus.
In der ftrobopy Datei steht folgendes:

Falls diese Funktion im Offline-Modus auf dem TXT unter der CFW verwendet werden soll, muss zuvor die ftGUI-App auf dem TXT gestartet werden. Im ‘direct‘ -Modus stehen die Camera-Funktionen von ftrobopy nicht zur Verfügung. In diesem Fall sollte die openCV-Bibilothek oder ftrobopylib.so verwendet werden.

Mit cv2.VideoCapture(0) hab och es schon probiert das scheint aber nicht zu funktionieren.

Und die ftGUI App kann man nach dem Start des Programms auch nicht mehr öffnen. Und in der ftGUI App hat man keinen Zugriff auf die in die CFW hochgeladenen Programme.

Wie kann ich das Programm auf dem TXT offline laufen lassen?

Grüße
Jonathan

Torsten
Beiträge: 261
Registriert: 29 Jun 2015, 23:08
Wohnort: Gernsheim (Rhein-Main-Region)

Re: TXT Kamera mit OpenCV (Python)

Beitrag von Torsten » 18 Sep 2022, 11:25

Eigentlich sollte das mit cv2 funktionieren:

Code: Alles auswählen

cam = cv2.VideoCapture(0)
time.sleep(2)
res, pic = cam.read()
(cv2.VideoCapture kann nicht gleichzeitig mit der ftGUI verwendet werden)

Welche Version der CFW verwendest du ?
Falls der Camera-Port des TXT gar nicht mehr reagiert, könnte auch ein Reboot des TXT helfen.

Antworten