2009-04-01 34 views
0

J'ai besoin d'un moyen de marquer des photos dans une application de bureau Delphi comme le fait Facebook.Delphi: Comment étiqueter des photos comme le fait facebook

Cela inclut un moyen d'ajouter facilement les étiquettes sur les personnes, puis de passer la souris sur la personne sur la photo pour afficher l'étiquette.

Les deux suggestions dans la réponse donnée à: "Delphi Components for Face Identification and Tagging" ne résolvent pas cela.

Mais je n'ai aucune idée par où commencer, et j'ai été incapable de trouver des idées sur le web pour savoir comment faire. Comment Facebook le fait-il? Ou peut-être qu'il y a un composant pour Delphi qui le permettra.

Quel serait le meilleur moyen de mettre en œuvre un marquage de type Facebook?


p.s. Ceci est une partie de la définition de l'API de Facebook pour cela: http://wiki.developers.facebook.com/index.php/Photos.addTag

Voici un programme Java qui implémente le visage tagging fonctionnalité que je veux faire dans mon application Delphi: fb-photo-uploader

Répondre

4

Les paramètres clés de l'API que vous avez cités sont l'ID de l'image, les coordonnées et l'étiquette. Le tag peut être soit l'identifiant d'un utilisateur de Facebook, soit un texte de forme libre (dans le cas où le sujet marqué n'est pas un utilisateur de Facebook). Facebook utilise une seule coordonnée car elle utilise des régions de taille fixe pour désigner une zone marquée. l'idée est que vous cliquez sur le centre du visage d'une personne, et Facebook enregistre juste ce point.

Si vous affichez une image dans un contrôle TImage (qui est le premier choix évident, après tout), vous pouvez détecter les clics de souris avec les événements OnMouseDown et OnMouseUp. (L'événement OnClick est plus simple, mais ne vous indique pas les coordonnées.) Une fois que vous avez acquis un point, demandez une étiquette pour accompagner ce point. Vous pouvez utiliser des étiquettes prédéterminées, comme les identifiants d'utilisateur de Facebook, ou simplement utiliser du texte ordinaire, ou utiliser quelque chose de votre propre conception. La question de savoir ce que vous utilisez pour représenter une valeur d'étiquette est orthogonale à toutes les autres questions que vous avez posées jusqu'à présent.L'autre moitié du marquage des photos de Facebook consiste à déplacer le pointeur de la souris sur l'image pour afficher le texte de l'étiquette sur l'image et déplacer la souris sur les étiquettes ci-dessous pour mettre en surbrillance les régions associées. Gérez les événements OnMouseMove et écrivez du code pour afficher ou masquer les étiquettes et les formes, selon le cas. Si vous utilisez TLabel et TShape, vous n'aurez peut-être même pas besoin de modifier l'image, mais afficher ces contrôles au-dessus de l'image peut interférer avec d'autres événements OnMouseMove pour l'image. Cela ne devrait pas prendre trop de temps pour essayer quelques expériences et voir ce qui fonctionne pour vous.

0

Je suis un peu confus quant à votre question. Essayez-vous d'interagir avec Facebook ou simplement copier la fonctionnalité?

Si vous essayez de copier la fonctionnalité: Vous devriez pouvoir afficher l'image, laisser l'utilisateur sélectionner le rectangle, éventuellement copier l'image dans une nouvelle copie pour informer l'autre personne, et appliquer une balise dans une base de données. Quelques liens utiles: here est un exemple d'image de sélection et here est l'exemple de copie d'image. En fait, je pense que vous pourriez faire l'image de sélection dans une boîte de peinture, mais je n'ai pas vraiment joué avec une de ces images pour toujours.

Si vous essayez d'accéder à l'API: L'interface .NET peut fonctionner pour vous. D'après ce que je peux dire, il n'y a pas d'interface COM, donc vous devrez écrire votre propre connecteur ou utiliser une application .NET Delphi. Remarque: toutes ces informations proviennent de Google, donc je ne jurerai pas que c'est vraiment l'état actuel des choses. La seule autre demande d'API Facebook que j'ai vue date de 2007.

Si vous voulez faire une reconnaissance faciale automatique, OpenCV de la question référencée ressemble à une manière décente de le faire (surtout si vous avez accès à C++ Builder).

+0

Merci pour la réponse réfléchie et les exemples utiles qui est le genre de chose que je cherche. Non, je ne veux pas interagir avec Facebook, mais je cherche un moyen facile d'imiter sa fonctionnalité et de prendre une photo, de laisser l'utilisateur sélectionner une région et de stocker une étiquette avec la photo. – lkessler

3

lkessler, je viens de lire votre réponse à Marshall Fryman, donc peut-être un couple d'options pour vous:

THotSpotImage - Si vous avez déjà des composants TMS ...

ImageEn - si vous avez déjà eux ...

Voir w2m's answer #3 Je pense en plus je dois obtenir tous les pixels intérieurs de mes sélections, donc comment je peux enregistrer mes sélections/objets?

Enregistrer la sélection enregistre simplement la sélection elle-même. Il ne sauvegarde pas l'image à l'intérieur de la sélection:

procédure SaveSelectionToFile (const FileName: string); SaveSelectionToFile enregistre la sélection en cours dans le fichier spécifié. Exemple ImageEnView1.Select (10, 101, 100, 100); ImageEnView1.SaveSelectionToFile ('selection1'); .. sel1.Position: = 0; ImageEnView1.LoadSelectionFromFile ('selection1'); // ceci est comme Select (10,10,100,100)

+0

Bon choix d'options. Je souhaite qu'il y avait un THotSpotImage en dehors de TMS. Je ne voudrais pas l'obtenir uniquement pour ce composant. J'utilise déjà LMD ElPack pour mes composants supplémentaires, et c'est suffisant. – lkessler

0

Dans le Graphic32-library, vous pouvez avoir plusieurs couches sur l'autre dans une image. L'une des couches fournies est une TRubberbandLayer qui permet à l'utilisateur de repositionner/redimensionner la couche lors de l'exécution.

L'événement mousemove pour le composant TImage32 possède un paramètre qui donne la couche actuellement sous le curseur. Une combinaison de couches de caoutchouc et l'événement mousemove devrait être une bonne solution, je pense.