Flächen auf einem Bild-Stream erkennen (experimentell)
| Der Bild-Stream ist experimentell. Seine Knoten und Einstellungen können sich noch ändern. Verwenden Sie ihn zur Evaluierung, und prüfen Sie ihn mit Ihren Kameras und Ihrem Data Layer, bevor Sie sich darauf verlassen. |
detect-area durchsucht ein Bild pro Aufruf: Ihr Programm setzt input/input-image-address und
schreibt auf execute. Ein Bild-Stream funktioniert umgekehrt. Der Cam Driver veröffentlicht jedes
Bild, das er aufnimmt, auf <camera name>/control/publish/output/stream/frame, mit seiner Größe,
seinem Pixelformat und seiner Lineage (siehe das Handbuch des Cam Driver, Bilder streamen). Ein Modul
abonniert den Stream einer Kamera, erkennt die Regionen in jedem Frame, sobald er eintrifft, und
veröffentlicht ein Ergebnis pro Frame auf control/subscribe/output/stream/result. Der Stream
funktioniert auf dem ctrlX Data Layer und auf LumiScan Keryx gleich; das Konzept, das alle
LumiScan-Apps teilen, ist in Streams beschrieben. Diese Seite
beschreibt, was beim Area Detector besonders ist.
Jeder Frame wird mit den Eingaben von detect-area durchsucht, wie sie in diesem Moment sind: der
Schwellwert, die Vorverarbeitung, die Ausschnittsregion und jeder andere Knoten unter detect-area/input/.
Die eine Eingabe, die der Stream nicht verwendet, ist input/input-image-address: Der Frame tritt an
ihre Stelle. Ändern Sie eine Eingabe, während der Stream läuft, wird der nächste Frame mit dem neuen
Wert durchsucht.
Der Stream veröffentlicht nur die Messwerte. Das Label-Bild, das detect-area auf
output/blob-labels veröffentlicht, hat kein Stream-Gegenstück. blobs[].label wird weiterhin
gefüllt, aber es gibt kein Bild, in dem es sich nachschlagen ließe.
|
Jedes Ergebnis trägt die Lineage seines Frames - welche Kamera ihn aufgenommen hat, in welchem Lauf des Kamera-Streams, als welcher Frame des Laufs - ergänzt um den eigenen Schritt des Moduls. Siehe Die Lineage eines Ergebnisses.
Standardmäßig bleibt das Modul nie hinter seiner Kamera zurück. Treffen Frames schneller ein, als das Modul sie durchsucht, nimmt es jedes Mal den neuesten Frame, sobald die vorherige Suche abgeschlossen ist. Die Frames dazwischen werden als übersprungen gezählt. Wie viele Frames warten dürfen, wird mit der Warteschlangengröße festgelegt, siehe Die Warteschlangengröße.
Ein Modul nimmt den Stream einer Kamera. Für eine andere Kamera oder andere Einstellungen verwenden Sie ein anderes Modul.
Die Knoten des Streams
Jedes Modul hat die Knoten des Streams, ob es einen Stream abonniert oder nicht. Um sie zu verwenden,
ist kein Neustart nötig. Alle Adressen unten beginnen mit
hdvisionsystems/lumiscan-area-detector/<module-id>/. Sie liegen neben detect-area/, nicht darin.
| Adresse | Bedeutung |
|---|---|
|
Prüft die fünf Eingaben von |
|
Entfernt die in |
| Adresse | Typ | Bedeutung |
|---|---|---|
|
bool |
Stream-Modus: |
|
string |
Die eine Quelle: der Stream-Ordner einer Kamera, zum Beispiel
|
|
string |
Das Tag, das das Modul auf seine Ergebnisse setzt: Der Schritt des Moduls in der Lineage jedes
Ergebnisses trägt es, sodass jeder, der ein Ergebnis weiter unten in der Kette liest, sieht, welches
Modul es erzeugt hat. Leer: die Modul-ID, das letzte Segment der Moduladresse, zum Beispiel
|
|
uint32 |
Wie viele Frames warten dürfen, während ein Frame durchsucht wird: |
|
bool |
|
Die Eingaben beginnen mit dem, was beim Start der Anwendung angewendet ist; ein Client kann also eine davon ändern und ausführen.
Was die Quelle enthalten muss: Lesen Sie
hdvisionsystems/lumiscan-area-detector/system/meta/subscription-schema, für jedes Modul gleich. Es
ist ein JSON Schema des Knotens frame der Quelle, ein stream_image mit seiner lineage und seinem
image, in seiner JSON-Form. Siehe
Data-Layer-Referenz.
| Adresse | Typ | Bedeutung |
|---|---|---|
|
string |
Die zu entfernende Quelle: die Adresse, die |
| Adresse | Typ | Bedeutung |
|---|---|---|
|
wie die Eingaben |
Was |
|
string |
Der Hash dessen, womit die Ergebnisse erzeugt werden, als 16 Hexadezimalziffern. Schreibgeschützt. Siehe Der Einstellungs-Hash. |
| Adresse | Typ | Bedeutung |
|---|---|---|
|
bool |
|
|
flatbuffers |
Die in jedem Frame gefundenen Regionen und die Lineage des Frames. Abonnieren Sie den Knoten, um jedes Ergebnis zu erhalten. Siehe Das Ergebnis eines Frames. |
|
string |
Warum der letzte Frame, der nicht durchsucht werden konnte, fehlgeschlagen ist. Nennt die Quelle über ihre Adresse, siehe Das Ergebnis eines Frames. Wird beim Start des Streams geleert. |
|
uint64 |
Zähler des aktuellen oder des letzten Streams, siehe Die Statistik lesen. |
Der Stream veröffentlicht seine Ergebnisse auf control/subscribe/output/stream/result. Von den Knoten
von detect-area schreibt er nur detect-area/output/result, und nur mit eingeschaltetem
keep-latest-output: output/blob-labels, status-code und status-text behalten, was der letzte
Aufruf der Methode dort hinterlassen hat.
Einrichten
-
Stellen Sie sicher, dass der Stream des Cam Driver läuft: Sein
hdvisionsystems/lumiscan-cam-driver/<camera name>/control/publish/output/stream/activeisttrue. -
Setzen Sie die Eingaben von
detect-areawie für eine einzelne Erkennung, siehe Flächen erkennen. Ein Aufruf vondetect-area/executeauf demoutput/imageder Kamera ist ein schneller Weg, sie zu prüfen. -
Schreiben Sie den Stream-Ordner der Kamera, zum Beispiel
hdvisionsystems/lumiscan-cam-driver/camera1/control/publish/output/stream, aufcontrol/subscribe/input/address. Lassen Siecontrol/subscribe/input/tagleer, um die Ergebnisse mit der Modul-ID zu markieren, oder schreiben Sie ein eigenes Tag darauf. -
Abonnieren Sie
control/subscribe/output/stream/result. -
Setzen Sie
control/subscribe/input/enableauftrue, und schreiben Sie dann aufcontrol/subscribe/execute. Warten Sie, biscontrol/subscribe/output/stream/activetrueist. Ab dann treffen die Ergebnisse ein. -
Zum Stoppen setzen Sie
control/subscribe/input/enableauffalseund schreiben erneut aufcontrol/subscribe/execute. Der gerade durchsuchte Frame wird zuerst abgeschlossen.
Auf ctrlX OS verwenden Sie für diese Schritte die Data-Layer-Ansicht der ctrlX OS-Weboberfläche oder Ihr SPS-Programm.
Auf einem PC dieselben Schritte mit krxclient, dem Kommandozeilen-Client von LumiScan Keryx, der die Rolle
einer SPS übernimmt (siehe Werkzeuge). Ergänzen Sie die Optionen
--keryx-backend und --keryx-url, die Ihr Broker benötigt:
krxclient write hdvisionsystems/lumiscan-area-detector/module-1/control/subscribe/input/address hdvisionsystems/lumiscan-cam-driver/camera1/control/publish/output/stream
krxclient write hdvisionsystems/lumiscan-area-detector/module-1/control/subscribe/input/enable true
krxclient execute hdvisionsystems/lumiscan-area-detector/module-1/control/subscribe/execute
krxclient subscribe hdvisionsystems/lumiscan-area-detector/module-1/control/subscribe/output/stream/result --count 5
krxclient subscribe zeigt einen Flatbuffer nur über seine Größe an. Es sagt Ihnen, dass Ergebnisse
eintreffen, nicht, was sie enthalten.
Gut zu wissen:
-
Der Stream-Modus ist ein Pegel, kein Befehl: Der Stream läuft, solange das angewendete
enabletrueist. -
Der Stream kann vor dem Stream des Cam Driver gestartet werden. Ergebnisse treffen ein, sobald Frames eintreffen.
-
Was
control/subscribe/executeanwendet, wird in der Einstellungsdatei des Moduls gespeichert. Nach einem Neustart der Anwendung startet das Modul, wie es war: Eines, das gestreamt hat, streamt sofort wieder, ohne dass Ihr Programm etwas ausführt. Siehe In der Einstellungsdatei erhalten.
Die Quelle ändern
Ein Modul nimmt eine Quelle. Eine SPS oder ein anderer Client ändert sie, während die Anwendung läuft, mit oder ohne laufenden Stream:
-
Schreiben Sie die neuen Werte auf die Eingaben von
control/subscribe- nur die, die Sie ändern: Die anderen enthalten, was angewendet ist. -
Schreiben Sie auf
control/subscribe/execute. Die Eingaben werden gemeinsam geprüft, in der Einstellungsdatei des Moduls gespeichert und erst dann angewendet:setting/stream/zeigt sie sofort, und ein laufender Stream folgt mit seinem nächsten Zyklus. Eine andere Adresse ersetzt die Quelle; die Frames, die bei der alten warteten, werden als übersprungen gezählt. Ein neues Tag, eine neue Warteschlangengröße oder ein neueskeep-latest-outputbraucht kein neues Abonnement: Ein neues Tag markiert das nächste Ergebnis. -
Um die Quelle zu entfernen, schreiben Sie ihre Adresse auf
control/unsubscribe/input/addressund dann aufcontrol/unsubscribe/execute. Damit endet der Stream-Modus. Die Eingaben voncontrol/subscribewerden auf das gesetzt, was angewendet wurde: Stream-Modus aus, keine Adresse. Das Tag bleibt: Es markiert die Ergebnisse des Moduls, nicht die Quelle.
Kann die Einstellungsdatei nicht geschrieben werden, ändert sich nichts. Siehe In der Einstellungsdatei erhalten.
Die Methoden antworten mit einem Ergebnis des Data Layer. Sein Name unterscheidet sich zwischen den beiden Data Layern, siehe Ergebnisse eines Methodenaufrufs:
| ctrlX OS | PC (LumiScan Keryx) | Wann |
|---|---|---|
|
|
Erledigt. |
|
|
|
|
|
Die Einstellungsdatei konnte nicht geschrieben werden, zum Beispiel weil sie kein gültiges JSON ist. Nichts wurde geändert. |
Diese Methoden haben keinen status-text. Der Grund für eine Ablehnung wird in das Protokoll der
Anwendung geschrieben.
Kann die Quelle nicht abonniert werden, versucht es das Modul alle 5 Sekunden erneut, solange der Stream läuft, und protokolliert den ersten Fehlschlag.
Das Ergebnis eines Frames
control/subscribe/output/stream/result enthält eine FlatBuffers-Tabelle vom Typ stream_areas
(Datei-Identifier HSAR), auf dem Data Layer registriert als
types/hdvisionsystems/lumiscan-area-detector/stream_areas. Ihr kompiliertes Schema ist als
bfbs/stream_areas.bfbs installiert.
| Feld | Bedeutung |
|---|---|
|
Woher das Ergebnis kam, siehe Die Lineage eines Ergebnisses. |
|
Die Regionen, als |
Ein Lesen von control/subscribe/output/stream/result liefert das neueste Ergebnis; vor dem ersten
Frame ein leeres. Das letzte Ergebnis bleibt erhalten, nachdem der Stream gestoppt wurde.
Ein Frame wird so dekodiert, wie detect-area den Bildknoten dekodiert; es werden also dieselben
Pixelformate akzeptiert, siehe Voraussetzungen. Ein
Frame und dasselbe Bild, gelesen über input/input-image-address, ergeben dieselben Regionen.
Ein Frame, der nicht durchsucht werden kann, liefert kein Ergebnis. Er wird in
statistics/failed-frames gezählt, und control/subscribe/output/stream/last-failure sagt, warum, zum
Beispiel:
a frame of 'hdvisionsystems/lumiscan-cam-driver/camera1/control/publish/output/stream' failed: invalid input: preprocess/method 'LAPLACE' is unknown; expected NONE, LOG, DOG or DOH
Die Gründe sind dieselben, die detect-area in seinem status-text nennt: eine Eingabe, die es
ablehnen würde, eine Ausschnittsregion, die nicht in den Frame passt, eine fehlgeschlagene Erkennung.
Die Lineage eines Ergebnisses
lineage.steps listet auf, woher das Ergebnis kam, Ursprung zuerst:
-
Der Schritt der Kamera, wie der Cam Driver ihn erzeugt hat:
producerist die Adresse der Kamera,hdvisionsystems/lumiscan-cam-driver/<camera name>;run, wann der Stream der Kamera gestartet wurde;sequencedie Nummer des Frames in diesem Lauf;external_iddie eigene Frame-Nummer der Kamera;settings_hashdie Einstellungen der Kamera;tagdas Tag des Cam Driver für die Kamera, standardmäßig ihre Modul-ID, zum Beispielcamera1. -
Der Schritt des Moduls:
producerist die Adresse des Moduls,hdvisionsystems/lumiscan-area-detector/<module-id>;run, wann der Stream des Moduls gestartet wurde (jeder Start ist ein neuer Lauf);sequencedie Nummer des Ergebnisses im Lauf, ab1;settings_hashdie Einstellungen des Moduls, siehe Der Einstellungs-Hash;elapsed_usdie Mikrosekunden vom Eintreffen des Frames beim Modul bis zu seinem Ergebnis, Wartezeit eingeschlossen;time_us, wann das Ergebnis erzeugt wurde, in Mikrosekunden seit der Epoche;tagdas Tag des Moduls,control/subscribe/input/tag, oder die Modul-ID, wenn es leer ist.
Ein Ergebnis benennt seinen Frame also genau: die Kamera über producer, den Frame über run und
sequence. Um zu erfahren, von welcher Kamera ein Ergebnis kam, lesen Sie den producer seines ersten
Schritts. Eine Lücke in der sequence des Kameraschritts zwischen zwei Ergebnissen derselben Kamera
sind Frames, die übersprungen wurden, fehlgeschlagen sind oder verloren gingen.
Eine Lineage enthält höchstens 16 Schritte. Eine längere behält den Ursprung und die neuesten
Schritte, und dropped zählt die ausgelassenen Schritte.
Ein Frame ohne Lineage ergibt ein Ergebnis mit dem Schritt des Moduls allein. Ein Wert auf dem Knoten
frame eines Streams, der kein stream_image ist, wird ignoriert und einmal protokolliert.
Der Einstellungs-Hash
setting/settings-hash und der settings_hash des Modulschritts in jedem Ergebnis identifizieren,
womit die Ergebnisse erzeugt werden. Der Knoten zeigt den Hash als 16 Hexadezimalziffern; der Schritt
enthält denselben Wert als Zahl. Der Hash umfasst:
-
jede Eingabe von
detect-area, die die Erkennung liest, genau so, wie sie für den Frame gelesen wurde - alle außerinput/input-image-address; -
den Namen und die Version der Anwendung.
Keine Eingabe von detect-area nennt eine Datei, also ist keine Datei Teil des Hashs. Stream-Modus,
Quelle, Warteschlangengröße und keep-latest-output sind ebenfalls nicht Teil davon: Sie wählen und
takten die Frames, sie ändern nicht, was darin gefunden wird.
setting/settings-hash wird etwa jede halbe Sekunde aktualisiert, auch wenn der Stream aus ist. Wenn
ein Hash zum ersten Mal erscheint, schreibt das Modul die Einstellungen, für die er steht, nach
settings-history/<module-id>-<hash>.json im Konfigurationsverzeichnis der Anwendung, sodass sich
ein in einem Ergebnis gefundener Hash später nachschlagen lässt. Die Anwendung löscht diese Dateien
nicht. Eine Datei sieht so aus, gekürzt:
{
"format": 1,
"settings": {
"detect-area/input/method": "FIXED",
"detect-area/input/method-specific/fixed/level": 128.0,
"detect-area/input/preprocess/method": "NONE",
"software.name": "lumiscan-area-detector",
"software.version": "<version>"
},
"settingsHash": "<16 hex digits>"
}
Ein Ergebnis trägt nur den Hash. Ein anderer Hash sagt, dass sich etwas geändert hat, womit die
Ergebnisse erzeugt werden, nicht, was sich geändert hat. Um das herauszufinden, vergleichen Sie die
beiden Dateien in settings-history, die die Hashes benennen, von Hand.
|
Der Hash umfasst die Parameter jeder Vorverarbeitungsmethode, nicht nur der gewählten. Das Bearbeiten
von input/preprocess/dog/…, während input/preprocess/method NONE ist, ändert den Hash, aber
keine einzige Region.
Die Statistik lesen
Die Zähler beginnen bei jedem Start des Streams bei null, werden etwa viermal pro Sekunde
aktualisiert, solange er läuft, und behalten ihre letzten Werte, nachdem er gestoppt wurde. Alle
Adressen beginnen mit control/subscribe/output/stream/statistics/.
| Zähler | Bedeutung |
|---|---|
|
Millisekunden seit dem Start des Streams. Teilen Sie einen Zähler dadurch, um eine Rate zu erhalten. |
|
Frames, die das Abonnement geliefert hat. |
|
Durchsuchte Frames, jeder mit einem auf |
|
Nie durchsuchte Frames: von neueren aus der Warteschlange verdrängt, während ein Frame durchsucht wurde (siehe Die Warteschlangengröße), oder wartend, als die Quelle ersetzt oder entfernt wurde. |
|
Frames, die nicht durchsucht werden konnten. |
|
Frames, die verloren gingen, bevor sie ankamen, ermittelt aus Lücken in der |
|
Mikrosekunden, die alle Erkennungen gedauert haben, summiert, ohne die Zeit, die ein Frame auf
|
Frames, die beim Stoppen des Streams noch warten, werden verworfen, ohne gezählt zu werden.
In der Einstellungsdatei erhalten
Stream-Modus und Quelle sind Einstellungen des Moduls. Sie werden im Member stream der
Einstellungsdatei des Moduls aufbewahrt, <module-id>.json im Konfigurationsverzeichnis der
Anwendung - der Datei, in die system/save-module-inputs die Eingaben schreibt.
control/subscribe/execute und control/unsubscribe/execute speichern dort selbst, was sie anwenden,
alle fünf Werte in einem Schreibvorgang, bevor sie sie anwenden. Kann die Datei nicht geschrieben
werden, antwortet die Methode mit DL_CREATION_FAILED (auf einem PC CreationFailed), und nichts
ändert sich. Nach einem Neustart abonniert das Modul dieselbe Quelle und startet, wenn stream.enable
true ist, seinen Stream sofort: Niemand muss etwas ausführen.
Das Speichern ändert nur den Member stream; der Rest der Datei bleibt, wie er war. Das Modul legt die
Datei an, wenn es noch keine gibt - ein Modul, dessen Eingaben nie gespeichert wurden, hat keine.
system/save-module-inputs wiederum behält den Member stream, wenn es die Datei neu schreibt; die
Eingaben von control/subscribe werden nicht als Eingaben des Moduls gespeichert.
Das Konfigurationsverzeichnis ist:
| Plattform | Konfigurationsverzeichnis |
|---|---|
ctrlX OS |
|
PC (Windows) |
|
Der Member stream, neben den Eingaben von detect-area (hier gekürzt):
{
"detect-area": {
"method-specific/fixed/level": 128.0
},
"stream": {
"enable": true,
"address": "hdvisionsystems/lumiscan-cam-driver/camera1/control/publish/output/stream",
"queueSize": 1,
"keepLatestOutput": false
}
}
| Schlüssel | Erforderlich | Bedeutung |
|---|---|---|
|
Nein |
Stream-Modus: |
|
Nein |
Die eine Quelle: der Stream-Ordner einer Kamera. |
|
Nein |
Was die Ergebnisse des Moduls markiert: das |
|
Nein |
Wie viele Frames warten dürfen: |
|
Nein |
|
|
Nein |
Die Schritte, die auf jeden eintreffenden Frame angewendet werden, jeder ein Objekt mit einem |
control/subscribe/execute und control/unsubscribe/execute schreiben alle fünf.
Gut zu wissen:
-
Die Datei wird einmal gelesen, wenn das Modul beim Start der Anwendung wiederhergestellt wird: ein Modul in der gespeicherten Modulliste oder
module-1bei einer frischen Installation. Von Hand an der Datei vorgenommene Änderungen wirken beim nächsten Start. -
Ein mit
system/create-moduleangelegtes Modul beginnt mit ausgeschaltetem Stream, ohne Quelle, mit einer Warteschlangengröße von1und ausgeschaltetemkeep-latest-output, was auch immer eine Datei seines Namens enthält. Was es von da an anwendet, wird in diese Datei gespeichert. -
Um ein Modul und seinen Stream nach einem Neustart zurückzubekommen, speichern Sie auch die Modulliste, mit
system/save-current-modules. Das Speichern einer Liste, die ein Modul nicht mehr nennt, löscht die Datei dieses Moduls und damit seine Stream-Einstellungen. Siehe Modulverwaltung. -
Ein Wert, der nicht verwendet werden kann, wird ignoriert und protokolliert: ein
enableoderkeepLatestOutput, das nichttrueoderfalseist, eineaddressoder eintag, das kein String ist, einequeueSizeaußerhalb von1bis64(1wird verwendet). Stream-Modus ohneaddresswird ignoriert: Das Modul startet außerhalb des Stream-Modus. -
Der Member
subscriptionsfrüherer Versionen wird nicht mehr gelesen, und das Modul protokolliert, dass er umgezogen ist: Geben Sie die Quelle alsaddressan.
Fügen Sie <module-id>.json keine Kommentare hinzu. Der Stream liest eine Datei mit
Kommentaren, aber die Eingaben des Moduls werden dann beim Start nicht wiederhergestellt: Das Protokoll
meldet die Datei als unlesbar.
|
Die Warteschlangengröße
control/subscribe/input/queue-size legt fest, wie viele Frames warten dürfen, während ein Frame
durchsucht wird: 1 bis 64, standardmäßig 1. Sie wird als stream.queueSize gespeichert, und
setting/stream/queue-size zeigt den verwendeten Wert. Ein Frame, der eintrifft, wenn so viele
warten, verdrängt den ältesten von ihnen, was in statistics/skipped-frames gezählt wird. Eine neue
Warteschlangengröße gilt ab dem nächsten eintreffenden Frame, ohne neues Abonnement.
| Warteschlangengröße | Wirkung |
|---|---|
1 (Standard) |
Das Modul durchsucht den neuesten Frame. Es bleibt nie zurück; ist die Suche langsamer als die Kamera, überspringt es Frames. |
Mehr als 1 |
Kurze Frame-Schübe werden alle durchsucht, und weniger werden übersprungen. Ist die Suche länger langsamer als die Kamera, bleibt das Modul zurück: Es durchsucht Frames, die bis zu so viele Suchen alt sind. Jeder wartende Frame hält ein ganzes Bild im Speicher. |
Die neueste Ausgabe behalten
Mit control/subscribe/input/keep-latest-output true - angewendet durch control/subscribe/execute,
gespeichert als stream.keepLatestOutput - schreibt das Modul jedes Stream-Ergebnis zusätzlich auf
detect-area/output/result, so wie detect-area/execute es schreibt, sobald das Ergebnis auf
control/subscribe/output/stream/result veröffentlicht ist. Ein Client, der detect-area/output/result
liest, hat dann das Ergebnis des neuesten Frames, ohne den Stream zu abonnieren. output/blob-labels,
status-code und status-text werden nicht geschrieben: Sie behalten, was der letzte Aufruf von
detect-area dort hinterlassen hat. Das kostet eine Kopie jedes Ergebnisses. Standardmäßig aus.
detect-area, während der Stream läuft
Der Stream und detect-area verwenden dieselben Eingaben, und sie laufen auf einem Modul nie
gleichzeitig:
-
Ein Frame, der eintrifft, während
detect-arealäuft, wartet, bis die Methode abgeschlossen ist. Er ist verzögert, nicht fehlgeschlagen. -
Ein Aufruf von
detect-area/execute, während ein Frame durchsucht wird, antwortet mit belegt:output/status-codeist-1, der Schreibvorgang antwortet mitDL_TOO_MANY_OPERATIONS(auf einem PCTooManyOperations), und nichts wird getan.output/resultundoutput/blob-labelsbehalten ihre Werte, wie bei jedem belegten Aufruf (siehe Eine Methode ausführen). Bei einer streamenden Kamera passiert das oft. Stoppen Sie den Stream, bevor Sie die Methode aufrufen, oder rufen Sie sie erneut auf. -
system/remove-moduleantwortet ebenfalls mit belegt (-1), während ein Frame dieses Moduls durchsucht wird. Stoppen Sie zuerst den Stream. Das Entfernen eines Moduls stoppt seinen Stream. -
system/analyse-scenehat eine eigene Sperre und wird vom Stream nicht aufgehalten.
Andere Module sind nicht betroffen: Jedes Modul hat seine eigene Sperre und seinen eigenen Stream.
Einschränkungen
-
Das Label-Bild wird nicht gestreamt, siehe oben.
-
Der Stream wurde nur unter Windows mit LumiScan Keryx und mit simulierten Bildern getestet. Er wurde weder unter Linux noch auf dem ctrlX Data Layer noch mit einer echten Kamera verifiziert.
-
LumiScan Cockpit zeichnet die Ergebnisse des Streams noch nicht.
-
Von Hand an der Einstellungsdatei vorgenommene Änderungen wirken beim nächsten Start der Anwendung.
-
Der Hash umfasst jede Eingabe, die die Erkennung liest, einschließlich der Parameter nicht gewählter Vorverarbeitungsmethoden. Er ändert sich bei manchen Änderungen, die kein Ergebnis ändern.