Bilder vergleichen - silent

  • Hallooo,
    kurz nachdem die FTP-Sache gelöst ist komme ich nun wieder mit einer
    weiteren Idee ;)
    Also, folgendes,
    Laptop - Webcam eingebaut - Idee: Bilderkennung.
    Ich hab mir gedacht, vielleicht kann ich ja ein Script erkennen lassen,
    wer sich gerade vor meinem PC befindet ? ^^
    Bild mit der Cam aufnehmen, - kein Problem, aber:
    Das Vergleichen der Bilder macht mir Probleme. Ich will die ja nicht irgentwie anzeigen
    lassen und mit PixelGetColor auf markante Stellen prüfen, das ganze soll ja
    im Hintergrund ablaufen.
    Folgenden Ansatz habe ich mir überlegt:

    Spoiler anzeigen
    [autoit]

    Func _pic_compare( $file1, $file2, $points = 100 )
    $pic1 = Binary( FileRead( $file1 ) )
    $pic2 = Binary( FileRead( $file2 ) )
    $l = _slen( $pic1, $pic2 )
    $points = Int( $points )
    If $points <= 0 Or $points >= Int( $l/2 ) Then
    SetError(-1)
    Return -1
    EndIf


    $steps = Int(( ($l- 2*$points) / $points ))
    Dim $ar[$points][2]
    $pos = 1

    [/autoit] [autoit][/autoit] [autoit]

    For $i = 0 To $points-1
    ToolTip( $i+1 )
    $wr1 = Dec( StringMid( $pic1, $pos, 2 ) )
    $wr2 = Dec( StringMid( $pic2, $pos, 2 ) )
    $c = _slen( $wr1, $wr2 )
    If $c <> 0 Then
    If $c = 1 Then
    $wr1 = Round( $wr1, 0 )
    $wr2 = Round( $wr2, 0 )
    Else
    $wr1 = Round( $wr1, -1 )
    $wr2 = Round( $wr2, -1 )
    EndIf
    EndIf

    $pos = $pos + $steps
    $ar[$i][0] = $wr1
    $ar[$i][1] = $wr2
    Next
    ;_ArrayDisplay( $ar )
    $equal = 0
    For $i = 0 To $points-1
    If $ar[$i][0] = $ar[$i][1] Then $equal += 1
    Next
    Return $equal
    EndFunc

    [/autoit] [autoit][/autoit] [autoit]

    Func _slen( $a, $b )
    $a = StringLen( $a )
    $b = StringLen( $b )
    If $a < $b Then Return $a
    Return $b
    EndFunc

    [/autoit]


    Ich lese die Bilder binär ein, schnappe mir in regelmäßigen Abständen je 2 Zeichen,
    wandle diese in eine Decimalzahl um, runde und vergleiche ^^
    $equal ist dann die Anzahl übereinstimmender Punkte.

    Klingt kompliziert, ist es auch und absolut .. unwirksam.
    Dauert lange und wenn ich meinen Daumen fotografiere habe ich
    mehr übereinstimmende Punkte als wenn ich 2 fast identische Fotos nehme :P

    Hat da vll jemand eine Idee ? =)

    mfg limette

    There are only 10 types of people in the world:
    Those who understand binary - and those who don't.

    • Offizieller Beitrag

    Ich denke, die Idee ist hier vor allem nicht AutoIt zu verwenden...
    Es fehlt eine performante Grafik"bibliothek" (ja, steinigt mich, aber ich weiß wie so was in Java & Co. aussieht, kein Vergleich :( ).
    Außerdem sind solche Algorithmen alles andere als trivial -- in der aktuellen c't (13/08) steht bisschen was zu dem Thema, habe es aber noch nicht im Detail gelesen.

    peethebee

  • Also das Mit dem Daumen fand ich gut :P


    Sonst vielleicht irgendwie mit dem Quellcode rumspielen und bestimmte teile heraussuchen.
    Habe davpn aber null Ahnung,meine aber,dass du dafür einen bestimmten Editor brauchst !
    Portable Version nehmen.

    Hoffe geholfen zu haben :thumbdown:

    Zitat

    Programmieren ist so lange lustig bis ein Fehler auftritt!


    ~ Dankeschön

  • Joa, pee hat wahrscheinlich Recht, wie immer ;)

    Wobei es mir jetzt nicht so auf die Performance ankommt sondern
    eher um die Theorie, wie man das .. toleranter machen könnte ^^
    Ich werd da nochmal drüber nachdenken ;)

    mfg limette

    There are only 10 types of people in the world:
    Those who understand binary - and those who don't.