Pregunta

Estoy buscando la creación de un sistema de IDENTIFICACIÓN para la catalogación de imágenes.Yo no puedo utilizar md5 (), ya que se va a cambiar si me alterar las etiquetas EXIF de la imagen.

Actualmente estoy usando el SHA1 de la suma de comprobación calculada por imagemagick.Funciona perfectamente, pero es muy, muy lento en las imágenes de mayor tamaño (~15 segundos en un quad-core xeon de 21 megapíxeles JPG).

Hay otros "visual" de los métodos de la identificación exclusiva de una imagen que sería más rápido?

¿Fue útil?

Solución

Usted podría tratar de correr MD5 en el real de datos de mapa de bits en lugar de los archivos JPEG.He probado en mi máquina (también un quad core Xeon) y el siguiente se ejecuta en aproximadamente 900ms en un 23 megapíxeles de imagen.

uint32_t width  = MagickGetImageWidth(imageWand);
uint32_t height = MagickGetImageHeight(imageWand);

uint8_t *imageData = malloc(width * height * 3);

MagickExportImagePixels(imageWand,
   0, 0, width, height, "RGB", CharPixel, imageData);

unsigned char *imageDigest = MD5(imageData, width * height * 3, NULL);

free(imageData);

Otros consejos

¿qué entiende usted por "suma de comprobación visual"?los algoritmos que usted menciona (md5/sha/crc) trabajo en un byte basado manera, pero no toman en cuenta la información visual de la imagen.Si se puede convertir en uno de tus imágenes a JPEG, los dos archivos se mostrará la misma imagen, pero totalmente diferentes md5/sha/las sumas de comprobación crc.

si su única preocupación son los exif de las ediciones, usted podría hacer una copia temporal de la imagen, tira todos los metadatos de la misma con el exiv2 biblioteca y ejecutar el algoritmo de suma de comprobación, a continuación,.Supongo que esto es mucho más rápido que manualmente la disminución de las imágenes.Usted también podría acelerar el cálculo mediante el uso de sólo los primeros n kilobytes de la fuente de archivo de la suma de comprobación.

Si todos los archivos de imagen que vienen directamente desde una cámara, son incluso mejor:se podrían extraer el pregenerados exif miniatura con exiv2 (por lo general sólo unos pocos kilobytes) y calcular su suma de comprobación.

Acerca de la escala-hacia abajo-enfoque:También ser conscientes del hecho de que ImageMagick puede cambiar su escala algorithmsin el futuro, lo que invalidaría su sumas de comprobación (el byte de la estructura de las versiones a escala reducida iba a cambiar después).

Como señaló Todd Yandell, MD5 es probablemente lo suficientemente rápido.Si no, usted puede conseguir algo aún más rápido mediante el uso de una versión de 32 bits o de 64 bits CRC para su de suma de comprobación.La principal diferencia es que cualquiera puede realizar una nueva imagen con el mismo CRC;es muy fácil de falsificar.Es muy difícil para alguien para suplantar una suma de comprobación MD5.Una pequeña diferencia es que el CRC tiene muchos menos bits, pero a menos que usted tiene un gran número de imágenes, la colisión es todavía raro.

exiftool dice ser capaz de extraer de la imagen binaria de un archivo JPEG, de modo que usted puede calcular su suma de comprobación sin descomprimir, pero no puedo averiguar de la página de manual de cómo hacerlo.

Hice algunos experimentos en un ordenador portátil Intel Core 2 Duo L7100 de la CPU, y una de 8MP JPEG toma alrededor de 1 segundo para comprimir a PPM en formato, luego otro de 1 segundo para hacer la suma de comprobación.Suma de comprobación de los tiempos no eran radicalmente diferentes de usar md5sum, sum, y sha1sum.Así que su mejor opción podría ser la de encontrar una manera de extraer los datos binarios sin descomprimirlo.

Yo también tenga en cuenta que su suma de comprobación va a ser casi tan buena, incluso si se utiliza mucho menos píxeles.Comparar estos dos:

djpeg -scale 1/8 big.jpg | /usr/bin/sha1sum   # 0.70s
djpeg            big.jpg | /usr/bin/sha1sum   # 2.15s

Usted debería considerar la posibilidad de que alguien puede recortar la imagen o modificar la paleta, la profundidad de color o algo, luego un plano de la suma de comprobación será diferente, aunque visualmente el original y el modificado la imagen todavía se ven bastante semejantes.Tal vez hay un algoritmo eficaz para recortar o re-coloreado, como las Imágenes de Google utiliza para la búsqueda de imágenes similares.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top