Eine billige / schnelle Möglichkeit, Bitmaps zu hacken?

8

Ich habe eine Anwendung, die eine Galerie von Bildern (alle in Jpeg) aufnimmt und Ähnlichkeitswerte zwischen jedem möglichen Paar gibt. Zu jedem Zeitpunkt kann nur ein Paar ausgewählt und der Ähnlichkeitswert angezeigt werden.

Der Algorithmus, der die zwei Bilder vergleicht, hat einen gewissen Leistungsaufwand, so dass es ein paar Sekunden dauert, ein Paar zu vergleichen.

Wenn zwei Bilder ausgewählt sind:

  1. Wenn das Paar noch nie verglichen wurde, wird "Noch nicht bewertet" angezeigt. Der Benutzer kann auf die Schaltfläche "Punkte" klicken, und das Paar wird an einen Thread gesendet, der die zu berechnenden Punkte in die Warteschlange stellt. Beispiel: Ссылка
  2. Wenn sich das Paar derzeit in der Warteschlange befindet, um berechnet zu werden, zeigt das Punktefeld "Computing ..." an. Beispiel: Ссылка
  3. Wenn das Paar verglichen wurde, wird die Punktzahl angezeigt, die dem Paar zugeordnet ist. Beispiel: Ссылка

Beispiel (wenn Sie einen Batch ausführen): Ссылка

Wenn ein Punktestand nie berechnet wurde und ein Benutzer auf "Punktestand" klickt, wechselt das Feld zu "Berechnung ..." und zeigt dann den Punktestand an, wenn die Berechnung abgeschlossen ist.

Vor dem Anzeigen von irgendetwas im Feld der Partitur, wenn zwei Paare ausgewählt sind, wird ihr angehängtes Bitmap an eine HashMap gesendet, die überprüft, ob diese beiden Bitmaps bereits eine angehängte Punktzahl haben. In diesem Fall wird sie einfach zurückgegeben. Wenn kein Ergebnis vorhanden ist, wird der Job in die Warteschlange gesendet.

Um zu wissen, ob der Punktestand im Cache existiert, muss ich einen Weg finden, das Paar zu hashen, so dass ich den resultierenden Schlüssel verwenden kann, um den Cache zu suchen. Da ist mein Problem. Um sinnvoll zu sein, sollte das Hashing der beiden Bitmaps schnell sein. Ansonsten füge ich einfach eine weitere Berechnungsschicht hinzu. Aber die Art und Weise, wie ich bisher die zwei Bitmap hashen soll, besteht darin, sie in einem Byte-Array zu senden und ihre MD5-Prüfsumme zu erhalten. So:

%Vor%

Allerdings kostet diese Methode nach dem Profiling, das ich gemacht habe, ungefähr 53 ms, was eine Verzögerung in der Benutzeroberfläche verursacht, die ziemlich unangenehm ist. TIn detaillierterer Profilerstellung habe ich festgestellt, dass ungefähr 95% der Rechenzeit in den compress Methoden gemacht wird. Ich habe jedoch keine andere Möglichkeit gefunden, die Bytes zu erhalten, die die Bitmaps unterstützen.

%Vor%

Ich weiß, dass mein Weg, die Bitmap zu hacken, ziemlich brutal ist. Aber ich weiß nicht viel über Hashfunktionen und welche Teile einer Bitmap ich verwenden könnte, um die Dateien eindeutig zu identifizieren. Ich möchte den Dateinamen oder etwas ähnliches nicht verwenden, da ich diese Bitmaps schließlich in einer Datenbank senden möchte.

[Update 1] Ich wusste nichts über Object.hashCode (). Nun habe ich die Methode folgendermaßen modifiziert:

%Vor%

Was im Durchschnitt etwa 18 US-Dollar kostet.

    
AntoineG 26.05.2012, 15:44
quelle

2 Antworten

1

Hier ist eine neue Frage über Hashing. Adler ist wahrscheinlich die schnellste in die JRE integrierte Methode. Haben Sie darüber nachgedacht, den Hash vorzurechnen und mit dem Image oder in einer Datenbank zu speichern?

    
bmm6o 26.05.2012 15:51
quelle
0

Wie wäre es mit androids sameAs?

    
chris 21.06.2013 15:13
quelle

Tags und Links