b2科目四模拟试题多少题驾考考爆了怎么补救
b2科目四模拟试题多少题 驾考考爆了怎么补救

Android识别ID号(图片识别)

电脑杂谈  发布时间:2020-05-04 15:20:31  来源:网络整理

validform验证号_android 验证号码_号验证

前一天下午我没事做. 我的朋友有需要,说他想在上标识号. 空闲时,他帮助他解决了问题,更不用说它有多完美了,但至少这是对需求的一种解决方案. 不再闲话.

让我们先来看看我的演示

Paste_Image.png

它也来自其他人的演示,它实际上是其他人使用的界面,但是当我看它时,它应该被视为“异常呼叫”(这意味着每个人都可以自己理解). 让我们分析这种方法的优缺点.

优点: 上传照片非常快,将返回上的所有信息,包括姓名,地址,出生等.

号验证_validform验证号_android 验证号码

缺点: “异常”呼叫具有一定程度的可靠性. 如果有人关闭或更改此界面,将更加尴尬. 当然,您可以选择购买其他版本的官方版本.

Paste_Image.png

基于Tess_two的识别,您可以放心使用它. 首先看看如何使用它!

第一句:

compile 'com.rmtheis:tess-two:6.0.0'

号验证_validform验证号_android 验证号码

然后使用它. 实际上,它非常简单易用,但要注意一些要点

1. 要在SD卡上拥有他的识别库,可以将该库理解为字典,可以自己训练该字典,因为我已经被他人训练过(只包含英文和数字),所以不说如何训练,百度会有很多.

2. 请注意,其他字典的路径文件夹名称必须为“ tessdata”,否则将报告错误

好的android 验证号码,准备工作已经完成. 接下来,我将介绍如何使用它. 我直接粘贴核心代码. 代码中有注释,无法阅读的消息或发给我的私人消息

    //训练数据路径,tessdata
    static final String TESSBASE_PATH = Environment.getExternalStorageDirectory() + "/";
    //识别语言英文
    static final String DEFAULT_LANGUAGE = "eng";
    /**
     * 传SD卡图片路径(当然你们也可以传Bitmap)
     * @param url
     */
    private void localre(String url) {
        //把图片转为Bitmap
        Bitmap bmp = BitmapFactory.decodeFile(url);
        //创建Tess
        final TessBaseAPI baseApi = new TessBaseAPI();
        //下面这一块代码为裁取号码区域(否则识别乱码,不准确)
        int x, y, w, h;
        x = (int) (bmp.getWidth() * 0.340);
        y = (int) (bmp.getHeight() * 0.800);
        w = (int) (bmp.getWidth() * 0.6 + 0.5f);
        h = (int) (bmp.getHeight() * 0.12 + 0.5f);
        Bitmap bit_hm = Bitmap.createBitmap(bmp, x, y, w, h);
        //这个只是我将裁取的号码区展示在了一个ImageView上,这个可以没有
        iv_number.setImageBitmap(bit_hm);
        //初始化OCR的训练数据路径与语言
        baseApi.init(TESSBASE_PATH, DEFAULT_LANGUAGE);
        //设置识别模式
        baseApi.setPageSegMode(TessBaseAPI.PageSegMode.PSM_SINGLE_LINE);
        //设置要识别的图片
        baseApi.setImage(bit_hm);
        //设置字典白名单
        baseApi.setVariable("tessedit_char_whitelist", "0123456789Xx");
        //把识别内容设置到EditText里
        tv_result.setText(baseApi.getUTF8Text());
        //收尾
        baseApi.clear();
        baseApi.end();
    }

android 验证号码,就是这么简单. 当图片被清楚地切割并且区域正确时,精度几乎达到100%;

为您提供照的示例,否则编号将不正确

Paste_Image.png

上一个结果图

Paste_Image.png

实际上,它是本地识别的扩展版本. 将相机数据转换为位图以进行识别,或者坚持使用核心代码. 了解演示研究.

    /**
     * 数据回调
     * @param data
     * @param camera
     */
    @Override
    public void onPreviewFrame(byte[] data, Camera camera) {
        camera.addCallbackBuffer(data);
        //将byte数组转为Bitmap
        ByteArrayOutputStream baos;
        byte[] rawImage;
        Bitmap bitmap;
        Camera.Size previewSize = camera.getParameters().getPreviewSize();//获取尺寸,格式转换的时候要用到
        BitmapFactory.Options newOpts = new BitmapFactory.Options();
        newOpts.inJustDecodeBounds = true;
        YuvImage yuvimage = new YuvImage(
                data,
                ImageFormat.NV21,
                previewSize.width,
                previewSize.height,
                null);
        baos = new ByteArrayOutputStream();
        yuvimage.compressToJpeg(new Rect(0, 0, previewSize.width, previewSize.height), 100, baos);// 80--JPG图片的质量[0-100],100最高
        rawImage = baos.toByteArray();
        //将rawImage转换成bitmap
        BitmapFactory.Options options = new BitmapFactory.Options();
        options.inPreferredConfig = Bitmap.Config.RGB_565;
        bitmap = BitmapFactory.decodeByteArray(rawImage, 0, rawImage.length, options);
        if (bitmap == null) {
            Log.d("zka", "bitmap is nlll");
            return;
        } else {
            //裁取图片中央区域
            int height = bitmap.getHeight();
            int width = bitmap.getWidth();
            final Bitmap bitmap1 = Bitmap.createBitmap(bitmap, width/2 - dip2px(150),height / 2 - dip2px(92), dip2px(300), dip2px(185));
            //截取号码区域
            int x, y, w, h;
            x = (int) (bitmap1.getWidth() * 0.340);
            y = (int) (bitmap1.getHeight() * 0.800);
            w = (int) (bitmap1.getWidth() * 0.6 + 0.5f);
            h = (int) (bitmap1.getHeight() * 0.12 + 0.5f);
            Bitmap bit_hm = Bitmap.createBitmap(bitmap1, x, y, w, h);
           // 识别
            if(bit_hm != null){
                String localre = localre(bit_hm);
                if (localre.length() == 18) {
                    Log.e(TAG, "onPreviewFrame: "+localre );
                    Toast.makeText(getApplicationContext(),localre,Toast.LENGTH_SHORT).show();
                }
            }
        }
    }
    /**
     * 识别
     * @param bm
     * @return
     */
    private String localre(Bitmap bm) {
        String content = "";
        bm = bm.copy(Bitmap.Config.ARGB_8888, true);
        iv_result.setImageBitmap(bm);
        TessBaseAPI baseApi = new TessBaseAPI();
        baseApi.init(TESSBASE_PATH, DEFAULT_LANGUAGE);
        //设置识别模式
        baseApi.setPageSegMode(TessBaseAPI.PageSegMode.PSM_SINGLE_LINE);
        //设置要识别的图片
        baseApi.setImage(bm);
        baseApi.setVariable("tessedit_char_whitelist", "0123456789Xx");
        Log.e(TAG, "localre: "+ baseApi.getUTF8Text());
        content = baseApi.getUTF8Text();
        baseApi.clear();
        baseApi.end();
        return content;
    }

Paste_Image.png

GitHub直接:

2019.10.21提示: 全屏手机需要调整切割参数,否则实时识别无效! ! !


本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/jisuanjixue/article-198776-1.html

    相关阅读
      发表评论  请自觉遵守互联网相关的政策法规,严禁发布、暴力、反动的言论

      • 孝文帝
        孝文帝

        不就是个死吗

      • 铁铫
        铁铫

        只要不是军用目的或者长期停靠

      • 桧丸
        桧丸

        就是行贿的最典型代表啊

      热点图片
      拼命载入中...