デルフィ:Facebook のように写真にタグを付ける方法
質問
Facebook と同じように、Delphi デスクトップ アプリケーションで写真にタグを付ける方法が必要です。
これには、人物の上にタグを簡単に追加し、写真内の人物の上にマウスを移動してタグを表示する方法が含まれます。
回答に含まれる 2 つの提案は次のとおりです。」顔の識別とタグ付けのための Delphi コンポーネント「これを解決しないでください。
しかし、どこから始めればよいのか見当もつかず、これを行う方法についてウェブ上でアイデアを見つけることができませんでした。Facebookはどうやってやっているのでしょうか?あるいは、それを可能にする Delphi 用のコンポーネントがあるかもしれません。
Facebook のようなタグ付けを実装するには、どのような方法が最適でしょうか?
追記これに対する Facebook の API 定義の一部を次に示します。 http://wiki.developers.facebook.com/index.php/Photos.addTag
これは、Delphi アプリで実行したい顔のタグ付け機能を実装する Java プログラムです。 FBフォトアップローダー
解決
あなたが引用したAPIの主要なパラメータは、画像ID、座標、およびタグです。タグは、FacebookのユーザのユーザIDのいずれかであり得る、またはそれは、自由形式のテキスト(ケースのタグ付き対象がFacebookのユーザーでない場合)であってもよいです。 Facebookは、それがタグ付けされた領域を示すために固定サイズの領域を使用しているため、ひとつの座標使用します。アイデアは、あなたが人の顔の中心をクリックしてということで、Facebookはちょうどそのポイントを格納します。
あなたは(つまり、すべての後に明らかに最初の選択肢、です)TImage
コントロール内の画像を表示する場合は、、あなたはOnMouseDown
とOnMouseUp
イベントとマウスクリックを検出することができます。 (OnClick
イベントは簡単ですが、あなたの座標を教えてくれません。)あなたがポイントを獲得したら、そのポイントを同行するラベルの入力を要求します。あなたは、FacebookのユーザーIDと同様に、所定のラベルを使用するか、または普通のテキストを使用するか、または独自の工夫のものを使用することができます。あなたがタグ値を表すために使用するものの質問は、あなたがこれまで求めてきました、他のどんな質問に直交している。
Facebookの写真のタグ付けの残りの半分は、画像の上にマウスを移動すると、画像の上にタグテキストを表示し、ハイライト下のラベルに関連する領域の上にマウスを移動していることです。 OnMouseMove
イベントを処理し、適宜ラベル及び形状を表示または非表示にするいくつかのコードを書きます。あなたはTLabel
とTShape
を使用する場合は、あなたも、画像を変更する必要はないかもしれませんが、画像の上にこれらのコントロールを示すことは、画像のための更なるOnMouseMove
イベントに干渉する可能性があります。これは、いくつかの実験を試してみて、あなたのために働くかを見るために時間がかかりすぎてはいけません。
他のヒント
lkessler、マーシャル・フライマンへのあなたの返信を読みました。それでは、いくつかの選択肢があるかもしれません:
Tホットスポット画像 - すでに TMS コンポーネントをお持ちの場合...
画像英語 - すでにお持ちの場合は...
見る w2mさんの答え #3 さらに、選択範囲のすべての内側のピクセルを取得する必要があると思うので、 選択範囲/オブジェクトを保存するにはどうすればよいですか?
選択範囲を保存は、選択範囲自体を保存するだけです。画像は保存されません 選択範囲の内側:
プロシージャ SaveSelectionToFile(const FileName:string);SaveSelectionToFile は、現在の選択内容を指定されたファイルに保存します。例 ImageEnView1.Select(10,10,100,100);ImageEnView1.SaveSelectionToFile('selection1');..sel1.位置:=0;ImageEnView1.LoadSelectionFromFile('selection1');これは、 選択(10,10,100,100)
あなたの質問に関しては少し混乱しています。Facebook と対話しようとしていますか、それとも機能をコピーしただけですか?
機能をコピーしようとしている場合:画像を表示し、ユーザーに四角形を選択させ、場合によっては画像を新しいコピーにコピーして他の人に通知し、DB にタグを適用することもできるはずです。いくつかの役立つリンク: ここ は選択した画像の例であり、 ここ コピー画像部分の例です。実際には、ペイントボックスで画像を選択できると思いますが、実際にそれらのいずれかを永遠に試したことはありません。
API にアクセスしようとしている場合:.NET インターフェイスが役立つ場合があります。私の知る限り、COM インターフェイスはないため、独自のコネクタを作成するか、.NET Delphi アプリを使用する必要があります。注記:この情報はすべて Google から提供されているので、これが実際の現状であると断言するつもりはありません。私が見た唯一の Facebook API リクエストは 2007 年のものでした。
自動顔認識を実行したい場合は、参照された質問の OpenCV が適切な方法のように見えます (特に C++ Builder にアクセスできる場合)。
Graphic32ライブラリのでは、画像内の各他の時にいくつかの層を持つことができます。箱の外に設けられている層の一つは、ありますTRubberbandLayer のユーザーが実行時にレイヤーのサイズを変更/再配置することを可能にすること。
TImage32-コンポーネントのMouseMoveイベントは、カーソルの下に現在層を与えるパラメータを有します。
type TImgMouseMoveEvent = procedure(Sender: TObject; Shift: TShiftState; X, Y: Integer; Layer: TCustomLayer) of object;
rubberbandlayersの組み合わせとのMouseMoveイベントは、私が思うに、良い解決策である必要があります。