Pomocí Azure Media Analytics můžete převést textový obsah v videosouborů na digitální textUse Azure Media Analytics to convert text content in video files into digital text

PřehledOverview

Pokud potřebujete extrahování textového obsahu z videosouborů odvodily a generování digitální textu lze upravovat, prohledávatelné, měli byste použít Azure Media Analytics OCR (optické rozpoznávání znaků).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). Tento procesor médií Azure detekuje textový obsah v video soubory a vygeneruje textových souborů pro použití.This Azure Media Processor detects text content in your video files and generates text files for your use. OCR umožňuje automatizovat extrakce smysluplná metadata z videa signál médií.OCR enables you to automate the extraction of meaningful metadata from the video signal of your media.

Při použití ve spojení s vyhledávacím webem, můžete snadno indexu médií podle textu a zlepšit vyhledatelnost svůj obsah.When used in conjunction with a search engine, you can easily index your media by text, and enhance the discoverability of your content. To je velmi užitečné ve vysoce textové video, jako je nahrávání videa nebo snímek obrazovky prezentaci prezentace.This is extremely useful in highly textual video, like a video recording or screen-capture of a slideshow presentation. Procesor médií OCR Azure je optimalizovaná pro digitální textu.The Azure OCR Media Processor is optimized for digital text.

Azure Media OCR procesor médií je aktuálně ve verzi Preview.The Azure Media OCR media processor is currently in Preview.

Tento článek obsahuje podrobnosti o Azure Media OCR a ukazuje, jak používat ve službě Media Services SDK pro .NET.This article gives details about Azure Media OCR and shows how to use it with Media Services SDK for .NET. Další informace a příklady najdete v tématu tento blog.For more information and examples, see this blog.

OCR vstupních souborůOCR input files

Video soubory.Video files. V současné době jsou podporovány následující formáty: MP4, MOV a WMV.Currently, the following formats are supported: MP4, MOV, and WMV.

Konfigurace úlohyTask configuration

Konfigurace úlohy (nastavení).Task configuration (preset). Při vytváření úlohy s Azure Media OCR, je nutné zadat konfigurace přednastavení pomocí XML nebo JSON.When creating a task with Azure Media OCR, you must specify a configuration preset using JSON or XML.

Poznámka

Modulu OCR zabere jenom určitá oblast obrázku s minimální 40 pixelů na maximální délku 32 000 pixelů jako platný vstup v obou výšku či šířku.The OCR engine only takes an image region with minimum 40 pixels to maximum 32000 pixels as a valid input in both height/width.

Popis atributuAttribute descriptions

Název atributuAttribute name PopisDescription
AdvancedOutputAdvancedOutput Pokud nastavíte AdvancedOutput na hodnotu true, bude obsahovat výstup JSON poziční data pro každý jednoslovné (kromě oblastí a fráze).If you set AdvancedOutput to true, the JSON output will contain positional data for every single word (in addition to phrases and regions). Pokud chcete zobrazit tyto informace nechcete, nastavte příznak na hodnotu false.If you do not want to see these details, set the flag to false. Výchozí hodnota je false.The default value is false. Další informace najdete v tomto blogu.For more information, see this blog.
JazykLanguage (volitelné) popisuje jazyk textu, pro který se vás pod rouškou.(optional) describes the language of text for which to look. Jeden z následujících akcí: Automatické rozpoznávání (výchozí), arabština, ChineseSimplified, ChineseTraditional, čeština dánština, holandština, angličtina, finština, francouzština, němčina, řečtina, maďarština, italština, japonština, korejština, norština, polština, portugalština, rumunština, ruština, SerbianCyrillic, SerbianLatin , Slovenština, španělština, švédština, turečtina.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 (volitelné) popisuje orientaci textu, pro který se vás pod rouškou.(optional) describes the orientation of text for which to look. "Left" znamená, že horní části všechna písmena jsou nasměruje levé straně."Left" means that the top of all letters are pointed towards the left. Výchozí text (např., které lze nalézt v knize) lze volat "Nahoru" orientovaný.Default text (like that which can be found in a book) can be called "Up" oriented. Jeden z následujících akcí: Automatické rozpoznávání (výchozí), až, Jo, dolů, doleva.One of the following: AutoDetect (default), Up, Right, Down, Left.
TimeIntervalTimeInterval (volitelné) popisuje vzorkovací frekvenci.(optional) describes the sampling rate. Výchozí hodnota je každých 1/2 sekundy.Default is every 1/2 second.
Formát JSON – hh: mm:. Služby Zabezpečené úložiště (výchozí 00:00:00.500)JSON format – HH:mm:ss.SSS (default 00:00:00.500)
Formát XML – doba trvání primitivní W3C XSD (výchozí PT0.5)XML format – W3C XSD duration primitive (default PT0.5)
DetectRegionsDetectRegions (volitelné) Pole objektů DetectRegion určení oblastí v rámci video rámce, ve kterém chcete detekovat text.(optional) An array of DetectRegion objects specifying regions within the video frame in which to detect text.
DetectRegion objekt je vytvořen z následujících čtyř celočíselných hodnot:A DetectRegion object is made of the following four integer values:
Vlevo – pixelů od levého okrajeLeft – pixels from the left-margin
TOP – pixelů od horní okrajTop – pixels from the top-margin
Šířka – Šířka oblasti v pixelechWidth – width of the region in pixels
Výška – výšku oblasti v pixelechHeight – height of the region in pixels

Příklad JSON s předvolbyJSON 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
                    }
             ]
        }
    }

Předvolby ukázkový kód XMLXML preset example

    <?xml version=""1.0"" encoding=""utf-16""?>
    <VideoOcrPreset xmlns:xsi=""https://www.w3.org/2001/XMLSchema-instance"" xmlns:xsd=""https://www.w3.org/2001/XMLSchema"" Version=""1.0"" xmlns=""https://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>

OCR výstupní souboryOCR output files

Procesor médií OCR výstupem je soubor JSON.The output of the OCR media processor is a JSON file.

Prvky výstupního souboru JSONElements of the output JSON file

Výstup videa OCR obsahuje čas segmentované data znaků nalezených ve videu.The Video OCR output provides time-segmented data on the characters found in your video. Vám pomůže atributům, jako je jazyk nebo orientace phon se změnami na přesně tak, že máte zájem o analýze slova.You can use attributes such as language or orientation to hone-in on exactly the words that you are interested in analyzing.

Výstup obsahuje následující atributy:The output contains the following attributes:

ElementElement PopisDescription
TimescaleTimescale "značky" za sekundu videa"ticks" per second of the video
OffsetOffset časový posun, časových razítek.time offset for timestamps. Ve verzi 1.0 rozhraní API pro Video bude vždy 0.In version 1.0 of Video APIs, this will always be 0.
FramerateFramerate Snímků za sekundu videaFrames per second of the video
Šířkawidth Šířka videa v pixelechwidth of the video in pixels
Výškaheight výšku v pixelechheight of the video in pixels
FragmentsFragments pole založené na čase bloky dat videa, do kterého metadata je rozdělený do bloků datarray of time-based chunks of video into which the metadata is chunked
startstart Počáteční čas fragment v "značky"start time of a fragment in "ticks"
Doba trváníduration Délka fragment v "značky"length of a fragment in "ticks"
intervalinterval Interval každá událost v rámci dané fragmentuinterval of each event within the given fragment
stránka eventsevents pole obsahující oblastíarray containing regions
oblastregion objekt představující zjistil slova nebo frázeobject representing detected words or phrases
languagelanguage jazyk textu zjistil v rámci oblastilanguage of the text detected within a region
Orientaceorientation orientace textu zjistil v rámci oblastiorientation of the text detected within a region
řádkylines pole řádků textu zjistil v rámci oblastiarray of lines of text detected within a region
texttext vlastní textthe actual text

Příklad výstupu JSONJSON output example

Následující příklad výstupu obsahuje obecné informace o videu a několik fragmentů videa.The following output example contains the general video information and several video fragments. V každé video fragment obsahuje každou oblast, která zjistí OCR sady Management Pack s jazykem a jeho orientaci textu.In every video fragment, it contains every region, which is detected by OCR MP with the language and its text orientation. Oblast také obsahuje každý jednotlivý řádek slova v této oblasti se na řádku textu, pozice na řádku a každé slovo informace (obsahu aplikace word, umístění a spolehlivosti) v tomto řádku.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. Následuje příklad a můžu dát některé vložené komentáře.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
                                            }
                                        ]
                                    }
                                ]
                            }
                        }
                    ]
                ]
            }
        ]
    }

Vzorový kód .NET.NET sample code

Následující program ukazuje postup:The following program shows how to:

  1. Vytvoření assetu a uložit do assetu soubor média.Create an asset and upload a media file into the asset.
  2. Vytvoření úlohy pomocí souboru konfigurace/přednastavení optické rozpoznávání znaků.Create a job with an OCR configuration/preset file.
  3. Stažení výstupních souborů JSON.Download the output JSON files.

Vytvoření a konfigurace projektu Visual StudiaCreate and configure a Visual Studio project

Nastavte své vývojové prostředí a v souboru app.config vyplňte informace o připojení, jak je popsáno v tématu Vývoj pro Media Services v .NET.Set up your development environment and populate the app.config file with connection information, as described in Media Services development with .NET.

Příklad:Example

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["AMSAADTenantDomain"];
        private static readonly string _RESTAPIEndpoint =
            ConfigurationManager.AppSettings["AMSRESTAPIEndpoint"];
        private static readonly string _AMSClientId =
            ConfigurationManager.AppSettings["AMSClientId"];
        private static readonly string _AMSClientSecret =
            ConfigurationManager.AppSettings["AMSClientSecret"];

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

        static void Main(string[] args)
        {
            AzureAdTokenCredentials tokenCredentials =
                new AzureAdTokenCredentials(_AADTenantDomain,
                    new AzureAdClientSymmetricKey(_AMSClientId, _AMSClientSecret),
                    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;
            }
        }

    }
}

Mapy kurzů ke službě Media ServicesMedia Services learning paths

Media Services V3 (nejnovější)Media Services v3 (latest)

Podívejte se na nejnovější verzi Azure Media Services.Check out the latest version of Azure Media Services!

Media Services V2 (starší verze)Media Services v2 (legacy)

Poskytnutí zpětné vazbyProvide feedback

Pomocí fóra User Voice můžete poskytnout zpětnou vazbu a zaslat návrhy pro zlepšení služeb Azure Media Services.Use the User Voice forum to provide feedback and make suggestions on how to improve Azure Media Services. Můžete také přejít přímo na jednu z následujících kategorií:You also can go directly to one of the following categories:

Azure Media Services Analytics OverviewAzure Media Services Analytics Overview