Documentation de l'API .NET du Video Fingerprinting SDK¶
Vue d'ensemble¶
Le namespace VisioForge Video Fingerprinting fournit des fonctionnalités puissantes pour l'identification, la comparaison et la recherche de contenu vidéo. Il permet aux applications de :
- Générer des empreintes uniques à partir de fichiers vidéo pour l'identification de contenu
- Comparer des vidéos pour déterminer la similarité et détecter les doublons
- Rechercher des fragments vidéo dans des vidéos plus longues (par exemple, trouver des publicités, des intros ou des scènes spécifiques)
- Comparer des images individuelles pour la détection de similarité (Windows uniquement)
- Traiter directement des images vidéo pour générer des empreintes à partir de flux ou de contenu généré
Table des matières¶
- Classe VFPAnalyzer
- Classe VFPFingerPrint
- Classe VFPFingerprintSource
- Classe VFPCompare
- Classe VFPSearch
- Classe VFPFingerPrintDB
- Classe VFPFingerprintFromFrames
- Types de support
- Délégués
Classe VFPAnalyzer¶
Point d'entrée principal des opérations d'empreinte vidéo. Cette classe fournit des méthodes statiques de haut niveau pour l'analyse, la comparaison et la recherche.
Propriétés¶
DebugDir¶
public static string DebugDir { get; set; }
Description : chemin du répertoire pour la sortie de débogage. Lorsqu'il est défini, les résultats intermédiaires de traitement peuvent être enregistrés à des fins de dépannage.
Valeur par défaut : null (sortie de débogage désactivée)
Exemple :
// Activer la sortie de débogage
VFPAnalyzer.DebugDir = @"C:\Temp\VFP_Debug";
// Désactiver la sortie de débogage
VFPAnalyzer.DebugDir = null;
Méthodes¶
SetLicenseKey¶
public static void SetLicenseKey(string vfpLicense)
Description : définit la clé de licence du Video Fingerprinting SDK. Doit être appelée avant d'utiliser toute fonctionnalité d'empreinte.
Paramètres :
vfpLicense(string) : votre clé de licence VisioForge
Exemple :
// Définir la clé de licence au démarrage de l'application
VFPAnalyzer.SetLicenseKey("YOUR-LICENSE-KEY-HERE");
GetComparingFingerprintForVideoFileAsync¶
public static async Task<VFPFingerPrint> GetComparingFingerprintForVideoFileAsync(
VFPFingerprintSource source,
VFPErrorCallback errorDelegate = null,
VFPProgressCallback progressDelegate = null)
Description : génère une empreinte optimisée pour les opérations de comparaison de vidéo entière.
Paramètres :
source(VFPFingerprintSource) : configuration de la source vidéo, comprenant le chemin du fichier, la plage temporelle et les options de traitementerrorDelegate(VFPErrorCallback) : callback optionnel pour les messages d'erreurprogressDelegate(VFPProgressCallback) : callback optionnel pour les mises à jour de progression (0-100)
Retour : Task<VFPFingerPrint> — empreinte générée ou null si une erreur s'est produite
Cas d'usage : comparer des vidéos entières ou de larges segments pour déterminer la similarité globale
Exemple :
// Utilisation de base
var source = new VFPFingerprintSource(@"C:\Videos\movie.mp4");
var fingerprint = await VFPAnalyzer.GetComparingFingerprintForVideoFileAsync(source);
if (fingerprint != null)
{
fingerprint.Save(@"C:\Fingerprints\movie.vsigx");
Console.WriteLine($"Empreinte créée pour une durée de {fingerprint.Duration}");
}
// Avec gestion d'erreur et rapport de progression
var source2 = new VFPFingerprintSource(@"C:\Videos\video.mp4")
{
StartTime = TimeSpan.FromMinutes(5),
StopTime = TimeSpan.FromMinutes(10)
};
var fingerprint2 = await VFPAnalyzer.GetComparingFingerprintForVideoFileAsync(
source2,
error => Console.WriteLine($"Erreur : {error}"),
progress => Console.WriteLine($"Progression : {progress}%"));
// Avec zones ignorées (par exemple logos, filigranes)
var source3 = new VFPFingerprintSource(@"C:\Videos\broadcast.mp4");
source3.IgnoredAreas.Add(new Rect(1700, 50, 1870, 150)); // Logo en haut à droite
source3.IgnoredAreas.Add(new Rect(100, 950, 300, 1000)); // Horodatage en bas
var fingerprint3 = await VFPAnalyzer.GetComparingFingerprintForVideoFileAsync(source3);
GetSearchFingerprintForVideoFileAsync¶
public static async Task<VFPFingerPrint> GetSearchFingerprintForVideoFileAsync(
VFPFingerprintSource source,
VFPErrorCallback errorDelegate = null,
VFPProgressCallback progressDelegate = null)
Description : génère une empreinte optimisée pour les opérations de recherche de fragments.
Paramètres :
source(VFPFingerprintSource) : configuration de la source vidéoerrorDelegate(VFPErrorCallback) : callback d'erreur optionnelprogressDelegate(VFPProgressCallback) : callback de progression optionnel
Retour : Task<VFPFingerPrint> — empreinte générée ou null si une erreur s'est produite
Cas d'usage : créer des empreintes de clips courts à localiser dans des vidéos de longue durée
Exemple :
// Créer l'empreinte d'une publicité
var commercialSource = new VFPFingerprintSource(@"C:\Videos\commercial.mp4");
var commercialFp = await VFPAnalyzer.GetSearchFingerprintForVideoFileAsync(
commercialSource,
error => Console.WriteLine($"Erreur : {error}"),
progress => Console.WriteLine($"Traitement : {progress}%"));
// Créer l'empreinte d'une scène spécifique
var sceneSource = new VFPFingerprintSource(@"C:\Videos\movie.mp4")
{
StartTime = TimeSpan.FromMinutes(42),
StopTime = TimeSpan.FromMinutes(43)
};
var sceneFp = await VFPAnalyzer.GetSearchFingerprintForVideoFileAsync(sceneSource);
if (sceneFp != null)
{
sceneFp.Tag = "Scène d'action au pont";
sceneFp.Save(@"C:\Fingerprints\scene.vsigx");
}
Compare¶
public static int Compare(
VFPFingerPrint fp1,
VFPFingerPrint fp2,
TimeSpan shift)
Description : compare deux empreintes vidéo pour déterminer leur similarité.
Paramètres :
fp1(VFPFingerPrint) : première empreintefp2(VFPFingerPrint) : seconde empreinteshift(TimeSpan) : décalage temporel maximum autorisé pendant la comparaison
Retour : int — score de différence (plus bas = plus similaire), ou Int32.MaxValue si l'une des empreintes est null
Exemple :
// Charger deux empreintes
var fp1 = VFPFingerPrint.Load(@"C:\Fingerprints\video1.vsigx");
var fp2 = VFPFingerPrint.Load(@"C:\Fingerprints\video2.vsigx");
// Comparer avec une tolérance de décalage de 5 secondes
int difference = VFPAnalyzer.Compare(fp1, fp2, TimeSpan.FromSeconds(5));
// Interpréter les résultats
if (difference < 5)
{
Console.WriteLine("Les vidéos sont presque identiques");
}
else if (difference < 15)
{
Console.WriteLine("Les vidéos sont très similaires");
}
else if (difference < 30)
{
Console.WriteLine("Les vidéos ont un contenu similaire avec des différences");
}
else if (difference < 100)
{
Console.WriteLine("Les vidéos sont liées mais significativement différentes");
}
else
{
Console.WriteLine("Les vidéos sont complètement différentes");
}
// Comparaison par lot
var fingerprints = new List<VFPFingerPrint>();
foreach (var file in Directory.GetFiles(@"C:\Fingerprints", "*.vsigx"))
{
fingerprints.Add(VFPFingerPrint.Load(file));
}
var referenceFp = fingerprints[0];
foreach (var fp in fingerprints.Skip(1))
{
int diff = VFPAnalyzer.Compare(referenceFp, fp, TimeSpan.FromSeconds(3));
Console.WriteLine($"{fp.OriginalFilename} : Différence = {diff}");
}
Search / SearchAsync¶
public static List<TimeSpan> Search(
VFPFingerPrint fp1,
VFPFingerPrint fp2,
TimeSpan duration,
int maxDifference,
bool allowMultipleFragments)
public static Task<List<TimeSpan>> SearchAsync(
VFPFingerPrint fp1,
VFPFingerPrint fp2,
TimeSpan duration,
int maxDifference,
bool allowMultipleFragments)
Description : recherche les occurrences d'un fragment vidéo dans une vidéo plus longue.
Paramètres :
fp1(VFPFingerPrint) : empreinte du fragment (aiguille)fp2(VFPFingerPrint) : vidéo dans laquelle rechercher (botte de foin)duration(TimeSpan) : durée du fragment (empêche les correspondances qui se chevauchent)maxDifference(int) : différence maximale autorisée (typique : 5-20)allowMultipleFragments(bool) : trouver toutes les occurrences ou la première correspondance uniquement
Retour : List<TimeSpan> — horodatages où des correspondances ont été trouvées
Exemple :
// Rechercher une publicité dans un enregistrement
var commercialFp = VFPFingerPrint.Load(@"C:\Fingerprints\commercial.vsigx");
var recordingFp = VFPFingerPrint.Load(@"C:\Fingerprints\tv_recording.vsigx");
// Trouver toutes les occurrences
var matches = await VFPAnalyzer.SearchAsync(
commercialFp,
recordingFp,
TimeSpan.FromSeconds(30), // Durée de la publicité
maxDifference: 10,
allowMultipleFragments: true);
foreach (var timestamp in matches)
{
Console.WriteLine($"Publicité trouvée à : {timestamp:hh\\:mm\\:ss}");
}
// Trouver uniquement la première occurrence
var firstMatch = VFPAnalyzer.Search(
commercialFp,
recordingFp,
TimeSpan.FromSeconds(30),
maxDifference: 15,
allowMultipleFragments: false);
if (firstMatch.Any())
{
Console.WriteLine($"Première occurrence à : {firstMatch[0]}");
}
// Recherche avec correspondance plus stricte
var exactMatches = VFPAnalyzer.Search(
commercialFp,
recordingFp,
TimeSpan.FromSeconds(30),
maxDifference: 5, // Très strict
allowMultipleFragments: true);
CompareVideoFilesAsync¶
public static async Task<bool> CompareVideoFilesAsync(
VFPFingerprintSource file1,
VFPFingerprintSource file2,
TimeSpan shift,
VFPErrorCallback errorCallback,
int threshold = 500)
Description : méthode de commodité qui génère les empreintes et compare deux fichiers vidéo en une seule opération.
Paramètres :
file1(VFPFingerprintSource) : configuration de la première vidéofile2(VFPFingerprintSource) : configuration de la seconde vidéoshift(TimeSpan) : décalage temporel maximum autoriséerrorCallback(VFPErrorCallback) : callback d'erreurthreshold(int) : différence maximale à considérer comme correspondance (par défaut : 500)
Retour : Task<bool> — true si les vidéos correspondent (différence < seuil), sinon false
Exemple :
// Comparer deux fichiers vidéo directement
var file1 = new VFPFingerprintSource(@"C:\Videos\original.mp4");
var file2 = new VFPFingerprintSource(@"C:\Videos\copy.mp4");
bool areIdentical = await VFPAnalyzer.CompareVideoFilesAsync(
file1,
file2,
TimeSpan.FromSeconds(5),
error => Console.WriteLine($"Erreur : {error}"),
threshold: 20);
if (areIdentical)
{
Console.WriteLine("Les vidéos sont identiques ou très similaires");
}
// Comparer avec un traitement personnalisé
var source1 = new VFPFingerprintSource(@"C:\Videos\video1.mp4")
{
CustomResolution = new Size(640, 480),
StartTime = TimeSpan.FromSeconds(10),
StopTime = TimeSpan.FromMinutes(5)
};
var source2 = new VFPFingerprintSource(@"C:\Videos\video2.mp4")
{
CustomResolution = new Size(640, 480),
StartTime = TimeSpan.FromSeconds(10),
StopTime = TimeSpan.FromMinutes(5)
};
bool match = await VFPAnalyzer.CompareVideoFilesAsync(
source1,
source2,
TimeSpan.FromSeconds(3),
null,
threshold: 50);
Classe VFPFingerPrint¶
Représente une empreinte vidéo avec des métadonnées et la prise en charge de la sérialisation.
Propriétés¶
public byte[] Data { get; set; }
public TimeSpan Duration { get; set; }
public Guid ID { get; set; }
public string OriginalFilename { get; set; }
public TimeSpan OriginalDuration { get; set; }
public string Tag { get; set; }
public int Width { get; set; }
public int Height { get; set; }
public double FrameRate { get; set; }
public List<Rect> IgnoredAreas { get; set; }
Méthodes¶
Load (statique)¶
public static VFPFingerPrint Load(string filename)
public static VFPFingerPrint Load(byte[] data)
Description : charge une empreinte depuis un fichier ou la mémoire.
Paramètres :
filename(string) : chemin du fichier d'empreintedata(byte[]) : données d'empreinte en mémoire
Retour : VFPFingerPrint — objet empreinte chargé
Exemple :
// Charger depuis un fichier
var fingerprint = VFPFingerPrint.Load(@"C:\Fingerprints\video.vsigx");
Console.WriteLine($"Chargée : {fingerprint.OriginalFilename}");
Console.WriteLine($"Durée : {fingerprint.Duration}");
Console.WriteLine($"ID : {fingerprint.ID}");
// Charger depuis la mémoire
byte[] fpData = File.ReadAllBytes(@"C:\Fingerprints\video.vsigx");
var fingerprint2 = VFPFingerPrint.Load(fpData);
// Charger plusieurs empreintes
var fingerprints = new List<VFPFingerPrint>();
foreach (var file in Directory.GetFiles(@"C:\Fingerprints", "*.vsigx"))
{
try
{
var fp = VFPFingerPrint.Load(file);
fingerprints.Add(fp);
Console.WriteLine($"Chargée : {fp.OriginalFilename} ({fp.Duration})");
}
catch (Exception ex)
{
Console.WriteLine($"Échec du chargement de {file} : {ex.Message}");
}
}
Save¶
public void Save(string filename)
public byte[] Save()
Description : enregistre l'empreinte dans un fichier ou en mémoire. Extension par défaut : .vsigx
Paramètres :
filename(string) : chemin du fichier de sortie
Retour : byte[] — données d'empreinte sérialisées (version mémoire)
Exemple :
// Enregistrer vers un fichier
fingerprint.Save(@"C:\Fingerprints\output.vsigx");
// Enregistrer en mémoire
byte[] data = fingerprint.Save();
File.WriteAllBytes(@"C:\Backup\fingerprint.vsigx", data);
// Enregistrer avec métadonnées
fingerprint.Tag = "Scène importante à 00:42:00";
fingerprint.Save(@"C:\Fingerprints\tagged.vsigx");
// Enregistrement par lot avec nommage organisé
foreach (var fp in fingerprints)
{
string safeName = Path.GetFileNameWithoutExtension(fp.OriginalFilename)
.Replace(" ", "_")
.Replace(".", "_");
string outputPath = Path.Combine(
@"C:\Fingerprints",
$"{safeName}_{fp.ID}.vsigx");
fp.Save(outputPath);
}
Classe VFPFingerprintSource¶
Configuration des opérations d'empreinte vidéo.
Constructeur¶
public VFPFingerprintSource(string filename)
Description : crée une nouvelle configuration source.
Paramètres :
filename(string) : chemin du fichier vidéo
Lève : FileNotFoundException si le fichier n'existe pas
Propriétés¶
public string Filename { get; set; }
public TimeSpan StartTime { get; set; }
public TimeSpan StopTime { get; set; }
public Rect CustomCropSize { get; set; }
public Size CustomResolution { get; set; }
public List<Rect> IgnoredAreas { get; }
public TimeSpan OriginalDuration { get; set; }
Filename(string) : chemin du fichier vidéo sourceStartTime(TimeSpan) : heure de début pour l'empreinte (par défaut : 0)StopTime(TimeSpan) : heure de fin pour l'empreinte (par défaut : durée de la vidéo)CustomCropSize(Rect) : rectangle de rognage (distances Left, Top, Right, Bottom)CustomResolution(Size) : résolution cible (Empty = pas de redimensionnement)IgnoredAreas(List<Rect>) : régions à exclure (par exemple logos, horodatages)OriginalDuration(TimeSpan) : durée totale de la vidéo (auto-renseignée)
Exemples¶
// Configuration de base
var source = new VFPFingerprintSource(@"C:\Videos\movie.mp4");
// Traiter une plage temporelle spécifique
var source2 = new VFPFingerprintSource(@"C:\Videos\long_video.mp4")
{
StartTime = TimeSpan.FromMinutes(10),
StopTime = TimeSpan.FromMinutes(20)
};
// Rogner vers la région d'intérêt
var source3 = new VFPFingerprintSource(@"C:\Videos\video.mp4")
{
CustomCropSize = new Rect(100, 100, 1820, 980) // Supprimer les bordures
};
// Redimensionner pour un traitement plus rapide
var source4 = new VFPFingerprintSource(@"C:\Videos\4k_video.mp4")
{
CustomResolution = new Size(1280, 720) // Réduire depuis 4K
};
// Ignorer les superpositions et logos
var source5 = new VFPFingerprintSource(@"C:\Videos\broadcast.mp4");
source5.IgnoredAreas.Add(new Rect(1700, 50, 1870, 150)); // Logo de chaîne
source5.IgnoredAreas.Add(new Rect(50, 50, 250, 100)); // Bug du réseau
source5.IgnoredAreas.Add(new Rect(100, 950, 400, 1000)); // Bandeau défilant
// Options de traitement combinées
var source6 = new VFPFingerprintSource(@"C:\Videos\tv_show.mp4")
{
StartTime = TimeSpan.FromSeconds(90), // Sauter l'intro
StopTime = TimeSpan.FromMinutes(42), // Avant le générique
CustomResolution = new Size(640, 480),
CustomCropSize = new Rect(60, 0, 1860, 1080) // Supprimer le pillarboxing
};
source6.IgnoredAreas.Add(new Rect(1600, 100, 1800, 200));
Classe VFPCompare¶
Fonctionnalité de comparaison d'empreintes de bas niveau.
Méthodes¶
SetLicenseKey¶
public static void SetLicenseKey(string licenseKey)
Description : définit la clé de licence du SDK.
Exemple :
VFPCompare.SetLicenseKey("YOUR-LICENSE-KEY");
Process¶
public static int Process(
IntPtr ptr,
int w,
int h,
int s,
TimeSpan dTime,
ref VFPCompareData data)
Description : traite une image RGB24 pour l'empreinte de comparaison.
Paramètres :
ptr(IntPtr) : pointeur vers les données d'image RGB24w(int) : largeur de l'imageh(int) : hauteur de l'images(int) : stride (octets par ligne)dTime(TimeSpan) : horodatage de l'imagedata(ref VFPCompareData) : structure de données de comparaison
Retour : int — code de statut (0 = succès)
Exemple :
// Initialiser les données de comparaison
var compareData = new VFPCompareData(durationInSeconds: 120);
// Traiter les images (généralement fait en interne par VFPAnalyzer)
IntPtr frameData = GetRGB24Frame(); // Votre source d'images
int result = VFPCompare.Process(
frameData,
1920, // largeur
1080, // hauteur
5760, // stride pour 1920x3 RGB24
TimeSpan.FromSeconds(1.5),
ref compareData);
if (result == 0)
{
Console.WriteLine("Image traitée avec succès");
}
// Construire l'empreinte après le traitement de toutes les images
IntPtr fpData = VFPCompare.Build(out long length, ref compareData);
// Nettoyer
compareData.Free();
Build¶
public static IntPtr Build(
out long length,
ref VFPCompareData video)
Description : construit l'empreinte à partir des images traitées.
Paramètres :
length(out long) : taille des données d'empreintevideo(ref VFPCompareData) : données d'images traitées
Retour : IntPtr — pointeur vers les données d'empreinte
Compare¶
public static double Compare(
VFPFingerPrint fp1,
VFPFingerPrint fp2,
int maxDifference)
Description : compare deux empreintes.
Paramètres :
fp1(VFPFingerPrint) : première empreintefp2(VFPFingerPrint) : seconde empreintemaxDifference(int) : différence maximale autorisée
Retour : double — score de similarité (0-100, plus élevé = plus similaire)
Exemple :
var fp1 = VFPFingerPrint.Load(@"C:\Fingerprints\video1.vsigx");
var fp2 = VFPFingerPrint.Load(@"C:\Fingerprints\video2.vsigx");
double similarity = VFPCompare.Compare(fp1, fp2, maxDifference: 50);
Console.WriteLine($"Similarité : {similarity:F2}%");
if (similarity > 90)
{
Console.WriteLine("Les vidéos sont très similaires");
}
else if (similarity > 70)
{
Console.WriteLine("Les vidéos ont des similarités significatives");
}
else
{
Console.WriteLine("Les vidéos sont différentes");
}
Classe VFPSearch¶
Fonctionnalité de recherche d'empreintes de bas niveau.
Méthodes¶
SetLicenseKey¶
public static void SetLicenseKey(string licenseKey)
Description : définit la clé de licence du SDK.
Process¶
public static int Process(
IntPtr ptr,
int w,
int h,
int s,
TimeSpan dTime,
ref VFPSearchData data)
Description : traite une image vidéo pour l'empreinte de recherche.
Paramètres :
ptr(IntPtr) : pointeur vers les données d'image RGB24w(int) : largeur de l'imageh(int) : hauteur de l'images(int) : stridedTime(TimeSpan) : horodatage de l'imagedata(ref VFPSearchData) : structure de données de recherche
Retour : int — code de statut
Build¶
public static IntPtr Build(
out long length,
ref VFPSearchData data)
Description : construit l'empreinte de recherche.
Paramètres :
length(out long) : taille des données d'empreintedata(ref VFPSearchData) : images traitées
Retour : IntPtr — pointeur vers les données d'empreinte
Search¶
public static int Search(
VFPFingerPrint fp1,
int skip1,
VFPFingerPrint fp2,
int skip2,
out double difference,
int maxDiff)
Description : recherche un fragment dans une vidéo.
Paramètres :
fp1(VFPFingerPrint) : empreinte du fragmentskip1(int) : images à ignorer au début defp1fp2(VFPFingerPrint) : empreinte de la vidéo principaleskip2(int) : images à ignorer au début defp2difference(out double) : score de différence de correspondancemaxDiff(int) : différence maximale autorisée
Retour : int — position où trouvé (en secondes) ou Int32.MaxValue si non trouvé
Exemple :
// Rechercher un fragment
var fragmentFp = VFPFingerPrint.Load(@"C:\Fingerprints\fragment.vsigx");
var videoFp = VFPFingerPrint.Load(@"C:\Fingerprints\full_video.vsigx");
int position = VFPSearch.Search(
fragmentFp,
skip1: 0,
videoFp,
skip2: 0,
out double matchDifference,
maxDiff: 20);
if (position != Int32.MaxValue)
{
Console.WriteLine($"Fragment trouvé à {position} secondes");
Console.WriteLine($"Qualité de correspondance : {matchDifference}");
}
else
{
Console.WriteLine("Fragment non trouvé");
}
// Rechercher depuis une position spécifique
int nextPosition = VFPSearch.Search(
fragmentFp,
0,
videoFp,
position + 30, // Sauter la première correspondance
out matchDifference,
maxDifference: 20);
Classe VFPFingerPrintDB¶
Base de données pour gérer des collections d'empreintes.
Propriétés¶
public List<VFPFingerPrint> Items { get; }
Méthodes¶
Save¶
public void Save(string filename)
Description : enregistre la base de données dans un fichier.
Exemple :
var db = new VFPFingerPrintDB();
// Ajouter des empreintes
foreach (var videoFile in Directory.GetFiles(@"C:\Videos", "*.mp4"))
{
var source = new VFPFingerprintSource(videoFile);
var fp = await VFPAnalyzer.GetComparingFingerprintForVideoFileAsync(source);
if (fp != null)
{
db.Items.Add(fp);
}
}
// Enregistrer la base de données
db.Save(@"C:\Database\fingerprints.db");
Console.WriteLine($"{db.Items.Count} empreintes enregistrées en base");
Load (statique)¶
public static VFPFingerPrintDB Load(string filename)
Description : charge la base de données depuis un fichier.
Exemple :
// Charger une base existante
var db = VFPFingerPrintDB.Load(@"C:\Database\fingerprints.db");
Console.WriteLine($"{db.Items.Count} empreintes chargées");
// Interroger la base
var recentVideos = db.Items
.Where(fp => fp.OriginalDuration > TimeSpan.FromMinutes(30))
.OrderBy(fp => fp.OriginalFilename)
.ToList();
foreach (var fp in recentVideos)
{
Console.WriteLine($"{fp.OriginalFilename} : {fp.Duration}");
}
ContainsFile¶
public bool ContainsFile(VFPFingerprintSource source)
Description : vérifie si la base contient une empreinte pour la source.
Exemple :
var source = new VFPFingerprintSource(@"C:\Videos\new_video.mp4");
if (!db.ContainsFile(source))
{
// Générer et ajouter une nouvelle empreinte
var fp = await VFPAnalyzer.GetComparingFingerprintForVideoFileAsync(source);
db.Items.Add(fp);
db.Save(@"C:\Database\fingerprints.db");
}
else
{
Console.WriteLine("L'empreinte existe déjà dans la base");
}
GetFingerprint¶
public VFPFingerPrint GetFingerprint(VFPFingerprintSource source)
Description : récupère l'empreinte correspondant à la source.
Exemple :
var source = new VFPFingerprintSource(@"C:\Videos\video.mp4");
var fp = db.GetFingerprint(source);
if (fp != null)
{
Console.WriteLine($"Empreinte trouvée : {fp.ID}");
Console.WriteLine($"Durée : {fp.Duration}");
Console.WriteLine($"Étiquette : {fp.Tag}");
}
Classe VFPFingerprintFromFrames¶
Crée des empreintes à partir d'images individuelles. Disponible sur toutes les plateformes.
Constructeur¶
public VFPFingerprintFromFrames(
double frameRate,
int width,
int height,
TimeSpan totalDuration)
Description : initialise le générateur d'empreinte basé sur les images.
Paramètres :
frameRate(double) : fréquence d'images de la vidéowidth(int) : largeur des imagesheight(int) : hauteur des imagestotalDuration(TimeSpan) : durée totale de la vidéo
Méthodes¶
Push¶
public void Push(byte[] rgb24frame) // Toutes plateformes
public void Push(Bitmap frame) // Windows uniquement
public void Push(SKBitmap frame) // Toutes plateformes (nouveau)
public void Push(IntPtr rgb24frame, int rgb24frameSize) // Toutes plateformes
Description : ajoute des images au processus de génération d'empreinte. Les images doivent correspondre aux dimensions configurées.
- byte[] : données d'image RGB24 brutes (multiplateforme)
- Bitmap : System.Drawing.Bitmap (Windows uniquement)
- SKBitmap : bitmap SkiaSharp pour la prise en charge multiplateforme
- IntPtr : pointeur vers les données d'image RGB24 (multiplateforme)
Exemple :
// Créer le générateur
var builder = new VFPFingerprintFromFrames(
frameRate: 30.0,
width: 1920,
height: 1080,
totalDuration: TimeSpan.FromMinutes(5));
// Multiplateforme : ajouter des images comme tableaux d'octets
foreach (var frameData in videoStream.GetFrames())
{
builder.Push(frameData); // byte[] RGB24
}
// Multiplateforme : ajouter des bitmaps SkiaSharp
using (var skBitmap = SKBitmap.Decode(imageData))
{
builder.Push(skBitmap);
}
// Windows uniquement : ajouter des images System.Drawing.Bitmap
#if NET_WINDOWS
for (int i = 0; i < frameCount; i++)
{
Bitmap frame = GetFrameAsBitmap(i);
builder.Push(frame);
}
#endif
// Multiplateforme : ajouter des images via IntPtr
unsafe
{
fixed (byte* ptr = frameData)
{
builder.Push(new IntPtr(ptr), frameData.Length);
}
}
// Construire l'empreinte finale
var fingerprint = builder.Build();
fingerprint.OriginalFilename = "stream_capture.mp4";
fingerprint.Save(@"C:\Fingerprints\stream.vsigx");
Build¶
public VFPFingerPrint Build()
Description : génère l'empreinte à partir des images traitées.
Retour : VFPFingerPrint — empreinte générée
Types de support¶
VFPCompareData¶
public struct VFPCompareData
{
public IntPtr Data { get; set; }
public VFPCompareData(int duration)
public void Free()
}
Description : gère les données de comparaison natives.
Exemple :
// Créer et utiliser des données de comparaison
var data = new VFPCompareData(durationInSeconds: 60);
try
{
// Traiter les images...
// Construire l'empreinte...
}
finally
{
data.Free(); // Toujours libérer la mémoire native
}
VFPSearchData¶
public class VFPSearchData : IDisposable
{
public IntPtr Data { get; set; }
public VFPSearchData(TimeSpan duration)
public void Free()
public void Dispose()
}
Description : gère les données de recherche natives avec libération automatique.
Exemple :
// L'instruction using garantit le nettoyage approprié
using (var searchData = new VFPSearchData(TimeSpan.FromMinutes(2)))
{
// Traiter les images pour l'empreinte de recherche
// Construire l'empreinte
} // Libérée automatiquement
Délégués¶
VFPProgressCallback¶
public delegate void VFPProgressCallback(int percent)
Description : signale la progression durant les opérations d'empreinte (0-100).
Exemple :
// Affichage simple de progression
VFPProgressCallback progressCallback = (percent) =>
{
Console.Write($"\rProgression : {percent}%");
if (percent == 100) Console.WriteLine();
};
// Progression avec mise à jour de l'UI
VFPProgressCallback uiProgress = (percent) =>
{
progressBar.Value = percent;
labelStatus.Text = $"Traitement : {percent}%";
Application.DoEvents();
};
// Progression avec vérification d'annulation
CancellationToken token = GetCancellationToken();
VFPProgressCallback cancellableProgress = (percent) =>
{
if (token.IsCancellationRequested)
throw new OperationCanceledException();
UpdateProgress(percent);
};
VFPErrorCallback¶
public delegate void VFPErrorCallback(string error)
Description : signale les erreurs durant les opérations d'empreinte.
Exemple :
// Journaliser les erreurs
VFPErrorCallback errorCallback = (error) =>
{
logger.Error($"Erreur VFP : {error}");
File.AppendAllText(@"C:\Logs\vfp_errors.log",
$"{DateTime.Now} : {error}{Environment.NewLine}");
};
// Afficher les erreurs à l'utilisateur
VFPErrorCallback userErrorCallback = (error) =>
{
MessageBox.Show($"Erreur de traitement vidéo : {error}",
"Erreur d'empreinte",
MessageBoxButtons.OK,
MessageBoxIcon.Error);
};
// Collecter les erreurs pour un traitement par lot
var errors = new List<string>();
VFPErrorCallback collectErrors = (error) => errors.Add(error);