티스토리 뷰
참고하였습니다.
[Kotlin][Android] OCR 기능을 만들어보자
안녕하세요~ 오늘은 코틀린을 사용하여 OCR(Optical character recognition) 기능을 구현해 보겠습니다. OCR는 인간이 종이 위에 써 놓은 글씨를 인지하여 텍스트 데이터로 바꿔주는 기능을 말해요. 이
stickode.tistory.com
OCR 기술이란 종이위의 쓴 글씨를 텍스트데이터로 변환하는 기술을 말합니다.
구글링을 통해, 구현해봤습니다.
1.빌드 종속항목 추가
build. gradle(Module) 이 곳에 OCR 라이브러리를 추가합니다.
OCR 라이브러리는 tess-two라는 모듈을 추가해야합니다.
2. 언어데이터 추가
이미지에 쓰여진 글씨를 보고 텍스트로 변환하기 위해서
언어데이터가 저장되어있어야한다.
이렇게 한국어, 영어를 추가하였다.
추가할때 파일형식을 물어보는데 그냥 텍스트파일 (.txt)로 하면 된다.
assets 파일이 없다면 오른쪽 버튼을 눌러서 추가하면 된다.
3. 레이아웃 구성하기
레이아웃은 원하는대로 구성하면 된다
4. MainActivity 구현하기
public class MainActiviy extends AppCompatActivity{
//전역변수 선언
TessBaseAPI tess;
String dataPath="";
@Override
protected void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//데이터 경로
dataPath=getFilesDir()+"/tesseract/";
//한글&영어 데이터 체크
checkFile(new File(dataPath+"/tessdata/"),"kor");
checkFile(new File(dataPath+"/tessdata/"),"eng");
//문자 인식을 수행할 tess객체 생성
String lang+"kor+eng";
tess=new TessBaseAPI();
tess.init(dataPath,lang);
//문자 인식진행 , R.drawble.test인 사진에 있는 글자를 변환하겠다
processImage(BitmapFactory.decodeResource(getResources(),R.drawble.test));
}
public void processImage(Bitmap bitmap){
Toast.makeText(getApplicationContext(),"이미지가 복잡할 경우 많은 시간이 소요됩니다.",Toast.LENGTH_LONG).show();
String OCRresult=null;
tess.setImage(bitmap);
OCRresult=tess.getUTF8Text();
TextView OCRTextView=(TextView)findViewById(R.id.tv_result);
OCRTextView.setText(OCRresult);
}
//R.id.tv_result 에 결과를 반환하고 텍스트를 set하겠다.
//파일 복제
private void copyFiles(String lang){
try{
//우리가 원하는 파일이 장소에 없을때
String filepath=dataPath+"/tessdata/"+lang+".traineddata";
//Asset매니저 접속
AssetManger assetManger=getAssets();
//reading/writing stram open
InputStream inStream=assetManager.open("tessdata/"+lang+".traineddata");
OutputStream outStream=new FileOutputStream(filepath);
//파일경로에서 파일 복사하기
byte[] buffer=new byte[1024];
int read;
while((read=inStream.read(buffer))!=-1){
outStream.write(buffer,0,read);
}
outStream.flush();
outStrea.close();
inStream.close();
}catch(FileNofFoundException e){
e.printStackTrace();
}catch(IOException e){
e.printStackTrace();
}
}
//파일 존재확인
private void checkFile(File dir,String lang){
if(!dir.exists()&&dir.mkdirs()){
copyFiles(lang)'
}
if(dir.exists()){
String datafilePath=dataPath+"/tessdata/"+lang+".traineddata";
File datafile=new File(datafilePath);
if(!datafile.exists()){
copyFiles(lang);
}
}
}
}
}
}
'안드로이드 스튜디오' 카테고리의 다른 글
안드로이드 스튜디오 - 코틀린코드로 리니어 레이아웃 생성 (0) | 2021.08.16 |
---|
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- set
- JPA
- 이클립스
- 파이썬기초
- 유스케이스
- 자바
- 다이어그램
- 스프링
- 기초100제
- sourcetree
- UML
- 코드업기초
- 모델링
- 자바기초
- 코드업
- sql
- 레이아웃
- 깃
- 파이썬
- 안드로이드
- java
- Spring
- web
- 코딩
- 백엔드
- 객체지향모델링
- 객체지향
- laravel
- eclipse
- 개인프로젝트
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
글 보관함