Vin码识别功能实现

最近公司让做一个扫描汽车VIN码得到汽车的信息的功能,在网上查了半天基本都是那几家公司在做广告,看到就烦,搜到的完全不是想要的结果,在经过各种查找之后,资料找的差不多了,再此记录分享下,需要的可以参考资料自己实现功能。

1.参考了其他公司做出来的的APP这个扫描范围肯定是要限制一定区域的,可以参考这个项目,单独把这个扫描的提取出来,

实验光学字符识别应用

2.把字库从assets复制到SD卡,可以参考这个,assets复制到SD卡,单独提取复制字库到SD卡,就是这个工具类,提取出来用即可。

 //Android6.0之前安装时就能复制,6.0之后要先请求权限,所以6.0以上的这个方法无用需另外处理。
        assets2SD(getApplicationContext(), LANGUAGE_PATH, DEFAULT_LANGUAGE_NAME);
/**
 * 将assets中的识别库复制到SD卡中
 */
 
public class SDUtils {
    private static final String TAG = "SDUtils";
 
    /**
     * 将assets中的识别库复制到SD卡中
     *
     * @param path 要存放在SD卡中的 完整的文件名。这里是"/storage/emulated/0//tessdata/chi_sim.traineddata"
     * @param name assets中的文件名 这里是 "chi_sim.traineddata"
     */
    public static void assets2SD(Context context, String path, String name) {
        Log.e(TAG, "assets2SD: " + path);
        Log.e(TAG, "assets2SD: " + name);
 
        //如果存在就删掉
        File f = new File(path);
        if (f.exists()) {
            f.delete();
        }
        if (!f.exists()) {
            File p = new File(f.getParent());
            if (!p.exists()) {
                p.mkdirs();
            }
            try {
                f.createNewFile();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
 
        InputStream is = null;
        OutputStream os = null;
        try {
            is = context.getAssets().open(name);
            File file = new File(path);
            os = new FileOutputStream(file);
            byte[] bytes = new byte[2048];
            int len = 0;
            while ((len = is.read(bytes)) != -1) {
                os.write(bytes, 0, len);
            }
            os.flush();
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            try {
                if (is != null)
                    is.close();
                if (os != null)
                    os.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
 
    }
}
3.识别功能就几句代码;
 

  
首先肯定是引入依赖了

  
dependencies {
    compile 'com.rmtheis:tess-two:6.2.0'
}

  
简单的用法其实就几行代码:


  
TessBaseAPI tessBaseAPI = new TessBaseAPI();
tessBaseAPI.init(DATAPATH, DEFAULT_LANGUAGE);//参数后面有说明。
tessBaseAPI.setImage(bitmap);
String text = tessBaseAPI.getUTF8Text();

 
然后用官方的字库肯定是很大的几十兆的,而且识别不一定准确,所以就需要根据自己的功能去单独去训练字库来识别,而且字库也很小我训练出来的只有100+KB大小,比起官方的字库30+M起那是相当理想了,官方的你也用不了这么多,所以建议还是自己训练下自己的字库,准确率还高。
训练字库的参考这个;Android文字识别tesseract ocr -训练样本库 识别字库(注意里面图片转换的那个网址就不要去试了(反馈了不知道有没改掉),我就在这里掉进坑里了,还好爬了出来,转换图片推荐用其他方法或者最简单的用系统的画图,然后另存为tif即可。)

等集齐这些功能功能就差不多实现啦,我这是识别出来的字符传给后台后台处理返回结果给我的,识别出什么车型什么资料啥的那个就要看你们是怎么实现了。

 

————————————————
版权声明:本文为CSDN博主「Ke-Le8」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_19714505/article/details/79114821

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值