小编Jen*_*ich的帖子

如何在大图中定位二维码以提高解码性能?

背景

我需要在 Raspberry Pi 上的大图像(2500x2000)中检测和解码相对较小的二维码(110x110 像素)。二维码可以在框架中的任何位置,但方向应该是正常的,即充值。我们使用高质量的工业相机和镜头,因此图像通常质量好且对焦清晰。

目前,pyzbar当我使用大约 600x500 的窗口裁剪 QR 码周围的图像时,我能够可靠地检测和解码图像。如果我尝试解码完整图像,则不会检测/解码该符号。

我试过的

我写了一个循环,在图像上滑动一个裁剪窗口,并尝试分别解码每个裁剪的帧。我每次迭代都将窗口移动 50%,以确保不会遗漏窗口边缘的任何符号。

我也尝试过使用 OpenCV 进行检测/解码,但性能并不比使用 pyzbar

我的解决方案的问题

影响我当前项目的问题:

滑动窗口方法难以调优,效率低下,b/c 速度慢:

  1. 它导致整个区域被分析近 4 次;将窗口移动 50% 的副作用,
  2. 最可靠的窗口尺寸往往很小,需要多次迭代,
  3. 符号大小可能会因离相机更近/更远而有所不同。

可能会影响我将使用这种方法的其他项目的问题:

  1. 滑动窗口可能会多次捕获一个符号,因此很难确定该符号是否出现多次。

问题

如何找到二维码的大概位置,以便相应地裁剪图像?

我对提高检测/解码性能的任何解决方案感兴趣,但更喜欢 (a) 使用机器学习技术(我是 ML 新手但愿意学习),(b) 使用 OpenCV 图像预处理或 (c ) 改进我的基本裁剪算法。

示例图像

这是我用于测试的示例图像之一。为了近似最坏的情况,故意降低照明质量,但是在裁剪时各个代码仍然可以正确检测和解码。

二维码测试​​图001

python qr-code image-processing computer-vision

10
推荐指数
1
解决办法
4228
查看次数

是否将前提条件分组为可以保持DRY的方法?

在为具有相似参数的不同函数编写前置条件时,我想将断言或异常分组到静态方法中,而不是明确地将它们写出来.例如,而不是

GetFooForUser(User user) 
{
  assert(null != user);
  assert(user.ID > 0); // db ids always start at 1
  assert(something else that defines a valid user);
  ...

  // do some foo work
}

GetBarForUser(User user) 
{
  assert(null != user);
  assert(user.ID > 0); // db ids always start at 1
  assert(something else that defines a valid user);
  ...

  // do some bar work
}
Run Code Online (Sandbox Code Playgroud)

我更愿意写

GetFooForUser(User user) 
{
  CheckUserIsValid(user);

  // do some foo work
}

GetBarForUser(User user) 
{
  CheckUserIsValid(user);

  // do some bar …
Run Code Online (Sandbox Code Playgroud)

c# assertions preconditions

6
推荐指数
1
解决办法
168
查看次数

何时使用集合与多个属性

我正在为一个ASP.NET应用程序构建一个相对简单的类(例如:Person),该应用程序具有几个相关的布尔属性(例如:Certifications).我可以选择将它们存储为多个属性:

Class Person
    Property HasCertL1
    Property HasCertL2
    Property HasCertL3
End Class
Run Code Online (Sandbox Code Playgroud)

或者使用集合和枚举:

Enum Cert
    L1
    L2
    L3
End Enum

Class Person
    Property Certs as List(Of Cert)
End Class
Run Code Online (Sandbox Code Playgroud)

该类将不会在其他地方使用,并且如果不重新编译该类,则不会更新项目(Certs).我正在寻找选择其中一个的理由.任何人都可以提供任何最佳实践或指向我可能错过的一些资源吗?提前致谢!

干杯,JE

.net collections properties class

5
推荐指数
1
解决办法
132
查看次数

为什么随机数和正确的猜测之间有很强的相关性?

在尝试测试知道随机数的历史记录是否可以帮助预测将来的结果时,我发现生成的平均值与正确猜测的数量之间存在强烈的,意料之外的关联。

该测试应该模拟硬币翻转(正面= 0,正面= 1),如果先前的尝试偏向正面,则猜测正面,反之亦然。

为什么在下面的LinqPad程序中生成的数字总和总是几乎等于正确的猜测数字?

void Main()
{
  var rnd = new Random();
  var attempts = 10000000;
  var correctGuesses = 0;
  long sum = 0;
  decimal avg = 0.5m;

  for (int i = 0; i < attempts; i++)
  {
    var guess = avg < 0.5m ? 1 : 0;
    var result = rnd.Next(0, 2);
    if (guess == result)
    {
      correctGuesses += 1;
    }
    sum += result;
    avg = (decimal)sum/(decimal)attempts;
  }

  attempts.Dump("Attempts");    
  correctGuesses.Dump("Correct Guesses");

  avg = (decimal)sum / (decimal)attempts;
  avg.Dump("Random Number …
Run Code Online (Sandbox Code Playgroud)

c# random

3
推荐指数
1
解决办法
125
查看次数