[Android] Google Cloud Vision API를 사용한 WEBDETECTION
10133 단어 GoogleCloudVisionAPIAndroid
시작
이번에는 웹 전단·서버 측면의 사람으로서 간단한 안드로이드 앱을 개발하기 위해 막혔을 때의 지식 공유가 주를 이뤘다.
그래서 내용이 아주 간단하다고 생각했는데 처리할 때 전혀 참고할 만한 글을 찾지 못해 조금 고생한 게 기고의 배경이었다.
1. 목적
안드로이드Google Cloud Vision API를 사용하여 이미지를 웹 테스트합니다.
(API는 위의 링크를 통해 테스트할 수 있음)
2. Cloud Vision Sample
Google Cloud Vision API를 사용하는 Sample 애플리케이션은 Giithub에 공식적으로 공개됩니다.
Sample 응용 프로그램의 사용 방법에 관하여 공식 Doc도 친절하고 다른 개인 사이트에서 상세하게 설명한 부분도 간단히 설명합니다.
① 위의 github부터 clone
② Cloud Vision APIkey 가져오기
③ Android Studio에서 open Cloudvision 디렉토리
④ 가져온 APIkey를
MainActivity.java
에 붙여넣기⑤ Run
참조: Android에서 Cloudvision을 사용할 때 Google Developer Console의 등록 프로세스
기본값은 검사 이미지 태그(범주)입니다.
(이미지는 인터넷에서 주운 PS4의 상자 이미지를 분석한 결과다. 검출된 라벨은technology,electronic device 등)
이번에 주요 목적은 이곳의 검측을 라벨로 하는 것이 아니라 웹 검측으로 하는 것이다.
3. 웹 테스트
API가 감지하는 피쳐의 양을 결정하는 코드는
l.247~252
섹션입니다.annotateImageRequest.setFeatures(new ArrayList<Feature>() {{
Feature labelDetection = new Feature();
labelDetection.setType("LABEL_DETECTION");
labelDetection.setMaxResults(10);
add(labelDetection);
}});
감지된 Feature의 Type을 LABEL_DETETION
로 설정하므로 3행은labelDetection.setType("WEB_DETECTION");
로 수정합니다.이렇게 하면...
nothing.
4. Convert Response to String
이곳은 가장 붐비는 곳이다.
이전에 검출된 특징량을 바꾼 API의 응답은
l.265
중의return convertResponseToString(response);
그림에서 보듯이 convertResponseToString
방법을 통해 변환하고 표시한다.private String convertResponseToString(BatchAnnotateImagesResponse response) {
String message = "I found these things:\n\n";
List<EntityAnnotation> labels = response.getResponses().get(0).getLabelAnnotations();
if (labels != null) {
for (EntityAnnotation label : labels) {
message += String.format(Locale.US, "%.3f: %s", label.getScore(), label.getDescription());
message += "\n";
}
} else {
message += "nothing";
}
return message;
}
nothing이 나오는 것은 labels == null
때문에 이곳의 getLabelAnnotations()
는 매우 구리다.보다AnnotateImageResponse의 참조 느낌으로 사용
getWebDetection()
하면 목적물을 얻을 수 있다....그러나 반환값의 유형
WebDetection
은import이 될 수 없습니다.WebDetection 참조에서 정의되었지만 가져올 수 없습니다...
이유는
bundle.gradle (Module: app)
였다.
dependencies {
...
compile 'com.google.apis:google-api-services-vision:v1-rev2-1.21.0'
}
Sample 애플리케이션이 정의한 API는v1-rev2
이기 때문에 웹디텍션이 없는 것이 문제다.v1-rev2-1.21.0를 최신 v1-rev358-1.22.0로 변경
dependencies {
...
compile 'com.google.apis:google-api-services-vision:v1-rev358-1.22.0'
}
이렇게 되면 import WebDetection이 가능하기 때문에 convert ResponseToString 방법을 변경합니다.
private String convertResponseToString(BatchAnnotateImagesResponse response) {
String message = "I found these things:\n\n";
List<WebEntity> labels = response.getResponses().get(0).getWebDetection().getWebEntities();
if (labels != null) {
for (WebEntity label : labels) {
message += String.format(Locale.US, "%.3f: %s", label.getScore(), label.getDescription());
message += "\n";
}
} else {
message += "nothing";
}
return message;
}
이렇게 되면웹 테스트를 받았습니다!(왠지 최고 점수는 Call of Duty)
5.끝
이번에 웹 검출의 값을 얻었지만 웹 검출처럼 이후 개정에 추가된 특징량은 같은 방법으로 얻을 수 있을 것 같습니다.
초보자이기 때문에 내용이 아주 간단해요. 도움이 된다면 좋겠어요.
Reference
이 문제에 관하여([Android] Google Cloud Vision API를 사용한 WEBDETECTION), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/tarotaro0/items/4ec82151f9ab656e358b텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)