0

私は、ユーザーからすべての(つまり「たくさんの」)写真を撮るアプリ(Rails 3.2、Mongoid)に取り組んでいます。最初にアルバムを取得し(<userid>/albums)、次にアルバムごとに写真を取得し(<albumid>/photos)、次にユーザーの写真を取得します(<userid>/photos)。次に、各写真に対していくつかの操作を実行し、それらをDBに保存します。

現在、セーフティネットとして、「孤立した」写真ごとに、重複を避けるために、写真がまだ存在していないかどうかを確認しています。現在のチェックは、existsクエリを使用してデータベースで実行されます。ただし、これは多くのデータベースクエリを作成するため、これは受け入れられません。写真を追跡するために配列を使用してサーバー側でそれを実行しようとしましたが、それははるかに遅くなりました(Array#select私のメモリが正しい場合に使用しました)。

それで、2つの質問:1 /この「セーフティネット」は役に立ちますか、それとも孤立した写真を複製することはできないのは当然だと思いますか?はいと思いますが、チェックは理由があると思います。2 /データベースに重複がないことを確認するためにチェックする必要がある場合、効率的にするにはどうすればよいですか?

編集

本当に重複している可能性があるようですので、質問1/は解決しました。さて、2について:アルバムに属している場合、取得した写真フィールドから「推測」することは可能ですか?のようなフィールドはありませんがalbum_id?「写真がからuserではなく、userタグ付けされている場合」のように->孤児?

お時間をいただきありがとうございます!

4

3 に答える 3

1

わかりました。手を少し汚して、孤立した写真のアルバムを見つけようとします。

免責事項、これらの方法はFacebookによって変更される可能性があり、発表されない場合があります。
IE-GraphAPIでは何の意味もないURI構造を利用します。FacebookはこれらのURIを変更する可能性がありますが、APIは変更しないため、開発者に変更を警告する必要はありません。

にグラフAPI呼び出しを行うと/me/PHOTO_ID、次のような応答が返されます。

{
  "id": "101...", 
  "from": {
    "name": "Lix", 
    "id": "101..."
  }, 
  "name": "Carrot cake chocolate cake.", 
  "picture": "https://fbcdn-photos...jpg", 
  ...
  "link": "https://www.facebook.com/photo.php?fbid=101...&set=a.105...&type=1", 
  ...
}

そこで、私はその回答を取り除いて、link物件について具体的に話すことができるようにしました。ご覧のとおり、これはAPIとは関係のないリンクではなく、Facebook内の画像への一種のパーマリンクです。そのURLに移動すると、次のようなものが表示されます。クラシック(ライトボックススタイルなし)の写真ビュー。

パラメータをもう少し詳しく見てみましょう。link今回は実際の例を使用します-

https://www.facebook.com/photo.php?fbid=376995716728&set=a.376995711728.190761.20531316728&type=3

3つのパラメータがあることがわかります:

  1. fbid
  2. set
  3. type

ばかげているように聞こえますが(そしてかなりばかげています:)、fbidパラメータは実際にはphoto_idです。setパラメータの形式は。a.{NUM}.{NUM}.{NUM}です。後の最初の数字のバッチはa.、その写真のalbum_idです。

メソッドが表示されたので、いつでも変更に対して脆弱であることがわかります。Facebookは、90日間の重大な変更を加えて公開することなく、常にUIの更新をプッシュします。..yadda..yadda..yadda...サイト内の内部ナビゲーションに使用するURLです。だから、注意してください...

于 2012-04-15T19:23:34.323 に答える
1

はい、できます:-)

ドキュメントから:写真FQLテーブル

ID XXXXXXの特定の写真の場合:

select owner,album_object_id from photo where object_id=XXXXXX

何も得られない場合、それはあなたがあなたの外にある写真を照会したことを意味します

access tokenリーチ(他の人の写真をクエリ)。

ユーザーの写真にアクセスするか、ユーザーの友達の写真の1つにuser_photosアクセスするには、許可が必要です。friends_photos

それ以外の場合は、その写真のアルバムIDをalbum_object_id

グラフAPIエクスプローラーで、[アクセストークンの取得user_photos]ボタンをクリックし、クエリをテストするときにアクセス許可を確認してください。

PS

念のため、さまざまな写真でこれをテストしましたが、すべてのテストが戻ってきましたpositive :-)

グラフAPIエクスプローラーでテストするためのリンク:

https://developers.facebook.com/tools/explorer/?method=GET&path=fql%3Fq%3Dselect%20owner%2Calbum_object_id%20from%20photo%20where%20object_id%3DXXXXXXXX 

(写真IDでXXXXXXXXを変更することを忘れないでください)

于 2012-04-16T19:24:45.677 に答える
0

あなたの質問のどの部分が同一の画像の検出に関係しているかわからない。これが実際に対処している問題の一部である場合、1つのある種の強引なアプローチは次のようになります。

Examine image dimensions and filesize.  If no other image has these same properties(height, width, filesize), then the image cannot be a duplicate.  

If two images may be duplicates, perform pixel-by-pixel digital subtraction.  If result is zero, then images are duplicates.  

データセットによっては、これは「実装が難しくない」+「プロセッサを集中的に使用しない」+「常に正確な結果を返す」の適切な組み合わせである可能性があります。

他の多くのよりエレガントなアプローチが存在します。ここでいくつかの議論を見ることができます:
画像比較-高速アルゴリズム
とここ:
異なる解像度での画像の同等性の検出

あなたが議論している問題が「特定の画像の元のPATHまたはFILE_LOCATIONをどのように判断できるか」という質問である場合、インポートされる各写真の出所を知る必要があると思います。

于 2012-04-15T19:09:21.110 に答える