【问题标题】:Stream & Azure API Vision流和 Azure API 愿景
【发布时间】:2020-02-27 01:52:05
【问题描述】:

我正在尝试使用 Azure API Vision 来读取图像上的文本,它运行良好。 但是在添加了一些代码来检测我的图像是否为黑色(无文本)之后,我从 Azure API 收到了一个错误:“Bad Request”。 当我不想使用我的小功能检测黑色时,它又可以工作了。

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

这是我的代码:

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 流,但它不起作用。

感谢您的帮助

【问题讨论】:

  • 尝试将图像保存到本地硬盘并检查是否可以打开它(通过图像查看器/Windows 资源管理器/绘图)
  • @ThiagoCustodio 在“IsBlack”过程之后?还是之前?
  • 在 IsBlack 方法中。只是为了确保它没有损坏
  • @ThiagoCustodio 我把 "image.Save("test.bmp");"我可以打开它

标签: c# azure stream


【解决方案1】:

调用 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);

【讨论】:

  • 啊哈哈简直……!有什么解释吗?
  • 这是因为您使用的是相同的流。读完后需要回退
  • 谢谢!蒂亚戈
猜你喜欢
  • 2014-04-30
  • 1970-01-01
  • 2017-07-10
  • 2011-04-11
  • 2022-12-03
  • 2019-10-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多