Delphi: Cómo etiquetar fotos de la manera en que Facebook lo hace

votos
0

Necesito una forma de etiquetar fotos en una aplicación de escritorio Delphi de la forma en que Facebook lo hace.

Eso incluye alguna manera de agregar fácilmente las etiquetas a las personas, y luego pasar el mouse sobre la persona en la foto para mostrar la etiqueta.

Las dos sugerencias en la respuesta dada a: Componentes Delphi para identificación de rostros y etiquetado no resuelven esto.

Pero no tengo idea de por dónde empezar y no he podido encontrar ideas en la web sobre cómo hacer esto. ¿Cómo lo hace Facebook? O tal vez haya un componente para Delphi que lo permita.

¿Cuál sería la mejor manera de tratar de implementar el etiquetado similar a Facebook?


ps Esta es una de las definiciones API de Facebook para esto: http://wiki.developers.facebook.com/index.php/Photos.addTag

Aquí hay un programa Java que implementa la funcionalidad de etiquetado facial que quiero hacer en mi aplicación Delphi: fb-photo-uploader

Publicado el 01/04/2009 a las 01:02
fuente por usuario
En otros idiomas...                            


4 respuestas

votos
0

Estoy un poco confundido en cuanto a tu pregunta. ¿Estás tratando de interactuar con Facebook o simplemente copiar la funcionalidad?

Si está intentando copiar la funcionalidad: Debería poder mostrar la imagen, dejar que el usuario seleccione el rectángulo, posiblemente copiar la imagen en una nueva copia para notificar a la otra persona y aplicar una etiqueta en un DB. Algunos enlaces útiles: aquí hay un ejemplo de imagen seleccionada y aquí está el ejemplo de la porción de imagen de copia. De hecho, creo que podrías hacer la imagen seleccionada en una caja de pinturas, pero en realidad no has jugado con una de esas para siempre.

Si está intentando acceder a la API: la interfaz .NET puede funcionar para usted. Por lo que puedo decir, no hay una interfaz COM, así que tendrías que escribir tu propio conector o usar una aplicación .NET Delphi. Nota: toda esta información proviene de Google, así que no juraré que realmente es el estado actual de las cosas. La única otra solicitud de API de Facebook que vi fue desde 2007.

Si desea hacer un reconocimiento facial automático, OpenCV de la pregunta a la que se hace referencia parece una forma decente de hacerlo (especialmente si tiene acceso a C ++ Builder).

Respondida el 01/04/2009 a las 02:34
fuente por usuario

votos
4

Los parámetros clave de la API que citó son la identificación con foto, las coordenadas y la etiqueta. La etiqueta puede ser la identificación de usuario de un usuario de Facebook, o puede ser texto de forma libre (para el caso en que el sujeto etiquetado no sea un usuario de Facebook). Facebook usa solo una coordenada porque usa regiones de tamaño fijo para denotar un área etiquetada; la idea es hacer clic en el centro de la cara de una persona, y Facebook simplemente almacena ese punto.

Si muestra una imagen en un TImagecontrol (esa es la primera opción obvia, después de todo), puede detectar los clics del mouse con los eventos OnMouseDowny OnMouseUp. (El OnClickevento es más simple, pero no le informa las coordenadas). Una vez que haya adquirido un punto, solicite una etiqueta para acompañar ese punto. Puede usar etiquetas predeterminadas, como los ID de usuario de Facebook, o simplemente usar texto ordinario, o usar algo que usted mismo haya ideado. La pregunta de qué usa para representar un valor de etiqueta es ortogonal a cualquier otra pregunta que haya hecho hasta ahora.

La otra mitad del etiquetado de fotos de Facebook es que mover el mouse sobre la imagen muestra el texto de la etiqueta sobre la imagen, y mover el mouse sobre las etiquetas a continuación resalta las regiones asociadas. Maneje OnMouseMoveeventos y escriba código para mostrar u ocultar etiquetas y formas, según corresponda. Si usa TLabely TShape, puede que ni siquiera tenga que modificar la imagen, pero mostrar esos controles en la parte superior de la imagen podría interferir con otros OnMouseMoveeventos de la imagen. No debería tomar demasiado tiempo probar algunos experimentos y ver qué funciona para usted.

Respondida el 01/04/2009 a las 04:25
fuente por usuario

votos
3

lkessler, acabo de leer su respuesta a Marshall Fryman, por lo que podría tener un par de opciones para usted:

THotSpotImage : si ya tiene componentes TMS ...

ImageEn - en caso de que ya los tengas ...

Ver la respuesta n. ° 3 de w2m. Creo que es necesario obtener todos los píxeles interiores de mis selecciones, así que ¿cómo puedo guardar mis selecciones / objetos?

Guardar selección solo guarda la selección. No guarda la imagen dentro de la selección:

procedimiento SaveSelectionToFile (const FileName: string); SaveSelectionToFile guarda la selección actual en el archivo especificado. Ejemplo ImageEnView1.Select (10,10,100,100); ImageEnView1.SaveSelectionToFile ('selection1'); .. sel1.Position: = 0; ImageEnView1.LoadSelectionFromFile ('selection1'); // esto es como Seleccionar (10,10,100,100)

Respondida el 01/04/2009 a las 18:43
fuente por usuario

votos
0

En la biblioteca Graphic32 , puede tener varias capas una encima de la otra en una imagen. Una de las capas que se proporciona de fábrica es una TRubberbandLayer que permite al usuario cambiar la posición / redimensionar la capa en tiempo de ejecución.

El evento mousemove para el componente TImage32 tiene un parámetro que le da a la capa actualmente bajo el cursor.

type TImgMouseMoveEvent = procedure(Sender: TObject; Shift: TShiftState; X, Y: Integer; Layer: TCustomLayer) of object;

Una combinación de rubberbandlayers y mousemove-event debería ser una buena solución, creo.

Respondida el 02/04/2009 a las 08:25
fuente por usuario

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more