确定Android上的位图中是否存在手写签名

时间:2019-04-04 10:55:30

标签: android bitmap ocr

我有一个应用程序,试图确定位图(签名)中是否有手写文字。不能仅在本地使用云解决方案来完成此操作(我在本地使用Google Vision来同时扫描QR码并通过OCR检测“文档结尾”,并且效果很好。)如果有人在位图中进行了手写签名,则需要检查位图。

我的解决方案如下(在我扫描QR码并进行了OCR,并获得了最终的位图之后):

public void createPaletteAsync(Bitmap bitmap) {
        Palette.from(bitmap).maximumColorCount(40).generate(p -> {
            // Use generated instance
            List<Palette.Swatch> swatches = p.getSwatches();
            for (Palette.Swatch swatch : swatches) {
                float[] hslForCurrentSwatch = swatch.getHsl();
                Log.i(TAG, "HSL value is: " + Float.toString(hslForCurrentSwatch[0])
                        + "with a pixel population of: " + swatch.getPopulation());
                if (Math.round(hslForCurrentSwatch[0]) >= 210 && Math.round(hslForCurrentSwatch[0]) <= 240) {
                    ((TextView) findViewById(R.id.semnat)).setText("Signed document");
                    return;
                }
            }
            ((TextView) findViewById(R.id.semnat)).setText("Unsigned document");
        });
    }

因此,基本上,我检查位图中是否包含从210到240的蓝色色调的色板,如果存在,我将文档视为“已签名”。显然,这是有问题的,因为它仅适用于用蓝色笔签名的文档,并且它要求位图仅包含签名的纸张,照片中没有“蓝色对象”。

您能想象在本地(没有任何基于云的解决方案)可以确定文档是否签名的其他方法吗?

0 个答案:

没有答案