Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
2 changes: 2 additions & 0 deletions app/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -44,6 +44,8 @@ dependencies {
implementation 'com.google.firebase:firebase-firestore:23.0.0'
implementation 'com.google.firebase:firebase-storage:20.0.0'
implementation 'com.google.firebase:firebase-functions'
implementation project(path: ':opencv')
implementation 'com.rmtheis:tess-two:9.0.0'

def fragment_version = "1.3.3"
def lifecycle_version = "2.0.0"
Expand Down
Binary file added app/src/main/assets/eng.traineddata
Binary file not shown.
Binary file added app/src/main/assets/kor.traineddata
Binary file not shown.
Original file line number Diff line number Diff line change
@@ -1,41 +1,36 @@
package com.example.rid_project.ui.activity;

import androidx.activity.result.ActivityResult;
import androidx.activity.result.ActivityResultCallback;
import androidx.activity.result.ActivityResultLauncher;
import androidx.activity.result.contract.ActivityResultContracts;
import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;


import android.app.Activity;
import android.content.Intent;
import android.content.res.AssetManager;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.AsyncTask;
import android.os.Bundle;
import android.provider.MediaStore;
import android.util.Base64;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.CheckBox;
import android.widget.TextView;
import android.widget.Toast;

import androidx.activity.result.ActivityResult;
import androidx.activity.result.ActivityResultCallback;
import androidx.activity.result.ActivityResultLauncher;
import androidx.activity.result.contract.ActivityResultContracts;
import androidx.appcompat.app.AppCompatActivity;

import com.example.rid_project.R;
import com.example.rid_project.databinding.ActivitySelectTextBinding;
import com.google.android.gms.tasks.Continuation;
import com.google.android.gms.tasks.Task;
import com.google.firebase.functions.FirebaseFunctions;
import com.google.firebase.functions.FirebaseFunctionsException;
import com.google.firebase.functions.HttpsCallableResult;
import com.google.firebase.storage.FirebaseStorage;
import com.google.firebase.storage.StorageReference;
import com.google.gson.Gson;
import com.google.gson.JsonElement;
import com.google.gson.JsonObject;
import com.google.gson.JsonParser;
import com.google.gson.JsonPrimitive;

import java.io.ByteArrayOutputStream;
import com.googlecode.tesseract.android.TessBaseAPI;

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.Random;


Expand All @@ -53,6 +48,7 @@ public class SelectTextActivity extends AppCompatActivity {
private CheckBox cb3;
private CheckBox cb4;
private FirebaseFunctions mFunctions;
TessBaseAPI tessBaseAPI = new TessBaseAPI();


@Override
Expand All @@ -69,12 +65,18 @@ protected void onCreate(Bundle savedInstanceState) {

btnNext = binding.btnNext;
btnNext.setOnClickListener(view1 -> {
Intent intent = new Intent(SelectTextActivity.this,ReadTextActivity.class);
Intent intent = new Intent(SelectTextActivity.this, ReadTextActivity.class);
intent.putExtra("check",Checked(view1));
startActivity(intent);
finish();
});

// tesseract 언어 설정
String dir = getFilesDir() + "/tesseract";
if(checkLanguageFile(dir+"/tessdata"))
tessBaseAPI.init(dir, "eng");
// tessBaseAPI.init(dir, "kor");

Intent getIntent = new Intent(this.getIntent());
userUid = getIntent.getStringExtra("userUid");

Expand All @@ -99,6 +101,69 @@ public String Checked(View v) {
return resultText;
}

// traineddata파일이 해당 경로에 존재하는지 확인
private boolean checkLanguageFile(String dir)
{
File file = new File(dir);
if(!file.exists() && file.mkdirs())
createFiles(dir);
else if(file.exists()){
String filePath = dir + "/eng.traineddata";
File langDataFile = new File(filePath);
if(!langDataFile.exists())
createFiles(dir);
}
return true;
}

private void createFiles(String dir)
{
AssetManager assetMgr = this.getAssets();

InputStream inputStream = null;
OutputStream outputStream = null;

try {
inputStream = assetMgr.open("eng.traineddata");

String destFile = dir + "/eng.traineddata";

outputStream = new FileOutputStream(destFile);

byte[] buffer = new byte[1024];
int read;
while ((read = inputStream.read(buffer)) != -1) {
outputStream.write(buffer, 0, read);
}
inputStream.close();
outputStream.flush();
outputStream.close();
}catch (IOException e) {
e.printStackTrace();
}
}

//Tesseract 실행 클래스
private class AsyncTess extends AsyncTask<Bitmap, Integer, String> {

@Override
protected String doInBackground(Bitmap... bitmaps) {

tessBaseAPI.setImage(bitmaps[0]);
// Toast.makeText(SelectTextActivity.this, "doInBackground:"+tessBaseAPI.getUTF8Text(), Toast.LENGTH_LONG).show();
System.out.println(tessBaseAPI.getUTF8Text());

return tessBaseAPI.getUTF8Text();
}

protected void onPostExecute(String result) {
TextView tessResultTextView = findViewById(R.id.tessResultText);
Toast.makeText(SelectTextActivity.this, ""+result, Toast.LENGTH_LONG).show();
tessResultTextView.setText(result);
tessBaseAPI.end();
}
}


ActivityResultLauncher<Intent> startActivityResult = registerForActivityResult(
new ActivityResultContracts.StartActivityForResult(),
Expand All @@ -118,7 +183,7 @@ public void onActivityResult(ActivityResult result) {

Bundle extras = result.getData().getExtras();
Bitmap bitmap = (Bitmap) extras.get("data");

new AsyncTess().execute(bitmap);



Expand Down
Original file line number Diff line number Diff line change
@@ -1,10 +1,17 @@
package com.example.rid_project.ui.activity;

import android.Manifest;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.os.Bundle;
import android.os.Handler;
import android.provider.MediaStore;
import android.widget.Toast;

import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;
import androidx.core.app.ActivityCompat;
import androidx.core.content.ContextCompat;

import com.example.rid_project.R;

Expand All @@ -14,16 +21,41 @@ public class StartActivity extends AppCompatActivity {
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.start_activity);
int permissionCheck = ContextCompat.checkSelfPermission(StartActivity.this, Manifest.permission.CAMERA);
if(permissionCheck== PackageManager.PERMISSION_DENIED){
// 권한 없음
ActivityCompat.requestPermissions(StartActivity.this, new String[]{Manifest.permission.CAMERA},0);
}

Handler handler = new Handler(); // 시작화면 3초후 로그인 화면으로 연결
handler.postDelayed(new Runnable() {
@Override
public void run() {
Intent intent = new Intent(getApplicationContext(),SignInActivity.class);
startActivity(intent);
finish();
//권한 있음
Intent intent = new Intent(getApplicationContext(),SignInActivity.class);
//Intent intent = new Intent(getApplicationContext(),SelectTextActivity.class);
startActivity(intent);
finish();

}
},2000);
}

@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
if (requestCode == 0) {
if (grantResults[0] == 0) {
Toast.makeText(this, "카메라 권한이 승인됨",
Toast.LENGTH_SHORT).show();
} else {
//권한 거절된 경우
Toast.makeText(this, "카메라 권한이 거절 되었습니다.카메라를 이용하려면 권한을 승낙하여야 합니다.",
Toast.LENGTH_SHORT).show();
}
}
}

@Override
protected void onPause() {
super.onPause();
Expand Down
14 changes: 14 additions & 0 deletions app/src/main/res/layout/activity_select_text.xml
Original file line number Diff line number Diff line change
Expand Up @@ -86,4 +86,18 @@
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintVertical_bias="0.884" />

<TextView
android:id="@+id/tessResultText"
android:layout_width="245dp"
android:layout_height="53dp"
android:layout_marginEnd="80dp"
android:layout_marginRight="80dp"
android:textSize="18sp"
android:text ="텍스트 인식 결과"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintVertical_bias="0.774"
tools:ignore="HardcodedText" />

</androidx.constraintlayout.widget.ConstraintLayout>
2 changes: 1 addition & 1 deletion build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ buildscript {
jcenter()
}
dependencies {
classpath "com.android.tools.build:gradle:4.0.2"
classpath 'com.android.tools.build:gradle:4.2.1'
classpath 'com.google.gms:google-services:4.3.5'
// NOTE: Do not place your application dependencies here; they belong
// in the individual module build.gradle files
Expand Down
2 changes: 1 addition & 1 deletion gradle/wrapper/gradle-wrapper.properties
Original file line number Diff line number Diff line change
Expand Up @@ -3,4 +3,4 @@ distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-6.4.1-all.zip
distributionUrl=https\://services.gradle.org/distributions/gradle-6.7.1-all.zip
Loading