Android에서 CloudVision API 테스트 레이블 사용

12816 단어 AndroidCloudVisionAPI

CloudVision


구글이 제공하는 클라우드 이미지 식별 서비스.
영상 속의 교통수단, 동물 등 사물의 유형을 검출하다
레이블 체크
인터넷에서 유사한 이미지를 검색하는'웹 검색'등의 기능이 있다.
REST API로 Java, Python, c# 등 다양한 프로그램 언어를 지원합니다.
클라이언트 환경에서도 Linux, Windows, Mac 및 Android, iOS를 지원합니다.
  • Cloud_Vision
  • 클라우드 Vision API 문서
  • 클라우드 Vision의 API 키 가져오기


    구글 계정과 신용카드가 필요합니다.
    신용카드를 등록하고 요금 모드에 들어가지 않으면
    API 키가 잘못되었습니다.
    나는 사용 비용이 매우 마음에 든다
    월 1000건 이내는 무료이기 때문에 그 이하면 요금을 받지 않는다.
    일련의 수속은 아래의 내용을 참고하였다.
    하면, 만약, 만약...
    Cloud Vision
    무료 평가판 을 클릭하여 API 키를 얻습니다.
  • Cloud Vision API 사용 방법 요약
  • Android에서 CloudVision 사용


    공식 샘플 코드를 공개했다.
    Sample code for Google Cloud Vision
    android,dotnet,ios,java 등 디렉터리가 있습니다.
    android 디렉토리를 AndroidStudio로 가져옵니다.
    다음 내용을 참조했습니다.
  • 클라우드 Vision 샘플 응용 프로그램
  • Android CloudVision 샘플 이동
  • 클라우드 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개 안팎이다.
    필요한 매개 변수를 설정하여 조립하다.
  • docs: CloudVision API 요청 및 응답
  • reference : CloudVision API
  • 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) 수행
  • docs:기능
  • reference : Feature
  • // 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

    관련 문장

  • Android에서 CloudVision API를 사용하여 네트워크 테스트 수행
  • Android에서 CloudVision API를 사용하여 원격 이미지를 지정하고 레이블을 테스트합니다.
  • Android에서 CloudVision API를 사용하여 얼굴 감지
  • 좋은 웹페이지 즐겨찾기