fiftyone-find-duplicates
FiftyOneデータセット内で、類似した画像やほぼ同一の画像を、脳の類似性計算を用いて探し出すSkillで、データセットの重複排除や類似画像の発見、視覚的に似たコンテンツのクラスタリング、冗長なサンプルの削除などに役立ちます。
📜 元の英語説明(参考)
Find duplicate or near-duplicate images in FiftyOne datasets using brain similarity computation. Use when users want to deduplicate datasets, find similar images, cluster visually similar content, or remove redundant samples. Requires FiftyOne MCP server with @voxel51/brain plugin installed.
🇯🇵 日本人クリエイター向け解説
FiftyOneデータセット内で、類似した画像やほぼ同一の画像を、脳の類似性計算を用いて探し出すSkillで、データセットの重複排除や類似画像の発見、視覚的に似たコンテンツのクラスタリング、冗長なサンプルの削除などに役立ちます。
※ jpskill.com 編集部が日本のビジネス現場向けに補足した解説です。Skill本体の挙動とは独立した参考情報です。
下記のコマンドをコピーしてターミナル(Mac/Linux)または PowerShell(Windows)に貼り付けてください。 ダウンロード → 解凍 → 配置まで全自動。
mkdir -p ~/.claude/skills && cd ~/.claude/skills && curl -L -o fiftyone-find-duplicates.zip https://jpskill.com/download/17014.zip && unzip -o fiftyone-find-duplicates.zip && rm fiftyone-find-duplicates.zip
$d = "$env:USERPROFILE\.claude\skills"; ni -Force -ItemType Directory $d | Out-Null; iwr https://jpskill.com/download/17014.zip -OutFile "$d\fiftyone-find-duplicates.zip"; Expand-Archive "$d\fiftyone-find-duplicates.zip" -DestinationPath $d -Force; ri "$d\fiftyone-find-duplicates.zip"
完了後、Claude Code を再起動 → 普通に「動画プロンプト作って」のように話しかけるだけで自動発動します。
💾 手動でダウンロードしたい(コマンドが難しい人向け)
- 1. 下の青いボタンを押して
fiftyone-find-duplicates.zipをダウンロード - 2. ZIPファイルをダブルクリックで解凍 →
fiftyone-find-duplicatesフォルダができる - 3. そのフォルダを
C:\Users\あなたの名前\.claude\skills\(Win)または~/.claude/skills/(Mac)へ移動 - 4. Claude Code を再起動
⚠️ ダウンロード・利用は自己責任でお願いします。当サイトは内容・動作・安全性について責任を負いません。
🎯 このSkillでできること
下記の説明文を読むと、このSkillがあなたに何をしてくれるかが分かります。Claudeにこの分野の依頼をすると、自動で発動します。
📦 インストール方法 (3ステップ)
- 1. 上の「ダウンロード」ボタンを押して .skill ファイルを取得
- 2. ファイル名の拡張子を .skill から .zip に変えて展開(macは自動展開可)
- 3. 展開してできたフォルダを、ホームフォルダの
.claude/skills/に置く- · macOS / Linux:
~/.claude/skills/ - · Windows:
%USERPROFILE%\.claude\skills\
- · macOS / Linux:
Claude Code を再起動すれば完了。「このSkillを使って…」と話しかけなくても、関連する依頼で自動的に呼び出されます。
詳しい使い方ガイドを見る →- 最終更新
- 2026-05-18
- 取得日時
- 2026-05-18
- 同梱ファイル
- 1
📖 Skill本文(日本語訳)
※ 原文(英語/中国語)を Gemini で日本語化したものです。Claude 自身は原文を読みます。誤訳がある場合は原文をご確認ください。
FiftyOne データセット内の重複を検出する
概要
FiftyOne の brain 類似性演算子を使用して、重複またはほぼ重複した画像を検出および削除します。深層学習埋め込みを使用して、視覚的に類似した画像を識別します。
このスキルは以下の場合に使用します:
- データセットから重複画像を削除する
- ほぼ重複した画像(類似しているが同一ではない)を検出する
- 視覚的に類似した画像をクラスタリングする
- トレーニング前にデータセットをクリーニングする
前提条件
- FiftyOne MCP サーバーがインストールされ、実行されていること
@voxel51/brainプラグインがインストールされ、有効になっていること- FiftyOne にロードされた画像サンプルを含むデータセット
主要な指示
常に以下のルールに従ってください:
1. 最初にコンテキストを設定する
set_context(dataset_name="my-dataset")
2. FiftyOne App を起動する
Brain 演算子は委譲されるため、アプリが必要です。
launch_app()
初期化に 5〜10 秒待ちます。
3. 演算子を動的に検出する
# すべての brain 演算子をリストする
list_operators(builtin_only=False)
# 特定の演算子のスキーマを取得する
get_operator_schema(operator_uri="@voxel51/brain/compute_similarity")
4. 重複を検出する前に埋め込みを計算する
execute_operator(
operator_uri="@voxel51/brain/compute_similarity",
params={"brain_key": "img_sim", "model": "mobilenet-v2-imagenet-torch"}
)
5. 完了したらアプリを閉じる
close_app()
完全なワークフロー
ステップ 1: セットアップ
# コンテキストを設定する
set_context(dataset_name="my-dataset")
# アプリを起動する(brain 演算子に必要)
launch_app()
ステップ 2: Brain プラグインの確認
# brain プラグインが利用可能かどうかを確認する
list_plugins(enabled=True)
# インストールされていない場合:
download_plugin(
url_or_repo="voxel51/fiftyone-plugins",
plugin_names=["@voxel51/brain"]
)
enable_plugin(plugin_name="@voxel51/brain")
ステップ 3: Brain 演算子の検出
# 利用可能なすべての演算子をリストする
list_operators(builtin_only=False)
# compute_similarity のスキーマを取得する
get_operator_schema(operator_uri="@voxel51/brain/compute_similarity")
# find_duplicates のスキーマを取得する
get_operator_schema(operator_uri="@voxel51/brain/find_duplicates")
ステップ 4: 類似性の計算
# 埋め込みを計算するために演算子を実行する
execute_operator(
operator_uri="@voxel51/brain/compute_similarity",
params={
"brain_key": "img_duplicates",
"model": "mobilenet-v2-imagenet-torch"
}
)
ステップ 5: ほぼ重複の検出
execute_operator(
operator_uri="@voxel51/brain/find_near_duplicates",
params={
"similarity_index": "img_duplicates",
"threshold": 0.3
}
)
しきい値のガイドライン(距離ベース、低いほど類似度が高い):
0.1= 非常に類似している(ほぼ完全に重複)0.3= ほぼ重複(推奨されるデフォルト)0.5= 類似した画像0.7= 大まかに類似している
この演算子は、2 つの保存されたビューを自動的に作成します。
near duplicates: ほぼ重複しているすべてのサンプルrepresentatives of near duplicates: 各グループからの代表的なサンプル
ステップ 6: アプリで重複を表示する
重複を検出した後、set_view を使用して FiftyOne App に表示します。
オプション A: near_dup_id フィールドでフィルタリングする
# near_dup_id を持つすべてのサンプルを表示する(すべての重複)
set_view(exists=["near_dup_id"])
オプション B: 特定の重複グループを表示する
# 特定の重複グループ ID を持つサンプルを表示する
set_view(filters={"near_dup_id": 1})
オプション C: 保存されたビューをロードする(利用可能な場合)
# 自動的に作成された保存されたビューをロードする
set_view(view_name="near duplicates")
オプション D: フィルタをクリアしてすべてのサンプルを表示する
clear_view()
find_near_duplicates 演算子は、near_dup_id フィールドをサンプルに追加します。同じ ID を持つサンプルは互いに重複しています。
ステップ 7: 重複の削除
オプション A: deduplicate 演算子を使用する(グループごとに 1 つの代表を保持する)
execute_operator(
operator_uri="@voxel51/brain/deduplicate_near_duplicates",
params={}
)
オプション B: アプリ UI から手動で削除する
set_view(exists=["near_dup_id"])を使用して重複を表示する- アプリ (http://localhost:5151/) でサンプルを確認する
- 削除するサンプルを選択する
- アプリで削除アクションを使用する
ステップ 8: クリーンアップ
close_app()
利用可能なツール
セッションビューツール
| ツール | 説明 |
|---|---|
set_view(exists=[...]) |
フィールドに None 以外の値があるサンプルをフィルタリングする |
set_view(filters={...}) |
正確なフィールド値でサンプルをフィルタリングする |
set_view(tags=[...]) |
タグでサンプルをフィルタリングする |
set_view(sample_ids=[...]) |
特定のサンプル ID を選択する |
set_view(view_name="...") |
名前で保存されたビューをロードする |
clear_view() |
フィルタをクリアし、すべてのサンプルを表示する |
重複のための Brain 演算子
list_operators() を使用して検出 し、get_operator_schema() を使用してパラメータを確認します。
| 演算子 | 説明 |
|---|---|
@voxel51/brain/compute_similarity |
埋め込みと類似性インデックスを計算する |
@voxel51/brain/find_near_duplicates |
ほぼ重複したサンプルを検出する |
@voxel51/brain/deduplicate_near_duplicates |
重複を削除し、代表を保持する |
@voxel51/brain/find_exact_duplicates |
正確に重複したメディアファイルを検出する |
@voxel51/brain/deduplicate_exact_duplicates |
正確な重複を削除する |
@voxel51/brain/compute_uniqueness |
ユニークネススコアを計算する |
一般的なユースケース
ユースケース 1: 正確な重複の削除
誤って重複したファイルの場合(同一のバイト):
set_context(dataset_name="my-dataset")
launch_app()
execute_operator(
operator_uri="@voxel51/brain/find_exact_duplicates",
params={}
)
execute_operator(
operator_uri="@voxel51/brain/deduplicate_exact_duplicates",
params={}
)
close_app()
ユースケース 2: ほぼ重複の検出とレビュー
視覚的に類似しているが同一ではない画像の場合:
set_context(dataset_name="my-dataset")
launch_app()
# 埋め込みを計算する
execute_operator(
operator_uri="@voxel51/brain/compute_similarity",
params={"bra 📜 原文 SKILL.md(Claudeが読む英語/中国語)を展開
Find Duplicates in FiftyOne Datasets
Overview
Find and remove duplicate or near-duplicate images using FiftyOne's brain similarity operators. Uses deep learning embeddings to identify visually similar images.
Use this skill when:
- Removing duplicate images from datasets
- Finding near-duplicate images (similar but not identical)
- Clustering visually similar images
- Cleaning datasets before training
Prerequisites
- FiftyOne MCP server installed and running
@voxel51/brainplugin installed and enabled- Dataset with image samples loaded in FiftyOne
Key Directives
ALWAYS follow these rules:
1. Set context first
set_context(dataset_name="my-dataset")
2. Launch FiftyOne App
Brain operators are delegated and require the app:
launch_app()
Wait 5-10 seconds for initialization.
3. Discover operators dynamically
# List all brain operators
list_operators(builtin_only=False)
# Get schema for specific operator
get_operator_schema(operator_uri="@voxel51/brain/compute_similarity")
4. Compute embeddings before finding duplicates
execute_operator(
operator_uri="@voxel51/brain/compute_similarity",
params={"brain_key": "img_sim", "model": "mobilenet-v2-imagenet-torch"}
)
5. Close app when done
close_app()
Complete Workflow
Step 1: Setup
# Set context
set_context(dataset_name="my-dataset")
# Launch app (required for brain operators)
launch_app()
Step 2: Verify Brain Plugin
# Check if brain plugin is available
list_plugins(enabled=True)
# If not installed:
download_plugin(
url_or_repo="voxel51/fiftyone-plugins",
plugin_names=["@voxel51/brain"]
)
enable_plugin(plugin_name="@voxel51/brain")
Step 3: Discover Brain Operators
# List all available operators
list_operators(builtin_only=False)
# Get schema for compute_similarity
get_operator_schema(operator_uri="@voxel51/brain/compute_similarity")
# Get schema for find_duplicates
get_operator_schema(operator_uri="@voxel51/brain/find_duplicates")
Step 4: Compute Similarity
# Execute operator to compute embeddings
execute_operator(
operator_uri="@voxel51/brain/compute_similarity",
params={
"brain_key": "img_duplicates",
"model": "mobilenet-v2-imagenet-torch"
}
)
Step 5: Find Near Duplicates
execute_operator(
operator_uri="@voxel51/brain/find_near_duplicates",
params={
"similarity_index": "img_duplicates",
"threshold": 0.3
}
)
Threshold guidelines (distance-based, lower = more similar):
0.1= Very similar (near-exact duplicates)0.3= Near duplicates (recommended default)0.5= Similar images0.7= Loosely similar
This operator creates two saved views automatically:
near duplicates: all samples that are near duplicatesrepresentatives of near duplicates: one representative from each group
Step 6: View Duplicates in App
After finding duplicates, use set_view to display them in the FiftyOne App:
Option A: Filter by near_dup_id field
# Show all samples that have a near_dup_id (all duplicates)
set_view(exists=["near_dup_id"])
Option B: Show specific duplicate group
# Show samples with a specific duplicate group ID
set_view(filters={"near_dup_id": 1})
Option C: Load saved view (if available)
# Load the automatically created saved view
set_view(view_name="near duplicates")
Option D: Clear filter to show all samples
clear_view()
The find_near_duplicates operator adds a near_dup_id field to samples. Samples with the same ID are duplicates of each other.
Step 7: Delete Duplicates
Option A: Use deduplicate operator (keeps one representative per group)
execute_operator(
operator_uri="@voxel51/brain/deduplicate_near_duplicates",
params={}
)
Option B: Manual deletion from App UI
- Use
set_view(exists=["near_dup_id"])to show duplicates - Review samples in the App at http://localhost:5151/
- Select samples to delete
- Use the delete action in the App
Step 8: Clean Up
close_app()
Available Tools
Session View Tools
| Tool | Description |
|---|---|
set_view(exists=[...]) |
Filter samples where field(s) have non-None values |
set_view(filters={...}) |
Filter samples by exact field values |
set_view(tags=[...]) |
Filter samples by tags |
set_view(sample_ids=[...]) |
Select specific sample IDs |
set_view(view_name="...") |
Load a saved view by name |
clear_view() |
Clear filters, show all samples |
Brain Operators for Duplicates
Use list_operators() to discover and get_operator_schema() to see parameters:
| Operator | Description |
|---|---|
@voxel51/brain/compute_similarity |
Compute embeddings and similarity index |
@voxel51/brain/find_near_duplicates |
Find near-duplicate samples |
@voxel51/brain/deduplicate_near_duplicates |
Delete duplicates, keep representatives |
@voxel51/brain/find_exact_duplicates |
Find exact duplicate media files |
@voxel51/brain/deduplicate_exact_duplicates |
Delete exact duplicates |
@voxel51/brain/compute_uniqueness |
Compute uniqueness scores |
Common Use Cases
Use Case 1: Remove Exact Duplicates
For accidentally duplicated files (identical bytes):
set_context(dataset_name="my-dataset")
launch_app()
execute_operator(
operator_uri="@voxel51/brain/find_exact_duplicates",
params={}
)
execute_operator(
operator_uri="@voxel51/brain/deduplicate_exact_duplicates",
params={}
)
close_app()
Use Case 2: Find and Review Near Duplicates
For visually similar but not identical images:
set_context(dataset_name="my-dataset")
launch_app()
# Compute embeddings
execute_operator(
operator_uri="@voxel51/brain/compute_similarity",
params={"brain_key": "near_dups", "model": "mobilenet-v2-imagenet-torch"}
)
# Find duplicates
execute_operator(
operator_uri="@voxel51/brain/find_near_duplicates",
params={"similarity_index": "near_dups", "threshold": 0.3}
)
# View duplicates in the App
set_view(exists=["near_dup_id"])
# After review, deduplicate
execute_operator(
operator_uri="@voxel51/brain/deduplicate_near_duplicates",
params={}
)
# Clear view and close
clear_view()
close_app()
Use Case 3: Sort by Similarity
Find images similar to a specific sample:
set_context(dataset_name="my-dataset")
launch_app()
execute_operator(
operator_uri="@voxel51/brain/compute_similarity",
params={"brain_key": "search"}
)
execute_operator(
operator_uri="@voxel51/brain/sort_by_similarity",
params={
"brain_key": "search",
"query_id": "sample_id_here",
"k": 20
}
)
close_app()
Troubleshooting
Error: "No executor available"
- Cause: Delegated operators require the App executor for UI triggers
- Solution: Direct user to App UI to view results and complete deletion manually
- Affected operators:
find_near_duplicates,deduplicate_near_duplicates
Error: "Brain key not found"
- Cause: Embeddings not computed
- Solution: Run
compute_similarityfirst with abrain_key
Error: "Operator not found"
- Cause: Brain plugin not installed
- Solution: Install with
download_plugin()andenable_plugin()
Error: "Missing dependency" (e.g., torch, tensorflow)
- The MCP server detects missing dependencies automatically
- Response includes
missing_packageandinstall_command - Example response:
{ "error_type": "missing_dependency", "missing_package": "torch", "install_command": "pip install torch" } - Offer to run the install command for the user
- After installation, restart MCP server and retry
Similarity computation is slow
- Use faster model:
mobilenet-v2-imagenet-torch - Use GPU if available
- Process large datasets in batches
Best Practices
- Discover dynamically - Use
list_operators()andget_operator_schema()to get current operator names and parameters - Start with default threshold (0.3) and adjust as needed
- Review before deleting - Direct user to App to inspect duplicates
- Store embeddings - Reuse for multiple operations via
brain_key - Handle executor errors gracefully - Guide user to App UI when needed
Performance Notes
Embedding computation time:
- 1,000 images: ~1-2 minutes
- 10,000 images: ~10-15 minutes
- 100,000 images: ~1-2 hours
Memory requirements:
- ~2KB per image for embeddings
- ~4-8KB per image for similarity index
Resources
License
Copyright 2017-2025, Voxel51, Inc. Apache 2.0 License