我目前正在开发一个项目,其中我正在使用一个MediaPlayer对象接收来自IP摄像头的实时视频流。最终目标是每秒从一帧中使用Windows.Media.OCR提取文本,为此我需要一个SoftwareBitmap。
根据Microsoft UWP文档,似乎可以使用CopyFrameToVideoSurface(CanvasBitmap)方法从MediaPlayer对象中获取帧。我可以从SoftwareBitmap创建CanvasBitmap,但我没有找到一种不必保存文件(我试图避免这样做,因为我不需要保留这些图像)的方法从CanvasBitmap创建SoftwareBitmap。我希望我错过了一些简单的东西,是否有一种从MediaPlayer对象获取SoftwareBitmap的方法?
我一直在参考此示例以使用MediaPlayer的帧服务器模式。我不需要显示图像,因此如果可能的话,最好避免使用CanvasBitmap。 MediaPlayer
根据Microsoft UWP文档,似乎可以使用CopyFrameToVideoSurface(CanvasBitmap)方法从MediaPlayer对象中获取帧。我可以从SoftwareBitmap创建CanvasBitmap,但我没有找到一种不必保存文件(我试图避免这样做,因为我不需要保留这些图像)的方法从CanvasBitmap创建SoftwareBitmap。我希望我错过了一些简单的东西,是否有一种从MediaPlayer对象获取SoftwareBitmap的方法?
我一直在参考此示例以使用MediaPlayer的帧服务器模式。我不需要显示图像,因此如果可能的话,最好避免使用CanvasBitmap。 MediaPlayer
private async Task GetStream()
{
mediaPlayer = new MediaPlayer()
{
Source = MediaSource.CreateFromStream(placeholder, "video")
};
mediaPlayer.VideoFrameAvailable += VideoFrameAvailable;
mediaPlayer.IsVideoFrameServerEnabled = true;
mediaPlayer.Play();
}
private async void VideoFrameAvailable(MediaPlayer sender, object args)
{
// Get frame from media player, create SoftwareBitmap
await ExtractText(softwareBitmapImg);
}
我用于OCR部分的代码相对简单,并且在提供SoftwareBitmap时非常有效。
OCR
private async Task ExtractText()
{
Language ocrLanguage = new Language("en-us");
OcrEngine ocrEngine = OcrEngine.TryCreateFromLanguage(ocrLanguage);
var ocrResult = await ocrEngine.RecognizeAsync(bitmap);
String text = ocrResult.Text;
}