0

Facebook と同じように、Delphi デスクトップ アプリケーションで写真にタグを付ける方法が必要です。

これには、人物にタグを簡単に追加する方法が含まれており、写真の人物の上にマウスを置くとタグが表示されます。

「顔の識別とタグ付けのための Delphi コンポーネント」への回答の 2 つの提案は、これを解決しません。

しかし、どこから始めればよいかわかりません。これを行う方法に関するアイデアをウェブ上で見つけることができませんでした。Facebookはどのようにそれを行いますか? または、それを可能にする Delphi 用のコンポーネントがあるかもしれません。

Facebook のようなタグ付けを実装するにはどうすればよいでしょうか?


ps これは、これに関する Facebook の API 定義の一部です: http://wiki.developers.facebook.com/index.php/Photos.addTag

Delphi アプリで実行したい顔タグ機能を実装する Java プログラムを次に示します: fb-photo-uploader

4

4 に答える 4

4

引用した API の主要なパラメーターは、写真 ID、座標、およびタグです。タグは、Facebook ユーザーのユーザー ID にするか、自由形式のテキストにすることができます (タグ付けされたサブジェクトが Facebook ユーザーでない場合)。Facebook は固定サイズの領域を使用してタグ付けされた領域を示すため、1 つの座標のみを使用します。人の顔の中心をクリックすると、Facebook はそのポイントを保存するだけです。

コントロールに画像を表示する場合TImage(これが最初の選択肢であることは明らかです)、OnMouseDownおよびOnMouseUpイベントでマウス クリックを検出できます。(OnClickイベントはより単純ですが、座標はわかりません。) ポイントを取得したら、そのポイントに付随するラベルを要求します。Facebook のユーザー ID のようにあらかじめ決められたラベルを使用することも、通常のテキストを使用することも、独自に考案したものを使用することもできます。タグ値を表すために何を使用するかという問題は、これまでに尋ねてきた他の質問とは直交しています。

Facebook の写真タグ付けの残りの半分は、画像の上にマウスを移動すると、画像の上にタグ テキストが表示され、下のラベルの上にマウスを移動すると、関連する領域が強調表示されます。イベントを処理OnMouseMoveし、必要に応じてラベルと図形を表示または非表示にするコードを記述します。TLabelとを使用する場合、画像を変更する必要さえないかもしれませんが、これらのコントロールを画像の上に表示すると、画像の以降のイベントにTShape干渉する可能性があります。OnMouseMoveいくつかの実験を試して、何がうまくいくかを確認するのにそれほど時間はかかりません.

于 2009-04-01T03:25:54.847 に答える
3

lkessler、Marshall Frymanへの返信を読んだので、いくつかのオプションがあります。

THotSpotImage-すでにTMSコンポーネントがある場合...

ImageEn-すでに持っている場合は...

w2mの回答#3を参照してください。さらに、選択範囲のすべての内側のピクセルを取得する必要があると思います。選択範囲/オブジェクトを保存するにはどうすればよいですか?

選択を保存は、選択自体を保存するだけです。選択範囲内の画像は保存されません。

プロシージャSaveSelectionToFile(const FileName:string); SaveSelectionToFileは、現在の選択を指定されたファイルに保存します。例ImageEnView1.Select(10,10,100,100); ImageEnView1.SaveSelectionToFile('selection1'); .. sel1.Position:= 0; ImageEnView1.LoadSelectionFromFile('selection1'); //これはSelect(10,10,100,100)のようなものです

于 2009-04-01T17:43:35.910 に答える
0

Graphic32-libraryでは、画像内に複数のレイヤーを重ねることができます。標準で提供されているレイヤーの 1 つは、ユーザーが実行時にレイヤーの位置やサイズを変更できるようにするTRubberbandLayerです。

TImage32 コンポーネントの mousemove イベントには、現在カーソルの下にあるレイヤを示すパラメータがあります。

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

ラバーバンドレイヤーとマウスムーブイベントの組み合わせが良い解決策になると思います。

于 2009-04-02T07:25:50.113 に答える
0

私はあなたの質問について少し混乱しています。Facebook と対話しようとしていますか、それとも単に機能をコピーしようとしていますか?

機能をコピーしようとしている場合: 画像を表示するだけで、ユーザーに四角形を選択させ、画像を新しいコピーにコピーして他の人に通知し、DB にタグを適用できるはずです。いくつかの役立つリンク:これは選択した画像の例で、これは画像部分のコピーの例です。実際には、ペイントボックスで画像を選択できると思いますが、実際にそれらのいずれかで永遠に遊んだことはありません。

API にアクセスしようとしている場合: .NET インターフェイスが機能する場合があります。私が知る限り、COM インターフェイスがないため、独自のコネクタを作成するか、.NET Delphi アプリを使用する必要があります。注: この情報はすべて Google から提供されたものであるため、これが実際の現状であると断言するつもりはありません。私が見た他の Facebook API リクエストは 2007 年のものだけでした。

自動顔認識を行いたい場合は、参照されている質問の OpenCV が適切な方法のように見えます (特に C++ Builder にアクセスできる場合)。

于 2009-04-01T01:34:52.367 に答える