Android OpenCV + tess-two 實現(xiàn)銀行卡識別:掃描識別

目錄

前言

之前實現(xiàn)了本地圖片的銀行卡號的掃描,這次順帶實現(xiàn)了下相機掃描的識別,我是用的農(nóng)業(yè)銀行卡測試的,識別速度還是挺nice的

效果展示

實現(xiàn)步驟

核心步驟與我的這篇文章一樣:Android OpenCV + tess-two 實現(xiàn)銀行卡識別:本地圖片識別
這里掃描的主要是換成了對于相機數(shù)據(jù)的處理,這里我使用的是CameraX獲取的相機數(shù)據(jù),對于相機的回調(diào)方法的處理在如下方法中:


這里我將相機數(shù)據(jù)轉(zhuǎn)換為Bitmap使用的是Google的這個庫:

implementation "com.google.mlkit:image-labeling:17.0.7"

使用代碼如下:

val image = InputImage.fromMediaImage(it, 0)
var bitmap = ImageConvertUtils.getInstance().getUpRightBitmap(image)

另外這里還有個重要的步驟就是要根據(jù)圖像的亮度來適當(dāng)?shù)恼{(diào)節(jié)相機的曝光度,代碼如下:

@SuppressLint("UnsafeOptInUsageError")
    private fun adjustBrightness(grayMat:Mat) {
        //調(diào)節(jié)亮度的頻率不要太高
        if(System.currentTimeMillis() - adjustBrightnessTime >= 1000){
            adjustBrightnessTime = System.currentTimeMillis()
            //獲取圖像的亮度
            val avg = Core.mean(grayMat)
            LogUtils.eTag("相機亮度",avg.`val`,exposureIndex)
            //獲取相機曝光度支持設(shè)置的范圍
            val range = camera.cameraInfo.exposureState.exposureCompensationRange
            //當(dāng)圖像亮度大于140的時候就減少曝光度
            if(avg.`val`[0] > 140){
                //判斷相機是否支持將要調(diào)節(jié)的曝光度
                if (range.contains(exposureIndex - 1)) {
                    camera.cameraControl.setExposureCompensationIndex(--exposureIndex)
                }
            }else if(avg.`val`[0] < 120){
                //當(dāng)圖像亮度小于120的時候就增加曝光度
                if (range.contains(exposureIndex + 1)) {
                    camera.cameraControl.setExposureCompensationIndex(++exposureIndex)
                }
            }
        }
    }

案例源碼

https://gitee.com/itfitness/opencv-ocr-bankcard

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容