자금 관리 Android 앱(Kotlin)에서 Huawei ML Kit를 사용하여 청구서 캡처 - 4부

11735 단어 xmandroidkotlinmlkit


소개

이 기사에서는 이 Money Management 앱을 사용하여 텍스트 이미지를 캡처하는 방법을 배울 수 있습니다. 이 앱은 확대/축소를 통해 이미지를 고품질 가시성으로 변환합니다. 따라서 사용자가 쇼핑이나 지출을 구매할 때마다 이 애플리케이션을 사용하여 청구서를 캡처하고 메모리에 저장할 수 있습니다.

그래서 저는 이 자금 관리 앱에 대한 일련의 기사를 제공할 것이며, 다음 기사에서는 다른 Huawei 키트를 통합할 것입니다.

이 응용 프로그램을 처음 사용하는 경우 이전 기사를 따르십시오.

Beginner: Find the introduction Sliders and Huawei Account Kit Integration in Money Management Android app (Kotlin) - Part 1

Beginner: Integration of Huawei Ads Kit and Analytics Kit in Money Management Android app (Kotlin) – Part 2

Beginner: Manage the Budget using Room Database in Money Management Android app (Kotlin) – Part 3

ML Kit - 텍스트 이미지 초고해상도

ML Kit - Huawei ML Kit의 텍스트 이미지 초해상도 기능. 이미지에서 오래되고 흐릿한 텍스트의 더 나은 품질과 가시성을 제공합니다. 멀리서 문서를 촬영하거나 초점이 제대로 조정되지 않으면 텍스트가 선명하지 않을 수 있습니다. 이 경우 텍스트가 포함된 이미지를 최대 3배까지 확대하여 텍스트의 선명도를 크게 향상시킬 수 있습니다.

요구 사항
  • 모든 운영 체제(MacOS, Linux 및 Windows).
  • HMS 4.0.0.300 이상이 설치된 Huawei 휴대폰이 있어야 합니다.
  • Android Studio, Jdk 1.8, SDK 플랫폼 26 및 Gradle 4.6 이상이 설치된 노트북 또는 데스크톱이 있어야 합니다.
  • 최소 API 레벨 19가 필요합니다.
  • EMUI 9.0.0 이상 버전 장치가 필요합니다.

  • HMS 종속성을 통합하는 방법
  • 먼저 Huawei 개발자로 등록하고 Huawei 개발자 웹 사이트에서 신원 확인을 완료합니다. 등록 aHuawei ID를 참조하십시오.
  • android studio에서 프로젝트를 생성합니다. Creating an Android Studio Project을 참조하십시오.
  • SHA-256 인증서 지문을 생성합니다.
  • SHA-256 인증서 지문을 생성합니다. Android 프로젝트의 오른쪽 상단에서 Gradle을 클릭하고 Project Name > Tasks > android를 선택한 후 다음과 같이 SigningReport를 클릭합니다.



  • 참고: 프로젝트 이름은 사용자가 만든 이름에 따라 다릅니다.
  • Create an App in AppGallery Connect .
  • 다음과 같이 앱 정보에서 agconnect-services.json 파일을 다운로드하고 앱 디렉토리 아래의 android Project에 복사하여 붙여넣습니다.
  • 다음과 같이 SHA-256 인증서 지문을 입력하고 저장 버튼을 클릭합니다.
  • API 관리 탭을 클릭하고 ML Kit를 활성화합니다.
  • buildscript, dependencies 및 allprojects의 리포지토리 아래 build.gradle(Project) 파일에 아래 maven URL을 추가합니다. Add Configuration을 참조하십시오.

  • maven { url 'http://developer.huawei.com/repo/' }
    classpath 'com.huawei.agconnect:agcp:1.4.1.300'
    
    


  • build.gradle(Module) 파일에 아래 플러그인 및 종속 항목을 추가합니다.

  • apply plugin: 'com.huawei.agconnect'
    // Huawei AGC
    implementation 'com.huawei.agconnect:agconnect-core:1.5.0.300'
    // Import the text image super-resolution base SDK.
    implementation 'com.huawei.hms:ml-computer-vision-textimagesuperresolution:2.0.4.300'
    // Import the text image super-resolution model package.
    implementation 'com.huawei.hms:ml-computer-vision-textimagesuperresolution-model:2.0.4.300'
    


  • 이제 Gradle을 동기화합니다.
  • AndroidManifest.xml 파일에 필요한 권한을 추가합니다.

  • <uses-permission android:name="android.permission.CAMERA" />
    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
    


    개발로 이동하자
    빈 활동으로 Android 스튜디오에서 프로젝트를 생성하여 코딩을 시작하겠습니다.
    CaptureActivity.kt에서 비즈니스 로직을 찾을 수 있습니다.

    class CaptureActivity : AppCompatActivity(), View.OnClickListener {
    
        private var analyzer: MLTextImageSuperResolutionAnalyzer? = null
        private val QUALITY = 1
        private val ORIGINAL = 2
        private var imageView: ImageView? = null
        private var srcBitmap: Bitmap? = null
    
        override fun onCreate(savedInstanceState: Bundle?) {
            super.onCreate(savedInstanceState)
            setContentView(R.layout.activity_capture)
    
            imageView = findViewById(R.id.bill)
            srcBitmap = BitmapFactory.decodeResource(resources, R.drawable.bill_1)
            findViewById<View>(R.id.btn_quality).setOnClickListener(this)
            findViewById<View>(R.id.btn_original).setOnClickListener(this)
            createAnalyzer()
    
        }
    
        // Find the on click listeners
        override fun onClick(v: View?) {
            if (v!!.id == R.id.btn_quality) {
                detectImage(QUALITY)
            } else if (v.id == R.id.btn_original) {
                detectImage(ORIGINAL)
            }
        }
    
        private fun release() {
            if (analyzer == null) {
                return
            }
            analyzer!!.stop()
        }
    
        // Find the method to detect bills or text images
        private fun detectImage(type: Int) {
            if (type == ORIGINAL) {
                setImage(srcBitmap!!)
                return
            }
            if (analyzer == null) {
                return
            }
            // Create an MLFrame by using the bitmap.
            val frame = MLFrame.Creator().setBitmap(srcBitmap).create()
            val task = analyzer!!.asyncAnalyseFrame(frame)
            task.addOnSuccessListener { result -> // success.
                Toast.makeText(applicationContext, "Success", Toast.LENGTH_LONG).show()
                setImage(result.bitmap)
            }.addOnFailureListener { e ->
                // Failure
                if (e is MLException) {
                    val mlException = e
                    // Get the error code, developers can give different page prompts according to the error code.
                    val errorCode = mlException.errCode
                    // Get the error message, developers can combine the error code to quickly locate the problem.
                    val errorMessage = mlException.message
                    Toast.makeText(applicationContext,"Error:$errorCode Message:$errorMessage", Toast.LENGTH_LONG).show()
                    // Log.e(TAG, "Error:$errorCode Message:$errorMessage")
                } else {
                    // Other exception
                    Toast.makeText(applicationContext, "Failed:" + e.message, Toast.LENGTH_LONG).show()
                    // Log.e(TAG, e.message!!)
                }
            }
        }
    
        private fun setImage(bitmap: Bitmap) {
            [email protected](Runnable {
                imageView!!.setImageBitmap(
                    bitmap
                )
            })
        }
    
        private fun createAnalyzer() {
            analyzer = MLTextImageSuperResolutionAnalyzerFactory.getInstance().textImageSuperResolutionAnalyzer
        }
    
        override fun onDestroy() {
            super.onDestroy()
            if (srcBitmap != null) {
                srcBitmap!!.recycle()
            }
            release()
        }
    
    }
    
    


    activity_capture.xml에서 UI 화면을 만들 수 있습니다.

    <?xml version="1.0" encoding="utf-8"?>
    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:app="http://schemas.android.com/apk/res-auto"
        xmlns:tools="http://schemas.android.com/tools"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        tools:context=".mlkit.CaptureActivity">
    
    
        <LinearLayout
            android:id="@+id/buttons"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_alignParentBottom="true"
            android:orientation="vertical"
            tools:ignore="MissingConstraints">
            <Button
                android:id="@+id/btn_quality"
                android:layout_width="match_parent"
                android:layout_height="50dp"
                android:layout_margin="15dp"
                android:gravity="center"
                android:textSize="19sp"
                android:text="Quality"
                android:textAllCaps="false"
                android:textColor="@color/Red"
                tools:ignore="HardcodedText" />
            <Button
                android:id="@+id/btn_original"
                android:layout_width="match_parent"
                android:layout_height="50dp"
                android:layout_margin="15dp"
                android:gravity="center"
                android:text="Original"
                android:textSize="19sp"
                android:textAllCaps="false"
                android:textColor="@color/Red"
                tools:ignore="HardcodedText" />
        </LinearLayout>
    
        <ScrollView
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:layout_above="@+id/buttons"
            android:layout_marginBottom="15dp">
            <ImageView
                android:id="@+id/bill"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_centerInParent="true"
                android:layout_gravity="center"
                tools:ignore="ObsoleteLayoutParam" />
        </ScrollView>
    
    </RelativeLayout>
    


    데모



    팁과 요령
  • 이미 Huawei 개발자로 등록되어 있는지 확인하십시오.
  • minSDK 버전을 19 이상으로 설정하십시오. 그렇지 않으면 AndriodManifest 병합 문제가 발생합니다.
  • 앱 폴더에 agconnect-services.json 파일을 추가했는지 확인하십시오.
  • 반드시 SHA-256 지문을 추가했는지 확인하십시오.
  • 모든 종속성이 제대로 추가되었는지 확인하십시오.

  • 결론
    이 기사에서는 Huawei ML Kit의 Text Image Super-Resolution 기능과 그 기능에 대해 알아보았습니다. 이미지에서 오래되고 흐릿한 텍스트의 더 나은 품질과 가시성을 제공합니다. 텍스트가 포함된 이미지를 최대 3배까지 확대할 수 있으며 텍스트의 선명도를 크게 향상시킵니다.

    참조

    ML 키트 – Documentation

    ML 키트 – Training Video

    좋은 웹페이지 즐겨찾기