ML PoC für die Analyse der aquatischen Umwelt
Itransition lieferte eine PoC-Lösung für die Planktonerkennung und -klassifizierung und bewies damit die Machbarkeit des vorgeschlagenen ML-Ansatzes.
Inhaltsverzeichnis
Kontext
Unser Kunde ist ein in den USA ansässiges Unternehmen, das von einer Gruppe von Wissenschaftlern und Ingenieuren gegründet wurde, um fortschrittliche Unterwassermess- und -beobachtungssysteme zu entwickeln und zu bauen, die auch in den schwierigsten Meeresumgebungen eingesetzt werden können. In dem Bestreben, das Wissen über die aquatische Umwelt unseres Planeten zu erweitern, haben sie integrierte Messplattformen gebaut, um alle Arten von physikalischen und chemischen Parametern in Echtzeit zu beobachten. Anhand dieser Daten erhalten Wissenschaftler und Unternehmen aus verschiedenen Branchen ein besseres Verständnis der komplexen Abhängigkeiten in Ökosystemen und können fundierte Entscheidungen treffen.
Eines der Probleme, mit denen sich der Kunde befasst, ist das Verständnis der Planktonzusammensetzung im Meerwasser durch die Erfassung von Daten über die Menge und Art des Planktons. Die Erkennung, Extraktion und Klassifizierung erfolgte auf der Grundlage eines überwachten Lernmodells unter Verwendung von Faltungsneuronalen Netzen (CNN). Die Aktivitäten erfolgten in Echtzeit auf ihrem eingebetteten NVIDIA Jetson KI-Computer, der mit einer Bildverarbeitungskamera gekoppelt ist. Die von ihnen selbst entwickelte, auf C++ basierende Software zur Erkennung von Plankton begrenzte die Bildverarbeitungsgeschwindigkeit auf 8-10 FPS, obwohl die maximal mögliche Geschwindigkeit der Kamera 30 FPS betrug. Daher war die Genauigkeit der Planktonerkennung, die für das Unternehmen wichtig ist, nicht zufriedenstellend, da das System ältere Versionen von CNN-Algorithmen verwendete.
Angesichts der Herausforderungen, mit denen der Kunde konfrontiert war, wollte er die folgenden Änderungen vornehmen:
- Verbesserung oder Neugestaltung des Erkennungs- und Klassifizierungsansatzes, um den Anforderungen der Hardware gerecht zu werden, die volle Kompatibilität der App mit dem Computer und der Kamera zu gewährleisten und die Geschwindigkeit der Bildverarbeitung an die Geschwindigkeit der Kamera anzupassen
- Die Möglichkeiten der Hardware voll ausschöpfen und die Genauigkeit der Erkennungs- und Klassifizierungsprozesse verbessern
Der Kunde war auf der Suche nach einem vertrauenswürdigen und kompetenten Partner, der das Projekt in Angriff nehmen und eine robuste Lösung zur Verbesserung der digitalen Leistung des Unternehmens liefern würde. Schließlich wandte er sich an Itransition, da wir uns aufgrund unserer starken ML-Beratungskompetenz und unserer Erfahrung mit der Lösung ähnlicher Herausforderungen als die richtige Wahl erwiesen.
Lösung
Analytik
Auf der Grundlage der zur Verfügung gestellten Dokumentation und der Codedatei kamen unsere Experten zu dem Schluss, dass es zwei mögliche Wege gibt, das Ziel des Kunden zu erreichen:
- Verbesserung der bestehenden Lösung
- Einen effizienteren Ansatz finden und eine neue Lösung von Grund auf entwickeln
Was die Verbesserung der aktuellen Lösung betrifft, haben unsere Experten eine Liste von Empfehlungen zur Beschleunigung des Codes und der Ausführung der Algorithmen erstellt. Dennoch entschieden wir und der Kunde schließlich, dass die Entwicklung eines völlig neuen Systems mit einer neuen Architektur und einem ausgewählten Technologiepaket eine viel schnellere und leichter zu wartende Option war. Sie würde auch die folgenden positiven Veränderungen mit sich bringen:
- Die meisten Operationen werden im Arbeitsspeicher der Lösung ausgeführt, anstatt mit Dateien zu arbeiten, was die Ausführungszeit reduziert und die Leistung der Lösung beschleunigt
- Multi-Thread-Verarbeitung ermöglichen (d.h. Aufteilung jedes Prozesses in separate Threads, die unabhängig von anderen Funktionen arbeiten), was die Ausführungszeit ebenfalls beschleunigen würde
- Anwendung moderner ML-Algorithmen zur Verbesserung der Genauigkeit des Erkennungs- und Klassifizierungsprozesses des Kunden
Neue Lösungsvision und Untersuchung
Nach dem vorgeschlagenen Ansatz erkennt die Lösung Objekte in Bildern mithilfe des YOLO-Objekterkennungssystems. Dann wird das EfficientNet CNN auf die erhaltenen Ergebnisse angewandt und ein Vektor für jedes erkannte Objekt erstellt. Anschließend vergleicht die Lösung die erstellten Vektoren der erkannten Objekte mit den Referenzvektoren, wobei der Faiss- oder Annoy-Algorithmus zum Einsatz kommt, und wählt auf der Grundlage des geringsten Abstands zwischen ihnen aus.
Wir haben uns für Python als Hauptprogrammiersprache entschieden, weil es populär ist und sich im Vergleich zu dem früher verwendeten C++ schneller und einfacher entwickeln lässt, wobei es dennoch vergleichbare Leistungsergebnisse liefern würde.
Für das Training der Erkennungs- und Klassifizierungsmodelle zogen wir Tensorflow, PyTorch und Darknet in Betracht, ein in C und CUDA geschriebenes Open-Source-Framework für neuronale Netzwerke. Zunächst wollten wir die Einheitlichkeit der genutzten Bibliotheken sicherstellen und Tensorflow für beide Fälle verwenden, zumal Darknet leicht in Tensorflow konvertiert werden kann. Dies würde die Konsistenz der Modelltypen sicherstellen, da die Verwendung eines einzigen Frameworks mögliche Risiken reduziert. Sowohl Tensorflow als auch Darknet können mit der Jetson-CPU arbeiten, aber den maximalen Leistungsschub erhält man, wenn sie mit der GPU des Geräts arbeiten.
Nachdem wir die Frameworks jedoch auf dem Jetson-Modul des Kunden getestet hatten, stellten wir fest, dass Tensorflow aufgrund der nicht standardmäßigen ARM-Architektur des Moduls nicht richtig mit der GPU arbeiten konnte. Da es unmöglich war, das Beste aus den Fähigkeiten von Tensorflow herauszuholen, haben wir es zugunsten von Darknet für den Erkennungsprozess verworfen. Für das Training des Klassifizierungsmodells wählten wir PyTorch, da es auf dem Rechner des Kunden gut funktionierte und im Gegensatz zu Tensorflow dessen GPU-Ressourcen nutzen konnte.
Bei der Entscheidung, welchen Algorithmus wir für die Suche nach den nächsten Nachbarn (Nearest Neighbor Search, NNS) einsetzen sollten, hatten wir die Wahl zwischen Annoy und Faiss. Wir testeten beide Optionen und kamen zu dem Schluss, dass Faiss in Anbetracht der Besonderheiten des Unternehmens des Kunden und einer relativ geringen Anzahl von Werten (30+ Klassen mit 100 Bildern für jede Klasse) die bessere Lösung ist.
PoC-Entwicklung
Um den neuen Planktonerkennungsprozess zu evaluieren und die Lösung vor der Entwicklung fein abzustimmen, schlug Itransition vor, einen Proof of Concept (PoC) zu erstellen. Ein PoC hätte es uns ermöglicht, Implementierungsdetails auszuarbeiten, potenzielle Probleme zu lösen, die spezifischen technologischen Anforderungen des Kunden zu erfüllen und den am besten geeigneten technischen Ansatz und das Budget zu vereinbaren. Vor dem Beginn der PoC-Entwicklung hat der Kunde:
- Bereitstellung von zwei markierten Datensätzen für die Erkennung und Klassifizierung zur Erstellung eines Vektorisierungsreferenzmodells. Wir werden dieses Referenzmodell dann weiter verwenden, um Daten mit dem Faiss-Algorithmus zu analysieren und zu vergleichen.
- Erlaubte uns, die neue Software aus der Ferne und sicher (über SSH-Zugang) auf ihrem Rechner auszuführen, um die Zeit für die Kommunikation und den Datenaustausch zu verkürzen und die Kompatibilität der Lösung sowohl mit ihrem Computer als auch mit der Kamera sicherzustellen.
Der Hauptzweck des PoC war es, eine zufriedenstellende Interoperabilität zwischen der neuen App und der Hardware des Kunden sicherzustellen. Außerdem wollten wir die ausgewählten CNN-Algorithmen ausprobieren und feststellen, ob die von ihnen gebotene Genauigkeit ausreichend ist. Um die gesetzten Ziele der PoC-Phase zu erreichen, führte unser Team die folgenden Aktivitäten durch:
- Entwurf einer für die Hardware des Kunden geeigneten Architektur, insbesondere der Module, die die Lösung enthalten sollte, um die erwarteten Erkennungs- und Klassifizierungsprozesse durchzuführen
- Bereiten Sie Referenzdaten für das Training der Modelle vor, entfernen Sie doppelte, defekte oder unscharfe Bilder aus dem Referenzdatensatz und konvertieren Sie Bilder in ein einheitliches Format für die Frameworks
- Implementieren von Lösungsmodulen und Installieren neuer Software auf dem Rechner des Kunden
- Einrichten einer Kameraverbindung mit der PyCapture-Bibliothek und Aktivieren der Lösung, um Bilder von ihr zu erhalten und im RAM zu speichern
- Prüfen und aktivieren Sie die Ausführung der neuen Software auf der GPU des Kundenrechners
- Trainieren des YOLO CNN mit Darknet für die Planktonerkennung auf der Grundlage von etwa 1500 Bildern
- Trainieren Sie das EfficientNet CNN mit PyTorch, um die Bilder mit detektiertem Plankton und Merkmalsvektoren basierend auf den Referenzbildern für die Klassifizierung zu kodieren (ca. 8000 Bilder gruppiert in 30+ Klassen)
- Auswahl und Implementierung des Algorithmus zur Planktonklassifizierung auf der Grundlage des NNS-Ansatzes unter Verwendung des Faiss-Algorithmus
- Erstellung von Funktionen zum Speichern der endgültigen Planktonbilder als BMPs und Statistiken in dem vom Kunden genehmigten Format
- Testen Sie die Lösung auf der Hardware des Kunden und führen Sie die notwendigen Qualitäts- und Leistungsmessungen zur Laufzeit durch und finden Sie Wege, um die maximale Verarbeitungsgeschwindigkeit und Modellgenauigkeit im aktuellen Setup angesichts eines engen Zeitrahmens und begrenzten Budgets zu verbessern
Verfahren
Unser Projektteam bestand aus einem Projektmanager sowie Backend- und ML-Ingenieuren. Außerdem wurde ein Entwickler von der Kundenseite hinzugezogen, wenn wir bei der Arbeit mit der Maschine des Kunden Blockaden hatten. Wir hielten wöchentliche Besprechungen ab, in denen wir Entscheidungen trafen, den Kunden wöchentlich auf dem Laufenden hielten, ihn rechtzeitig über Blockierungen informierten und ihn zu Demos einluden.
Da das PoC-Entwicklungsprojekt viele Unbekannte enthielt, definierten und zerlegten wir den Projektumfang, identifizierten die wichtigsten Meilensteine und legten deren Fristen fest, um die Planung der Aktivitäten zu erleichtern und effizienter und überschaubarer zu gestalten. Vor Beginn der Entwicklung erstellten wir außerdem ein Architekturdiagramm und stimmten es mit dem Kunden ab.
Während des gesamten Projekts führten wir App-Tests auf den Geräten des Kunden durch, um sicherzustellen, dass die Module der Lösung sowohl lokal als auch auf dem Rechner des Kunden ordnungsgemäß funktionierten. Zu diesem Zweck starteten wir die Lösung, sahen uns die Protokolle an, ermittelten die Leistungskennzahlen für jedes Modul, sammelten Statistiken und nahmen bei Bedarf Änderungen und Verbesserungen vor. Zunächst testeten wir die Lösung auf unseren Systemen mit Bildern aus dem Ordner, später schlossen wir uns an die Kamera an und testeten das System mit einem Live-Videostream.
Während der PoC-Entwicklung passten wir unser Arbeitstempo an die vorgefundenen Komplexitäten an, wie z. B. die Auswahl der notwendigen Bibliotheken für die Bereitstellung der App auf dem Rechner des Kunden und die Verbindung mit der Kamera oder die Auswahl der Frameworks für das Modelltraining. Außerdem haben wir die Geschwindigkeit der verschiedenen Komponenten der Lösung gemessen, um Engpässe zu identifizieren und sie zu optimieren.
Herausforderungen
Herausforderung |
Beschreibung |
Lösung |
---|---|---|
Neue Software-Installation und Einrichtung der Umgebung auf dem Rechner des Kunden |
Um die Anwendung ausführen zu können, mussten geeignete Bibliotheken und Pakete installiert werden, da der NVIDIA Jetson eine nicht standardisierte ARM-Architektur besitzt. Bei der Installation der Bibliotheken stießen wir auf mehrere Hindernisse, da nicht alle Versionen unterstützt wurden. |
Wir recherchierten und installierten die entsprechenden Bibliotheken (Numpy und Pillow für die Verarbeitung multidimensionaler Arrays, OpenCV für die Größenänderung von Bildern usw.), die für den Rechner des Kunden geeignet waren. Wir richteten die Umgebung so ein, dass wir diese Bibliotheken nutzen konnten, da sie für die Bildverarbeitung entscheidend waren. Wir testeten verschiedene Versionen der Bibliotheken, um herauszufinden, welche Version auf dem Gerät des Kunden am besten funktioniert, und sorgten für optimale Konfigurationen der Bibliotheken und des Geräts selbst. |
Verbindung zur Kamera herstellen |
Wir mussten herausfinden, welche Bibliotheken und deren Versionen von der Kamera unterstützt werden. |
Wir recherchierten Bibliotheken und fanden die Versionen, die für die FLIR Grasshopper-Kamera und die entwickelte Lösung geeignet waren. Um Frames von der Kamera auslesen zu können, setzten wir die PyCapture-Bibliothek ein. |
Leistungsoptimierung |
Bei der Messung der erforderlichen Leistungskennzahlen haben wir mehrere Engpässe festgestellt:
|
Wir haben alternative Wege gefunden, um Bilder in ein geeignetes Format zu konvertieren und die Leistung der Lösung zu verbessern.
|
Einrichtung der Erkennung und Vektorisierung auf der GPU der Kundenmaschine |
Wir fanden heraus, dass TensorFlow die GPU schlecht ausnutzte und zu viel RAM benötigte. |
Wir entschieden uns, Darknet und PyTorch für die Erkennung und Vektorisierung zu verwenden, da sie schneller laufen und die Ressourcen besser nutzen. |
Architektonischer Aufbau |
Der verfügbare Arbeitsspeicher führte zu Einschränkungen bei den Warteschlangen der Anwendungen und erforderte einen durchdachten Entwurf der Lösungsarchitektur. |
Wir experimentierten mit der Anzahl der Warteschlangeneinheiten und deren Größe, um festzustellen, ob die Lösung ohne Einfrieren und Absturz funktionieren würde. Außerdem entwarfen wir eine Architektur, die es der Anwendung ermöglicht, die RAM-Nutzung zu optimieren. |
Erkennung und Klassifizierung
Die gelieferte Lösung umfasst die folgenden Module:
- Objekterkennung - das YOLO-Modell ermöglicht das Suchen und Finden aller Objekttypen auf einem Bild
- Vektorisierung - EfficientNet führt den Vektorisierungsprozess für alle erkannten Objekte durch
- Klassensuche (NNS) - der Faiss-Suchalgorithmus ermöglicht die Unterscheidung der ähnlichsten Vektoren zu einem gegebenen Vektor basierend auf dem Referenzdatensatz
- Statistik - Erfassung aller für die Ergebnisanalyse erforderlichen Informationen
Indexerstellung
Dieser Schritt wird vor dem Hauptklassifizierungsschritt durchgeführt, da die Lösung die Klasse des gefundenen Planktons mithilfe des Faiss-Index und der JSON-Datei während des Schritts "Klassensuche" erhält:
- Erstellung des Faiss-Index, der ID und Vektorbündel für jedes Bild aus dem Referenzdatensatz enthält.
- Erstellen einer JSON-Datei, die ID und Klassenbündel für jedes Bild aus dem Referenzdatensatz enthält.
Objekterkennung
Frames erfassen
Es gibt zwei Quellen, aus denen Bilder geholt werden können - der Ordner mit Bildern und die Kamera:
- Der Ordner mit Bildern
Das System öffnet ein Bild aus dem angegebenen Ordner und fügt es der Erkennungswarteschlange hinzu. - Der Videostrom der Kamera
Das System findet die Kamera, stellt eine Verbindung zu ihr her und bereitet sie gemäß den festgelegten Einstellungen vor. Dann beginnt die Bildaufnahme und etwa alle 100 ms (10 FPS) wird eine Callback-Funktion ausgelöst, die ein Bild im PyCapture-Bildformat empfängt. Das System konvertiert das Bild in numpy.ndarray (ein dreidimensionaler Array-Typ), um später damit arbeiten zu können, und fügt es der Erkennungswarteschlange hinzu.
Erkennung
- Entnahme eines Bildes aus der Erkennungswarteschlange und Skalierung auf 416x416 entsprechend den Anforderungen des Modells, um die Ausführungsgeschwindigkeit zu erhöhen, indem weniger RAM verwendet wird, ohne die Genauigkeit zu beeinträchtigen.
- Erkennen von Plankton auf dem komprimierten Bild und Abrufen einer Liste von Bounding-Box-Werten, die die Position des gefundenen Objekts angeben (x- und y-Koordinaten des Zentrums, Breite und Höhe).
- Hinzufügen der Bilder mit dem gefundenen Plankton in die Vektorisierungswarteschlange.
Klassifizierung
Vektorisierung
- Ein Bild mit einem Planktonobjekt aus der Vektorisierungs-Warteschlange holen und auf das vorgegebene Format 224x224 skalieren
- Bildnormalisierung auf das kompatible Format, damit EfficientNet das Bild korrekt verarbeiten kann
- Umwandlung des Bildes in das Vektorformat, das die Liste der 672 Float-Elemente darstellt
- Hinzufügen des Vektors mit einem Planktonobjekt in die Warteschlange der Klassensuche
Klassensuche
- Entnahme eines Bildvektors mit dem identifizierten Planktonobjekt aus der Warteschlange für die Klassensuche.
- Suche nach den fünf ähnlichsten Vektoren in der Faiss-Index-Warteschlange unter Verwendung des NNS-Algorithmus. Das Ergebnis ist eine Liste von Nachbar-IDs und eine Liste von Entfernungen zwischen ihnen und dem gegebenen Vektor.
- Aus der Liste der nächsten Nachbarn werden die häufigsten IDs ausgewählt und der Referenzvektor gewählt, dessen Abstand am geringsten ist, da er dem erkannten Objekt am ähnlichsten ist.
- Bestimmen des Planktonklassennamens anhand der JSON-Datei aus dem Faiss-Index, in der ID- und Klassenbündel gespeichert sind.
- Hinzufügen des Begrenzungsrahmens mit einer identifizierten Planktonobjektklasse in die Warteschlange der Statistiksammlung.
Statistik
Das Statistikmodul ist dafür zuständig, alle Informationen zu sammeln, die zur Laufzeit auf Basis der gefundenen Daten gesammelt werden. Nachdem der Thread initialisiert wurde, finden folgende Aktionen statt:
- Holen einer Bounding Box mit einem Planktonobjekt aus der Statistics Collection Queue.
- Aufzeichnung der Ergebnisse in der TXT-Datei, einschließlich der ID, des Zeitstempels, der Bounding Box (x_min, y_min, x_max, y_max), der Erkennungswahrscheinlichkeit und einer Klasse für jedes gefundene Plankton.
- Speichern des gefundenen Planktons als BMP-Bild.
Roadmaps für Verbesserungen
Itransition definierte die nächsten Verbesserungsschritte für die PoC-Lösung, um die Leistung der Lösung und die Genauigkeit der Erkennungs- und Klassifizierungsmodelle zu erhöhen. Für die Modellgenauigkeit haben wir Folgendes vorgeschlagen:
- Die Verwendung eines Datensatzes anstelle von zwei markierten Datensätzen sowohl für die Erkennung als auch für die Klassifizierung. Dies würde die Vielfalt der Referenzbeispiele für beide Prozesse vereinheitlichen und dazu beitragen, die Lage möglicher Engpässe und Nachteile besser zu verstehen.
- Das Erkennungsmodell an einem größeren Datensatz trainieren und einen Algorithmus zur Berechnung des Fokus implementieren, d.h. einen strengen Algorithmus, der definiert, ob ein Objekt im Fokus oder außerhalb des Fokus ist (derzeit wird dies vom CNN entschieden). Wir haben vorgeschlagen, Untersuchungen durchzuführen, die besten Optionen zu finden und den Algorithmus zu implementieren.
- Implementierung eines neuen Ansatzes zur Beschleunigung des Erkennungsprozesses, bei dem das gesamte Plankton, ob scharf oder unscharf, erkannt wird. Danach definiert ein Filter auf der Grundlage einer vordefinierten Regel, ob Objekte im Fokus sind oder nicht, wobei letztere anschließend entfernt werden.
- Training des Klassifizierungsmodells mit einem Datensatz, der mehr Klassen und mehr Bilder pro Klasse enthält.
Um die Verarbeitungsgeschwindigkeit zu erhöhen, schlagen wir vor:
- Untersuchung der Möglichkeiten, Faiss auf der GPU laufen zu lassen.
- Die Architekturen der Erkennungs- und Klassifizierungsmodelle so umzugestalten, dass sie einen Stapel von Bildern gleichzeitig verarbeiten können und eine Geschwindigkeitssteigerung von 10-15 % ermöglichen, ohne den Arbeitsspeicher zu beeinträchtigen.
- Die Ersetzung des aktuellen YOLOv4-Modells durch ein neueres YOLOv7, das auf PyTorch basiert, wird in Erwägung gezogen. Dies würde es dem Kunden ermöglichen, die Geschwindigkeit der Lösung und die Genauigkeit der Modelle auf der aktuellen Hardware mit der gleichen Menge an RAM und Rechenressourcen erheblich zu verbessern. Das Unternehmen würde auch die verwendeten Bibliotheken vereinheitlichen, indem es Darknet durch PyTorch ersetzt.
Am Ende der PoC-Entwicklung und nach der abschließenden Demo mit dem Kunden stellten wir ausführbare Dateien und Anweisungen zur Ausführung der App zur Verfügung. Nachdem der Kunde die Lösung in der realen Umgebung ausreichend genutzt und Daten gesammelt hat, werden wir eine vollständige Software-Suite entwickeln.
Ergebnisse
Itransition lieferte eine PoC-Lösung für die Erkennung und Klassifizierung von Plankton. Der PoC ermöglichte es dem Kunden, die Qualität und Leistung des von uns vorgeschlagenen Ansatzes zu testen, ohne in eine umfassende Lösung zu investieren. Durch die Implementierung des PoC konnten wir die Machbarkeit des vorgeschlagenen Ansatzes nachweisen und die gesetzten Ziele erreichen:
- Gewährleistung der Kompatibilität des Computergeräts und der Kamera des Kunden mit der neuen Software
- Steigerung der Bildverarbeitungsgeschwindigkeit von 8 FPS auf etwa 15 FPS
- Erzielung einer 98%igen Genauigkeit der Erkennungs- und Klassifizierungsmodelle
- Zusammenstellung einer Liste von Maßnahmen zur Verbesserung der Genauigkeit der Erkennungs- und Klassifizierungsmodelle und der Gesamtleistung der Lösung
Dienstleistungen
Beratung zum maschinellen Lernen
Erfahren Sie mehr über unser Angebot an ML-Beratungsleistungen sowie über Technologien, Anwendungsfälle, die Implementierungs-Roadmap und die Rentabilität.
Fallstudie
Eine einkaufbare Videoplattform für AiBUY
Erfahren Sie, wie das engagierte Team von Itransition AiBUY bei der Einführung ihrer innovativen, auf maschinelles Lernen gestützten Shoppable-Video-Plattform unterstützt hat.
Fallstudie
BI-Plattform mit KI und Computer Vision für einen Modeeinzelhändler
Erfahren Sie, wie Itransition BI für den Einzelhandel bereitstellte und eine ML-basierte Kundenanalyselösung implementierte, die jetzt 10 TB an Daten verarbeitet.
Fallstudie
Klinischer Datenaustausch PoC
Erfahren Sie, wie wir eine PoC-App für den sicheren klinischen Datenaustausch für Rettungssanitäter entwickelt haben, die bereits den Betatest bestanden und mehr als 30 neue Kunden angezogen hat.
Fallstudie
Eine POC-Anwendung für ein Startup-Unternehmen für Drohnenlieferungen
Lesen Sie, wie wir eine mobile POC-Anwendung für Android entwickelt haben, die die kontaktlose Lieferung per Drohne ermöglicht und dem Kunden hilft, die Machbarkeit des Produkts zu beweisen.
Fallstudie
Automatisierung robotergestützter Prozesse HR PoC
Erfahren Sie, wie Itransition einen RPA-Bot entwickelt hat, der das Hinzufügen neuer Bewerber zum HRM automatisiert und so die Prozesseffizienz und -zuverlässigkeit deutlich erhöht.