2016. 4. 6. 13:42ㆍmobile/android
환경 : Win7, Android studio, minSdkVersion 16, xompileSdkVersion 22
필자는 Android studio 에서 빌드 하는 내용을 설명한다.
소스에 대한 설명은 없고 단순히 샘플 프로젝트를 빌드해서 핸드폰으로 실행해서 테스트해보는 것 까지이다.
읽기전에...
이 글을 읽는 사람은 기초적인 Android 개발 지식이 있다고 생각하고 상세한 설명은 생략한다.
PC에 android studio 및 andorid 개발 셋팅이 완료되어 있으며 스마트폰으로 RUN 할 준비를 하고 따라해야 이상없이 동작한다.
오류나 궁금증은 일단 이 정리된 포스팅 참고
Android OCR 한글 및 영문 인식 Tesseract 오류 정리, 질문, QNA
광학 문자 인식(Optical character recognition; OCR)은 사람이 쓰거나 기계로 인쇄한 문자의 영상을 이미지 스캐너로 획득하여 기계가 읽을 수 있는 문자로 변환하는 뭐 그런거라고 한다.
지금부터 안드로이드 앱으로 만들어 테스트 해 볼 수 있도록 설명한다.
요약
1. Sample Project 다운로드 및 프로젝스 생성
2. traineddata 파일 다운로드 및 셋팅
3. tess-two 모듈 다운로드 및 Import하고 jar 설정
4. 설정 파일 ( build.gradle ) 수정
5. 실행
1. Sample Project 다운로드 및 Import
주소 : https://github.com/GautamGupta/Simple-Android-OCR
위 주소에서 Simple-Android-OCR-master 프로젝트 파일을 다운받는다.
Import 하면 좋은데 분명히 SimpleAndroidOCRActivity.java 파일의 TessBaseAPI 제외한 부분에서 에러가 엄청 날 것이다. 또는 Import 자체가 안될 수 있다.
필자는 프로젝트를 하나 생성했다. 그리고 나서 다운받은 Sample Project 의 JAVA, XML, Manifest 의 퍼미션 등을 모두 가져와서 붙혀넣기 했다. 새로운 프로젝트에 기존 샘플을 입힌다고 생각하자.
Java 파일에서 TessBaseAPI 에 관련한 에러가 나는 것은 정상이다. 무시하고 지나간다. 3번에서 해결된다.
2. traineddata 파일 다운로드 및 셋팅
traineddata 파일은 일종의 분석 언어 팩? 정도라고 가볍게 생각하고 넘어간다. 어차피 해야 할 것은 다운받고 붙혀넣기가 전부다.
주소 : https://github.com/tesseract-ocr/tessdata
위 주소에서 eng.traineddata, kor.traineddata 파일을 다운받는다. 다운 받고 assets/tessdata 폴더에 붙혀넣기 한다.
assets 폴더가 없을 수 있다. app/src/main 경로 아래에 그냥 assets 폴더를 생성하면 된다.
3. tess-two 모듈 다운로드 및 Import하고 jar 설정
주소 : https://github.com/rmtheis/tess-two
위 주소에서 tess-two 모듈을 받는다. 전체 다 받아도 되고 tess-two 폴더만 받아도 된다. 필요한건 tess-two 폴더와 내부 파일이다.
다운 받은 후 아래처럼 모듈을 Import 한다. 그림 빠져먹지말고 모두 따라한다.
4. 설정 파일 ( tess-two 의 build.gradle ) 수정
주의사항 : compileSdkVersion 이나 buildToolsVersion, dependencies 내용에 있는 버전 등은 최대한 app의 build.gradle 파일과 맞추도록 한다. 아니면 에러 폭풍에 걷잡을 수 없다.
필자는 아래 부분은 완벽히 동일하게 작성했다. (생성한 프로젝트의 build.gradle 중 일부)
1
2
3
4
5
6
7
8
9
10
11 |
compileSdkVersion 22
buildToolsVersion "23.0.2"
defaultConfig {
minSdkVersion 16
targetSdkVersion 22
versionCode 1
versionName "1.0"
}
compile 'com.android.support:appcompat-v7:22.2.1' |
cs |
위 설명에 주의하며 아래 소스를 그대로 tess-two 의 build.gradle 파일에 아래 내용을 붙혀넣기 한다. 다시한번 말하지만 위 부분은 필히 생성한 프로젝트와 동일시 한다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83 |
import org.apache.tools.ant.taskdefs.condition.Os
apply plugin: 'com.android.library'
android {
compileSdkVersion 22
buildToolsVersion "23.0.2"
defaultConfig {
minSdkVersion 16
targetSdkVersion 22
versionCode 1
versionName "1.0"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
sourceSets {
main {
manifest.srcFile 'AndroidManifest.xml'
java.srcDirs = ['src']
res.srcDirs = ['res']
jni.srcDirs = []
jniLibs.srcDirs = ['libs']
}
}
// Call external ndk-build(.cmd) script to build the native code
task ndkBuild(type: Exec) {
def ndkBuildExt = Os.isFamily(Os.FAMILY_WINDOWS) ? ".cmd" : ""
commandLine "ndk-build${ndkBuildExt}", '-C', file('.').absolutePath,
'-j', Runtime.runtime.availableProcessors()
}
tasks.withType(JavaCompile) {
compileTask -> compileTask.dependsOn ndkBuild
}
// Cleanup task to remove previously generated binaries
task ndkClean(type: Exec) {
def ndkBuildExt = Os.isFamily(Os.FAMILY_WINDOWS) ? ".cmd" : ""
commandLine "ndk-build${ndkBuildExt}", '-C', file('.').absolutePath, 'clean'
}
tasks.withType(Delete) {
cleanTask -> cleanTask.dependsOn ndkClean
}
}
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
compile 'com.android.support:appcompat-v7:22.2.1'
}
// Settings for uploading module AAR to Bintray for library distribution
task sourcesJar(type: Jar) {
from android.sourceSets.main.java.srcDirs
classifier = 'sources'
}
task javadoc(type: Javadoc) {
source = android.sourceSets.main.java.srcDirs
classpath += project.files(android.getBootClasspath().join(File.pathSeparator))
options {
links "http://docs.oracle.com/javase/7/docs/api/"
linksOffline "http://d.android.com/reference","${android.sdkDirectory}/docs/reference"
}
}
task javadocJar(type: Jar, dependsOn: javadoc) {
classifier = 'javadoc'
from javadoc.destinationDir
}
|
cs |
5. 실행
앱을 실행(run)하면 끝이다.
기본으로 영어를 인식하도록 설정되어 있다.
한글을 인식하고 싶으면 SimpleAndroidOCRActivity.java 에서 lang 변수를 kor 로 바꾸기만 하면 된다. 조금만 소스를 분석해보면 왜인지 알 수 있을 것이다.
자세한 설명은 없고 단순히 앱을 실행할 수 있도록만 설명했다.
방금 직접 다 만들어 본 내용을 작성해서 안될 수 가 없다.
시간이 지나 버전이 바뀌면 안될 수 도 있다는 점 참고하도록.
'mobile > android' 카테고리의 다른 글
android 현재 WebView에서 외부 페이지 불러오기 / WebView 새창 띄우지 않기 / WebViewClient (0) | 2016.04.20 |
---|---|
android webview 에서 카메라 호출 및 사진첩(갤러리) 호출하여 이미지 파일 업로드 하기 (23) | 2016.04.14 |
android html5 스마트폰 카메라와 연결하기, 사진(갤러리) 및 동영상 찍기 예제 ( URL.createObjectURL ) (0) | 2016.04.08 |
android GCM 클라이언트, 서버 완벽 구현 예제 4 [ 서버 셋팅, GCM 설정 ] (121) | 2016.04.07 |
android GCM 클라이언트, 서버 완벽 구현 예제 3 [ 클라이언트 셋팅, GCM 설정 ] (5) | 2016.04.07 |
android GCM 클라이언트, 서버 완벽 구현 예제 2 [ 클라이언트 셋팅, GCM 설정 ] (5) | 2016.04.07 |
android GCM 클라이언트, 서버 완벽 구현 예제 1 [ 사전 준비 ] (1) | 2016.04.07 |
android | 꺼진 화면에서 앱 실행하기 / 잠든 화면 깨우기 / 잠금 화면 위로 실행/ (6) | 2016.03.30 |
android | 디바이스 부팅시 앱 실행하는 방법 / 재부팅 시 어플 실행하는 방법 (0) | 2016.03.30 |
android webview url 가로채기 / 네이티브에서 작업 | android (0) | 2016.01.05 |