ANPR mit RoR & React Native

Danny Krastev, Mirabbos Umarov, Ekaterina Menshenina, ITMO-Universität, Info-Kommunikationssysteme, Informatik. 2019

Bild

Zusammenfassung


Aufgrund des nie endenden Anstiegs des Fahrzeugvolumens in unserem täglichen Leben hat sich die automatische Kennzeichenerkennung (ANPR) zu einer sich weiterentwickelnden Lösung für die Verwaltung und Überwachung von Fahrzeugen weltweit entwickelt, um Regeln durchzusetzen und kriminelle Aktivitäten wie Parkverstöße und Rotlicht zu verhindern Verletzung, Geschwindigkeitsüberschreitung und Fahrzeugdiebstahl. Obwohl bereits eine Vielzahl von öffentlichen und privaten Methoden und Bibliotheken entwickelt wurden, mit denen die automatische Erkennung von Autokennzeichen auf der ganzen Welt erreicht werden kann, wurde nicht viel Wert darauf gelegt, Fortschritte in Richtung einer plattformübergreifenden ANPR-Lösung zu erzielen unterstützt alle Fahrzeugkennzeichen weltweit. In diesem Artikel wird das Plate Vision-Projekt vorgestellt, eine Web- und Mobilanwendung, die auf Ruby on Rails und React Native basiert und als alternative ANPR-Plattform dienen soll, die die Erkennung aller Nummernschilder weltweit mithilfe verschiedener Open Source Optical Character Recognition (OCR) unterstützt. Bibliotheken und Effizienzoptimierungen.

Schlüsselwörter und -phrasen: Rubin, Schienen, native Reaktion, Kennzeichenerkennung, Kennzeichenbereichsextraktion, optische Zeichenerkennung (OCR), ANPR.

1. Einleitung


Da die Kernfunktionalität und Leistung der automatischen Kennzeichenerkennung (ANPR) auf jahrelanger Forschung basiert, die unterschiedliche Kombinationen von OCR-Techniken (Optical Character Recognition) für Bilder verwendet, um die Kennzeichen der Fahrzeuge zu finden und zu lesen, sowie eine Vielzahl Da es bereits Lösungen gibt, ist es nicht erforderlich, die für die vollständige Wiederherstellung der OCR-Funktionalität selbst erforderliche Fremdentwicklung und Schulung durchzuführen. Daher besteht das Ziel dieses Dokuments darin, ein Beispiel für die Kombination und Optimierung der vorhandenen OCR- und ANPR-Lösungen in zu präsentieren um Plate Vision zu entwickeln, eine einzigartige ANPR-Plattform, die auf jedem Gerät mit jeder Kamera, jedem Fahrzeug und jedem Standort funktioniert.

Der Rest des Papiers läuft wie folgt ab. In Abschnitt 2 werden einige vorhandene Lösungen und Abhängigkeiten vorgestellt. Abschnitt 3 beschreibt das Rails-Backend, das Frontend und die native React-Integration. In Abschnitt 4 werden die ANPR-Optimierung und -Tests sowie die Art und Weise erläutert, wie Plate Vision online erstellt, gehostet und gewartet wurde, während in Abschnitt 5 das Papier abgeschlossen wird.

2. OCR-Abhängigkeiten


Obwohl viele der Technologiegiganten des Unternehmens wie Google, Amazon, Microsoft und IBM ihre eigenen Cloud-Vision-APIs bereitstellen, mit denen Bilder analysiert und bestimmte Objekte und Funktionen mithilfe von Algorithmen markiert werden können, für deren Entwicklung und Schulung ihre Forscher Jahre gebraucht haben sind kostenpflichtige Lösungen, die schnell teuer werden können, wenn versucht wird, eine Plattform wie ANPR für eine beliebige Anzahl von Benutzern zu skalieren oder sogar zu demonstrieren. Daher ist die Verwendung von Open Source-Frameworks und -Bibliotheken nicht nur wirtschaftlich eine bessere Lösung, sondern bietet auch die erforderliche Fähigkeit dazu Ändern und Steuern der ANPR-Erkennungsalgorithmen.

Von all den verschiedenen derzeit existierenden Lösungen ist OpenALPR die einzige Open Source-Lösung, die die Möglichkeit bietet, die ANPR-Erkennungsalgorithmen für bestimmte Länder zu ändern und zu steuern. Aus diesem Grund wurde OpenALPR für die Verwendung für Plate Vision ausgewählt.

OpenALPR hat auch zwei primäre Abhängigkeiten, OpenCV und Tesseract OCR, die als Grundlage für die Durchführung des ANPR dienen. Es ist am besten, die Anzahl der Abhängigkeiten, die eine Plattform hat, auf ein Minimum zu beschränken, um die beste Leistung zu erzielen. Bei jedem Projekt, das benutzerdefinierte OCR integriert, müssen jedoch mehrere große Abhängigkeiten bestehen [1].

3. Plattform


Die Plate Vision-Plattform basiert auf den Frameworks Ruby on Rails und React Native und besteht daher aus zwei einzelnen Anwendungen, der mobilen Anwendung React Native und der Rails-Anwendung, die als Hauptwebsite und Backend für die App dient.

Rails ist ein Model-View-Controller (MVC) und ein in Ruby geschriebenes serverseitiges Webanwendungsframework, das Standardstrukturen für eine Datenbank, einen Webdienst und Webseiten bereitstellt. Es fördert und erleichtert die Verwendung von Webstandards wie JSON oder XML für die Datenübertragung sowie von HTML, CSS und JavaScript für die Anzeige und Benutzeroberfläche [2].

React Native ist ein von Facebook entwickeltes Open-Source-Framework für mobile Anwendungen, das das Schreiben von JavaScript-Code ermöglicht, der in nativen Code konvertiert und interpretiert werden kann. Auf diese Weise können plattformübergreifende Anwendungen für Android, iOS und UWP einfach in einer einzigen Sprache kompiliert werden [ 3].

OpenALPR ist eine Open Source-Bibliothek zur automatischen Erkennung von Kennzeichen, die in C ++ mit Bindungen in C #, Java, Node.js und Python geschrieben wurde. Die Bibliothek analysiert Bilder und Videostreams, um Nummernschilder zu identifizieren. Die Ausgabe ist die Textdarstellung aller Kennzeichen [1].

3.1 Backend


Das Backend der Plattform besteht aus verschiedenen Edelsteinen (Bibliotheken) und Rails-Controllern, die die Anforderungen von der Website bzw. der mobilen Anwendung verarbeiten.

Im Folgenden werden die im Backend verwendeten Edelsteine ​​aufgelistet und beschrieben:

  • ALPR - wird zum Aufrufen von openALPR-Befehlen verwendet
  • Gerät - ist eine flexible Authentifizierungslösung für Rails basierend auf Warden
  • Devise Token Auth - Einfache, mandantenfähige und sichere tokenbasierte Authentifizierung für Rails.
  • Rmagick - eine Schnittstelle zwischen der Programmiersprache Ruby und der ImageMagick-Bildverarbeitungsbibliothek
  • Rolify - einfache Rollenbibliothek ohne Autorisierungsdurchsetzung, die den Bereich für Ressourcenobjekte unterstützt.

Im Folgenden werden die Controller für Website-Anwendungen aufgelistet und beschrieben:

  • Anwendungscontroller - ist der Hauptcontroller, der die Methoden enthält, die auf der gesamten Website ausgeführt werden können.
  • Öffentlicher Controller - ist ein geerbter Controller (Form Application Controller), der Anforderungen von den öffentlichen Seiten der Website verarbeitet.
  • Benutzerkontrolle - verarbeitet Anforderungen von der Benutzerkontoseite.
  • Sitzungscontroller - ist ein Benutzerauthentifizierungscontroller.
  • Fahrzeugsteuerung - übernimmt das Erstellen, Bearbeiten und Löschen von Fahrzeugen.

Im Folgenden werden die Anwendungscontroller aufgelistet und beschrieben, die als erholsame JSON-API dienen und die Anforderungen von React Native Mobile Application verarbeiten:

  • Alpr-Controller - enthält Methoden zur Analyse des Bildes, um ein Kennzeichen zu finden.
  • Gerätecontroller - Enthält Methoden zum Speichern der Geräteinformationen des Benutzers in der Datenbank.
  • Locations Controller - speichert die Standortdaten des Benutzergeräts in der Datenbank.
  • Benutzer-Controller - übernimmt die Benutzerautorisierung / -authentifizierung.
  • Fahrzeugsteuerung - Behandelt Fahrzeugobjektmethoden (Erstellen, Bearbeiten, Löschen) und speichert Fahrzeugdaten in der Datenbank.

3.2 Frontend (Website)


Das Frontend der Plattform wird mit einigen Rails-Edelsteinen sowie bei Bedarf mit Bootstrap, jQuery und benutzerdefiniertem JavaScript entwickelt.

Bootstrap ist ein kostenloses Open-Source-Front-End-Framework zum Entwerfen von Websites und Webanwendungen. Es enthält HTML- und CSS-basierte Entwurfsvorlagen für Typografie, Formulare, Schaltflächen, Navigation und andere Schnittstellenkomponenten sowie optionale JavaScript-Erweiterungen. [4]
jQuery ist eine kostenlose und plattformübergreifende Open-Source-JavaScript-Bibliothek, die das clientseitige Scripting von HTML vereinfachen soll. [5]

Im Folgenden werden die im Frontend verwendeten Edelsteine ​​aufgelistet und beschrieben:

  • Einfache Form - verbessert die bestehende Verwendung von Standardschienenformen [6]
  • Einfache Navigation - hilft bei der einfachen Erstellung dynamischer Navigationen [7]
  • Rails Admin - bietet eine dynamische Admin-Oberfläche für die Anwendung [8]

    Das Folgende ist eine Liste der Hauptseiten und ihrer Beschreibung:
  • Home - Hauptzielseite für die Website
  • Fahrzeugindex - Seite, auf der alle erstellten Fahrzeuge aufgelistet sind
  • Fahrzeuge Neu / Bearbeiten - Seite mit Formular, in dem das Fahrzeug erstellt und bearbeitet und das Nummernschild analysiert wird
  • Fahrzeuganzeige - Seite, auf der die Details zu einem bestimmten gespeicherten Fahrzeug angezeigt werden.
  • Anmelden - Seite, auf der jeder Gastbenutzer ein Konto für die Plattform erstellen kann
  • Anmelden - Seite, auf der sich jeder Gastbenutzer bei der Plattform anmelden kann
  • Benutzerkonto - Seite, auf der Benutzer Details zu ihrem Konto anzeigen und bearbeiten können
  • Passwort vergessen - Seite, auf der jeder Benutzer das Zurücksetzen seines Passworts per E-Mail anfordern kann

3.3 Native Anwendung reagieren (mobil)


Die App-Branche wird heute von zwei Giganten beherrscht, nämlich Android und iOS. Für Unternehmen und Entwickler ist es wichtig, ein Produkt für die Mehrheit der Benutzer bereitzustellen, daher müssen beide Plattformen angepasst werden. Die Plattformen entwickeln auf eigene Weise Anwendungen und weisen nur geringe Ähnlichkeiten untereinander auf. Dies war ein Problem, mit dem die App-Branche konfrontiert und überwunden wurde, indem sie Mitarbeiter mit Kenntnissen in Android oder iOS oder in beiden Bereichen einstellen musste, um zwei separate Anwendungen zu erstellen, die wiederum eine parallele Wartung erfordern [9].

Plattformübergreifende Frameworks, die diese Lücke schließen, sind gekommen und gegangen, da es nicht gelungen ist, Anwendungen mit demselben visuellen oder funktionalen Standard zu erstellen, den die nativen Frameworks bieten. React Native verspricht jedoch, mit nur einer Codebasis eine vollständig native Erfahrung zu bieten. [10]. React native erfordert und läuft auf der NodeJS-Plattform. Node.js ist eine plattformübergreifende Open-Source-JavaScript-Laufzeitumgebung, die serverseitigen JavaScript-Code ausführt. [11]

Um eine React Native-Anwendung zu verstehen, müssen Sie einige der grundlegenden React-Konzepte wie JSX, Status, Requisiten und Komponenten kennen. JSX - ist eine XML-ähnliche Syntaxerweiterung für ECMAScript ohne definierte Semantik. Komponenten - sind die Bausteine ​​jeder nativen React-App, und eine typische native React-App enthält viele davon. Einfach ausgedrückt ist eine Komponente eine JavaScript-Klasse oder -Funktion, die optional Eingaben, dh Eigenschaften (Requisiten), akzeptiert und ein React-Element zurückgibt, das beschreibt, wie ein Abschnitt der Benutzeroberfläche (Benutzeroberfläche) angezeigt werden soll.

Es gibt zwei Arten von Daten, die eine Komponente steuern:

  1. Requisiten: sind unveränderlich und werden vom Elternteil festgelegt und während der gesamten Lebensdauer einer Komponente festgelegt.
  2. Zustand: ist veränderlich. Dies bedeutet, dass der Status in Zukunft aktualisiert werden kann, während Requisiten dies nicht können. Der Status kann im Konstruktor initialisiert und dann von setState aufgerufen werden, wenn er geändert werden muss.

Standardmäßig bietet React native eine Reihe integrierter Komponenten, die für verschiedene Zwecke verwendet werden können. Darüber hinaus sind Entwickler nicht auf die mit React Native gebündelten Komponenten und APIs beschränkt, da viele andere Entwickler viele verschiedene Pakete (Bibliotheken) erstellt haben, um die Entwicklung für andere zu beschleunigen.

Im Folgenden werden die Pakete aufgelistet und beschrieben, die mit nodeJS zur Entwicklung der React Native-Anwendung verwendet werden:

  • Reagieren - Eine deklarative, effiziente und flexible JavaScript-Bibliothek zum Erstellen von Benutzeroberflächen. [12]
  • React Native - Ein Framework zum Erstellen nativer Apps mit React. [13]
  • Expo - Eine Reihe von Tools, Bibliotheken und Diensten, mit denen native iOS- und Android-Apps durch Schreiben von JavaScript erstellt werden können. [14]
  • Redux - Ein vorhersehbarer Statuscontainer für JavaScript-Apps. [15]
  • Axios - Ein Promise-basierter HTTP-Client für den Browser und node.js [16]
  • Native Base - Wichtige plattformübergreifende UI-Komponenten für React Native [17]
  • React Native Navigation - bietet native Plattformnavigation auf iOS und Android für React Native-Apps [18]
  • React Form Builder - Einfache Formulargenerator-Bibliothek zum Reagieren. [19]
  • Il8next - Internationalisierungsframework für Browser oder jede andere Javascript-Umgebung (z. B. Node.js) [20]

Das Folgende ist eine Liste der App-Seiten und ihrer Beschreibung:

  • Home - Haupt-App-Landingpage für die Anwendung
  • Info - App-Seite, die beschreibt, worum es auf der Plattform geht
  • Anmelden - App-Seite, auf der jeder Gastbenutzer ein Konto für die Plattform erstellen kann
  • Anmelden - App-Seite, auf der sich jeder Gastbenutzer bei der Plattform anmelden kann
  • Fahrzeugindex - App-Seite, auf der alle erstellten Fahrzeuge aufgelistet sind
  • Fahrzeuge neu / Bearbeiten - App-Seite mit Formular, in dem das Fahrzeug erstellt und bearbeitet und das Nummernschild analysiert wird
  • Fahrzeuganzeige - App-Seite, auf der die Details zu einem bestimmten gespeicherten Fahrzeug angezeigt werden.

4. Testen & Hosting


Während die ersten Tests und Untersuchungen für diese Plattform auf russischen Kennzeichen basieren, besteht das ultimative Ziel der Plate Vision-Plattform darin, Kennzeichen aus der ganzen Welt lesen zu können, und da OpenALPR bereits für beliebte Länder wie USA und Europa geschult wurde Es wurde zunächst angenommen, dass es auch mit russischen Kennzeichen gut funktionieren würde, da einige der europäischen Kennzeichen den russischen ähnlich sind.

Erste Tests mit den europäischen Standard-OpenAlpr-Konfigurationen auf russischen Kennzeichen zeigen jedoch, dass OpenAlpr zwar einige russische Kennzeichen identifizieren und erkennen konnte, OpenAlpr jedoch weiter angepasst werden musste, um zuverlässige und konsistente Ergebnisse zu erzielen. Um die Analyse der russischen Kennzeichen ohne zusätzliche Schulung mit OpenAlpr zu verbessern, wurden einige benutzerdefinierte Konfigurationen erstellt, abgeleitet und aus den europäischen Konfigurationen mit spezifischen Modifikationen optimiert, die auf einer Vielzahl von Testbildern basieren, die Fahrzeuge mit russischen Kennzeichen enthalten.

Bild

Obwohl die Plattform so optimiert wurde, dass sie mit den besten russischen Kennzeichen funktioniert, unterstützt sie bereits viele Bilder von Autos und Kennzeichen aus der ganzen Welt, da sie mehrere modifizierte Konfigurationen der OpenAlpr-Bibliothek ausführt, was zu vielen möglichen Ergebnissen führt und letztendlich bestimmt Das beste Ergebnis basiert auf der Übereinstimmung der Plattenmuster in der Weltregion und der Lesegenauigkeit.

Die gesamte Plattform wird mithilfe der Cloud-Dienste von Heroku gehostet und über das Git-Versionskontrollsystem aktualisiert und gewartet. Es ist jedoch wichtig zu beachten, dass das Einrichten bestimmter Abhängigkeiten wie OpenAlpr für die Arbeit in einer Cloud-Server-Umgebung wie Heroku aufgrund der Einschränkungen und Herausforderungen, die die Cloud-Server-Umgebung von Heroku mit sich bringt, schwierig war. Daher wurden die Dienste von Docker auch in Kombination mit Heroku verwendet, um die Schwierigkeiten beim Einrichten und Sicherstellen zu überwinden, dass die Cloud OpenAlpr und alle ihre Abhängigkeiten genauso funktionieren wie die in der lokalen Entwicklungsumgebung [1].

5. Fazit


Zusammenfassend war das Ziel dieses Papiers, die Plate Vision-Plattform vorzustellen sowie ihre drei Hauptfunktionskomponenten zu beschreiben und zu beschreiben, wie ANPR optimiert werden soll, während auch in Zukunft Geräte, Kameras, Fahrzeuge und Standorte unterstützt werden. Obwohl die aktuelle Version der Plattform OpenAlpr nur mit mehreren Konfigurationen implementiert und verwendet, um die automatische Nummernschilderkennung zu verbessern, gibt es immer noch verschiedene Möglichkeiten, ANPR zu erreichen, und mit weiteren Forschungen, Tests und Experimenten hofft die Plate Vision-Plattform Kombination einzigartiger Techniken und Methoden, die die besten verfügbaren Open Source Vision- und OCR-Bibliotheken nutzen, um eine wirklich optimale internationale ANPR-Lösung zu erstellen.

Referenzen


Referenzen
1. OpenALPR-Dokumentation - http://doc.openalpr.com/
2. Ruby on Rails-Dokumentation - https://guides.rubyonrails.org/
3. Reagieren Sie auf native Dokumentation - https://facebook.imtqy.com/react-native/docs/getting-started.html
4. Bootstrap-Dokumentation - https://getbootstrap.com/
5. JQuery-Dokumentation - https://jquery.com/
6. Einfache Formulardokumentation - https://github.com/plataformatec/simple_form
7. Einfache Navigationsdokumentation - https://github.com/codeplant/simple-navigation
8. Rails Admin-Dokumentation - https://github.com/sferik/rails_admin
9. Axelsson Oscar, Carlstrom Fredrik [Evaluation Targeting React Native im Vergleich zur nativen mobilen Entwicklung] - https://lup.lub.lu.se/student-papers/search/publication/8886469
10. Hansson Niclas, Vidhall Tomas [Auswirkungen auf Leistung und Benutzerfreundlichkeit für die plattformübergreifende Anwendungsentwicklung mit React Native] - http://www.diva-portal.org/smash/record.jsf?pid=diva2%3A946127&dswid=8626
11. NodeJS - https://nodejs.org
12. ReactJS - https://reactjs.org/
13. React Native - https://facebook.imtqy.com/react-native/
14. Expo - https://expo.io/
15. Redux - http://redux.js.org/
16. Axios - https://github.com/axios/axios
17. Native Base - https://nativebase.io/
18. Reagieren Sie auf native Navigation - https://wix.imtqy.com/react-native-navigation
19. React Form Builder - https://github.com/bietkul/react-native-form-builder
20. Il8next - https://www.i18next.com/

Source: https://habr.com/ru/post/de453190/


All Articles