Android 프로그래밍 2

본문 바로가기
사이트 내 전체검색


Android 프로그래밍 2
Android 프로그래밍 2

1. QR code scanner using Firebase ML Kit and CameraX

페이지 정보

작성자 관리자 댓글 0건 조회 3,538회 작성일 20-07-03 17:43

본문

1. QR code scanner using Firebase ML Kit and CameraX

CameraX와 Firebase ML Kit 소개


1. CameraX 란


CameraX는 Google I / O 2019 에서 발표 된 Jetpack 지원 라이브러리입니다 . 

라이브러리의 주요 목표는 개발자가 일관되고 사용하기 쉬운 API를 제공하여 개발자가 카메라 앱을보다 쉽게 ​​개발할 수 있도록 돕는 것입니다. 



2. Firebase ML Kit 소개 


Firebase ML Kit는 Google I / O 2018 에서 발표 된 Android 및 iOS 용 모바일 SDK입니다 . 

ML Kit에는 Natural Language (텍스트 인식, 얼굴 감지, 바코드 스캔 , 이미지 라벨링, 객체 감지 및 추적, 랜드 마크 인식) 및 Vision (텍스트 언어 식별, 텍스트 번역, 스마트 응답 생성)에 대한 일반적인 사용 사례가 포함되어 있습니다. 



QRCode Scanner 실습


1. 새 프로젝트 생성


프로젝트명 : QRCodeScanner

템플릿에서 Empty Activity를 선택 


2. Android 프로젝트에 Firebase 추가


아래 사이트를 참고하여 추가한다.

https://firebase.google.com/docs/android/setup 



Tools -> Firebase 클릭


1.PNG



ML Kit를 선택한다.

2.PNG


Use ML Kit to recognize and decode barcodes를 선택한다.


3.PNG


Connect to Firebase 를 클릭한다.

로그인 화면이 나오면 로그인한다.

4.PNG


5.PNG


6.PNG


Android Studio에서 작업할 수 있도록 허용해준다.


7.PNG


완료가 되면 다시 Android Studio에서 아래 화면이 나온다.


8.PNG


Connect to Firebase를 클릭한다.



9.PNG


Connected로 바뀌게 될 것이다.


Step 2의 Add ML Kit to your app의 버튼을 누른다.



10.PNG


Accept Changes를 클릭한다.



11.PNG


12.PNG


자동으로 두개의 파일에 위와 같이 추가된다.



13.PNG


Step 2가 Dependencies set up correctly로 바뀌게 된다.
 



3. app / build.gradle을 열고 Firebase ML Vision 및 Jetpack CameraX 종속성을 추가



15.PNG



4. 필요한 권한을 추가


AndroidManifest.xml 파일을 연다. 



16.PNG



5. Auto download ML model


Play 스토어에서 앱을 설치 한 후 ML 모델을 기기에 자동으로 다운로드하도록 앱을 구성 하려면 AndroidManifest.xml 파일에 다음 코드를 추가한다.


14.PNG


6. TextureView를 추가


메인 액티비티 ( activity_main.xml ) 의 레이아웃 파일을 열고 TextureView를 추가 합니다. 카메라 입력을 스트리밍하는 데 사용합니다


17.PNG



7. 카메라 권한을 부여했는지 확인


프로젝트 설정의 마지막 단계로서 사용자가 카메라 권한을 부여했는지 확인해야합니다.

이를 위해 MainActivity.kt 파일 로 이동하여 다음 코드를 추가 한다 . 


18.PNG

19.PNG



8. 화면에 카메라 입력 표시


CameraX에는 장치의 카메라와 상호 작용할 수 있는 use case 라는 추상화가 있습니다 . 

현재 다음과 같은 use case가 있습니다.


Preview (미리보기) : TextureView 에서 카메라 스트림을 표시하는 데 사용할 수있는 카메라 입력 스트림에 액세스 할 수 있습니다 .


Image analysis(이미지 분석) : 카메라 입력의 각 프레임을 분석 할 수 있습니다. 이 use case를 사용하여 Firebase ML Kit를 사용하여 프레임에서 QR 코드를 감지하기위한 이미지 분석을 수행합니다 .


Image capture(이미지 캡처) : 이름에서 알 수 있듯이 사진을 캡처하고 저장할 수 있습니다


위에서 언급했듯이 화면에 카메라 스트림을 표시하려면 Preview use case 를 사용해야 합니다. 

Preview use case의 인스턴스를 작성할 때 PreviewConfig 를 생성자 매개 변수 로 전달해야합니다 . 

startCamera()함수에 다음 코드를 추가해 봅시다


20.PNG



Preview use case 는 표시 할 SurfaceTexture 를 제공합니다 . 

textureView에 카메라 스트림을 표시하려면 Preview 인스턴스에 리스너를 추가해야합니다


21.PNG


CameraX는 카메라 리소스를 관리하기 위해 수명주기를 준수하므로 CameraX.bindToLifecycle(this as LifecycleOwner, preview)를 사용하여 use case를 바인딩해야 합니다. 


22.PNG


9. google-service.json 파일 다운로드


파이어베이스 콘솔 사이트에 접속하여 로그인 한다.


https://console.firebase.google.com/


31.PNG


QRCodeScanner를 선택한다.


32.PNG


프로젝트 설정을 클릭한다.


33.PNG


google-services.json를 클릭하여 다운로드 한다.


34.PNG

프로젝트 하위에 app 폴더에 복사한다.





10. 실행



지금까지 작업한 내용을 확인하기 위해 실행해보자.

아직 QRCode 감지 기능은 없다.



23.PNG



11. QR코드 감지


이제 ImageAnalysis use case를 사용하여 카메라 입력에서 QR 코드를 감지해야합니다 . 

이를 위해 ImageAnalysis.Analyzer 인터페이스를 구현하는 QrCodeAnalyzer로 이름지어진 클래스를 만들어야 합니다. ImageAnalysis.Analyzer 에는 analyze(ImageProxy image, int rotationDegrees)이라는 함수 가 있으며 여기에 QR 코드 감지 관련 코드를 추가합니다.


QrCodeAnalyzer를 생성하고, QR 코드가 감지 될 때 알림을 받으려면 콜백을 추가한다. 



24.PNG



FirebaseVisionBarcodeDetector의 인스턴스를 가져 옵니다 . 


25.PNG


프레임에서 FirebaseVisionImage 를 만듭니다 . 


26.PNG


이 단계에서는 다음 함수를 추가하여 ImageAnalysis.Analyzer의 회전 각도를 firebase의 회전으로 변환해야 합니다. 


27.PNG


visionImage를 detector에 넘겨주고, 감지된 QR 코드 목록을 가지는 onQrCodesDetected를 통지한다. 


28.PNG


완성된 코드는 다음과 같다.


29.PNG


MainActivity의 startCamera()함수에서 QrCodeAnalyzer를 사용한다. 


30.PNG



12. 실행


이제 프로젝트를 실행할 수 있으며 QR 코드가 감지되면 logcat 에서 QR Code detected: ...를 볼 수 있습니다 . 


2020-07-03 22:39:24.144 7496-7496/kr.co.leelab.qrcodescanner D/MainActivity: QR Code detected: 20200401. 



댓글목록

등록된 댓글이 없습니다.


개인정보취급방침 서비스이용약관 모바일 버전으로 보기 상단으로

TEL. 063-469-4551 FAX. 063-469-4560 전북 군산시 대학로 558
군산대학교 컴퓨터정보공학과

Copyright © www.leelab.co.kr. All rights reserved.