diff --git a/app/build.gradle b/app/build.gradle index af39e97..f67748b 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -23,18 +23,31 @@ android { minifyEnabled false proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro' } - buildTypes.each{ - it.buildConfigField('String','API_KEY','"[ApiKey]"') - } } compileOptions { sourceCompatibility JavaVersion.VERSION_1_8 targetCompatibility JavaVersion.VERSION_1_8 } + + packagingOptions { + exclude 'META-INF/DEPENDENCIES' + exclude 'META-INF/LICENSE' + exclude 'META-INF/LICENSE.txt' + exclude 'META-INF/license.txt' + exclude 'META-INF/NOTICE' + exclude 'META-INF/NOTICE.txt' + exclude 'META-INF/INDEX.LIST' + exclude 'META-INF/notice.txt' + exclude 'META-INF/ASL2.0' + } buildFeatures { viewBinding true } + + aaptOptions { + noCompress "json" + } } dependencies { @@ -59,4 +72,11 @@ dependencies { testImplementation 'junit:junit:4.+' androidTestImplementation 'androidx.test.ext:junit:1.1.2' androidTestImplementation 'androidx.test.espresso:espresso-core:3.3.0' + + implementation platform('com.google.cloud:libraries-bom:20.3.0') + implementation 'com.google.cloud:google-cloud-vision' + implementation 'io.grpc:grpc-netty-shaded:1.24.0' + implementation 'io.grpc:grpc-okhttp:1.24.0' + + } \ No newline at end of file diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index e2d1c4f..3a2aeca 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -13,10 +13,8 @@ android:supportsRtl="true" android:theme="@style/Theme.RIDProject"> - - diff --git a/app/src/main/assets/jsons/test.json b/app/src/main/assets/jsons/test.json new file mode 100644 index 0000000..402407c --- /dev/null +++ b/app/src/main/assets/jsons/test.json @@ -0,0 +1 @@ +// rid-project-cb50d-5fdfabd30d79.jsoon 파일 내용 복붙하면 됨 \ No newline at end of file diff --git a/app/src/main/java/com/example/rid_project/repository/DetectTextGcs.java b/app/src/main/java/com/example/rid_project/repository/DetectTextGcs.java new file mode 100644 index 0000000..c6f40dc --- /dev/null +++ b/app/src/main/java/com/example/rid_project/repository/DetectTextGcs.java @@ -0,0 +1,73 @@ +package com.example.rid_project.repository; + +import android.util.Log; + +import com.google.api.gax.core.FixedCredentialsProvider; +import com.google.cloud.vision.v1.AnnotateImageRequest; +import com.google.cloud.vision.v1.AnnotateImageResponse; +import com.google.cloud.vision.v1.BatchAnnotateImagesResponse; +import com.google.cloud.vision.v1.EntityAnnotation; +import com.google.cloud.vision.v1.Feature; +import com.google.cloud.vision.v1.Image; +import com.google.cloud.vision.v1.ImageAnnotatorClient; +import com.google.cloud.vision.v1.ImageAnnotatorSettings; +import com.google.cloud.vision.v1.ImageSource; + +import java.io.IOException; +import java.util.ArrayList; +import java.util.List; + +public class DetectTextGcs { + + // Detects text in the specified remote image on Google Cloud Storage. + public static void detectTextGcs(FixedCredentialsProvider f) throws IOException { + + List requests = new ArrayList<>(); + + String gcsPath = "gs://rid_bucket/a.jpg"; + + + ImageSource imgSource = ImageSource.newBuilder().setGcsImageUri(gcsPath).build(); + Image img = Image.newBuilder().setSource(imgSource).build(); + + Feature feat = Feature.newBuilder().setType(Feature.Type.TEXT_DETECTION).build(); + + AnnotateImageRequest request = + AnnotateImageRequest.newBuilder().addFeatures(feat).setImage(img).build(); + requests.add(request); + + Log.e("test", "2"); + + + ImageAnnotatorSettings imageAnnotatorSettings = null; + ImageAnnotatorClient client = null; + + try { + + imageAnnotatorSettings = ImageAnnotatorSettings.newBuilder() + .setCredentialsProvider(f).build(); + client = ImageAnnotatorClient.create(imageAnnotatorSettings); + + BatchAnnotateImagesResponse response = client.batchAnnotateImages(requests); + List responses = response.getResponsesList(); + + Log.e("test", "1"); + for (AnnotateImageResponse res : responses) { + if (res.hasError()) { + System.out.format("Error: %s%n", res.getError().getMessage()); + return ; + } + + // For full list of available annotations, see http://g.co/cloud/vision/docs + for (EntityAnnotation annotation : res.getTextAnnotationsList()) { + System.out.format("Text: %s%n", annotation.getDescription()); + System.out.format("Position : %s%n", annotation.getBoundingPoly()); + } + } + }catch (IOException e){ + e.printStackTrace(); + } + + } + +} diff --git a/app/src/main/java/com/example/rid_project/ui/activity/MainActivity.java b/app/src/main/java/com/example/rid_project/ui/activity/MainActivity.java index d0c1685..bd6ae0f 100644 --- a/app/src/main/java/com/example/rid_project/ui/activity/MainActivity.java +++ b/app/src/main/java/com/example/rid_project/ui/activity/MainActivity.java @@ -1,7 +1,10 @@ package com.example.rid_project.ui.activity; import android.content.Intent; +import android.content.res.AssetFileDescriptor; +import android.content.res.AssetManager; import android.os.Bundle; +import android.util.Log; import android.widget.FrameLayout; import android.widget.TextView; @@ -9,10 +12,18 @@ import androidx.fragment.app.FragmentManager; import androidx.fragment.app.FragmentTransaction; +import com.example.rid_project.repository.DetectTextGcs; import com.example.rid_project.ui.fragment.BottomNavigationFragment; import com.example.rid_project.ui.fragment.MainFragment; import com.example.rid_project.R; import com.example.rid_project.databinding.ActivityMainBinding; +import com.google.api.gax.core.FixedCredentialsProvider; +import com.google.auth.oauth2.GoogleCredentials; + +import java.io.FileInputStream; +import java.io.FileNotFoundException; +import java.io.IOException; + public class MainActivity extends AppCompatActivity { private FragmentManager fragmentManager; // 프래그먼트 매니저 @@ -24,6 +35,7 @@ public class MainActivity extends AppCompatActivity { private FrameLayout fragmentView; private FragmentTransaction transaction; private TextView textViewMain; + private DetectTextGcs ex; @Override @@ -46,5 +58,39 @@ protected void onCreate(Bundle savedInstanceState) { //textViewMain = fragment_view.findViewById(R.id.textView_main_topBar); // 책장 유저이름 칸 // textViewMain.setText(userName + "의 책장"); + Log.e("MainActivity","성공"); + // System.out.format("Position : %s%n", ); + + try { + launch(); + } catch (IOException e) { + e.printStackTrace(); + } + } + + private void launch() throws IOException { + AssetManager am = getAssets(); + FileInputStream credentialsStream = null; + + try { + AssetFileDescriptor fileDescriptor = am.openFd("jsons/test.json"); + credentialsStream = fileDescriptor.createInputStream(); + } catch (FileNotFoundException e) { + e.printStackTrace(); + } catch (IOException e) { + e.printStackTrace(); + } + + GoogleCredentials credentials = null; + try { + credentials = GoogleCredentials.fromStream(credentialsStream); + } catch (IOException e) { + e.printStackTrace(); + } + FixedCredentialsProvider credentialsProvider = FixedCredentialsProvider.create(credentials); + + ex.detectTextGcs(credentialsProvider); + } + } diff --git a/app/src/main/java/com/example/rid_project/ui/fragment/ReadTextFragment.java b/app/src/main/java/com/example/rid_project/ui/fragment/ReadTextFragment.java index e549ff4..40848ee 100644 --- a/app/src/main/java/com/example/rid_project/ui/fragment/ReadTextFragment.java +++ b/app/src/main/java/com/example/rid_project/ui/fragment/ReadTextFragment.java @@ -7,19 +7,24 @@ import androidx.annotation.NonNull; import androidx.annotation.Nullable; -import androidx.appcompat.app.AppCompatActivity; import androidx.fragment.app.Fragment; -import com.example.rid_project.R; +import com.example.rid_project.databinding.FragmentReadTextBinding; public class ReadTextFragment extends Fragment { + + private FragmentReadTextBinding binding; + + @Nullable @Override public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { + binding = FragmentReadTextBinding.inflate(inflater, container, false); + + - View view = inflater.inflate(R.layout.fragment_read_text, container, false); //container <-부모 사이즈를 주고 , false=아직 붙이지 않는다. - return view; + return binding.getRoot(); } } diff --git a/app/src/main/res/layout/fragment_read_text.xml b/app/src/main/res/layout/fragment_read_text.xml index 21e87cd..e6bee01 100644 --- a/app/src/main/res/layout/fragment_read_text.xml +++ b/app/src/main/res/layout/fragment_read_text.xml @@ -33,7 +33,7 @@ app:layout_constraintStart_toStartOf="parent" />