OpenCV Face Detect
OpenCV Face Detect
Hallo,
über http://forum.lazarus.freepascal.org/ind ... ic=31851.0 habe ich einen Start in die Materie gefunden.
Capture von Bildern einer WebCam funktioniert.
Jedoch bietet die OpenCV.pas Implementierung nicht die Gesichtserkennung aus OpenCV. ( cvHaarDetectObjects).
Dafür müssen weitere Scripte, wie ocv.core.types_c angepasst werden.
Leider bin ich daran gescheitert
Hat sich schon jemand mit dem Thema befasst und nötige Dateien an Lazarus angepasst? (OpenCV V2 oder V3) ( ocv.core_c.pas, ocv.core.types_c.pas, ocv.tracking_c.pas ...)
Gruß, Michael
über http://forum.lazarus.freepascal.org/ind ... ic=31851.0 habe ich einen Start in die Materie gefunden.
Capture von Bildern einer WebCam funktioniert.
Jedoch bietet die OpenCV.pas Implementierung nicht die Gesichtserkennung aus OpenCV. ( cvHaarDetectObjects).
Dafür müssen weitere Scripte, wie ocv.core.types_c angepasst werden.
Leider bin ich daran gescheitert
Hat sich schon jemand mit dem Thema befasst und nötige Dateien an Lazarus angepasst? (OpenCV V2 oder V3) ( ocv.core_c.pas, ocv.core.types_c.pas, ocv.tracking_c.pas ...)
Gruß, Michael
Gruß, Michael
Re: OpenCV Face Detect
Hi,
nach einigen Problemen, habe ich die OpenCV Dateien von Delphi soweit anpassen können, dass die Objekterkennung funktioniert.
Alle Delphi Units werden kompiliert, jedoch habe ich nicht alle Funktionen probiert!
Mir kam es darauf an, Bilder einer Webcam einzulesen und in diesen Objekte erkennen zu können.
Die OpenCV DLLs bitte hier herunterladen: https://opencv.org/releases.html (Version 2.4.13.5 diese Version ist in ocv.lib.pas definiert!)
In das Programmverzeichnis folgende DLLs aus obigem Download, opencv\build\x86\vc14\bin\ kopieren
opencv_calib3d2413.dll
opencv_contrib2413.dll
opencv_core2413.dll
opencv_features2d2413.dll
opencv_highgui2413.dll
opencv_imgproc2413.dll
opencv_legacy2413.dll
opencv_nonfree2413.dll
opencv_objdetect2413.dll
opencv_photo2413.dll
opencv_video2413.dll
Es handelt sich hierbei um ein Working Sample und nicht um eine fertige Software!
Habe das nur zusammengeschustert, um die Face Detect Funktionalität zum Laufen zu bringen.
Um eine Gesichtserkennung zu erreichen, ist noch einiges zu tun
Leider kann ich hier keine weiteren Anhänge hochladen. Hier der Link zum Mediafire Download:
http://www.mediafire.com/file/3t2a024na ... Detect.zip
Bild:
http://www.mediafire.com/view/kof090bbdcm9n2t/Bild1.png
Gruß, Michael
nach einigen Problemen, habe ich die OpenCV Dateien von Delphi soweit anpassen können, dass die Objekterkennung funktioniert.
Alle Delphi Units werden kompiliert, jedoch habe ich nicht alle Funktionen probiert!
Mir kam es darauf an, Bilder einer Webcam einzulesen und in diesen Objekte erkennen zu können.
Die OpenCV DLLs bitte hier herunterladen: https://opencv.org/releases.html (Version 2.4.13.5 diese Version ist in ocv.lib.pas definiert!)
In das Programmverzeichnis folgende DLLs aus obigem Download, opencv\build\x86\vc14\bin\ kopieren
opencv_calib3d2413.dll
opencv_contrib2413.dll
opencv_core2413.dll
opencv_features2d2413.dll
opencv_highgui2413.dll
opencv_imgproc2413.dll
opencv_legacy2413.dll
opencv_nonfree2413.dll
opencv_objdetect2413.dll
opencv_photo2413.dll
opencv_video2413.dll
Es handelt sich hierbei um ein Working Sample und nicht um eine fertige Software!
Habe das nur zusammengeschustert, um die Face Detect Funktionalität zum Laufen zu bringen.
Um eine Gesichtserkennung zu erreichen, ist noch einiges zu tun
Leider kann ich hier keine weiteren Anhänge hochladen. Hier der Link zum Mediafire Download:
http://www.mediafire.com/file/3t2a024na ... Detect.zip
Bild:
http://www.mediafire.com/view/kof090bbdcm9n2t/Bild1.png
Gruß, Michael
Gruß, Michael
Re: OpenCV Face Detect
H,
ich bräuchte mal ein bisschen Hilfe:
Wie kann ich diese Struktur in Lazarus übersetzen? Ich kapiere es nicht
bei folgendem kommt eine Fehlermeldung:
ocv.core.types_c.pas(4593,61) Error: Message recordind not yet supported
Bin für jede Erleuchtung dankbar.
Gruß, Michael
ich bräuchte mal ein bisschen Hilfe:
Wie kann ich diese Struktur in Lazarus übersetzen? Ich kapiere es nicht
bei folgendem kommt eine Fehlermeldung:
ocv.core.types_c.pas(4593,61) Error: Message recordind not yet supported
Code: Alles auswählen
type
TCV_SET_ELEM_FIELDS<elem_type> = record
flags: Integer;
next_free: ^elem_type;
end;
TCvVoronoiNode2D = record
// CV_VORONOINODE2D_FIELDS:TCV_VORONOINODE2D_FIELDS;
CV_SET_ELEM_FIELDS: TCV_SET_ELEM_FIELDS<TCvVoronoiNode2D>;
pt: TCvPoint2D32f;
radius: Single;
end;
Bin für jede Erleuchtung dankbar.
Gruß, Michael
Gruß, Michael
-
- Lazarusforum e. V.
- Beiträge: 3158
- Registriert: Di 22. Jul 2008, 19:27
- OS, Lazarus, FPC: Lazarus: SVN; FPC: svn; Win 10/Linux/Raspbian/openSUSE
- CPU-Target: 32bit x86 armhf
- Wohnort: Köln
- Kontaktdaten:
Re: OpenCV Face Detect
Mit konkreten Typen funktioniert das wunderbar:
Code: Alles auswählen
type
PCvVoronoiNode2D = ^TCvVoronoiNode2D;
TCV_SET_ELEM_FIELDS = record
flags: Integer;
next_free: PCvVoronoiNode2D;
end;
TCvVoronoiNode2D = record
// CV_VORONOINODE2D_FIELDS:TCV_VORONOINODE2D_FIELDS;
CV_SET_ELEM_FIELDS: TCV_SET_ELEM_FIELDS;
pt: TCvPoint2D32f;
radius: Single;
end;
MfG Socke
Ein Gedicht braucht keinen Reim//Ich pack’ hier trotzdem einen rein
Ein Gedicht braucht keinen Reim//Ich pack’ hier trotzdem einen rein
Re: OpenCV Face Detect
Hi,
ich habe weiter mit der Delphi Vorlage gespielt und mittlerweile die Delphi Komponenten angepasst, so dass diese in Lazarus kompilierbar sind und eingebunden werden.
Dies bezieht sich in meinem Fall auf Lazarus 1.8.0/x86 Win10.
Zu den Problemen komme ich später...
Hier das Paket mit den Komponenten: http://www.mediafire.com/file/j1h5mwsj5 ... enCV_2.zip (~20MB mit Dlls)
Die DLLs aus "DLL_Backup" am besten nach c:\Windows kopieren. (Ansonsten müssten diese im Verzeichniss von Lazarus.exe und im jeweiligen Projektverzeichnis vorhanden sein).
Hier das Paket mit dem Testprojekt: http://www.mediafire.com/file/p1yognue3 ... Detect.zip (~7MB)
Das Projekt zeigt die Verwendung der ocvCameraSource und der ocvImageOperation Komponenten.
Es können bis zu drei HaarClasses über Comboboxen ausgewählt werden und so bis zu drei verschiedene "Dinge" in Bildern erkannt werden.
Über eine weiter Combobox können Bildeffekte ausgewählt werden, wie Grayscale, Erode, Dilate usw.
Soweit geht also schon etwas...
Ein Problem ist die ocvView Komponente, welche eigentlich Images von den Sourcen wie Webcam oder ImageOperation anzeigen soll.
Dies funktioniert nicht und ich weiß nach stundenlanger Suche nicht, woran es hapert.
Die Komponente zeigt zur Laufzeit einen Teil der Form an, anstatt des Images der Webcam!
Schiebt man die Form zur Laufzeit etwas zusammen und zieht sie wieder langsam auf, so flackert manchmal das richtige Bild auf...
Das irre ist, wenn ich in icv.comp.view in TocvView.WMPaint(var Message: TWMPaint); ab Zeile 295 die relvanten Teile zum Zeichnen der Canvas entferne, zeigt die Komponente zur Laufzeit immer noch Teile der Form... ?!?!?
Ein Tipp am Rande: Zum Debugen habe ich alle Scripte der Komponenten in das Projektverzeichnis kopiert. (Projekt neu kompilieren!). Ansonsten funktionieren die Haltepunkte nicht.
Vielleicht hat ja jemand Interesse daran, mal in die Sourcen reinzuschauen... ich bin im Moment ziemlich frustriert und komme einfach nicht weiter.
Gruß, Michael
ich habe weiter mit der Delphi Vorlage gespielt und mittlerweile die Delphi Komponenten angepasst, so dass diese in Lazarus kompilierbar sind und eingebunden werden.
Dies bezieht sich in meinem Fall auf Lazarus 1.8.0/x86 Win10.
Zu den Problemen komme ich später...
Hier das Paket mit den Komponenten: http://www.mediafire.com/file/j1h5mwsj5 ... enCV_2.zip (~20MB mit Dlls)
Die DLLs aus "DLL_Backup" am besten nach c:\Windows kopieren. (Ansonsten müssten diese im Verzeichniss von Lazarus.exe und im jeweiligen Projektverzeichnis vorhanden sein).
Hier das Paket mit dem Testprojekt: http://www.mediafire.com/file/p1yognue3 ... Detect.zip (~7MB)
Das Projekt zeigt die Verwendung der ocvCameraSource und der ocvImageOperation Komponenten.
Es können bis zu drei HaarClasses über Comboboxen ausgewählt werden und so bis zu drei verschiedene "Dinge" in Bildern erkannt werden.
Über eine weiter Combobox können Bildeffekte ausgewählt werden, wie Grayscale, Erode, Dilate usw.
Soweit geht also schon etwas...
Ein Problem ist die ocvView Komponente, welche eigentlich Images von den Sourcen wie Webcam oder ImageOperation anzeigen soll.
Dies funktioniert nicht und ich weiß nach stundenlanger Suche nicht, woran es hapert.
Die Komponente zeigt zur Laufzeit einen Teil der Form an, anstatt des Images der Webcam!
Schiebt man die Form zur Laufzeit etwas zusammen und zieht sie wieder langsam auf, so flackert manchmal das richtige Bild auf...
Das irre ist, wenn ich in icv.comp.view in TocvView.WMPaint(var Message: TWMPaint); ab Zeile 295 die relvanten Teile zum Zeichnen der Canvas entferne, zeigt die Komponente zur Laufzeit immer noch Teile der Form... ?!?!?
Ein Tipp am Rande: Zum Debugen habe ich alle Scripte der Komponenten in das Projektverzeichnis kopiert. (Projekt neu kompilieren!). Ansonsten funktionieren die Haltepunkte nicht.
Vielleicht hat ja jemand Interesse daran, mal in die Sourcen reinzuschauen... ich bin im Moment ziemlich frustriert und komme einfach nicht weiter.
Gruß, Michael
Gruß, Michael
- af0815
- Lazarusforum e. V.
- Beiträge: 6209
- Registriert: So 7. Jan 2007, 10:20
- OS, Lazarus, FPC: FPC fixes Lazarus fixes per fpcupdeluxe (win,linux,raspi)
- CPU-Target: 32Bit (64Bit)
- Wohnort: Burgenland
- Kontaktdaten:
Re: OpenCV Face Detect
Wenn dein Projekt (Sourcen) bei Github (oder ähnlich) liegen würde, so wäre es einfacher. Man kann auch dann Änderungen verfolgen. Zip's von irgenwelchen Servern zu laden ist mir einfach zu riskant, vor allen, wo schon bei dem Besuch der Seite von Mediafire einigen Warnungen bei mir auftauchen.
Andreas
Andreas
Blöd kann man ruhig sein, nur zu Helfen muss man sich wissen (oder nachsehen in LazInfos/LazSnippets).
Re: OpenCV Face Detect
Hi Andreas,
nun gut, ich habe die Veröffentlichung von OpenCV_Master(Delphi) für Lazarus überarbeitet und unter Lazarus 1.8.0 x86 erfolgreich kompiliert.
Die Struktur habe ich nun auf Github hochgeladen.
https://github.com/six1/Laz_OpenCV_2
Das Lazarus Sample liegt als Zip unter samples/
Die Probleme der View Komponente sind natürlich geblieben
Gruß, Michael
nun gut, ich habe die Veröffentlichung von OpenCV_Master(Delphi) für Lazarus überarbeitet und unter Lazarus 1.8.0 x86 erfolgreich kompiliert.
Die Struktur habe ich nun auf Github hochgeladen.
https://github.com/six1/Laz_OpenCV_2
Das Lazarus Sample liegt als Zip unter samples/
Die Probleme der View Komponente sind natürlich geblieben
Gruß, Michael
Gruß, Michael
Re: OpenCV Face Detect
Hi,
ich habe mich noch etwas weiter durch dieses riesige Projekt OpenCV durchgearbeitet.
Neben dem Problem mit OcvView besteht das Problem, dass es eine Exception nach einiger Zeit gibt, wenn man einen Videostream einer Webcam in einem TImage anzeigt.
Hierfür habe ich die Funktion TocvImage.AsBitmap verwendet.
Nachdem ich die Bitmap probeweise über eine eigene Routine erzeugt habe und das funktionierte, war klar woher der Fehler kommt.
Hier wird bei jedem Aufruf der Funktion AsBitmap eine TBitmap erzeugt und nie zerstört... klar, warum es irgendwann kracht.
Ich werde dem Objekt TocvImage eine Bitmap spendieren
Übrigens hatte ich einige DLL im Upload auf Github vergessen, die ich mittlerweile eingespielt habe.
Wenn man einen Stream einer Webcam empfangen möchte, muss man die OpenCV ffmpeg dll eingespielt haben. Zudem muss ffmpeg auf dem Rechner vorhanden sein und die Path Variable auf das ffmpeg/bin Verzeichnis erweitert werden.
Webcam Stream läuft danach hervorragend!
Irgendwie ist das Ganze noch sehr experimentell , aber ich habe schon relativ viel am laufen.
Wenn ich wesentliches gefixt habe, spiele ich es in Github Master ein. (Link siehe oben)
Gruß, Michael
ich habe mich noch etwas weiter durch dieses riesige Projekt OpenCV durchgearbeitet.
Neben dem Problem mit OcvView besteht das Problem, dass es eine Exception nach einiger Zeit gibt, wenn man einen Videostream einer Webcam in einem TImage anzeigt.
Hierfür habe ich die Funktion TocvImage.AsBitmap verwendet.
Nachdem ich die Bitmap probeweise über eine eigene Routine erzeugt habe und das funktionierte, war klar woher der Fehler kommt.
Code: Alles auswählen
function TocvImage.AsBitmap: TBitmap;
var
deep: Integer;
// i, j, K, wStep, Channels: Integer;
// data: PByteArray;
// pb: PByteArray;
begin
if (FImage <> NIL) then
begin
try
Result := TBitmap.Create;
Hier wird bei jedem Aufruf der Funktion AsBitmap eine TBitmap erzeugt und nie zerstört... klar, warum es irgendwann kracht.
Ich werde dem Objekt TocvImage eine Bitmap spendieren
Übrigens hatte ich einige DLL im Upload auf Github vergessen, die ich mittlerweile eingespielt habe.
Wenn man einen Stream einer Webcam empfangen möchte, muss man die OpenCV ffmpeg dll eingespielt haben. Zudem muss ffmpeg auf dem Rechner vorhanden sein und die Path Variable auf das ffmpeg/bin Verzeichnis erweitert werden.
Webcam Stream läuft danach hervorragend!
Irgendwie ist das Ganze noch sehr experimentell , aber ich habe schon relativ viel am laufen.
Wenn ich wesentliches gefixt habe, spiele ich es in Github Master ein. (Link siehe oben)
Gruß, Michael
Gruß, Michael
Re: OpenCV Face Detect
Hi,
ich habe die Komponenten etwas überarbeitet und auch ein neues Sample für Lazarus (Laz V1.8.0) erstellt.
https://github.com/six1/Laz_OpenCV_2
Probleme mit OcvView sind noch nicht gelöst.
Gruß, Michael
ich habe die Komponenten etwas überarbeitet und auch ein neues Sample für Lazarus (Laz V1.8.0) erstellt.
https://github.com/six1/Laz_OpenCV_2
Probleme mit OcvView sind noch nicht gelöst.
Gruß, Michael
Gruß, Michael