기초적인 환경세팅은 이쯤하고 이제 문자인식 작업을 들어가려고한다
일단 정리한 결과 가장 좋은 문자인식 결과를 추출하기 위해 단순히 OCR만 하는 것이 아니라
명함 인식처럼 사진에서 각 과정을 거쳐 문자를 추출하기 좋은 환경을 구성하고 OCR을 할 예정이다.
일단 파이썬으로 하는 것은 잠시 보류하고 OpenCV 샘플 소스로 카메라를 띄우는 작업을 하고 있다.
이미 Preview를 띄우는 소스는 있기 때문에 소스 분석과 나에게 맞게 수정 작업을 하고 있다.
샘플소스는 이곳에
먼저 이 카메라뷰는 액티비티 1개, 카메라뷰 1개, xml 한개로 이루어져 있다.
CameraPreview.java : 효과 리스트, 화면 사이즈, 파일 입출력 메소드 등이 정의 되어있다.
CameraActivity.java : 화면 초기화 및 표시, 메뉴 생성, 파일명 생성 등의 메소드 등이 있다.
camera_view.xml : CameraView의 View를 화면으로 정의하고 사진 촬영 버튼을 두었다.
카메라 기능을 사용하기 위해서는 퍼미션 허용이 필요하기 때문에 AndroidMenifest.xml에서 설정을 한다.
또한 사진 파일 저장을 위해 내부 저장소 접근 권한도 필요하다
supports-screens 항목은 구글링하면서 찾게 된 것인데 다양한 사이즈의 화면을 갖춘 디스플레이에 맞춰
화면 사이즈를 조절해준다고 한다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | <uses-permission android:name="android.permission.CAMERA" /> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> <uses-feature android:name="android.hardware.camera" /> <uses-feature android:name="android.hardware.camera.autofocus" /> <!-- 다양한 사이즈의 하드웨어에 맞춰 화면 사이즈를 조절해주는 부분--> <supports-screens android:anyDensity="true" android:largeScreens="true" android:normalScreens="true" android:resizeable="true" android:smallScreens="true" /> | cs |
- CameraActivity.java
이 곳에서는 원래 CameraView가 터치된 순간 takePicture()를 실행시키는데
버튼을 사용하여 사진을 찍기위해 View.OnClickListener를 implements하고
Onclick()를 만들어 OnTouch()메소드에 정의된 것을 옮겼다.
1 2 3 4 5 6 7 8 9 10 11 12 | // 버튼 클릭 시 오늘 날짜로 파일명 설정 후 사진찍는 함수 실행 @SuppressLint("SimpleDateFormat") @Override public void onClick(View v) { Log.i(TAG,"onTouch event"); SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd_HH-mm-ss"); String currentDateandTime = sdf.format(new Date()); String fileName = Environment.getExternalStorageDirectory().getPath() + "/sample_picture_" + currentDateandTime + ".jpg"; mOpenCvCameraView.takePicture(fileName); Toast.makeText(this, fileName + " saved", Toast.LENGTH_SHORT).show(); } | cs |
또 카메라를 찍을 때 상태바가 있으면 방해가 되기 때문에 FULL_SCREEN 모드를 정의하였다.
처음엔 매니페스트에서 하라길래 하는데 FULL어쩌구가 아예 나오지않았다.
근데 가까운 곳에 있었다 !!! 이거하면 상태바, 툴바가 나오지않아 깔끔한 화면을 확인할 수 있다.
getWindow().addFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN);
기타 있는 함수는 CameraView에서 받은 효과 리스트 변수가지고 옵션메뉴를 생성하고 표시한다.
근데 이것은 일단 내 App에서는 뜨지않는다. 또 내가 하는거에선 필요가없기때문에 지워도 될 것 같다.
효과리스트가 뭔지 로그를 찍어봐야겠다.
초기화, 생명주기 함수 등등이 있다. 효과부분을 제외하면 소스가 어려운 것은 아니다
지금 카메라로 출력하고 찍는 것 까진되는데 사진 저장에서 openCV오류가 발생한다.
OpenCV error: Cannot load info library for OpenCV
이 오류인데 어플도 잘 설치되어있는데 왜 뜨는 지는 모르겠으나 더 찾아봐야겠다..
오늘은 여기까지..
파이썬 소스를 서버에서 실행시키는 것이 좋을 지 고민중..
'Programming > Android' 카테고리의 다른 글
[안드로이드] 일정 시간 후에 메소드 실행하기(Handler), 간단하게 if문 설명 (0) | 2017.03.16 |
---|---|
[안드로이드] OpenCV for Android - python 연동 실패.. (Java로 바꾸자..) (0) | 2017.03.16 |
[안드로이드] Navigation Drawer 사용하기 (0) | 2017.03.08 |
[안드로이드] Fragment에서 RecyclerView 사용하기 (4) | 2017.03.08 |
[안드로이드] RecyclerView에 대해 간단히 알아보기 (0) | 2017.03.07 |