Usare Analisi Servizi multimediali di Azure per convertire il contenuto di testo dei file video in testo digitaleUse Azure Media Analytics to convert text content in video files into digital text

PanoramicaOverview

Se è necessario estrarre il contenuto di testo da file video e generare un testo digitale modificabile e in cui sia possibile eseguire ricerche, usare il riconoscimento ottico dei caratteri (OCR) di Analisi servizi multimediali di Azure.If you need to extract text content from your video files and generate an editable, searchable digital text, you should use Azure Media Analytics OCR (optical character recognition). Questo processore di contenuti multimediali di Azure rileva il contenuto di testo nei file video e genera file di testo pronti per l'uso.This Azure Media Processor detects text content in your video files and generates text files for your use. OCR consente di automatizzare l'estrazione di metadati importanti dal segnale video del contenuto multimediale.OCR enables you to automate the extraction of meaningful metadata from the video signal of your media.

Se usato in combinazione con un motore di ricerca, è possibile indicizzare facilmente i file multimediali dal testo e migliorare la scoperta dei contenuti.When used in conjunction with a search engine, you can easily index your media by text, and enhance the discoverability of your content. Questa funzione risulta molto utile per i video che contengono un porzione importante di testo, ad esempio una registrazione video o l'acquisizione della schermata di una presentazione.This is extremely useful in highly textual video, like a video recording or screen-capture of a slideshow presentation. Il processore di contenuti multimediali OCR di Azure è ottimizzato per il testo digitale.The Azure OCR Media Processor is optimized for digital text.

Il processore di contenuti multimediali Azure Media OCR è attualmente disponibile in anteprima.The Azure Media OCR media processor is currently in Preview.

Questo argomento contiene informazioni dettagliate su Azure Media OCR e illustra come usare questa funzionalità con Media Services .NET SDK.This topic gives details about Azure Media OCR and shows how to use it with Media Services SDK for .NET. Per altre informazioni ed esempi, vedere questo blog.For additional information and examples, see this blog.

File di input OCROCR input files

File video.Video files. Attualmente sono supportati i formati seguenti: MP4, MOV e WMV.Currently, the following formats are supported: MP4, MOV, and WMV.

Configurazione delle attivitàTask configuration

Configurazione delle attività (set di impostazioni).Task configuration (preset). Quando si crea un'attività con Azure Media OCR, è necessario specificare un set di impostazioni di configurazione tramite JSON o XML.When creating a task with Azure Media OCR, you must specify a configuration preset using JSON or XML.

Nota

Il motore OCR accetta solo un'area dell'immagine con un minimo di 40 pixel e un massimo di 32.000 pixel come input valido sia in altezza che in larghezza.The OCR engine only takes an image region with minimum 40 pixels to maximum 32000 pixels as a valid input in both height/width.

Descrizioni degli attributiAttribute descriptions

Nome attributoAttribute name DescrizioneDescription
AdvancedOutputAdvancedOutput Se si imposta AdvancedOutput su true, l'output JSON conterrà dati posizionali per ogni singola parola (oltre alle aree e le frasi).If you set AdvancedOutput to true, the JSON output will contain positional data for every single word (in addition to phrases and regions). Se non si intende visualizzare i dettagli, impostare il flag su false.If you do not want to see these details, set the flag to false. Il valore predefinito è False.The default value is false. Per altre informazioni, vedere questo blog.For more information, see this blog.
LinguaLanguage (Facoltativo) Descrive la lingua del testo da cercare.(optional) describes the language of text for which to look. Uno dei seguenti: AutoDetect (default), Arabic, ChineseSimplified, ChineseTraditional, Czech, Danish, Dutch, English, Finnish, French, German, Greek, Hungarian, Italian, Japanese, Korean, Norwegian, Polish, Portuguese, Romanian, Russian, SerbianCyrillic, SerbianLatin, Slovak, Spanish, Swedish, Turkish.One of the following: AutoDetect (default), Arabic, ChineseSimplified, ChineseTraditional, Czech Danish, Dutch, English, Finnish, French, German, Greek, Hungarian, Italian, Japanese, Korean, Norwegian, Polish, Portuguese, Romanian, Russian, SerbianCyrillic, SerbianLatin, Slovak, Spanish, Swedish, Turkish.
TextOrientationTextOrientation (Facoltativo) Descrive l'orientamento del testo da cercare.(optional) describes the orientation of text for which to look. "Left" significa che la parte superiore di tutte le lettere è rivolta verso sinistra."Left" means that the top of all letters are pointed towards the left. Il testo predefinito (simile a quello di un libro) può essere orientato come "Up".Default text (like that which can be found in a book) can be called "Up" oriented. Uno dei seguenti: AutoDetect (default), Up, Right, Down, Left.One of the following: AutoDetect (default), Up, Right, Down, Left.
TimeIntervalTimeInterval (Facoltativo) Descrive la frequenza di campionamento.(optional) describes the sampling rate. Il valore predefinito è ogni 1/2 secondo.Default is every 1/2 second.
Formato JSON: HH:mm:ss.SSS (impostazione predefinita 00:00:00.500)JSON format – HH:mm:ss.SSS (default 00:00:00.500)
Formato XML – durata primitivi W3C XSD (predefinito PT0.5)XML format – W3C XSD duration primitive (default PT0.5)
DetectRegionsDetectRegions (Facoltativo) Una matrice di oggetti DetectRegion che specifica le aree del fotogramma video in cui rilevare il testo.(optional) An array of DetectRegion objects specifying regions within the video frame in which to detect text.
Un oggetto DetectRegion è costituito dai quattro valori interi seguenti:A DetectRegion object is made of the following four integer values:
Left: pixel dal margine sinistroLeft – pixels from the left-margin
Top: pixel dal margine superioreTop – pixels from the top-margin
Width: larghezza dell'area in pixelWidth – width of the region in pixels
Height: altezza dell'area in pixelHeight – height of the region in pixels

Esempio di set di impostazioni JSONJSON preset example

{
    "Version":1.0, 
    "Options": 
    {
        "AdvancedOutput":"true",
        "Language":"English", 
        "TimeInterval":"00:00:01.5",
        "TextOrientation":"Up",
        "DetectRegions": [
                {
                   "Left": 10,
                   "Top": 10,
                   "Width": 100,
                   "Height": 50
                }
         ]
    }
}

Esempio di set di impostazioni XMLXML preset example

<?xml version=""1.0"" encoding=""utf-16""?>
<VideoOcrPreset xmlns:xsi=""http://www.w3.org/2001/XMLSchema-instance"" xmlns:xsd=""http://www.w3.org/2001/XMLSchema"" Version=""1.0"" xmlns=""http://www.windowsazure.com/media/encoding/Preset/2014/03"">
  <Options>
     <AdvancedOutput>true</AdvancedOutput>
     <Language>English</Language>
     <TimeInterval>PT1.5S</TimeInterval>
     <DetectRegions>
         <DetectRegion>
               <Left>10</Left>
               <Top>10</Top>
               <Width>100</Width>
               <Height>50</Height>
        </DetectRegion>
   </DetectRegions>
   <TextOrientation>Up</TextOrientation>
  </Options>
</VideoOcrPreset>

File di output OCROCR output files

L'output del processore multimediale OCR è un file JSON.The output of the OCR media processor is a JSON file.

Elementi del file di output JSONElements of the output JSON file

L'output OCR del video include dati con segmentazione temporale sui caratteri del video.The Video OCR output provides time-segmented data on the characters found in your video. È possibile usare gli attributi, la lingua o l'orientamento per concentrarsi esattamente sulle parole che si desidera analizzare.You can use attributes such as language or orientation to hone-in on exactly the words that you are interested in analyzing.

L'output contiene gli attributi seguenti:The output contains the following attributes:

ElementoElement DescrizioneDescription
Scala cronologicaTimescale "Scatti" al secondo del video"ticks" per second of the video
OffsetOffset Differenza di orario dei timestamptime offset for timestamps. Nella versione 1.0 delle API Video, questo valore è sempre 0.In version 1.0 of Video APIs, this will always be 0.
Frequenza fotogrammiFramerate Fotogrammi al secondo del videoFrames per second of the video
widthwidth Larghezza del video in pixelwidth of the video in pixels
heightheight Altezza del video in pixelheight of the video in pixels
FrammentiFragments Matrice di porzioni temporali di video in cui i metadati sono suddivisi in blocchiarray of time-based chunks of video into which the metadata is chunked
startstart Ora di inizio di un frammento in "scatti"start time of a fragment in "ticks"
durationduration Lunghezza di un frammento in "scatti"length of a fragment in "ticks"
intervalinterval Intervallo di ogni evento all'interno del frammento specificatointerval of each event within the given fragment
eventsevents Matrice contenente le areearray containing regions
regionregion Oggetto che rappresenta le parole o le frasi rilevateobject representing detected words or phrases
Linguaggiolanguage Lingua del testo rilevato all'interno di un'arealanguage of the text detected within a region
orientationorientation Orientamento del testo rilevato all'interno di un'areaorientation of the text detected within a region
lineslines Matrice di righe del testo rilevato all'interno di un'areaarray of lines of text detected within a region
texttext Il testo effettivothe actual text

Esempio di output JSONJSON output example

Il seguente output contiene le informazioni generali del video e numerosi frammenti video.The following output example contains the general video information and several video fragments. In ogni frammento video, l'output contiene ogni area rilevata dal processore di contenuti multimediali OCR con la lingua e il relativo orientamento del testo.In every video fragment, it contains every region which is detected by OCR MP with the language and its text orientation. L'area contiene anche ogni riga di parole in questa area con il testo della riga, la posizione della riga e tutte le informazioni sulle parole (il contenuto, la posizione e la sicurezza delle parole) della riga.The region also contains every word line in this region with the line’s text, the line’s position, and every word information (word content, position and confidence) in this line. Di seguito è riportato un esempio, contenente anche alcuni commenti sulla riga.The following is an example, and I put some comments inline.

{
    "version": 1, 
    "timescale": 90000, 
    "offset": 0, 
    "framerate": 30, 
    "width": 640, 
    "height": 480,  // general video information
    "fragments": [
        {
            "start": 0, 
            "duration": 180000, 
            "interval": 90000,  // the time information about this fragment
            "events": [
                [
                   { 
                        "region": { // the detected region array in this fragment 
                            "language": "English",  // region language
                            "orientation": "Up",  // text orientation
                            "lines": [  // line information array in this region, including the text and the position
                                {
                                    "text": "One Two", 
                                    "left": 10, 
                                    "top": 10, 
                                    "right": 210, 
                                    "bottom": 110, 
                                    "word": [  // word information array in this line
                                        {
                                            "text": "One", 
                                            "left": 10, 
                                            "top": 10, 
                                            "right": 110, 
                                            "bottom": 110, 
                                            "confidence": 900
                                        }, 
                                        {
                                            "text": "Two", 
                                            "left": 110, 
                                            "top": 10, 
                                            "right": 210, 
                                            "bottom": 110, 
                                            "confidence": 910
                                        }
                                    ]
                                }
                            ]
                        }
                    }
                ]
            ]
        }
    ]
}

Codice di esempio .NET.NET sample code

Il programma seguente illustra come:The following program shows how to:

  1. Creare un asset e caricare un file multimediale nell'asset.Create an asset and upload a media file into the asset.
  2. Creare un processo con un file di configurazione/set di impostazioni OCR.Create a job with an OCR configuration/preset file.
  3. Scaricare i file JSON di output.Download the output JSON files.

Creare e configurare un progetto di Visual StudioCreate and configure a Visual Studio project

Configurare l'ambiente di sviluppo e popolare il file app.config con le informazioni di connessione, come descritto in Sviluppo di applicazioni di Servizi multimediali con .NET.Set up your development environment and populate the app.config file with connection information, as described in Media Services development with .NET.

EsempioExample

using System;
using System.Configuration;
using System.IO;
using System.Linq;
using Microsoft.WindowsAzure.MediaServices.Client;
using System.Threading;
using System.Threading.Tasks;

namespace OCR
{
    class Program
    {
        // Read values from the App.config file.
        private static readonly string _AADTenantDomain =
            ConfigurationManager.AppSettings["AADTenantDomain"];
        private static readonly string _RESTAPIEndpoint =
            ConfigurationManager.AppSettings["MediaServiceRESTAPIEndpoint"];

        // Field for service context.
        private static CloudMediaContext _context = null;

        static void Main(string[] args)
        {
            var tokenCredentials = new AzureAdTokenCredentials(_AADTenantDomain, AzureEnvironments.AzureCloudEnvironment);
            var tokenProvider = new AzureAdTokenProvider(tokenCredentials);

            _context = new CloudMediaContext(new Uri(_RESTAPIEndpoint), tokenProvider);

            // Run the OCR job.
            var asset = RunOCRJob(@"C:\supportFiles\OCR\presentation.mp4",
                                        @"C:\supportFiles\OCR\config.json");

            // Download the job output asset.
            DownloadAsset(asset, @"C:\supportFiles\OCR\Output");
        }

        static IAsset RunOCRJob(string inputMediaFilePath, string configurationFile)
        {
            // Create an asset and upload the input media file to storage.
            IAsset asset = CreateAssetAndUploadSingleFile(inputMediaFilePath,
                "My OCR Input Asset",
                AssetCreationOptions.None);

            // Declare a new job.
            IJob job = _context.Jobs.Create("My OCR Job");

            // Get a reference to Azure Media OCR.
            string MediaProcessorName = "Azure Media OCR";

            var processor = GetLatestMediaProcessorByName(MediaProcessorName);

            // Read configuration from the specified file.
            string configuration = File.ReadAllText(configurationFile);

            // Create a task with the encoding details, using a string preset.
            ITask task = job.Tasks.AddNew("My OCR Task",
                processor,
                configuration,
                TaskOptions.None);

            // Specify the input asset.
            task.InputAssets.Add(asset);

            // Add an output asset to contain the results of the job.
            task.OutputAssets.AddNew("My OCR Output Asset", AssetCreationOptions.None);

            // Use the following event handler to check job progress.  
            job.StateChanged += new EventHandler<JobStateChangedEventArgs>(StateChanged);

            // Launch the job.
            job.Submit();

            // Check job execution and wait for job to finish.
            Task progressJobTask = job.GetExecutionProgressTask(CancellationToken.None);

            progressJobTask.Wait();

            // If job state is Error, the event handling
            // method for job progress should log errors.  Here we check
            // for error state and exit if needed.
            if (job.State == JobState.Error)
            {
                ErrorDetail error = job.Tasks.First().ErrorDetails.First();
                Console.WriteLine(string.Format("Error: {0}. {1}",
                                                error.Code,
                                                error.Message));
                return null;
            }

            return job.OutputMediaAssets[0];
        }

        static IAsset CreateAssetAndUploadSingleFile(string filePath, string assetName, AssetCreationOptions options)
        {
            IAsset asset = _context.Assets.Create(assetName, options);

            var assetFile = asset.AssetFiles.Create(Path.GetFileName(filePath));
            assetFile.Upload(filePath);

            return asset;
        }

        static void DownloadAsset(IAsset asset, string outputDirectory)
        {
            foreach (IAssetFile file in asset.AssetFiles)
            {
                file.Download(Path.Combine(outputDirectory, file.Name));
            }
        }

        static IMediaProcessor GetLatestMediaProcessorByName(string mediaProcessorName)
        {
            var processor = _context.MediaProcessors
                .Where(p => p.Name == mediaProcessorName)
                .ToList()
                .OrderBy(p => new Version(p.Version))
                .LastOrDefault();

            if (processor == null)
                throw new ArgumentException(string.Format("Unknown media processor",
                                                           mediaProcessorName));

            return processor;
        }

        static private void StateChanged(object sender, JobStateChangedEventArgs e)
        {
            Console.WriteLine("Job state changed event:");
            Console.WriteLine("  Previous state: " + e.PreviousState);
            Console.WriteLine("  Current state: " + e.CurrentState);

            switch (e.CurrentState)
            {
                case JobState.Finished:
                    Console.WriteLine();
                    Console.WriteLine("Job is finished.");
                    Console.WriteLine();
                    break;
                case JobState.Canceling:
                case JobState.Queued:
                case JobState.Scheduled:
                case JobState.Processing:
                    Console.WriteLine("Please wait...\n");
                    break;
                case JobState.Canceled:
                case JobState.Error:
                    // Cast sender as a job.
                    IJob job = (IJob)sender;
                    // Display or log error details as needed.
                    // LogJobStop(job.Id);
                    break;
                default:
                    break;
            }
        }

    }
}

Percorsi di apprendimento di Servizi multimedialiMedia Services learning paths

Altre informazioni sui percorsi di apprendimento di Servizi multimediali di Azure:Read about the Azure Media Services learning paths:

Fornire commenti e suggerimentiProvide feedback

Usare il forum di suggerimenti degli utenti per fornire commenti e suggerimenti su come migliorare Servizi multimediali di Azure.Use the User Voice forum to provide feedback and make suggestions on how to improve Azure Media Services. È anche possibile passare direttamente a una delle categorie seguenti:You also can go directly to one of the following categories:

Panoramica di Analisi servizi multimediali di AzureAzure Media Services Analytics Overview