真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

Android實(shí)現(xiàn)掃一掃識(shí)別數(shù)字功能

1.準(zhǔn)備工作

我們提供的服務(wù)有:成都網(wǎng)站設(shè)計(jì)、成都做網(wǎng)站、微信公眾號(hào)開發(fā)、網(wǎng)站優(yōu)化、網(wǎng)站認(rèn)證、六枝ssl等。為1000多家企事業(yè)單位解決了網(wǎng)站和推廣的問(wèn)題。提供周到的售前咨詢和貼心的售后服務(wù),是有科學(xué)管理、有技術(shù)的六枝網(wǎng)站制作公司

  • 首先實(shí)現(xiàn)識(shí)別數(shù)字等字符,我們要知道需要采用OCR (Optical Character Recognition,光學(xué)字符識(shí)別)來(lái)實(shí)現(xiàn)。而tesseract是非常不錯(cuò)的開源OCR工具,但是要在Android中直接使用可能要費(fèi)點(diǎn)功夫。不過(guò)不用擔(dān)心,tess-two拯救了我們。
  • 其次是掃一掃識(shí)別,那么很快聯(lián)想到的就是常見(jiàn)的二維碼掃描這類的項(xiàng)目。通過(guò)掃一掃實(shí)時(shí)拿到圖像,來(lái)做識(shí)別。
  • 接下來(lái)在Github上找到了QrCodeScanner項(xiàng)目,作者通過(guò)一定的優(yōu)化,使得識(shí)別的效率有所提升。那么我們用它來(lái)掃描數(shù)字,也會(huì)有效率上的提升。

2.實(shí)現(xiàn)細(xì)節(jié)

1.首先是tess-two的用法。

app下的build.gradle的配置如下

android {
  defaultConfig {
    ....
    ndk {
      abiFilters 'armeabi' //自行選擇添加
    }
  }
}
dependencies {
  compile 'com.rmtheis:tess-two:8.0.0'
}

識(shí)別方法:

public String detectText(Bitmap bitmap) {
    TessBaseAPI tessBaseAPI = new TessBaseAPI();
    String path = ""; //訓(xùn)練數(shù)據(jù)路徑
    tessBaseAPI.setDebug(true);
    tessBaseAPI.init(path, "eng"); //eng為識(shí)別語(yǔ)言
    tessBaseAPI.setVariable(TessBaseAPI.VAR_CHAR_WHITELIST, "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789"); // 識(shí)別白名單
    tessBaseAPI.setVariable(TessBaseAPI.VAR_CHAR_BLACKLIST, "!@#$%^&*()_+=-[]}{;:'\"\\|~`,./<>?"); // 識(shí)別黑名單
    tessBaseAPI.setPageSegMode(TessBaseAPI.PageSegMode.PSM_AUTO_OSD);//設(shè)置識(shí)別模式
    tessBaseAPI.setImage(bitmap); //設(shè)置需要識(shí)別圖片的bitmap
    String inspection = tessBaseAPI.getHOCRText(0);
    tessBaseAPI.end();
    return inspection ;
  }

訓(xùn)練數(shù)據(jù)可以在tessdata下載,里面包含各種語(yǔ)言。當(dāng)然你自己也可以訓(xùn)練它,有興趣的可以學(xué)習(xí)一下相關(guān)內(nèi)容。

2.從tess-two的用法可以知道,我們最終需要的是識(shí)別圖片的Bitmap。在掃碼項(xiàng)目中我們找到在DecodeHandler類的decode方法中,我們會(huì)得到一個(gè)PlanarYUVLuminanceSource類的實(shí)例。在使用HybridBinarizer算法解析數(shù)據(jù)源,最終采用MultiFormatReader解析圖像出結(jié)果。代碼大致如下:

 Result rawResult = null;
  MultiFormatReader mMultiFormatReade = new MultiFormatReader();
  try {
    PlanarYUVLuminanceSource source =
          new PlanarYUVLuminanceSource(```, false);
    BinaryBitmap bitmap = new BinaryBitmap(new HybridBinarizer(source));
    rawResult = mMultiFormatReader.decode(bitmap, mHints);
  } catch (ReaderException ignored) {

  } finally {
    mMultiFormatReader.reset();
  }

看完后懵逼了,沒(méi)有Bitmap。經(jīng)過(guò)一番查找,找到了在舊版的zxing中PlanarYUVLuminanceSource類有renderCroppedGreyscaleBitmap方法,不知為何去除了。。。

3.之后修改了一些相機(jī)的參數(shù)信息,適配了部分設(shè)備的預(yù)覽效果。基本的頁(yè)面修改了一下。這里就不贅述了。

走一波,如下效果:

Android實(shí)現(xiàn)掃一掃識(shí)別數(shù)字功能

可以發(fā)現(xiàn)除了數(shù)字以外,它將中文識(shí)別為了字母。其實(shí)問(wèn)題首先是我們使用了英文的訓(xùn)練數(shù)據(jù),同時(shí)白名單設(shè)置了a~z的字母。當(dāng)然你也不能將字母設(shè)置為黑名單,那樣只會(huì)讓識(shí)別不出的字符識(shí)別為亂七八糟的數(shù)字。

這里我給出的建議是利用正則去篩選,這樣你可以識(shí)別你想要的各種格式數(shù)據(jù)。我這里只是做了手機(jī)號(hào)的簡(jiǎn)單識(shí)別,大家可以舉一反三去處理。

 public static String getTelNum(String sParam){
    if(TextUtils.isEmpty(sParam)){
      return "";
    }
    Pattern pattern = Pattern.compile("(1|861)(3|5|7|8)\\d{9}$*");
    Matcher matcher = pattern.matcher(sParam);
    StringBuilder bf = new StringBuilder();
    while (matcher.find()) {
      bf.append(matcher.group()).append(",");
    }
    int len = bf.length();
    if (len > 0) {
      bf.deleteCharAt(len - 1);
    }
    return bf.toString();
  }

修改后如下:(同時(shí)支持多個(gè)號(hào)碼)

Android實(shí)現(xiàn)掃一掃識(shí)別數(shù)字功能 Android實(shí)現(xiàn)掃一掃識(shí)別數(shù)字功能

當(dāng)然本項(xiàng)目也保留了掃碼功能(可在DecodeHandler中自己添加條碼格式):

Android實(shí)現(xiàn)掃一掃識(shí)別數(shù)字功能 Android實(shí)現(xiàn)掃一掃識(shí)別數(shù)字功能

細(xì)心的同學(xué)可以從圖中看到掃描框的大小都不一樣,這里我是改成了可以手動(dòng)調(diào)節(jié)大小的掃描框。畢竟掃碼模式下,框大一點(diǎn)還是比較好識(shí)別(將二維碼放入框中有時(shí)就費(fèi)時(shí)間)。掃數(shù)字這些文字時(shí),框小一點(diǎn)會(huì)好識(shí)別。具體可以下載自行體驗(yàn)。

最后我將代碼已經(jīng)上傳至Github:Tesseract-OCR-Scanner

總結(jié)

以上所述是小編給大家介紹的Android實(shí)現(xiàn)掃一掃識(shí)別數(shù)字功能,希望對(duì)大家有所幫助,如果大家有任何疑問(wèn)請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)創(chuàng)新互聯(lián)網(wǎng)站的支持!


分享名稱:Android實(shí)現(xiàn)掃一掃識(shí)別數(shù)字功能
分享URL:http://weahome.cn/article/pcpcgh.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部