Seite 1 von 2

TXT Kamera mit OpenCV (Python)

Verfasst: 12 Sep 2022, 16:58
von jonathan
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

Re: TXT Kamera mit OpenCV (Python)

Verfasst: 12 Sep 2022, 20:18
von elektrofuzzis
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

Re: TXT Kamera mit OpenCV (Python)

Verfasst: 13 Sep 2022, 15:00
von jonathan
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

Re: TXT Kamera mit OpenCV (Python)

Verfasst: 13 Sep 2022, 18:35
von elektrofuzzis
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

Re: TXT Kamera mit OpenCV (Python)

Verfasst: 16 Sep 2022, 16:43
von jonathan
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

Re: TXT Kamera mit OpenCV (Python)

Verfasst: 18 Sep 2022, 11:25
von Torsten
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.

Re: TXT Kamera mit OpenCV (Python)

Verfasst: 26 Sep 2022, 17:12
von jonathan
Wenn ich diesen Code ausführe wird auf dem TXT None angezeigt:

Code: Alles auswählen

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

import sys
from TouchStyle import *
import ftrobopy
import cv2
import time

class FtcGuiApplication(TouchApplication):
	def __init__(self, args):
		TouchApplication.__init__(self, args)
		# Creates an empty MainWindow
		w = TouchWindow("Test")
		txt = ftrobopy.ftrobopy('localhost', 65000)
		video = cv2.VideoCapture(0)
		time.sleep(2)		
		res, frame = video.read()

		text = 'OK'  
		if frame == None:
			text = 'None'
		err_msg = QLabel(text)
		err_msg.setWordWrap(True)
		err_msg.setAlignment(Qt.AlignCenter)
		w.setCentralWidget(err_msg)

        
		w.show()
		self.exec_()        

if __name__ == "__main__":
	FtcGuiApplication(sys.argv)
Das müsste doch heißen, dass kein Bild zurückgegeben wird, oder?

Ich verwende die aktuellste Version 0.9.6.

Re: TXT Kamera mit OpenCV (Python)

Verfasst: 26 Sep 2022, 17:15
von jonathan
Wenn ich das Programm über ssh (ftGUI nicht geöffnet) auf dem TXT ausführe wird 'select timeout' angezeigt.

Re: TXT Kamera mit OpenCV (Python)

Verfasst: 29 Sep 2022, 20:22
von jonathan
Hab’s jetzt gelöst und ich erhalte ein Bild :D
Das Problem war die zu hohe Auflösung die den Timeout ausgelöst hat

Re: TXT Kamera mit OpenCV (Python)

Verfasst: 29 Mär 2023, 17:41
von uffi
und wie hast Du auf die niedrigere Auflösung der Kamera umgeschaltet? Danke und Gruß, uffi

Re: TXT Kamera mit OpenCV (Python)

Verfasst: 30 Mär 2023, 19:38
von jonathan
Hallo uffi,
ich habe die Auflösung des Bildes mit

Code: Alles auswählen

cam.set(3, 426)
cam.set(4, 240)
umgestellt.

Re: TXT Kamera mit OpenCV (Python)

Verfasst: 01 Apr 2023, 09:45
von uffi
Hallo jonathan,

danke für Deine schnelle und präzise Antwort, die mir weiterhilft.

Danke und Gruß, uffi

Re: TXT Kamera mit OpenCV (Python)

Verfasst: 18 Jun 2023, 12:33
von uffi
Hallo Jonathan,

ich habe Deinen Code probiert, aber habe wohl noch einen Fehler drin. Ich nutze die CFW Version 1.0.2.

Hier mein Code:

Code: Alles auswählen

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

import sys
from TouchStyle import *
import ftrobopy
import cv2
import time

class FtcGuiApplication(TouchApplication):
    def __init__(self, args):
        TouchApplication.__init__(self, args)
        # Creates an empty MainWindow
        w = TouchWindow("Test")
        txt = ftrobopy.ftrobopy('localhost', 65000)
        cam.set(3, 426)
        cam.set(4, 240)
        video = cv2.VideoCapture(0)
        time.sleep(2)		
        res, frame = video.read()

        text = 'OK'  
        if frame == None:
            text = 'None'
        err_msg = QLabel(text)
        err_msg.setWordWrap(True)
        err_msg.setAlignment(Qt.AlignCenter)
        w.setCentralWidget(err_msg)

        w.show()
        self.exec_()        

if __name__ == "__main__":
    FtcGuiApplication(sys.argv)
Kannst Du bitte mal Deinen Code posten, der bei Dir läuft?

Danke, uffi

Re: TXT Kamera mit OpenCV (Python)

Verfasst: 18 Jun 2023, 13:46
von jonathan
Hallo uffi,

so müsste es funktionieren:

Code: Alles auswählen

video = cv2.VideoCapture(0)
time.sleep(2)
video.set(3, 426)
video.set(4, 240)
res, frame = video.read()
 

Re: TXT Kamera mit OpenCV (Python)

Verfasst: 18 Jun 2023, 14:05
von uffi
Danke für die schnelle Antwort.
Hab den Code nun so modifiziert:

Code: Alles auswählen

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

import sys
from TouchStyle import *
import ftrobopy
import cv2
import time

class FtcGuiApplication(TouchApplication):
    def __init__(self, args):
        TouchApplication.__init__(self, args)
        # Creates an empty MainWindow
        w = TouchWindow("Test")
        txt = ftrobopy.ftrobopy('localhost', 65000)
        video = cv2.VideoCapture(0)
        time.sleep(2)		
        video.set(3, 426)
        video.set(4, 240)
        res, frame = video.read()

        text = 'OK'  
        if frame == None:
            text = 'None'
        err_msg = QLabel(text)
        err_msg.setWordWrap(True)
        err_msg.setAlignment(Qt.AlignCenter)
        w.setCentralWidget(err_msg)

        w.show()
        self.exec_()        

if __name__ == "__main__":
    FtcGuiApplication(sys.argv)
Leider wird die App sofort abgebrochen.
Kannst Du bitte mal Deinen ganzen Code posten, der läuft?

Danke, uffi

Re: TXT Kamera mit OpenCV (Python)

Verfasst: 18 Jun 2023, 14:09
von uffi
oder kann es vielleicht sein, dass die CFW 1.0.2 schon openCV version 3 nutzt?

Re: TXT Kamera mit OpenCV (Python)

Verfasst: 18 Jun 2023, 17:34
von jonathan
So funktioniert es bei mir:

Code: Alles auswählen

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

import sys
from TouchStyle import *
import ftrobopy
import cv2
import time

class FtcGuiApplication(TouchApplication):
    def __init__(self, args):
        TouchApplication.__init__(self, args)
        # Creates an empty MainWindow
        w = TouchWindow("Test")
        txt = ftrobopy.ftrobopy('localhost', 65000)
        video = cv2.VideoCapture(0)
        time.sleep(2)		
        video.set(3, 426)
        video.set(4, 240)
        res, frame = video.read()

        text = 'OK'  
        err_msg = QLabel(text)
        err_msg.setWordWrap(True)
        err_msg.setAlignment(Qt.AlignCenter)
        w.setCentralWidget(err_msg)

        w.show()
        self.exec_()        

if __name__ == "__main__":
    FtcGuiApplication(sys.argv)
 

Das Problem liegt vermutlich an der

Code: Alles auswählen

 if frame == None: 
Abfrage, welche einen Fehler zurückgibt, wenn ein Bild erfolgreich aufgenommen wurde.
Es scheint auch mit Version 1.0.2 zu funktionieren.

Re: TXT Kamera mit OpenCV (Python)

Verfasst: 18 Jun 2023, 17:59
von uffi
Danke!
Gibt Deine App laufend Kamera-Bilder auf dem Display des TXT aus?
Oder kommt nur der Screen mit "OK" in der Mitte?
Startest Du die App nur mit SSH oder auch aus dem Launcher / Gui?

Re: TXT Kamera mit OpenCV (Python)

Verfasst: 18 Jun 2023, 18:04
von jonathan
Bitte.
Nein, die App nimmt nur einmal ein Bild auf und speichert es in der Variable frame.

Re: TXT Kamera mit OpenCV (Python)

Verfasst: 18 Jun 2023, 18:05
von uffi
Startest Du die App nur mit SSH oder auch aus dem Launcher / Gui?