破解一个闭源程序来帮助我用 python/screenshot/OCR 对现实生活中的对象进行排序

Hacking a closed source program to help me sort real life objects with python/screenshot/OCR

在我的工作中,我们使用专用的 MS ACCESS 程序(我们称之为 XYZ)来帮助我们的工作。

我无法访问此程序的源代码 code/API,但我想编写一个 python 脚本来帮助我自动化排序任务(未实现),我告诉你.

我们随机抽取 12 个 objects/tools/pieces,它们由具有唯一 ID 的条形码标识(例如 50286,50285,50277,50280 ....),我们用条形码枪扫描器拍摄它们,然后在程序 XYZ 我们得到这个结果。

before sorting

这是工作电脑的屏幕截图,为了清楚起见,我在右侧手动添加了蓝色数字,以向您解释我要完成的任务。 记住我们随机拿了这些对象,现在我们必须对它们进行排序。 它们按程序 XYZ 排序,请记住一些重要的排序内容,这些内容并不重要。

这个脚本制作了两个截图,第一个在列表排序之前,第二个在列表排序之后。

排序后,我的列表如下所示。

after sorting

我希望我的脚本输出数字 3,12,11,9,8,7,10,6,4,5,1,2。

我认为这是一项简单的任务,因为我已经设法获得了例如 Element_#1_in_before_list

50826 before

和 Element_#11_in_after_list,

50286 after

但是我不能说第一个项目现在是第十一个元素,因为两张图片由于随机烦人的噪音而不相似 blue/cyan 像素(Truetype?)

我试过OCR识别字符,但有时会失败,而且太复杂了。

我尝试转换为黑白,但噪声像素有时会变成黑色或白色,并且两个图像不完全匹配(我想出了执行 md5sum 来判断它们是否相同的解决方案)

我该如何解决这个问题?

也许这很简单,但我是菜鸟。

帮我给 XYZ 开发者一个惊喜!!

您尝试过非精确匹配吗?您可以将列表 1 中的每个图像与列表 2 中 MSE 最低的图像匹配。

def mse(imageA, imageB):
    # the 'Mean Squared Error' between the two images is the
    # sum of the squared difference between the two images;
    # NOTE: the two images must have the same dimension
    err = np.sum((imageA.astype("float") - imageB.astype("float")) ** 2)
    err /= float(imageA.shape[0] * imageA.shape[1])

    # return the MSE, the lower the error, the more "similar"
    # the two images are
    return err

MSE 函数的来源:http://www.pyimagesearch.com/2014/09/15/python-compare-two-images/