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
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:
Ü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
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
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
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?