Seite 1 von 2

ftrobopy: getCameraFrame() funktioniert nicht

Verfasst: 14 Nov 2019, 11:26
von DaGro
Hallo,
Ich habe vor kurzem angefangen mit ftrobopy und der CFW ein paar Sachen auszuprobieren.
Aber wenn ich versuche die Kamera von Fischertechnik (Die ältere aus dem Discovery Set) zu nutzen funktioniert es nicht.
Ich habe es auch mit SimpleCameraDemo.py versucht, aber das Programm speichert kein Bild ab.
Wenn ich es über ssh ausführe und irgendwann (ca. 5 min später) mit Strg-C abbreche hängt das Programm immer bei txt.getCameraFrame() fest.
Ich habe es schon mit mehreren cfw-versionen ausprobiert (0.9.3-0.9.5) doch das Problem bleibt das gleiche.

Versionen: Ft 4.6.6; ftrobopy v0.98

Schon mal danke im Voraus für evtl. Lösungen
Grüße Daniel

Re: ftrobopy: getCameraFrame() funktioniert nicht

Verfasst: 14 Nov 2019, 11:41
von DaGro
Hallo,
Ich habe gerade mein ftrobopy auf 1.80 upgedated und es noch einmal versucht.
Der TXT speichert zwar jetzt ein Bild ab, die Datei ist aber nur 0 Bytes groß.
Grüße Daniel

Re: ftrobopy: getCameraFrame() funktioniert nicht

Verfasst: 22 Nov 2019, 19:18
von DaGro
Hallo,
Ich habe mal noch ausprobiert, die Kamera nicht über ftrobopy, sondern direkt über die opencv Methode VideoCapture() angesteuert und wenn ich das ausführe bekomme ich als Rückmeldung nur einen "Select timout" als error zurück. In anderen Foren wird bei diesem Error meist darauf hingewiesen, dass die Kamera kaputt ist, aber wenn ich das Programm nicht auf dem TXT, sondern auf meinem PC mit der Kamera am USB-Port ausführe, funktioniert es.
Kann es sein, dass das zurzeit ein allgemeiner Bug in der CFW ist, oder funktioniert es bei anderen und mein TXT will nicht?
Danke schon mal im voraus für eure Rückmeldungen.
Grüße Daniel

Re: ftrobopy: getCameraFrame() funktioniert nicht

Verfasst: 23 Nov 2019, 09:29
von jona2004
Hallo Daniel,
Vielleicht erklärt dieser Thread (etwa ab der Mitte) das Verhalten.
viewtopic.php?f=33&t=5551&p=40946&hilit=camera#p40921
Falls es mit dem Link nicht klappt der Titel ist "USB Kamera funktioniert nicht".
Grüsse Joachim

Re: ftrobopy: getCameraFrame() funktioniert nicht

Verfasst: 24 Nov 2019, 17:13
von DaGro
Hallo Joachim,
Danke für deine Antwort und den Hinweis, ich hatte in diesem Thread auch schon mal nachgefragt, aber dann doch ein neues Thema geöffnet, da es bei mir auch mit dem alten OpenCV nicht funktionierte und ich so den OpenCV-Bug nicht für schuldig halte. Auserdem denke ich, dass ftrobopy, das Bild nicht skaliert (oder irre ich da?).
Grüße Daniel

Re: ftrobopy: getCameraFrame() funktioniert nicht

Verfasst: 28 Nov 2019, 14:48
von DaGro
Hallo,
Ich habe jetzt zumindest einen Teil des Problems gelöst bekommen, indem ich das Programm per ssh ausgeführt habe, während mein TXT die ft-GUI geöffnet hat. Ist das normal, dass man nur in der ft-gui auf die Kamera zugreifen kann? Wenn ja, wäre es cool, wenn das irgendwie im Manual von ftrobopy vermerkt wird, dann muss dass nicht jeder selbst herausfinden. Oder stand das irgendwo und ich habe es nur überlesen?
Gibt es auch eine Möglichkeit, direkt in der CFW Bilder aufzunehmen, denn ich will das Programm ja nicht immer über ssh starten müssen?
Danke für euren Einsatz. Die CFW ist wirklich cool!
Grüße, Daniel

Re: ftrobopy: getCameraFrame() funktioniert nicht

Verfasst: 28 Nov 2019, 15:55
von Kali-Mero
DaGro hat geschrieben:
28 Nov 2019, 14:48
Gibt es auch eine Möglichkeit, direkt in der CFW Bilder aufzunehmen, denn ich will das Programm ja nicht immer über ssh starten müssen?
Meines Wissens kannst Du mit "TXT-Show" Bilder aufnehmen. Du findest es im App-Store.

Grüßle
Der Kali

Re: ftrobopy: getCameraFrame() funktioniert nicht

Verfasst: 29 Nov 2019, 14:21
von Torsten
Hallo Daniel,
DaGro hat geschrieben:
28 Nov 2019, 14:48
Ist das normal, dass man nur in der ft-gui auf die Kamera zugreifen kann?
ja, das ist richtig. Die Camera-Funktionen von ftrobopy funktionieren in der CFW nur, wenn die ftGUI aktiviert wurde.
DaGro hat geschrieben:
28 Nov 2019, 14:48
Wenn ja, wäre es cool, wenn das irgendwie im Manual von ftrobopy vermerkt wird, dann muss dass nicht jeder selbst herausfinden. Oder stand das irgendwo und ich habe es nur überlesen?
Danke für die Anregung, ich werde das ftrobopy-Manual entsprechend ergänzen.

Viele Grüße
Torsten

Re: ftrobopy: getCameraFrame() funktioniert nicht

Verfasst: 29 Nov 2019, 15:46
von DaGro
Hallo,
Danke für eure Antworten.
Torsten hat geschrieben:
29 Nov 2019, 14:21
DaGro hat geschrieben:
28 Nov 2019, 14:48
Ist das normal, dass man nur in der ft-gui auf die Kamera zugreifen kann?
ja, das ist richtig. Die Camera-Funktionen von ftrobopy funktionieren in der CFW nur, wenn die ftGUI aktiviert wurde.
Funktionieren die Kamerafunktionena nur während der Nutzung der ft-GUI oder geht das auch, wenn man die ft-GUI wieder geschlossen hat?
Gibt es sonst noch irgendwelche anderen Möglichkeiten innerhalb eines Programms Bilder aufzunehmen? TXTShow bringt mir leider nichts, da ich die Bilder während des Programmausführens aufnehmen will um sie dann zu verarbeiten.
Danke im Voraus,
Daniel

Re: ftrobopy: getCameraFrame() funktioniert nicht

Verfasst: 29 Nov 2019, 16:51
von Torsten
Hallo Daniel,
DaGro hat geschrieben:
28 Nov 2019, 14:48
Funktionieren die Kamerafunktionen nur während der Nutzung der ft-GUI oder geht das auch, wenn man die ft-GUI wieder geschlossen hat?
die ft-GUI muss die ganze Zeit laufen.
DaGro hat geschrieben:
28 Nov 2019, 14:48
Gibt es sonst noch irgendwelche anderen Möglichkeiten innerhalb eines Programms Bilder aufzunehmen? TXTShow bringt mir leider nichts, da ich die Bilder während des Programmausführens aufnehmen will um sie dann zu verarbeiten.
In der ft:pedia Ausgabe 2016-1 ( https://www.ftcommunity.de/ftpedia_ausg ... 2016-1.pdf ), ab Seite 69, gibt es einen recht ausführlichen Artikel über die Ansteuerung der ft-Camera. Der Artikel entstand zwar in einer Zeit, als es die CFW noch nicht gab und bezieht sich auf die original fischertechnik FW, vieles ist jedoch übertragbar. Insbesondere das Auslesen des Camera-Bildes (in Auflösungen bis 1280x720) über die ftrobopytools.so ist dort beschrieben (als Beispiel für die Anwendung siehe ftDigiCam.py). Beachte: bei Verwendung der ftrobopytools.so unter der CFW darf die ft-GUI nicht laufen !

Viele Grüße
Torsten

Re: ftrobopy: getCameraFrame() funktioniert nicht

Verfasst: 30 Nov 2019, 14:49
von DaGro
Hallo Torsten,
Danke für deine Antwort, das erklärt einiges :)
Ich habe jetzt mal ein bisschen rumprobiert und die beiden Dateien ftrobopytools.c und ftrobopytools.so in das Verzeichnis meiner App kopiert. Wenn ich folgendes Programm ausführe:

Code: Alles auswählen

from __future__ import print_function

import ftrobopy
import ftrobopytools

txt = ftrobopy.ftrobopy('auto')

try:
    high_fps = 5
    high_width = 1280
    high_height = 720
    videv = ftrobopytools.camInit(high_fps, high_width, high_height, 0, 0)
    jpg = ftrobopytools.getJPEGImage(videv)
    ftrobopytools.camClose(videv, 0)
    with open('PIC.jpg', 'wb') as f:
        f.write(jpg)
except ftrobopytools as error:
    print(error)

finally:
    ftrobopytools.camClose(videv, 0)
bekomme ich allerdings folgende Fehlermeldung:

Code: Alles auswählen

Traceback (most recent call last):
  File "Ledtest.py", line 4, in <module>
    import ftrobopytools
ImportError: /home/ftc/apps/d01b7ab0-00d4-11ea-aaef-0800200c9a66/ftrobopytools.so: undefined symbol: Py_InitModule4
Wo in meinem Programm liegt der Fehler? Ich kenne mich mit Python nicht aus, es kann also auch irgendein Anfängerfehler sein.
Danke für eure Hilfe,
Daniel

Re: ftrobopy: getCameraFrame() funktioniert nicht

Verfasst: 30 Nov 2019, 17:35
von Torsten
Hallo Daniel,

die ftrobopytools.so, die in dem Paket enthalten ist, habe ich für Python2.7 compiliert (das war 2016 noch üblich). Du könntest die Python2-Version der CFW verwenden oder alternativ könntest Du die ftrobopytools.c Datei auch selbst für Python3 übersetzen.

Ich selbst verwende meistens noch Python2, weil der Python2-Interpreter deutlich kleiner ist als der von Python3. Da der Python2-Support aber zum Ende des Jahres offiziell ausläuft, werde ich selbst wohl auch bald vollständig zu Python3 wechseln 🙂

Falls Du Probleme mit dem Compilieren hast, sag' Bescheid, dann lade ich noch eine ftrobopytools.so für Python3 hoch.

Viele Grüße
Torsten

Re: ftrobopy: getCameraFrame() funktioniert nicht

Verfasst: 01 Dez 2019, 16:08
von DaGro
Hallo Torsten,
Danke für deine Antwort. Ich habe gerade probiert die ftrobopytools zu kompilieren.
Allerdings bekomme ich folgenden Error:

Code: Alles auswählen

gcc -shared -o ftrobopytools.so -fpic ftrobopytools.c
ftrobopytools.c:1:10: fatal error: Python.h: No such file or directory
 #include <Python.h>
          ^~~~~~~~~~
compilation terminated.
Wo finde ich die Datei Python.h? Noch besser wäre es natürlich, wenn du das Kompilieren übernehmen würdest, vorausgesetzt das ist kein zu großer Aufwand.
Vielen Dank,
Daniel

Re: ftrobopy: getCameraFrame() funktioniert nicht

Verfasst: 01 Dez 2019, 23:16
von vleeuwen

Re: ftrobopy: getCameraFrame() funktioniert nicht

Verfasst: 02 Dez 2019, 14:32
von DaGro
Hallo,
Ich habe es jetzt geschafft die ftrobopytools zu kompilieren (dank vleeuwen und stackoverflow :D )
Allerdings bekomme ich jetzt beim Ausführen folgenden Fehler:

Code: Alles auswählen

Traceback (most recent call last):
  File "Ledtest.py", line 4, in <module>
    import ftrobopytools
ImportError: /home/ftc/apps/d01b7ab0-00d4-11ea-aaef-0800200c9a66/ftrobopytools.so: wrong ELF class: ELFCLASS64
Was bedeutet das?
Danke, dass ihr euch soviel Mühe macht.
Grüße Daniel

Re: ftrobopy: getCameraFrame() funktioniert nicht

Verfasst: 02 Dez 2019, 15:42
von richard.kunze
Nach Deiner Kommandozeile für den GCC zu schließen hast Du ftrobopytools für Deinen PC übersetzt - d.h. für ein 64-Bit-x86-System. Die Fehlermeldung die Du bekommst zeigt die Hälfte davon (64Bit statt 32Bit) auch an - allerdings wirst Du mit einem für x86 übersetzen Programm auf dem TXT (der hat einen ARM-Prozessor) generell nicht glücklich.

Re: ftrobopy: getCameraFrame() funktioniert nicht

Verfasst: 02 Dez 2019, 16:03
von DaGro
Hallo,
Ich habe ftrobopytools mit folgendem Befehl kompiliert:

Code: Alles auswählen

gcc -shared -o ftrobopytools.so -fPIC ftrobopytools.c
was müsste ich an dem Befehl ändern um eine 32-Bit Verison zu bekommen?
Laut geeksforgeeks müsst man also folgenden Befehl ausführen:

Code: Alles auswählen

gcc -shared -o ftrobopytools.so -fPIC -m32 ftrobopytools.c
Allerdings bekomme ich dann folgenden error:

Code: Alles auswählen

In file included from /usr/include/python3.6/Python.h:8:0,
                 from ftrobopytools.c:1:
/usr/include/python3.6/pyconfig.h:7:12: fatal error: i386-linux-gnu/python3.6m/pyconfig.h: No such file or directory
 #  include <i386-linux-gnu/python3.6m/pyconfig.h>
            ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
compilation terminated.
Was bedeutet das?
Danke für eure Hilfe,
Daniel Großmann

Re: ftrobopy: getCameraFrame() funktioniert nicht

Verfasst: 02 Dez 2019, 16:29
von Torsten
Hallo Daniel,

ich verwende normalerweise die fischertechnik toolchain (installiert unter Ubuntu Linux) zum cross-compilieren von Programmen für den TXT.
Hier ist eine sehr ausführliche Kommandozeilenversion (nicht alles ist unbedingt genauso notwendig), die bei mir aber funktioniert.

Code: Alles auswählen

# cross compiling ftrobopytools or other c/c++ programs with fischertechnik TXT toolchain
/home/stuehn/software/ft_TXT_toolchain/output/host/usr/bin/arm-linux-gnueabihf-gcc -fno-strict-aliasing -Wsign-compare -Wunreachable-code -DNDEBUG -g -O3 -Wall -Wstrict-prototypes -fno-strict-aliasing -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64 -pipe -Os -DNDEBUG -O3 -Wall -Wstrict-prototypes -DPY_FORMAT_LONG_LONG= -fPIC -I/home/stuehn/software/local/include -I/home/stuehn/software/local/include/python3.5m -I/home/stuehn/software/ft_TXT_toolchain/output/host/usr/include/python2.7 -I/home/stuehn/software/SDL-1.2.15/include -c ftrobopytools.c -o ftrobopytools3.o

# linking the object code
/home/stuehn/software/ft_TXT_toolchain/output/host/usr/bin/arm-linux-gnueabihf-gcc -shared -L/home/stuehn/software/local/lib -L./software/ft_TXT_toolchain/output/target/usr/lib -lSDL ftrobopytools3.o -o ftrobopytools3.so
Viele Grüße
Torsten

Edit: Sorry, ein paar Optionen sind wohl beim Copy-and-Paste doppelt in der Zeile gelandet ... schadet aber nix :D

Re: ftrobopy: getCameraFrame() funktioniert nicht

Verfasst: 02 Dez 2019, 18:44
von DaGro
Hallo Torsten,
Wo finde ich diese Toolchain? Ist das das C-Compiler-Programmierpaket beim Tx?
Da ich mich mit C kaum auskenne, wie nutzt man diese Toolchain?
Da ich ansonsten kein C programmiere würde ich mich freuen, wenn du, falls du ftrobopytools sowieso schon einmal für python3 kompiliert hast oder das für dich kein großer Aufwand ist, mir die kompilierte Version zukommen lassen kannst, das wird wahrscheinlich weniger Aufwand sein als mir jede Einzelheit beim Kompilieren zu erklären :D
Danke, dass ihr euch die Zeit nehmt, mir das zu erklären.
Grüße Daniel

Re: ftrobopy: getCameraFrame() funktioniert nicht !!Gelöst!!

Verfasst: 03 Dez 2019, 19:52
von DaGro
Hallo,
Das Problem ist gelöst, da Torsten so nett war und mir die kompilierte Datei geschickt hat (Vielen Dank). Jetzt funktioniert alles.
Frohe Weihnachten
Daniel