Android에서 CloudVision API 테스트 레이블 사용
12816 단어 AndroidCloudVisionAPI
CloudVision
구글이 제공하는 클라우드 이미지 식별 서비스.
영상 속의 교통수단, 동물 등 사물의 유형을 검출하다
레이블 체크
인터넷에서 유사한 이미지를 검색하는'웹 검색'등의 기능이 있다.
REST API로 Java, Python, c# 등 다양한 프로그램 언어를 지원합니다.
클라이언트 환경에서도 Linux, Windows, Mac 및 Android, iOS를 지원합니다.
클라우드 Vision의 API 키 가져오기
구글 계정과 신용카드가 필요합니다.
신용카드를 등록하고 요금 모드에 들어가지 않으면
API 키가 잘못되었습니다.
나는 사용 비용이 매우 마음에 든다
월 1000건 이내는 무료이기 때문에 그 이하면 요금을 받지 않는다.
일련의 수속은 아래의 내용을 참고하였다.
하면, 만약, 만약...
Cloud Vision
무료 평가판 을 클릭하여 API 키를 얻습니다.
Android에서 CloudVision 사용
공식 샘플 코드를 공개했다.
Sample code for Google Cloud Vision
android,dotnet,ios,java 등 디렉터리가 있습니다.
android 디렉토리를 AndroidStudio로 가져옵니다.
다음 내용을 참조했습니다.
클라우드 Vision SDK 설정
app/build.gradle
compile 'com.google.apis:google-api-services-vision:v1-rev369-1.23.0' exclude module: 'httpclient'
compile 'com.google.api-client:google-api-client-android:1.23.0' exclude module: 'httpclient'
compile 'com.google.http-client:google-http-client-gson:1.23.0' exclude module: 'httpclient'
uses-permission 설정
AndroidManifest.xml
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.CAMERA"/>
API 키 설정
MainActivity.java
private static final String CLOUD_VISION_API_KEY = "Your API Key";
터미널 내에 이미지 데이터 준비
공식 샘플 코드에는 개와 고양이의 사진이 있다.
나는 그것을 단말기로 복사했다.
예제 응용 프로그램 실행
실행 시
FloatingActionButton이 표시됩니다.
카메라 갤러리 또는 카메라 a
alert dialog를 표시합니다.
갤러리를 선택한 후 사진 응용 프로그램을 시작합니다.
이미지를 선택한 후 샘플 응용 프로그램으로 돌아가 Cloud Vision에 이미지를 업로드합니다.
잠시 후, 이미지 식별 결과가 되돌아옵니다.
사진 응용 프로그램에서 이미지 가져오기
사진 응용 프로그램을 시작합니다.
Intent intent = new Intent();
intent.setType("image/*");
intent.setAction(Intent.ACTION_GET_CONTENT);
startActivityForResult(Intent.createChooser(intent, "Select a photo"),
1);
사진 응용 프로그램에서 이미지 정보를 URI 형식으로 되돌려줍니다.그리고 비트맵을 얻는다.
Bitmap bitmap =
MediaStore.Images.Media.getBitmap( getContentResolver(), uri );
공식 샘플에서 Bitmap을 얻으면 바로 Cloud Vision에 이미지를 업로드합니다.원하지 않는 이미지를 선택하는 경우도 있으므로 확인 대화 상자를 표시합니다.
요청 작성
요청은 JSON 형식입니다.
JSON 형식의 요청을 작성하기 위한 Java 라이브러리가 준비되어 있습니다.
관련 학급은 10개 안팎이다.
필요한 매개 변수를 설정하여 조립하다.
VisionRequestInitializer
요청한 초기화 클래스입니다.
documentation : VisionRequestInitializer
// API_KEY から初期化クラスを生成する
VisionRequestInitializer requestInitializer =
new VisionRequestInitializer(CLOUD_VISION_API_KEY) {
@Override
protected void initializeVisionRequest(VisionRequest<?> visionRequest) {
// 省略
}
};
Image
JSON 형식으로 이미지를 보내는 클래스
Android에는 이름이 같은 Image 클래스가 있지만 이와 다릅니다.
documentation : Image
// Bitmap を byteArray に変換する
ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
bitmap.compress(Bitmap.CompressFormat.JPEG, 90, byteArrayOutputStream);
byte[] imageBytes = byteArrayOutputStream.toByteArray();
// Image を生成する
Image base64EncodedImage = new Image();
base64EncodedImage.encodeContent(imageBytes);
Feature
요청에 대해 테스트할 기능 및 관련 매개 변수를 지정하는 클래스
기능은 다음과 같습니다.
기능
문자열
설명
태그 검사
LABEL_DETECTION
전체 이미지에 대해 이미지 내용 분석을 수행하고 결과를 되돌려줍니다.
얼굴 검사
FACE_DETECTION
이미지의 얼굴 검사
문자 검사
TEXT_DETECTION
이미지의 텍스트에 광학 문자 인식(OCR) 수행
// Feature を生成する
Feature labelDetection = new Feature();
// ラベル検出を指定する
labelDetection.setType("LABEL_DETECTION");
labelDetection.setMaxResults(10)
AnnotateImageRequest
사용자가 제공한 이미지와 사용자가 요청한 기능에 따라 요청한 클래스를 생성합니다
reference : AnnotateImageRequest
// AnnotateImageRequestを生成する
AnnotateImageRequest annotateImageRequest = new AnnotateImageRequest();
// 画像を設定する
annotateImageRequest.setImage(base64EncodedImage);
// 要求した機能を設定する
annotateImageRequest.setFeatures(features);
BatchAnnotateImagesRequest
여러 개의 annotateImageRequest를 하나의 서비스 호출 클래스로 통합합니다.
documentation : BatchAnnotateImagesRequest
// BatchAnnotateImagesRequest を生成する
BatchAnnotateImagesRequest
batchAnnotateImagesRequest
= new BatchAnnotateImagesRequest();
batchAnnotateImagesRequest.setRequests(annotateImageRequests);
Vision
종합 서비스의 종류를 정의하다.
documentation ; Vision
// HttpTransport と JsonFactory から Vision.Builder を生成する
HttpTransport httpTransport = AndroidHttp.newCompatibleTransport();
JsonFactory jsonFactory = GsonFactory.getDefaultInstance();
Vision.Builder builder = new Vision.Builder(httpTransport, jsonFactory, null);
// requestInitializer で初期化する
builder.setVisionRequestInitializer(requestInitializer);
// Vision を生成する
Vision vision = builder.build();
Vision.Images.Annotate
요청 실행 클래스
documentation : Vision.Images.Annotate
// Vision.Images.Annotate を生成する
Vision.Images.Annotate annotateRequest = vision.images().annotate(batchAnnotateImagesRequest);
AsyncTask
Android 클래스를 비동기적으로 실행하려면
요청 및 응답 수신
reference : AsyncTask
public class LableDetectionTask extends AsyncTask<Object, Void, String> {
public LableDetectionTask(Activity activity, Vision.Images.Annotate annotate) {
// 省略
}
protected String doInBackground(Object... params) {
BatchAnnotateImagesResponse response = annotate.execute();
}
처리 응답
Cloud Vision의 응답은 JSON 형식입니다.
읽기 쉬운 태그 및 분수 문자열
BatchAnnotateImagesResponse
JSON 형식의 응답을 Java 객체의 클래스에 매핑
documentation : BatchAnnotateImagesResponse
BatchAnnotateImagesResponse response;
List<AnnotateImageResponse> list = response.getResponses();
AnnotateImageResponse annotateImageResponse = list.get(0);
// ラベル検出の結果を取得する
List<EntityAnnotation> labels = annotateImageResponse.getLabelAnnotations();
StringBuilder message = new StringBuilder();
for (EntityAnnotation label : labels) {
// ラベルとスコアの文字列にする
message.append(String.format(Locale.US, "%.3f: %s", label.getScore(), label.getDescription()));
}
AnnotateImageResponse
응답 클래스
getLabelAnnotations 메서드에서 태그 검사 결과 가져오기
documentation : AnnotateImageResponse
EntityAnnotation
응답 주석 클래스
라벨을 검사할 때 라벨과 득점을 얻을 수 있다
EntityAnnotation
오류 처리
API 키가 올바르지 않은 경우
G ogleJsonResponseException 발생
reference : GoogleJsonResponseException
실행 예
화면 캡처
레이블 및 분수
Dog(개): 0.995
Mamma(l 포유동물): 0.989
척추동물: 0.985
Canidae(견과): 0.981
Cocker spaniel:0.901
개 품종: 0.895
Carnivore(육식동물): 0.855
Sporting Group(스포츠견): 0.833
Grass(초): 0.822
애완견: 0.816
포유류견, 견종은 콕스파닐로 판정되었다.
샘플 코드가github에 발표되었습니다.
https://github.com/ohwada/Android_Samples/tree/master/CloudVision1
관련 문장
Reference
이 문제에 관하여(Android에서 CloudVision API 테스트 레이블 사용), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/ohwada/items/b34718df6a6362e493dc텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)