Hitta och göra ansikten suddiga med förinställningen Ansiktsdetektor
Letar du efter Media Services v2-dokumentation?
Azure Media Services v3 API innehåller en förinställning för ansiktsigenkänning som erbjuder skalbar ansiktsavkänning och bortredigering (suddig) i molnet. Med ansiktsredigering kan du ändra videon för att göra ansikten suddiga för valda individer. Du kanske vill använda tjänsten för ansiktsredigering i scenarier med allmän säkerhet och nyhetsmedier. Några minuters filmsekvenser som innehåller flera ansikten kan ta flera timmar att redigera manuellt, men med den här förinställningen kräver ansiktsredigeringsprocessen bara några enkla steg.
Den här artikeln innehåller information om förinställningen för ansiktsdetektor och visar hur du använder den med Azure Media Services SDK för .NET.
Efterlevnad, sekretess och säkerhet
Som en viktig påminnelse måste du följa alla tillämpliga lagar när du använder analys i Azure Media Services. Du får inte använda Azure Media Services eller någon annan Azure-tjänst på ett sätt som strider mot andras rättigheter. Innan du laddar upp videor, inklusive biometriska data, till Azure Media Services-tjänsten för bearbetning och lagring, måste du ha rätt rättigheter, inklusive alla lämpliga medgivanden, från personerna i videon. Mer information om efterlevnad, sekretess och säkerhet i Azure Media Services finns i Azure Cognitive Services villkor. Microsofts sekretesskrav och hantering av dina data finns i Microsofts sekretesspolicy, Villkor för Onlinetjänster (OST) och tillägget för databehandling ("DPA"). Mer sekretessinformation, inklusive om databevarande, borttagning/destruktion, finns i OST och här. Genom Azure Media Services godkänner du att vara bunden av Cognitive Services villkor, OST, DPA och sekretesspolicyn
Ansiktsredigeringslägen
Ansiktsredigering fungerar genom att identifiera ansikten i varje bildruta i videon och spåra ansiktsobjektet både framåt och bakåt i tiden, så att samma individ även kan vara suddig från andra vinklar. Den automatiserade redigeringsprocessen är komplex och gör inte alltid varje ansikte suddigt 100 % garanterat. Av den anledningen kan förinställningen användas i ett tvåstegsläge för att förbättra kvaliteten och noggrannheten för suddigheten i ett redigeringssteg innan filen skickas för det slutliga suddiga passet.
Förutom ett helt automatiskt kombinerat läge gör arbetsflödet med två pass att du kan välja vilka ansikten du vill sudda ut (eller inte sudda ut) via en lista över ansikts-ID:n. För att göra godtyckliga justeringar per bildruta använder förinställningen en metadatafil i JSON-format som indata till det andra passet. Det här arbetsflödet är uppdelat i lägena Analysera och Redact.
Du kan också enkelt kombinera de två lägena i ett enda pass som kör båda aktiviteterna i ett jobb. det här läget kallas kombinerad. I den här artikeln visar exempelkoden hur du använder det förenklade kombinerade läget med ett enda pass på en exempelkällfil.
Kombinerat läge
Detta genererar en redigerad MP4-videofil i ett enda pass utan manuell redigering av JSON-filen som krävs. Utdata i tillgångsmappen för jobbet blir en enda .mp4 som innehåller suddiga ansikten med den valda suddiga effekten. Använd lösningsegenskapen inställd på SourceResolution för att uppnå bästa resultat för redigering.
| Fas | Filnamn | Kommentarer |
|---|---|---|
| Indatatillgång | "ignite-sample.mp4" | Video i WMV-, MOV- eller MP4-format |
| Förinställd konfiguration | Konfiguration av ansiktsdetektor | mode: FaceRedactorMode.Combined, blurrType: BlurrType.Med, resolution: AnalysisResolution.SourceResolution |
| Utdatatillgång | "ignite-redacted.mp4 | Video med suddig effekt tillämpad på ansikten |
Analysläge
Analyssteget för tvåstegsarbetsflödet tar en videoindata och skapar en JSON-fil med en lista över ansiktsplatser, Ansikts-ID:n och jpg-bilder för varje identifierat ansikte. Observera att ansikts-ID:n inte är garanterat identiska vid efterföljande körningar av analyspasset.
| Fas | Filnamn | Kommentarer |
|---|---|---|
| Indatatillgång | "ignite-sample.mp4" | Video i WMV-, MPV- eller MP4-format |
| Förinställd konfiguration | Konfiguration av ansiktsdetektor | mode: FaceRedactorMode.Analyze, resolution: AnalysisResolution.SourceResolution |
| Utdatatillgång | ignite-sample_annotations.json | Anteckningsdata för ansiktsplatser i JSON-format. Ansikts-ID:n är inte garanterat identiska vid efterföljande körningar av analyspasset. Detta kan redigeras av användaren för att ändra de suddiga avgränsade rutorna. Se exemplet nedan. |
| Utdatatillgång | foo_thumb%06d.jpg [foo_thumb000001.jpg, foo_thumb000002.jpg] | En beskärd jpg-bild av varje identifierat ansikte, där talet anger labelId för ansiktet |
Exempel på utdata
{
"version": 1,
"timescale": 24000,
"offset": 0,
"framerate": 23.976,
"width": 1280,
"height": 720,
"fragments": [
{
"start": 0,
"duration": 48048,
"interval": 1001,
"events": [
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
[],
[
{
"index": 13,
"id": 1138,
"x": 0.29537,
"y": -0.18987,
"width": 0.36239,
"height": 0.80335
},
{
"index": 13,
"id": 2028,
"x": 0.60427,
"y": 0.16098,
"width": 0.26958,
"height": 0.57943
}
],
... truncated
Redact-läge (suddig)
Det andra arbetsflödet tar ett större antal indata som måste kombineras till en enda tillgång.
Detta inkluderar en lista över ID:er att göra oskärpa, den ursprungliga videon och anteckningarna JSON. I det här läget används anteckningarna för att göra indatavideon suddig.
Utdata från Analys-passet inkluderar inte den ursprungliga videon. Videon måste laddas upp till indatatillgången för åtgärden Redact-läge och väljas som primär fil.
| Fas | Filnamn | Kommentarer |
|---|---|---|
| Indatatillgång | "ignite-sample.mp4" | Video i WMV-, MPV- eller MP4-format. Samma video som i steg 1. |
| Indatatillgång | "ignite-sample_annotations.json" | kommenterar metadatafilen från fas ett, med valfria ändringar om du vill ändra ansikten suddiga. Detta måste redigeras i ett externt program, en kod eller en textredigerare. |
| Indatatillgång | "ignite-sample_IDList.txt" (valfritt) | Valfri ny radavgränsad lista över ansikts-ID:er som ska redactas. Om det lämnas tomt blir alla ansikten i källan suddiga. Du kan använda listan för att selektivt välja att inte göra vissa ansikten suddiga. |
| Förinställning för ansiktsdetektor | Förinställd konfiguration | mode: FaceRedactorMode.Redact, blurrType: BlurrType.Med |
| Utdatatillgång | "ignite-sample-redacted.mp4" | Video med suddig tillämpas baserat på anteckningar |
Exempel på utdata
Det här är utdata från en IDList med ett VALT ID. Ansikts-ID:n är inte garanterat identiska vid efterföljande körningar av analyspasset.
Exempel foo_IDList.txt
1
2
3
Oskärpatyper
I läget Kombinerad eller Redact finns det fem olika oskärpalägen som du kan välja mellan via JSON-indatakonfigurationen: Low, Med, High, Box och Black. Som standard används Med.
Du hittar exempel på suddotyper nedan.
Låg

Med

Högt

Box

Svart

Element i JSON-utdatafilen
Redigerings-MP ger identifiering och spårning av ansiktsplatser med hög precision som kan identifiera upp till 64 ansikten i en videoram. Frontalansikten ger bäst resultat, medan sidoansikten och små ansikten (mindre än eller lika med 24 x 24 bildpunkter) är utmanande.
Jobbet skapar en JSON-utdatafil som innehåller metadata om identifierade och spårade ansikten. Metadata innehåller koordinater som visar platsen för ansikten, samt ett ansikts-ID-nummer som visar spårningen av den enskilda. Ansikts-ID-nummer är känsliga att återställa under förhållanden när front ytan tappas bort eller överlappar varandra i ramen, vilket leder till att vissa personer får flera ID: n.
Utdata-JSON innehåller följande element:
JSON-element för rot
| Element | Beskrivning |
|---|---|
| version | Detta avser versionen av video-API: et. |
| tidsplan | "Tickar" per sekund för videon. |
| offset | Detta är tids förskjutningen för tidsstämplar. I version 1,0 av video-API: er, är det alltid 0. I framtida scenarier som vi stöder kan detta värde ändras. |
| bredd, High | Bredden och High för video rutan för utdata i bild punkter. |
| ram | Bildrutor per sekund i videon. |
| fragment | Metadata delas upp i olika segment som kallas fragment. Varje fragment innehåller en start, varaktighet, intervallnummer och händelser. |
Fragmenterar JSON-element
| Element | Beskrivning |
|---|---|
| start | Start tiden för den första händelsen i "ticks". |
| varaktighet | Längden på fragmentet i "tickas". |
| index | (Gäller endast Azure Media Redactor) definierar ram indexet för den aktuella händelsen. |
| interval | Intervallet för varje händelse post i fragmentet, i "ticker". |
| händelser | Varje händelse innehåller ansikten som har identifierats och spårats inom den tids perioden. Det är en matris med händelser. Den yttre matrisen representerar ett visst tidsintervall. Den inre matrisen består av 0 eller fler händelser som inträffade vid den tidpunkten. En tom hak paren tes [] innebär att inga ansikten har identifierats. |
| id | ID för den ansikte som spåras. Det här talet kan oavsiktligt ändras om ett ansikte blir oidentifierat. En viss individ bör ha samma ID i den övergripande videon, men det kan inte garanteras på grund av begränsningar i detektions algoritmen (ocklusion osv.). |
| x, y | De övre vänstra X-och Y-koordinaterna för den bakre gräns rutan i en normaliserad skala på 0,0 till 1,0. -X-och Y-koordinaterna är relativa till liggande Always, så om du har en stående video (eller upp-ned, i mån av iOS) måste du transponera koordinaterna. |
| bredd, höjd | Bredden och höjden på den bakre gräns rutan i en normaliserad skala på 0,0 till 1,0. |
| facesDetected | Detta finns i slutet av JSON-resultaten och sammanfattar antalet ansikten som algoritmen identifierade under videon. Eftersom ID: na kan återställas oavsiktligt om ett ansikte blir oidentifierat (t. ex. visas skärmen, inte alltid lika med det verkliga antalet ansikten i videon). |
.NET-exempelkod
Följande program visar hur du använder det kombinerade redigeringsläget för enkel pass:
- Skapa en tillgång och ladda upp en mediefil till tillgången.
- Konfigurera förinställningen Ansiktsdetektor som använder inställningarna mode och blurrType.
- Skapa en ny transformering med hjälp av förinställningen Ansiktsdetektor
- Ladda ned den utdatareacted videofilen.
Ladda ned och konfigurera exemplet
Klona en GitHub-lagringsplats som innehåller .NET-exemplet till din dator med följande kommando:
git clone https://github.com/Azure-Samples/media-services-v3-dotnet.git
Exemplet finns i mappen FaceRedactor. Öppna appsettings.json i det nedladdade projektet. Ersätt värdena med de autentiseringsuppgifter som du fick från åtkomsten till API:er.
Du kan också kopiera filen sample.env i lagringsplatsens rot och fylla i informationen där, och byta namn på filen till .env (observera punkt på framsidan!) så att den kan användas i alla exempelprojekt på lagringsplatsen. Detta eliminerar behovet av att ha en ifylld appsettings.json-fil i varje exempel och skyddar dig från att kontrollera alla inställningar i dina egna klonade Git Hub-lagringsplatser.
Exempel
Den här koden visar hur du ställer in FaceDetectorPreset för ett suddläge i kombinerat läge.
// Create a Face Detector preset and enable redaction/blurring of the faces.
Preset faceRedactionPreset = new FaceDetectorPreset(
resolution: AnalysisResolution.SourceResolution,
mode: FaceRedactorMode.Combined, // Use the Combined mode here. This is the single pass mode where detection and blurring happens as one pass - if you want to analyze and get JSON results first before blur, use Analyze mode, followed by Redact mode.
blurType: BlurType.Med // Sets the amount of blur. For debugging purposes you can set this to Box to just see the outlines of the faces.
);
// Ensure that you have the desired encoding Transform. This is really a one time setup operation.
// Once it is created, we won't delete it.
Transform videoAnalyzerTransform = await GetOrCreateTransformAsync(client, config.ResourceGroup, config.AccountName, FaceRedactorTransformName, faceRedactionPreset);
Det här kodexe exemplet visar hur förinställningen skickas till ett transformeringsobjekt när den skapas. När du har skapat transformeringen kan jobb skickas direkt till den.
// Start by defining the desired outputs.
TransformOutput[] outputs = new TransformOutput[]
{
new TransformOutput(preset),
};
// Create the Transform with the output defined above
// Does a Transform already exist with the desired name? This method will just overwrite (update) the Transform if it exists already.
// In production code, you may want to be cautious and try to avoid updates. It really depends on your scenario.
Transform transform = await client.Transforms.CreateOrUpdateAsync(resourceGroupName, accountName, transformName, outputs);
return transform;
Nästa steg
Media Services v3 (senaste)
Kolla in den senaste versionen av Azure Media Services!
Media Services v2 (äldre)
Ge feedback
Använd User Voice-forumet för att ge feedback och förslag på hur Azure Media Services kan förbättras. Du kan även gå direkt till någon av följande kategorier: