Deduplicar imágenes sincronizadas a través de dispositivos en varias resoluciones

1

Actualmente tengo un par de scripts y aplicaciones de Android que hacen lo siguiente para un conjunto de dispositivos miembros (teléfonos inteligentes, PC, cámaras digitales):

  • Todas las imágenes tomadas por todos los dispositivos miembros se sincronizan automáticamente con Dropbox.
    • para teléfonos inteligentes, esto se hace usando el Dropsync aplicación
    • para cámaras digitales, se ejecuta un script tan pronto como la cámara se conecta a través de USB
  • Una vez a la semana, todas las imágenes de todos los miembros sincronizados de esta manera se mueven a un directorio diferente en Dropbox, para el almacenamiento a largo plazo.
  • Después de la mudanza, se lleva a cabo una deduplicación: este directorio de archivos (llamémoslo Dropbox/PicsArchive/ ) es escaneado, y todos los duplicados son detectados y eliminados. Actualmente, utilizo fdupes Para detectar los duplicados, pero que yo sepa, esto solo detecta exacto Duplica, es decir, archivos que tienen sumas de comprobación idénticas.

El problema

Sin embargo, existe un vínculo no trivial entre todos los miembros.

Por ejemplo, al conectar un tipo específico de cámara digital al USB de la PC que ejecuta estos scripts, las imágenes en su tarjeta de memoria se mueven a Dropbox, y se generan copias reducidas y luego se envían a un subconjunto de los miembros del teléfono inteligente brillante aplicación de Autoremote). Estas copias redimensionadas pueden terminar muy fácilmente en una ubicación en el teléfono inteligente que Dropsync también está sincronizando. Por lo tanto, las imágenes de la cámara, así como estas copias redimensionadas, se sincronizan finalmente en Dropbox/PicsArchive/.

Otro ejemplo es tomar una foto con la cámara del teléfono inteligente (alta resolución) y compartirla con un contacto de WhatsApp; a menudo, WhatsApp reduce la resolución de esa imagen. Pero quiero ambas ubicaciones sincronizadas (la cámara y El directorio de medios de WhatsApp correspondiente, lo que significa que Dropsync sincronizará dos imágenes (una con alta y otra con menor resolución) con Dropbox, y ambas terminarán finalmente en Dropbox/PicsArchive/.

Obviamente, deseo mantener solo las imágenes de más alta resolución / calidad. Quizás lo que se necesita aquí sea una mejor estrategia de copia de seguridad, no una herramienta más genérica para limpiar el desorden que se pueda prevenir de alguna manera.

Aquí hay un par de imágenes crudas de la configuración actual. Aquí está el caso de uso original:

Luego implementé la vinculación, para estimular a los usuarios a hacer imágenes de mayor calidad con la cámara digital, y al mismo tiempo puedo enviar fácilmente esas fotos a los usuarios de WhatsApp:

Tenga en cuenta también que el camino Cámara del teléfono → WhatsApp crea un duplicado en el teléfono (tanto el directorio de la cámara del teléfono como el directorio de medios de WhatsApp están sincronizados, lo que por supuesto es necesario para permitir fotos) no destinado a que WhatsApp se sincronice también).

Entonces, ¿cómo puedo deduplicar todas estas fotos?

Rody Oldenhuis
fuente
Nos deja continuar esta discusión en el chat .
Rody Oldenhuis
No dude en volver a preguntar esto en Recomendaciones de Software . En su forma actual, esto es sólo una solicitud de software de lista que hace XYZ . Una alternativa válida sería incluir lo que haya intentado y describir el problema real que está tratando de resolver. Encontrará mucha gente que está dispuesta a piratear algo juntos (incluso en función de algo que comenzó), pero estoy de acuerdo con Jake en que esto parece una lista de deseos para un programa mágico que puede o no existir. Este tipo de preguntas no se recomiendan aquí (y en la mayoría de los sitios de SE).
slhck
@slhck OK, ¿qué tal esto?
Rody Oldenhuis
Intenté eliminar la parte (ahora irrelevante) en la que solicitas una herramienta. Para mí, la pregunta está bien de esa manera, sin embargo, puede 1) tratar de reducirla aún más a lo esencial para proporcionar una respuesta y 2) notificar a quienes ya respondieron que sus respuestas ya no son válidas. Por lo general, no es tan agradable cambiar una pregunta de manera radical, pero dado que las respuestas que tiene ahora tampoco parecen ser una solución a su pregunta original (y no están actualizadas), dejaría pasar la reescritura aquí.
slhck

Respuestas:

-1

ImagenMagick debería poder hacer algunos hashes para comparar imágenes, pero es más como un conjunto de herramientas que tendría que dedicar un tiempo a aprender a usar & amp; cree su propia respuesta personalizada que haga exactamente lo que quiere, en lugar de "aquí está pegada su respuesta". Pero incluso las "imágenes similares" de Google están lejos de ser perfectas, y la mejor manera de detectar realmente duplicados consiste en mirarlos, ya sea creando imágenes de "diferencia" o las imágenes reales en sí mismas.

ImageMagick® es una suite de software para crear, editar, componer o convertir imágenes de mapa de bits.

ImageMagick es un software gratuito que se entrega como una distribución binaria lista para ejecutar o como código fuente que puede usar, copiar, modificar y distribuir tanto en aplicaciones abiertas como propietarias. Se distribuye bajo la licencia Apache 2.0, aprobada por el OSI y recomendada para su uso por el OSSCC.

La versión actual es ImageMagick 6.9.0-5 disponible en http://www.imagemagick.org/download . Se ejecuta en Linux, Windows, Mac Os X, iOS, sistema operativo Android y otros.

Ejemplos de ImageMagick - Comparación de imágenes - MUCHA información & amp; Técnicas, pero mucho implica crear imágenes de "diferencia" para echar un vistazo.

Este clip debería resolver al menos parte del "problema" para imágenes idénticas con diferentes metadatos:

Puedes hacer que IM genere una 'firma' para cada imagen ...

identify -quiet -format "%#" images...

El genera una cadena de hash al igual que hace MD5 y SHA256. Sin embargo, a diferencia de este último, utiliza los datos de imagen reales para generar la firma, no los metadatos de las imágenes.

Por lo tanto, si tiene dos copias de la misma imagen pero con marcas de tiempo de creación / modificación diferentes, debe obtener la misma firma para ambos archivos, mientras que MD5 y SHA256 producirán dos firmas aunque la imagen en sí sea la misma.

ADVERTENCIA: leer y escribir una imagen JPEG generará datos de imagen diferentes y, por lo tanto, una firma diferente. Esto se debe simplemente a los usos de formato de imagen JPEG de compresión con pérdida.

Luego compare los hashes con la herramienta de su elección, y le gustará Linux con el que probablemente esté familiarizado if [[ "$string1" == "$string2" ]] ...


Algunas otras opciones posibles:

Pero, tal vez, una mejor estrategia de copia de seguridad que solo realice copias de seguridad de las imágenes "maestras" de alta resolución, ignorando las miniaturas creadas & amp; las carpetas no maestras serían mucho más rápidas y amp; más fácil.

Xen2050
fuente
Gracias, pero ¿tienes alguna experiencia con alguno de ellos? ¿Puedes hacer afirmaciones sobre la fiabilidad de cada uno? ¿Puedes mostrar ejemplos de las entradas & amp; salidas? ... o es solo una lista de los primeros resultados de Google que también encontré? :)
Rody Oldenhuis
Esto no es una respuesta, sino solo una lista abierta de herramientas. Por ejemplo, sé por uso personal que ImageMagick puede hacer una comparación de imágenes, pero es, en su esencia, un proceso intenso para que funcione bien en una base de producción. Uno tiene que crear esencialmente un marco de trabajo, utilizando herramientas de scripting como bash —Para que ImageMagick funcione bien para una comparación masiva de una manera realmente práctica.
JakeGould
Se agregó una respuesta de línea de comandos para imágenes de "metadatos diferentes". Sin experiencia personal al usarlos, solo las "declaraciones sobre la confiabilidad" de ImageMagick serían que es FOSS, por lo que probablemente sea similar a la confiabilidad de otros proyectos de FOSS.
Xen2050
Me gustan las dos últimas oraciones ... sin embargo, no veo una mejor estrategia; a menudo no hay forma de que los scripts distingan entre una imagen enviada a través de Whatsapp y la imagen "maestra" de la que proviene (por ejemplo, una cámara digital o una cámara del teléfono que se ejecuta desde dentro o fuera de Whatsapp, ...)
Rody Oldenhuis
Tal vez los metadatos allí podrían ayudar? Una imagen "original" de la cámara / teléfono generalmente tiene el tipo de cámara, configuraciones, a veces incluso información de GPS ... No sé si WhatsApp las copia, o si lo hizo podría agregar su propio "¡Usa WhatsApp!" tagine o algo así?
Xen2050
-2

Tres herramientas que he usado en el pasado con excelentes resultados. Todos son para Windows. Ninguno es de código abierto ni para Linux.

  • Picasa : Simplemente carga sus imágenes, luego entra en las funciones experimentales para encontrar los duplicados

  • VisiPics : Esta herramienta busca duplicados exactos en su configuración más restrictiva. Puede "aflojar" la configuración para encontrar imágenes similares. Por ejemplo, puede hacer coincidir las imágenes con las que podría estar frunciendo el ceño en una imagen, pero sonriendo en la otra.

  • Semejanza : Funciona muy bien para el audio, pero también tiene una función para la coincidencia de imágenes. También puede detectar imágenes que no están orientadas correctamente, pero no siempre hace un buen trabajo dejando atrás la imagen de la más alta calidad.

Sun
fuente
Gracias, pero ... soy un hombre de Linux :)
Rody Oldenhuis