Eingebettetes System für Bildverarbeitungsprojekt

Ist es möglich, mit einem Mikrocontroller Bildverarbeitung (zum Extrahieren von Zahlen und Text) durchzuführen? Wenn nicht, was sind die Alternativen, um diese Aufgabe zu erledigen?

Sie sollten Fragen zur Bildverarbeitung stellen: Wie erhalten wir das Bild im Mikrocontroller? Wie werden Bilder gespeichert (Speichergröße)? Wie führen wir Operationen an ihnen durch (Kodierung ex JPEG)? Können wir das schnell genug machen (maximale Bildrate)?
Sie sollten einen DSP mit einigen spezifischen Funktionen für die Bildverarbeitung verwenden, wie MAC und SIMD, die für die Bildverarbeitung verwendet werden, und transformieren die Funktion FFT, DCT usw

Antworten (4)

Ja, die Bildverarbeitung kann mit Mikrocontrollern und Mikroprozessoren erfolgen. Sie können die Bildverarbeitung entweder mit Arduino mit OpenCV oder MatLab durchführen. Oder wenn Sie sich mehr für Mikroprozessoren interessieren, können Sie einen eingebetteten Computer wie den Raspberry Pi (RPi) oder Beaglebone (BB) verwenden, der sich besser für leistungsstarke Bildverarbeitungsprojekte eignet. RPi hat eine eingebaute GPU, die besser für Ihre Anwendungen ist, aber BBB kann auch für Bildverarbeitungsanwendungen verwendet werden, wenn man bedenkt, dass es einen besseren und schnelleren ARM-Prozessor hat. Da BB und RPi beide unter Linux laufen, können Sie das gängigste OpenCV oder simpleCV verwenden, um die Aufgabe zu erledigen.

Sie können die Bildverarbeitung mit BBB und OpenCV oder RPi und OpenCV verwenden. OpenCV ist ein Es hat C++-, C-, Python- und Java-Schnittstellen und unterstützt Windows, Linux, Mac OS, iOS und Android. Ich würde Ihnen vorschlagen, OpenCV zu verwenden, das C++ für BBB verwendet (C++ ist schneller im Vergleich zu RPi und BBB nicht GPU, so dass die Möglichkeit besteht, die Verarbeitung zu verlangsamen) und OpenCV verwenden, das Python für RPi verwendet (Python ist viel einfacher zu programmieren und RPi hat eine GPU). Ich habe in der Vergangenheit sowohl RPi als auch BBB verwendet, aber ich würde Ihnen empfehlen, ein RPi für Ihre Anwendung zu kaufen, da es billiger ist und eine riesige Dokumentation online hat.

Update: Es gibt viele OCR-basierte Algorithmen, die online für OpenCV verfügbar sind, aber nicht so zuverlässig sind. Ich denke, die beste Open-Source-OCR-Engine ist Tesseract. Weitere Informationen dazu erhalten Sie im Thread Tesseract oder OpenCV for OCR .

Derzeit verwende ich OpenCV-Python für RPi, aber ich finde es schwierig, Dokumentation zu Textextraktionstechniken zu finden. Ich habe versucht, einen auf der Strichbreitentransformation basierenden Algo in Python zu implementieren, aber ich habe nichts bekommen. Können Sie die beste zu implementierende Algo vorschlagen und warum openCV gegenüber Scikit-image und PIL bevorzugt wird?
Ich habe den Thread aktualisiert. Bitte markieren Sie diesen Thread als abgeschlossen, wenn Sie danach gesucht haben. Grüße. :)

Es hängt wirklich davon ab, über welche Art von Mikrocontroller und Peripheriegeräten wir sprechen, sowie über welche Art von Bildverarbeitung. Sie sollten sich folgende Fragen stellen (und natürlich beantworten)
1) Das erste Problem besteht darin, die Bilddaten in die Verarbeitungseinheit zu bekommen - wie wird das gemacht? Woher kommen die Daten? Wo wird es gespeichert?
2) Wie schnell soll die Bearbeitung sein?
3) Muss das Bild vollständig in den Speicher der Verarbeitungseinheit geladen werden, um verarbeitet zu werden, oder reicht nur ein Teil davon aus? Dies führt zu Speicheranforderungen.
4) Was werden Sie mit den verarbeiteten Daten tun?

Im Allgemeinen erfolgt die Bildverarbeitung auf einer speziellen Art von Mikrocontrollern/Prozessoren, die als DSP (Digital Signal Processors) bezeichnet werden und für die Verarbeitung großer Arrays digitaler Daten optimiert sind. Nachdem Sie die obigen Fragen beantwortet haben, sehen Sie sich diese an.

Das Extrahieren von Zahlen und Text aus einem Dokument wird als optische Zeichenerkennung (OCR) bezeichnet. Dies ist ein ziemlich komplexes Thema, und es gibt mehrere Ansätze zur Durchführung von OCR. Obwohl der Begriff OCR die Verwendung einer Art Kamera zum Abbilden des Textes impliziert, werden die Zeichen meistens aus einem vorhandenen Dokument "gelesen", wie z. B. einer Word- oder PDF-Datei, einem FAX oder einer Scannerausgabe (die möglicherweise ein Bild ist Datei wie JPEG). In all diesen Fällen muss also das Format der Datei berücksichtigt werden.

In jedem Fall gibt es normalerweise eine Vorverarbeitungsphase, in der die Zeichen entzerrt (z. B. vertikal ausgerichtet) und dann eine Kantenerkennung durchgeführt wird.

Wenn bekannt ist, dass die Zeichen aus einer bestimmten Schriftart wie Times Roman oder aus einigen bekannten Schriftarten erstellt wurden, kann die Mustererkennung verwendet werden. Dies ist ziemlich einfach, erfordert jedoch ziemlich viel festen Speicher (der sich im Flash befinden kann). Wenn die Zeichen aus verschiedenen Schriftarten stammen, wird dies schwieriger. In diesem Fall kann stattdessen die Merkmalsextraktion verwendet werden. Die größte Herausforderung besteht darin, ob die Zeichen in freier Form handschriftlich sind.

Wenn bekannt ist, dass in einem bestimmten Feld nur Zahlen eingegeben werden, erleichtert dies die Arbeit zusätzlich. Ebenso kann ein Wörterbuch verwendet werden, um Wörter zu erkennen (auch dies würde viel Flash-Speicher erfordern).

Bei genügend Speicher, sowohl Flash als auch RAM, gibt es keinen Grund, warum ein Mikrocontroller OCR nicht durchführen kann, obwohl er dies wahrscheinlich nicht in Echtzeit tun könnte – es müsste eine Offline-Aufgabe sein. Darüber hinaus wird ein 32-Bit-Prozessor dringend empfohlen.

OCR, wie oben erwähnt, ist in erster Linie eine Mustererkennungsaufgabe und erfordert nicht unbedingt DSP; DSP könnte jedoch nützlich sein, um die Zeichen vor der OCR-Nachbearbeitung zu bereinigen, z. B. um Rauschen zu entfernen.

Grundsätzlich nein. Machen Sie es mit einem eingebetteten Computer wie dem Raspberry Pi oder Beaglebone. Diese eignen sich hervorragend für eingebettete Computervision, sind sehr billig, und der Beaglebone verfügt über Referenzschaltpläne, sodass Sie Ihr eigenes System entwerfen können, nachdem die Prototyping-Phase abgeschlossen ist.

Für Texterkennungsalgorithmen sind jetzt wahrscheinlich viele Open-Source-Bibliotheken verfügbar, aber sie werden alle für das richtige Linux-Betriebssystem und nicht für ein Echtzeit-Mikrocontroller-Betriebssystem sein. Es ist einfach viel einfacher mit einer Architektur im vollständigen CPU-Stil.

Auf dem Himbeer-Pi (unter Verwendung von OpenCV 2/3 mit Python-Bindungen) erhielt ich 20-30 Bilder pro Sekunde bei der Objekterkennung und -verfolgung mit leicht heruntergerechneten Bildern vom Pi-Kameramodul.