原創(chuàng)|對比評測|編輯:何躍|2021-11-08 11:35:37.440|閱讀 901 次
概述:在市場上有許多QR碼工具和SDK。對于Android開發(fā),Google ML Kit免費的、支持一般的QR碼檢測。然而,它不能滿足高密度的QR碼檢測的要求。
# 界面/圖表報表/文檔/IDE等千款熱門軟控件火熱銷售中 >>
作為一個商業(yè)條碼SDK,Dynamsoft Barcode Reader可以覆蓋特殊條碼類型。在這篇文章中,我們將簡化ML Kit的樣本并將其與Dynamsoft Barcode SDK集成,以比較ML Kit和Dynamsoft Barcode Reader。
本文直接上手對比兩個SDK的下載安裝和使用效率。
Barcode SDK Download
① ML Kit: 在 AndroidManifest.xml添加: <meta-dataandroid:name="com.google.mlkit.vision.DEPENDENCIES"android:value="barcode"/>
在build.gradle添加:dependencies { implementation 'com.google.mlkit:barcode-scanning:17.0.0' }
你可以在生成的apk文件中找到模型文件 apk/assets/mlkit_barcode_models/barcode_ssd_mobilenet_v1_dmp25_quant.tflite
② Dynamsoft Barcode Reader:下載地址點擊
解壓SDK并復(fù)制文件DynamsoftBarcodeReaderAndroid.aar到項目庫,并在build.gradle添加:dependencies { implementation fileTree(dir: 'libs', include: ['*.jar', '*.aar']) }
另外,您也可以在build.gradle文件中配置Maven倉庫,方法如下:
allprojects { repositories { google() jcenter() maven { url "http://download2.dynamsoft.com/maven/dbr/aar" } } } dependencies { implementation 'com.dynamsoft:dynamsoftbarcodereader:8.8.0@aar' }從靜態(tài)圖像中讀取QR碼
用谷歌ML套件掃描QR碼, 這是一個優(yōu)秀的樣本應(yīng)用程序,具有物體檢測、人臉檢測、文本識別、條形碼掃描、圖像標(biāo)簽、自定義圖像標(biāo)簽、姿勢檢測和自拍分割的功能。
為了專注于靜止圖像的檢測,我們只保留StillImageActivity,并在AndroidManifest.xml中把它設(shè)置為LAUNCHER。
<activity android:name=".java.StillImageActivity" android:exported="true" android:theme="@style/AppTheme"> <intent-filter> <action android:name="android.intent.action.MAIN"/> <category android:name="android.intent.category.LAUNCHER"/> </intent-filter> </activity>用Dynamsoft的SDK掃描QR碼
我們創(chuàng)建一個dynamsoftbarcodescanner文件夾和兩個類文件。DynamsoftBarcodeGraphic.java和DynamsoftBarcodeProcessor.java。
DynamsoftBarcodeGraphic類是用來繪制檢測結(jié)果的:
@Override public void draw(Canvas canvas) { if (result == null) { throw new IllegalStateException("Attempting to draw a null barcode."); } // Draws the bounding box around the BarcodeBlock. Point[] points = result.localizationResult.resultPoints; int minx = points[0].x; int miny = points[0].y; int maxx = points[0].x; int maxy = points[0].y; for (int i = 1; i < 4; i++) { if (points[i].x < minx) { minx = points[i].x; } else if (points[i].x > maxx) { maxx = points[i].x; } if (points[i].y < miny) { miny = points[i].y; } else if (points[i].y > maxy) { maxy = points[i].y; } } RectF rect = new RectF(minx, miny, maxx, maxy); // If the image is flipped, the left will be translated to right, and the right to left. float x0 = translateX(rect.left); float x1 = translateX(rect.right); rect.left = min(x0, x1); rect.right = max(x0, x1); rect.top = translateY(rect.top); rect.bottom = translateY(rect.bottom); canvas.drawRect(rect, rectPaint); // Draws other object info. float lineHeight = TEXT_SIZE + (2 * STROKE_WIDTH); float textWidth = barcodePaint.measureText(result.barcodeText); canvas.drawRect( rect.left - STROKE_WIDTH, rect.top - lineHeight, rect.left + textWidth + (2 * STROKE_WIDTH), rect.top, labelPaint); // Renders the barcode at the bottom of the box. canvas.drawText(result.barcodeText, rect.left, rect.top - STROKE_WIDTH, barcodePaint); }DynamsoftBarcodeProcessor類用于解碼QR碼。當(dāng)我們加載一個圖像文件時,在DynamsoftBarcodeProcessor.java中會觸發(fā)processBitmap(Bitmap bitmap, final GraphicOverlay graphicOverlay) 函數(shù)。此后,我們調(diào)用decodeBufferedImage(bitmap, "" )來識別QR碼。
@Override public void processBitmap(Bitmap bitmap, final GraphicOverlay graphicOverlay) { try { long frameStartMs = SystemClock.elapsedRealtime(); TextResult[] results = barcodeScanner.decodeBufferedImage(bitmap, ""); long frameEndMs = SystemClock.elapsedRealtime(); if (results != null) { for (int i = 0; i < results.length; ++i) { TextResult barcode = results[i]; graphicOverlay.add(new DynamsoftBarcodeGraphic(graphicOverlay, barcode)); } graphicOverlay.add( new InferenceInfoGraphic( graphicOverlay, frameEndMs - frameStartMs, frameEndMs - frameStartMs, null)); } } catch (IOException e) { e.printStackTrace(); } catch (BarcodeReaderException e) { e.printStackTrace(); } }
對比測試
我們使用同樣的6張,來判斷不同密度中兩個SDK的效率。ML Kit的條形碼掃描API對這些圖像是無能為力的。ML Kit比Dynamsoft Barcode Reader花了更多的時間,卻什么也沒識別出來。相比之下,Dynamsoft Barcode Reader能夠識別所有高密度的QR碼圖像。
本次實驗使用到的源碼
本站文章除注明轉(zhuǎn)載外,均為本站原創(chuàng)或翻譯。歡迎任何形式的轉(zhuǎn)載,但請務(wù)必注明出處、不得修改原文相關(guān)鏈接,如果存在內(nèi)容上的異議請郵件反饋至chenjj@fc6vip.cn