Delphi: Cómo etiquetar fotos de la manera en que Facebook lo hace
tags tagging (4)
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.
Necesito una forma de etiquetar fotos en una aplicación de escritorio Delphi de la manera 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
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 reconocimiento automático de rostros, OpenCV de la pregunta a la que se hace referencia parece una forma decente de hacerlo (especialmente si tiene acceso a C ++ Builder).
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 control de TImage
(esa es la primera opción obvia, después de todo), puede detectar clics del mouse con los eventos OnMouseDown
y OnMouseUp
. (El evento OnClick
es más simple, pero no te dice las coordenadas). Una vez que hayas adquirido un punto, solicita 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. OnMouseMove
eventos OnMouseMove
y escriba código para mostrar u ocultar etiquetas y formas, según corresponda. Si usa TLabel
y TShape
, es posible que ni siquiera tenga que modificar la imagen, pero mostrar esos controles en la parte superior de la imagen podría interferir con más eventos de OnMouseMove
para la imagen. No debería tomar demasiado tiempo probar algunos experimentos y ver qué funciona para usted.
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 internos 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)