Дельфи:Как пометить фотографии, как это делает Facebook

StackOverflow https://stackoverflow.com/questions/703542

Вопрос

Мне нужен способ отмечать фотографии в настольном приложении Delphi так, как это делает Facebook.

Это включает в себя способ легко добавлять теги к людям, а затем наводить указатель мыши на человека на фотографии, чтобы отобразить тег.

Два предложения в ответе:"Компоненты Delphi для идентификации и маркировки лиц"не решай это.

Но я понятия не имею, с чего начать, и не смог найти в Интернете идей, как это сделать.Как Facebook это делает?Или, может быть, есть компонент для Delphi, который позволяет это сделать.

Как лучше всего реализовать теги, подобные Facebook?


п.с.Вот некоторые из определений API Facebook: http://wiki.developers.facebook.com/index.php/Photos.addTag

Вот Java-программа, реализующая функцию маркировки лиц, которую я хочу реализовать в своем приложении Delphi: загрузчик фотографий на Facebook

Это было полезно?

Решение

Ключевые параметры приведенного вами API — это идентификатор изображения, координаты и тег.Тег может быть либо идентификатором пользователя Facebook, либо текстом в произвольной форме (для случая, когда отмеченный субъект не является пользователем Facebook).Facebook использует только одну координату, поскольку для обозначения отмеченной области использует области фиксированного размера;идея состоит в том, что вы нажимаете на центр лица человека, а Facebook просто сохраняет эту точку.

Если вы отобразите изображение в TImage (в конце концов, это очевидный первый выбор), вы можете обнаружить щелчки мыши с помощью OnMouseDown и OnMouseUp события.( OnClick Событие проще, но не сообщает вам координаты.) Как только вы получили точку, запросите метку, сопровождающую эту точку.Вы можете использовать заранее определенные метки, например идентификаторы пользователей Facebook, или просто использовать обычный текст, или использовать что-то свое, придуманное вами.Вопрос о том, что вы используете для представления значения тега, ортогонален любым другим вопросам, которые вы задавали до сих пор.

Другая половина тегов фотографий в Facebook заключается в том, что при наведении указателя мыши на изображение текст тега отображается поверх изображения, а при наведении указателя мыши на метки ниже выделяются связанные области.Ручка OnMouseMove события и напишите код для отображения или скрытия меток и фигур по мере необходимости.Если вы используете TLabel и TShape, вам, возможно, даже не придется изменять изображение, но отображение этих элементов управления поверх изображения может помешать дальнейшей работе. OnMouseMove события для изображения.Это не займет много времени, чтобы попробовать несколько экспериментов и посмотреть, что подойдет именно вам.

Другие советы

Лкесслер, я только что прочитал ваш ответ Маршаллу Фрайману, так что, возможно, у вас есть несколько вариантов:

THotSpotImage - Если у вас уже есть компоненты TMS...

ImageEn - на случай, если они у вас уже есть...

Видеть ответ w2m №3 Я думаю, что в дальнейшем мне нужно получить все внутренние пиксели моих выборов, так как я могу сохранить свои выборы/объекты?

Сохранить выбор просто сохраняет сам выбор.Он не сохраняет изображение внутри выбора:

процедура SaveSelectionToFile (const FileName: строка);SaveSelectionToFile сохраняет текущий выбор в указанный файл.Пример ImageEnView1.select (10,10 100 100);ImageEnView1.SaveSelectionToFile('selection1');..сел1.Позиция:=0;ImageEnView1.LoadSelectionFromFile('выбор1');// это похоже на Select (10,10 100 100)

Я немного в замешательстве относительно вашего вопроса.Вы пытаетесь взаимодействовать с Facebook или просто копируете функциональность?

Если вы пытаетесь скопировать функциональность:Вы должны иметь возможность просто отобразить изображение, позволить пользователю выбрать прямоугольник, возможно, скопировать изображение в новую копию, чтобы уведомить другого человека, и применить тег в БД.Некоторые полезные ссылки: здесь это пример выбранного изображения и здесь — это пример копии изображения.На самом деле я думаю, что вы могли бы выбрать изображение в ящике для рисования, но на самом деле никогда не играли ни с одним из них.

Если вы пытаетесь получить доступ к API:Интерфейс .NET может вам подойти.Насколько я могу судить, COM-интерфейса нет, поэтому вам придется написать собственный соединитель или использовать приложение .NET Delphi.Примечание:вся эта информация поступает из Google, поэтому я не буду клясться, что это действительно текущее положение вещей.Единственный другой запрос API Facebook, который я видел, был датирован 2007 годом.

Если вы хотите выполнить автоматическое распознавание лиц, OpenCV из упомянутого вопроса выглядит достойным способом сделать это (особенно если у вас есть доступ к C++ Builder).

в Графическая32-библиотека, в изображении можно располагать несколько слоев друг на друге.Один из слоев, поставляемый «из коробки», представляет собой TRubberbandLayer это позволяет пользователю перемещать/изменять размер слоя во время выполнения.

Событие mousemove для компонента TImage32 имеет параметр, который указывает слой, который в данный момент находится под курсором.

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

Я думаю, что комбинация резиновых слоев и события mousemove должна быть хорошим решением.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top