TXT Kamera mit OpenCV (Python)
TXT Kamera mit OpenCV (Python)
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
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
- elektrofuzzis
- Beiträge: 212
- Registriert: 25 Jun 2016, 09:40
Re: TXT Kamera mit OpenCV (Python)
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():
2. Lade das Bild mit der Pillow-Bibliothek
Dazu musst du zuerst Pillow via pip installieren
Danach kannst du so dein Bild laden:
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
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")
Dazu musst du zuerst Pillow via pip installieren
Code: Alles auswählen
pip install Pillow
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)
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
Jedoch erhalte ich bei beiden Möglichkeiten den Fehler:
TypeError: a Bytes-like object is required, not ‘list‘
Gruß
Jonathan
- elektrofuzzis
- Beiträge: 212
- Registriert: 25 Jun 2016, 09:40
Re: TXT Kamera mit OpenCV (Python)
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
Ich sehe was du meinst.
Füge mal diese Zeile vor den Versuchen ein:
Code: Alles auswählen
frame = bytearray(frame)
Gruß
Christian
Re: TXT Kamera mit OpenCV (Python)
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
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)
Eigentlich sollte das mit cv2 funktionieren:
(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.
Code: Alles auswählen
cam = cv2.VideoCapture(0)
time.sleep(2)
res, pic = cam.read()
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)
Wenn ich diesen Code ausführe wird auf dem TXT None angezeigt:
Das müsste doch heißen, dass kein Bild zurückgegeben wird, oder?
Ich verwende die aktuellste Version 0.9.6.
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)
Ich verwende die aktuellste Version 0.9.6.
Re: TXT Kamera mit OpenCV (Python)
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)
Hab’s jetzt gelöst und ich erhalte ein Bild
Das Problem war die zu hohe Auflösung die den Timeout ausgelöst hat
Das Problem war die zu hohe Auflösung die den Timeout ausgelöst hat
Re: TXT Kamera mit OpenCV (Python)
und wie hast Du auf die niedrigere Auflösung der Kamera umgeschaltet? Danke und Gruß, uffi
Re: TXT Kamera mit OpenCV (Python)
Hallo uffi,
ich habe die Auflösung des Bildes mit
umgestellt.
ich habe die Auflösung des Bildes mit
Code: Alles auswählen
cam.set(3, 426)
cam.set(4, 240)
Re: TXT Kamera mit OpenCV (Python)
Hallo jonathan,
danke für Deine schnelle und präzise Antwort, die mir weiterhilft.
Danke und Gruß, uffi
danke für Deine schnelle und präzise Antwort, die mir weiterhilft.
Danke und Gruß, uffi
Re: TXT Kamera mit OpenCV (Python)
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:
Kannst Du bitte mal Deinen Code posten, der bei Dir läuft?
Danke, uffi
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)
Danke, uffi
Re: TXT Kamera mit OpenCV (Python)
Hallo uffi,
so müsste es funktionieren:
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)
Danke für die schnelle Antwort.
Hab den Code nun so modifiziert:
Leider wird die App sofort abgebrochen.
Kannst Du bitte mal Deinen ganzen Code posten, der läuft?
Danke, uffi
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)
Kannst Du bitte mal Deinen ganzen Code posten, der läuft?
Danke, uffi
Re: TXT Kamera mit OpenCV (Python)
oder kann es vielleicht sein, dass die CFW 1.0.2 schon openCV version 3 nutzt?
Re: TXT Kamera mit OpenCV (Python)
So funktioniert es bei mir:
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.
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:
Es scheint auch mit Version 1.0.2 zu funktionieren.
Re: TXT Kamera mit OpenCV (Python)
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?
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?
Zuletzt geändert von uffi am 18 Jun 2023, 18:04, insgesamt 1-mal geändert.
Re: TXT Kamera mit OpenCV (Python)
Bitte.
Nein, die App nimmt nur einmal ein Bild auf und speichert es in der Variable frame.
Nein, die App nimmt nur einmal ein Bild auf und speichert es in der Variable frame.
Re: TXT Kamera mit OpenCV (Python)
Startest Du die App nur mit SSH oder auch aus dem Launcher / Gui?