![]() |
Und ein weiteres Erkennungsthema...
Hallo DP, mal wieder,
Weiß nicht, ob und wenn ja wie oft das Thema hier schon durchgenommen wurde... Aber egal, SuFu war hier nicht wirklich ergiebig, also: Ich würde gern Gesichter erkennen können! Oder vielmehr meinem Computer selbiges beibringen :stupid: Dazu hab ich mir bereits etwas sehr Nettes gebastelt, was auch schon erstaunlich gut funktioniert, doch dazu später mehr. Jetzt arbeite ich daran, das Ganze mit meiner Webcam zu kombinieren. Mein Problem ist nun, dass ich meinen Kopf sehr genau an dieselbe Stelle halten muss, an der er "gelernt" wurde. Sprich, wenn ich ihn rechts relativ groß eingegeben habe, muss ich ihn auch wieder rechts recht nah hinhalten um ein Ergebnis zu bekommen. Wundert mich ehrlich gesagt auch nur wenig. Also hätte ich jetzt gern das Rechteck, in dem sich mein kompletter Kopf befindet, automatisch erkannt, damit ich wirklich nur meinen Kopf dort eingebe. Die unvermeidliche Frage sei nun gestellt: "Wie gehe ich da ran"? Danke schonmal, Der LDer. |
Re: Und ein weiteres Erkennungsthema...
Also du hast schon was, was dein Gesicht identifizieren kann, und möchtest einen Algo, der sagt wo es sein könnte?
Für diese Groberkennung könnte es ja schon reichen, wenn du nach den schwarzen Punkten (aka Augen) suchst und guckst ob da ein heller bereich (aka Gesicht) drumherum ist. (Größe des nötigen Bereichs hängt vom Augenabstand ab) Falls das der Fall ist => Bereich ausschneiden und normieren (drehen und skalieren) und dem anderen Algo geben. Weitermachen, bis alle Gesichter gefunden sind, oder keine möglichen Positionen mehr gefunden wurden. Beim Augenabstand solltest du noch Grenzen einbauen, nach oben und nach unten. Dieser Algo ist nicht besonders gut (produziert viele false positives) aber dafür schnell. Und für Genauigkeit haste ja schon was, wenn ich dich richtig verstanden hab' :) |
Re: Und ein weiteres Erkennungsthema...
Zitat:
Nein, was macht man bei Dunkelhäutigen? Ich habe schwarze Bekannte o_O ... mfg LDer |
Re: Und ein weiteres Erkennungsthema...
Oh ähhh ... zu kurz gedacht :oops: :wall:
Wenn die Auflösung gut genug ist, könnte man nach dem weißen im Auge suchen, ansonsten vll. die Person bitten zu lächeln wegen den hellen Zähnen :stupid: Ansonsten fällt mir nicht mehr viel ein, was universell ist :? |
Re: Und ein weiteres Erkennungsthema...
Irgendwelche Ansätze, Augen zu finden?
Habe mal versucht das ganze schwarz/weiß zu setzen (erstmal quick&dirty), aber es soll bei jeder Belichtung funktionieren und je nachdem wie der schwellwert ist (hier 127) ergibt sich ein vollkommen anderes Bild... Kann man irgendwie die "Durchschnittshelligket" des Bildes berechnen, um den perfekten Schwellwert rauszukriegen? ... Langsam wächst die Aufgabe... Ich setz mich mal wieder dran x)
Delphi-Quellcode:
Gruß vom LDer.
procedure TForm1.Button1Click(Sender: TObject);
var X, Y:integer; R, G, B:Byte; begin for Y:=0 to Image1.Picture.Height do for X:=0 to Image1.Picture.Width do begin R:=GetRValue(Image1.Picture.Bitmap.Canvas.Pixels[X, Y]); G:=GetGValue(Image1.Picture.Bitmap.Canvas.Pixels[X, Y]); B:=GetBValue(Image1.Picture.Bitmap.Canvas.Pixels[X, Y]); if((R+G+B)div 3 > 127) then Image1.Picture.Bitmap.Canvas.Pixels[X, Y]:=clWhite else Image1.Picture.Bitmap.Canvas.Pixels[X, Y]:=clBlack; end; end; |
Re: Und ein weiteres Erkennungsthema...
|
Re: Und ein weiteres Erkennungsthema...
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo brechi,
Wenn ich mich einarbeiten würde, würds mir bestimmt helfen... aber ich will auch kein Haus bauen, indem ich eins kaufe/miete/runterlade... Also ich will keine fertige Lösung haben^^ Naja, bin mittlerweile so weit mit meinen Graustufen:
Delphi-Quellcode:
Nun, Fraaa~gen:
procedure TForm1.Button1Click(Sender: TObject);
var X, Y:integer; R, G, B, Hell:Byte; DHell:int64; begin DHell:=0; for Y:=0 to Image1.Picture.Height do for X:=0 to Image1.Picture.Width do begin R:=GetRValue(Image1.Picture.Bitmap.Canvas.Pixels[X, Y]); G:=GetGValue(Image1.Picture.Bitmap.Canvas.Pixels[X, Y]); B:=GetBValue(Image1.Picture.Bitmap.Canvas.Pixels[X, Y]); Hell:=(R+G+B)div 3; Image1.Picture.Bitmap.Canvas.Pixels[X, Y]:=Hell; DHell:=DHell+Hell; end; DHell:=DHell div (Image1.Picture.Height*Image1.Picture.Width); for Y:=0 to Image1.Picture.Height do for X:=0 to Image1.Picture.Width do begin R:=Image1.Picture.Bitmap.Canvas.Pixels[X, Y]; if(R > DHell) then Image1.Picture.Bitmap.Canvas.Pixels[X, Y]:=clWhite else Image1.Picture.Bitmap.Canvas.Pixels[X, Y]:=clBlack; end; end; 1. Wie optimiert man das? Da war mal iiirrrggeeennndddwwwaaannnnnnn was mit ScanLine oder so... ähnlich... Wie geht des nochmaaa~l? Kann ich mir nicht sowieso irgendwie eine Zeile davon sparen? 2. Schießt ein Bild von euch und lasst den Code drüberrennen... Wie würdet ihr jetzt ein Programm nach euren Augen suchen lassen? Alternativ bietet sich das Bild im Anhang an. So, hoffe mal wieder auf Antworten! Der LDer. |
Re: Und ein weiteres Erkennungsthema...
Habe
![]()
Delphi-Quellcode:
Es tut sich nix... warum?
procedure DoSomething(Input:TBitmap);
type PixArray = array [1..3] of Byte; var P: ^PixArray; X, Y:integer; Hell:Byte; DHell:int64; const paWhite:PixArray=(255, 255, 255); paBlack:PixArray=(0, 0, 0); begin DHell:=0; for Y:=0 to Input.Height-1 do begin P:= Input.ScanLine[Y]; for X:=0 to Input.Width-1 do begin Hell:=(P^[1]+P^[2]+P^[3])div 3; P^[1]:=Hell; P^[2]:=Hell; P^[3]:=Hell; DHell:=DHell+Hell; Inc(P); end; end; for Y:=0 to Input.Height-1 do begin P:= Input.ScanLine[Y]; for X:=0 to Input.Width-1 do begin if(P^[1] > DHell) then P^:=paWhite else P^:=paBlack; Inc(P); end; end; end; LDer.
Delphi-Quellcode:
Hilft manchmal... auch hier. Ergebnis: etwa 1000-fache Geschwindigkeit, wooohoooo! ;)
Image1.Repaint;
|
Re: Und ein weiteres Erkennungsthema...
Ich markiere hier mal als gelöst, mein Problem hat sich mal wieder verändert.
Neues Topic wird geöffnet: "Schwarz-Weiß-Bildanalyse" mfg LDer. |
Re: Und ein weiteres Erkennungsthema...
Ich weiß, ist gelöst.
Aber zum Erkennen der Augen habe ich vor einiger Zeit von einem interessanten Ansatz gelesen: Dort wurde auch in einem laufenden Video nach dem Gesicht und den Augen gesucht. Und um die Augen zu finden wurde einfach auf's Zwinkern gewartet. Gibt im Differenzbild zwischen zwei Video-Frames scheinbar ein schönes Signal... Wollt' ich nur noch loswerden. Gruß Michael |
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:37 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz