我需要在 Raspberry Pi 上的大图像(2500x2000)中检测和解码相对较小的二维码(110x110 像素)。二维码可以在框架中的任何位置,但方向应该是正常的,即充值。我们使用高质量的工业相机和镜头,因此图像通常质量好且对焦清晰。
目前,pyzbar当我使用大约 600x500 的窗口裁剪 QR 码周围的图像时,我能够可靠地检测和解码图像。如果我尝试解码完整图像,则不会检测/解码该符号。
我写了一个循环,在图像上滑动一个裁剪窗口,并尝试分别解码每个裁剪的帧。我每次迭代都将窗口移动 50%,以确保不会遗漏窗口边缘的任何符号。
我也尝试过使用 OpenCV 进行检测/解码,但性能并不比使用 pyzbar
影响我当前项目的问题:
滑动窗口方法难以调优,效率低下,b/c 速度慢:
可能会影响我将使用这种方法的其他项目的问题:
如何找到二维码的大概位置,以便相应地裁剪图像?
我对提高检测/解码性能的任何解决方案感兴趣,但更喜欢 (a) 使用机器学习技术(我是 ML 新手但愿意学习),(b) 使用 OpenCV 图像预处理或 (c ) 改进我的基本裁剪算法。
这是我用于测试的示例图像之一。为了近似最坏的情况,故意降低照明质量,但是在裁剪时各个代码仍然可以正确检测和解码。
在为具有相似参数的不同函数编写前置条件时,我想将断言或异常分组到静态方法中,而不是明确地将它们写出来.例如,而不是
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) 我正在为一个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
在尝试测试知道随机数的历史记录是否可以帮助预测将来的结果时,我发现生成的平均值与正确猜测的数量之间存在强烈的,意料之外的关联。
该测试应该模拟硬币翻转(正面= 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# ×2
.net ×1
assertions ×1
class ×1
collections ×1
properties ×1
python ×1
qr-code ×1
random ×1