Android 使用Zxing進(jìn)行條形碼識別

前言

項目中需要對條形碼進(jìn)行識別,第一念頭就想到Zxing彤蔽,曾經(jīng)用它進(jìn)行過二維碼識別销凑,依稀記得也支持條碼識別彤叉。先上網(wǎng)找相關(guān)資料:

1捺球、 Android二維碼掃描的簡單實現(xiàn)及源碼分析 (其中RGBLuminanceSource source =new RGBLuminanceSource()報錯吕粗,需改為鏈接3中的寫法债蜜。)

2梨州、 ZXing 相冊中識別二維碼和條形碼

3祖秒、 Android 長按識別圖中二維碼 zxing

4诞吱、幾行代碼快速集成二維碼掃描庫

步驟

1、從Github拉取最新的Zxing包代碼竭缝,優(yōu)化包房维,去除無用功能,僅保留Android中需要使用的功能抬纸×可去Github拉取最新代碼: Zxing ,或者按鏈接1湿故、4找別人優(yōu)化過的包下載到本地阿趁,導(dǎo)入成module并引用。

本工程使用鏈接4中的庫坛猪,為了修改簡單脖阵,直接把整個庫拉下來Import成本地module,添加依賴后墅茉,就可以直接修改CaptureActivity樣式和邏輯命黔。

2、跳轉(zhuǎn)到掃描頁(CaptureActivity)進(jìn)行掃描就斤,掃描出結(jié)果后finish返回結(jié)果

 Intent intent = new Intent(GPSSuccessdActivity.this, CaptureActivity.class);
 startActivityForResult(intent, REQUEST_SCAN);

獲取返回的結(jié)果悍募,在onActivityResult中處理

if(data != null) {
    Bundle bundle = data.getExtras();
    if(bundle == null) {
        return;
    }
    if(bundle.getInt(CodeUtils.RESULT_TYPE) == CodeUtils.RESULT_SUCCESS) {
        String result = bundle.getString(CodeUtils.RESULT_STRING);
        onScanSuccessed(result);//此處是識別成功后具體的邏輯代碼,自行實現(xiàn)洋机。
    } else if(bundle.getInt(CodeUtils.RESULT_TYPE) == CodeUtils.RESULT_FAILED) {
        //Toast.makeText(MainActivity.this, "解析條形碼失敗", Toast.LENGTH_LONG).show();
    }
}

3坠宴、從相冊中識別條形碼
鏈接4的庫中有封裝好的analyzeBitmap(String path, AnalyzeCallback analyzeCallback),因此只要獲取到圖片路徑就可以進(jìn)行識別绷旗,核心代碼如下

CodeUtils.analyzeBitmap(imgSerialNumber.path, new CodeUtils.AnalyzeCallback() {
    @Override
    public void onAnalyzeSuccess(Bitmap mBitmap, String result) {
        onScanSuccessed(result);
    }

    @Override
    public void onAnalyzeFailed() {
        Logger.i("Leon- 識別失敗");
    }
});

優(yōu)化

而CodeUtils.analyzeBitmap這個方法里主要實現(xiàn)了對圖片進(jìn)行壓縮啄踊,防止OOM,同時設(shè)置一些識別參數(shù)刁标。
在這里我修改了識別類型颠通,限定了只識別條形碼,這里的原理和上面幾個鏈接中描述的是差不多的膀懈。

// 這里設(shè)置可掃描的類型顿锰,我這里選擇只支持條形碼
decodeFormats.addAll(DecodeFormatManager.ONE_D_FORMATS);
//decodeFormats.addAll(DecodeFormatManager.QR_CODE_FORMATS);
//decodeFormats.addAll(DecodeFormatManager.DATA_MATRIX_FORMATS);

同時設(shè)置了識別模式,降低速度,但提高識別成功率

hints.put(DecodeHintType.TRY_HARDER, Boolean.TRUE);//設(shè)置盡量識別

階段總結(jié)

攝像頭識別二維碼硼控、條形碼都OK刘陶,從相冊中選取圖片識別二維碼OK,但是識別條形碼效率低下牢撼,和手機(jī)性能有一定關(guān)系匙隔。測試中發(fā)現(xiàn)oppo r9m識別效率竟然低于紅米 Note 5A低配版,不知是oppo系統(tǒng)限制了app性能以保障系統(tǒng)流暢還是小米性價比太高的熏版。

進(jìn)階

上面提到的從相冊中識別效率低下的問題纷责,主要原因是相冊圖片里背景內(nèi)容較多,如果裁剪成合適的大小也是可以識別的撼短。根本原因是Zxing無法很好的定位一維碼區(qū)域再膳,不像二維碼效率那么高,有一個思路是從相冊中獲取圖片時曲横,先識別出條形碼區(qū)域喂柒,裁剪圖片,再調(diào)用Zxing識別禾嫉。
圖片處理的話用Opencv比較簡單灾杰,查了下相關(guān)資料, Opencv:10個步驟檢測出圖片中條形碼 根據(jù)這篇文章的做法熙参,進(jìn)行了相關(guān)優(yōu)化艳吠,發(fā)現(xiàn)部分條形碼區(qū)域可以很好的識別,但成功率不高尊惰。這里就涉及到圖像處理相關(guān)算法了讲竿,因時間有限沒法繼續(xù)鉆研泥兰。且Opencv庫太大了弄屡,添加這個庫后,安裝包從18M變?yōu)?0M鞋诗,成本太高膀捷,暫且記錄,后續(xù)再研究削彬。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末全庸,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子融痛,更是在濱河造成了極大的恐慌壶笼,老刑警劉巖,帶你破解...
    沈念sama閱讀 221,198評論 6 514
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件雁刷,死亡現(xiàn)場離奇詭異覆劈,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,334評論 3 398
  • 文/潘曉璐 我一進(jìn)店門责语,熙熙樓的掌柜王于貴愁眉苦臉地迎上來炮障,“玉大人,你說我怎么就攤上這事坤候⌒灿” “怎么了?”我有些...
    開封第一講書人閱讀 167,643評論 0 360
  • 文/不壞的土叔 我叫張陵白筹,是天一觀的道長智末。 經(jīng)常有香客問我,道長遍蟋,這世上最難降的妖魔是什么吹害? 我笑而不...
    開封第一講書人閱讀 59,495評論 1 296
  • 正文 為了忘掉前任,我火速辦了婚禮虚青,結(jié)果婚禮上它呀,老公的妹妹穿的比我還像新娘。我一直安慰自己棒厘,他們只是感情好纵穿,可當(dāng)我...
    茶點故事閱讀 68,502評論 6 397
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著奢人,像睡著了一般谓媒。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上何乎,一...
    開封第一講書人閱讀 52,156評論 1 308
  • 那天句惯,我揣著相機(jī)與錄音,去河邊找鬼支救。 笑死抢野,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的各墨。 我是一名探鬼主播指孤,決...
    沈念sama閱讀 40,743評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼贬堵!你這毒婦竟也來了恃轩?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,659評論 0 276
  • 序言:老撾萬榮一對情侶失蹤黎做,失蹤者是張志新(化名)和其女友劉穎叉跛,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體蒸殿,經(jīng)...
    沈念sama閱讀 46,200評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡筷厘,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,282評論 3 340
  • 正文 我和宋清朗相戀三年挽铁,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片敞掘。...
    茶點故事閱讀 40,424評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡叽掘,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出玖雁,到底是詐尸還是另有隱情更扁,我是刑警寧澤,帶...
    沈念sama閱讀 36,107評論 5 349
  • 正文 年R本政府宣布赫冬,位于F島的核電站浓镜,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏劲厌。R本人自食惡果不足惜膛薛,卻給世界環(huán)境...
    茶點故事閱讀 41,789評論 3 333
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望补鼻。 院中可真熱鬧哄啄,春花似錦、人聲如沸风范。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,264評論 0 23
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽硼婿。三九已至锌半,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間寇漫,已是汗流浹背刊殉。 一陣腳步聲響...
    開封第一講書人閱讀 33,390評論 1 271
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留州胳,地道東北人记焊。 一個月前我還...
    沈念sama閱讀 48,798評論 3 376
  • 正文 我出身青樓,卻偏偏與公主長得像陋葡,于是被迫代替她去往敵國和親亚亲。 傳聞我的和親對象是個殘疾皇子彻采,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,435評論 2 359

推薦閱讀更多精彩內(nèi)容

  • 1腐缤、通過CocoaPods安裝項目名稱項目信息 AFNetworking網(wǎng)絡(luò)請求組件 FMDB本地數(shù)據(jù)庫組件 SD...
    陽明先生_X自主閱讀 15,985評論 3 119
  • 一.前言 需要對一個文件進(jìn)行編輯,主要的操作有 修改某行的內(nèi)容 插入一行獲多行 刪除某行 文件不是特別大的文件肛响,所...
    夏大王2019閱讀 1,302評論 0 0
  • 最近在廣州的培訓(xùn)圈特笋,這樣的聊天很常見—— “他是大D剃浇,她的C比較低……” “你最近是不是S提高了巾兆?為什么?” “看...
    橙師者閱讀 629評論 2 7
  • 是的虎囚。我又暴飲暴食了角塑。這些日子飲食都沒有規(guī)律。一日一餐或兩餐一般都趕在下午或晚上淘讥。 晚上吃飯那是必長肉的節(jié)奏啊圃伶,下...
    大萌子的小種子閱讀 259評論 0 1
  • 上一章回顧:四葉草之靈獸傳奇51 “就是我們所處的這里是幻境最中間一層,在我們外面有一層蒲列,里面也還有一層窒朋。”凌晨和...
    薔薇下的陽光閱讀 359評論 0 0