国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 系統(tǒng) > Android > 正文

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

2019-10-22 18:27:50
字體:
供稿:網(wǎng)友

1.準備工作

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

2.實現(xiàn)細節(jié)

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

app下的build.gradle的配置如下

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

識別方法:

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

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

2.從tess-two的用法可以知道,我們最終需要的是識別圖片的Bitmap。在掃碼項目中我們找到在DecodeHandler類的decode方法中,我們會得到一個PlanarYUVLuminanceSource類的實例。在使用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();  }

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

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

走一波,如下效果:

android,實現(xiàn)掃一掃,識別數(shù)字

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

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

 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();  }

修改后如下:(同時支持多個號碼)

android,實現(xiàn)掃一掃,識別數(shù)字 android,實現(xiàn)掃一掃,識別數(shù)字

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

android,實現(xiàn)掃一掃,識別數(shù)字 android,實現(xiàn)掃一掃,識別數(shù)字

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

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

總結(jié)

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


注:相關(guān)教程知識閱讀請移步到Android開發(fā)頻道。
發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 光泽县| 西安市| 大洼县| 军事| 太和县| 阜新市| 济南市| 托里县| 巢湖市| 浠水县| 阿克陶县| 齐齐哈尔市| 泸西县| 安塞县| 双城市| 林周县| 沈丘县| 石家庄市| 道真| 普格县| 宿迁市| 陕西省| 喀喇沁旗| 基隆市| 遂溪县| 太仆寺旗| 云龙县| 五家渠市| 西藏| 邢台县| 工布江达县| 彭泽县| 浦东新区| 密山市| 合川市| 确山县| 曲水县| 鹤庆县| 盐边县| 湘潭市| 包头市|