안녕하세요!! 이번에는 안드로이드에서 구글 Cloud Vision API 사용법을 알아보겠습니다.
구글 Cloud Vision API은 이미지에서 얼굴인식, 랜드마크탐지, 사물감지, 텍스트 인식, 로고, 부적절한 이미지 감지 등 다양한 기능이 있습니다.
자세한 내용은 구글 클라우드 플렛폼 내의 클라우드비전을 참고해주세요!!
https://cloud.google.com/vision/
그럼 이제부터 Cloud Vision API를 안드로이드에서 사용해 보도록 하겠습니다.
오늘은 여러 기능중 text 인식기능에대해 알아보겠습니다.
Cloud Vision API를 안드로이드에서 사용하기에 앞서 구글 클라우드 플렛폼에서 API키를 발급받아야 합니다.
(API키 발급 방법은 추후에 올리겠습니다)
먼저 클라우드비전 API의 샘플 소스입니다 GItHub에서 참고해주세요 .
https://github.com/GoogleCloudPlatform/cloud-vision
클라우드비전은 인터넷과 이미지를 가져오기위해 카메라와 앨범의 권한이 필요합니다. 따라서 manifests 에 권한을 부여합시다.
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.CAMERA"/>
자바 파일로는 Main 과 PackageManagerUtils.java,PermissionUtils.java 이렇게 세개가 있습니다.
우리는 Main만 보면됩니다.
public class MainActivity extends AppCompatActivity {
private static final String CLOUD_VISION_API_KEY = "YOUR_API_KEY";
public static final String FILE_NAME = "temp.jpg";
private static final String ANDROID_CERT_HEADER = "X-Android-Cert";
private static final String ANDROID_PACKAGE_HEADER = "X-Android-Package";
private static final String TAG = MainActivity.class.getSimpleName();
private static final int GALLERY_PERMISSIONS_REQUEST = 0;
private static final int GALLERY_IMAGE_REQUEST = 1;
public static final int CAMERA_PERMISSIONS_REQUEST = 2;
public static final int CAMERA_IMAGE_REQUEST = 3;
...
annotateImageRequest.setFeatures(new ArrayList<feature>() {{
Feature labelDetection = new Feature();
labelDetection.setType("LABEL_DETECTION");
labelDetection.setMaxResults(10);
add(labelDetection);
}});
이부분에서 labelDetection.setType("LABEL_DETECTION"); 클라우드 비전이 어떤 기능을 사용할지 알려줍니다. 예제는 LABEL_DETECTION 으로 이미지에대한 정보를 알려줍니다 .
LABEL 뿐만아니라 텍스트, 랜드마크, 로고 등 여러가지 키워드가 있습니다.
예를들어 텍스트 인식기능을 사용하고 싶은경우
annotateImageRequest.setFeatures(new ArrayList<feature>() {{
Feature textDetection = new Feature();
textDetection.setType("TEXT_DETECTION");
textDetection.setMaxResults(10);
add(textDetection);
}});
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;
}
String message = "I found these things:\n\n";
List<entityannotation> labels = response.getResponses().get(0).getTextAnnotations();
if (labels != null) {
message = labels.get(0).getDescription();
} else {
message = "nothing";
}
return message;
}
protected void onPostExecute(String result) {
mImageDetails.setText(result);
}
ps. 클라우드 플랫폼 홈페이지에서도 이용해볼수 있습니다.
'Android' 카테고리의 다른 글
[안드로이드]인텐트 로 값 전달(Intent putExtra) (0) | 2017.08.30 |
---|---|
[안드로이드]커스텀 zxing(custom바코드스캐너) (59) | 2017.08.29 |
[안드로이드]텍스트뷰(TextView) 옆으로 넘어가기(전광판기능) (0) | 2017.08.08 |
[안드로이드]달력 만들기(calendar) (155) | 2017.08.07 |
[안드로이드]편리한 라이브러리(Butter Knife) (0) | 2017.08.07 |