代码之家  ›  专栏  ›  技术社区  ›  Jacquelyn.Marquardt

黑客攻击一个封闭源代码程序,帮助我用python/screenshot/OCR对现实生活中的对象进行排序

  •  1
  • Jacquelyn.Marquardt  · 技术社区  · 9 年前

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

    我无法访问此程序的源代码/API,但我想编写一个python脚本来帮助我自动执行排序任务(未实现),这是我告诉您的。

    我们选取12个随机物体/工具/零件,它们由具有唯一id的条形码识别(例如50286502855027750280……),我们用条形码枪扫描器对它们进行扫描,在程序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_,

    50286 after

    然而,我无法分辨第一个项目现在是第十一个元素,因为这两张图片不相似,因为随机的令人讨厌的蓝色/青色像素(Truetype?)

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

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

    我如何解决这个问题?

    也许这很简单,但我不是。

    帮我给XYZ开发人员一个惊喜!!

    1 回复  |  直到 9 年前
        1
  •  1
  •   Jos Polfliet    9 年前

    你有没有尝试过不精确的匹配?您可以将列表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/