Teilausschnitt aus einer Variablen

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
TechCree
User
Beiträge: 2
Registriert: Dienstag 18. Januar 2022, 13:48

Hallo zusammen! Ich bräuchte mal einen Tipp, wie ich folgendes Problem lösen kann. Gleich vorab vielen Dank für eure Unterstützung!
Ein python-Script aus dem Bereich maschinelles Lernen erzeugt mir Daten erkannter Objekte. Aus dem String (detections) habe ich einen Teil bereits ausschneiden können. Dazu habe ich folgenden Code verwendet:

slice = (detections)[1:]
slice2 = (slice)
print (slice2)

Damit bekomme ich nun folgendes:
[Detection(bounding_box=Rect(left=12, top=212, right=172, bottom=326), categories=[Category(label='tv', score=0.5, index=71)])]
[Detection(bounding_box=Rect(left=14, top=210, right=177, bottom=328), categories=[Category(label='person', score=0.60546875, index=71)])]
[Detection(bounding_box=Rect(left=9, top=208, right=175, bottom=324), categories=[Category(label='cat', score=0.6484375, index=71)])]
[Detection(bounding_box=Rect(left=9, top=209, right=175, bottom=323), categories=[Category(label='tv', score=0.62890625, index=71)])]
u.s.w.

Ich benötige aber nur den Teil aus label=’...’
Kurz in dem Beispiel also: tv bzw. person, etc.
einfachTobi
User
Beiträge: 491
Registriert: Mittwoch 13. November 2019, 08:38

Es ist eher ungut zu versuchen die Infos aus den String-Repräsentationen von Objekten raus zu schnibbeln. Was enthält `detections`? Am besten greifst du einfach auf die entsprechenden Attribute zu.
ungetestet:

Code: Alles auswählen

for detectionset in detections:
    for detection in detectionset:
        for category in detection.categories:
            print(category.label)
Ggf. sind die Ergebnisse etwas mehr oder etwas weniger verschachtelt - das kann ich aus deinem Code-Bruchteil und der Ausgabe nicht so recht erahnen. Wenn du uns den Code dazu zeigst, dann lässt sich mehr sagen.
TechCree
User
Beiträge: 2
Registriert: Dienstag 18. Januar 2022, 13:48

Erstmal vielen Dank (!!!) für die rasche Antwort. Die hat mir zwar nicht die direkt Lösung gebracht. Aber ich habe dadurch erstens meinen Fehler endeckt und bin nun auch auf die Lösung gekommen. Es gibt in dieser TensorFlow Installation für den Raspberry Pi 4 drei wesentliche Scripte. detect.py, object_detector.py und utilis.py. In letzterer steckt die Lösung und nennt sich print (result_text). Super! Jetzt kann ich den nächsten Schritt angehen.

Ich will die erfassten Objekte nutzen. Erstens um die Daten via API in ein Google Sheet wegzuschreiben und zweitens um eine Aktion anzustoßen. Ich werde zunächst mit if probieren ein Objekt zu identifizieren und dann einen espeak Befehl auszulösen, wenn bspw. das bestimmte Objekt erkannt wurde. Bspw. object ist cat = espeak -vde "Katze".

Ich mache mir eine sh dazu alert_cat.sh
in die schreibe ich espeak -vde "Katze", u.s.w.

if (result_text) == "cat"
bash alertcat.sh
elif (result_text) == "dog"
bash alert_dog.sh

so etwa, dachte ich
Benutzeravatar
__blackjack__
User
Beiträge: 13003
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@TechCree: Das klingt ein bisschen kompliziert erst Shell-Skripte zu schreiben und die aufzurufen. Dazu mit Syntax die nicht Python ist. Schreib Dir eine Funktion die ``espeak`` direkt von Python aus aufruft, mit `subprocess.run()` aus der Standardbibliothek. Und bitte ohne ``shell=True`` und/oder da auch wieder eine unnötige Bash dazwischen zu schalten.

Was sollen die Klammern um `result_text`?
“Most people find the concept of programming obvious, but the doing impossible.” — Alan J. Perlis
Antworten