首页 > 解决方案 > 流和 Azure API 愿景

问题描述

我正在尝试使用 Azure API Vision 来读取图像上的文本,并且效果很好。但是在添加了一些代码来检测我的图像是否为黑色(无文本)之后,我从 Azure API 收到了一个错误:“错误请求”。当我不想使用我的小功能来检测黑色时,它会再次起作用。

我想那是因为我的流在另一个对象中转换但我不知道是什么对象......

这是我的代码:

var streamImage = this.printScreenService.CaptureRegionToStream(screenRegion);
var isBlack = await this.IsBlack(streamImage);

if (isBlack)
{
    return new OcrModel
    {
        IsBlack = true,
        Texts = new[] { "" }
    };
} 

var localFileOcrResult = await this.client.RecognizePrintedTextInStreamAsync(true, streamImage, OcrLanguages.Fr);

-----

private bool IsBlack(Stream stream)
{
    var image = new Bitmap(Image.FromStream(stream));

    for (var h = 0; h < image.Height; h++)
    {
        for (var w = 0; w < image.Width; w++)
        {
            var color = image.GetPixel(w, h);
            if ((color.R != color.G || color.G != color.B || color.R != color.B) && color.A != 0)
            {
                return false;
            }
        }
    }
    return true;
}

我尝试使用 CopyToAsync 流,但它不起作用。

谢谢你的帮助

标签: c#azurestream

解决方案


调用 IsBlack 方法后,应将流返回到位置 0:

var streamImage = this.printScreenService.CaptureRegionToStream(screenRegion);
var isBlack = await this.IsBlack(streamImage);

if (isBlack)
{
    return new OcrModel
    {
        IsBlack = true,
        Texts = new[] { "" }
    };
} 
streamImage.Position = 0; //this line
var localFileOcrResult = await this.client.RecognizePrintedTextInStreamAsync(true, streamImage, OcrLanguages.Fr);

推荐阅读