ImageRecognizer API


Summary

OCR 인식 기능을 사용하기 위한 필수적인 API로 구성되어 있습니다.

ImageRecognizer.RecognitionListener

ImageRecognizer.RecognitionListener() {
  /**
    * 인식에 성공하여 결과값 전달
    * @param resultText 인식 결과 데이터
    * @param rrnRect 주민등록번호 마스킹 영역
    * @param licenseNumberRect 운전면허번호 마스킹 영역
    * @param photoRect 증명사진 영역
    * @param persImage 결과 이미지
    * @param isValidCard 흑백 복사본 판별, 흑백복사본인 경우 false
    * @param isValidRegistrationNumber 주민등록번호/외국인등록번호 유효성 여부
    * @param isValidArea 신분증 영역 검출 여부
    */
  @Override
  public void onFinish(ArrayList resultText, Rect rrnRect, Rect licenseNumberRect, Rect photoRect, Bitmap persImage,
                        boolean isValidCard, boolean isValidRegistrationNumber, boolean isValidArea) {

  /**
    * 인식에 실패
    * @param code 오류코드
    *              {@link ImageRecognizer#ERROR_CODE_FAIL}: 인식 실패
    *              {@link ImageRecognizer#ERROR_CODE_FILE_NOT_FOUND}: ROM 파일을 찾지 못함
    *              {@link ImageRecognizer#ERROR_CODE_LICENSE_CHECK_FAILED}: 라이선스 만료
    *              {@link ImageRecognizer#ERROR_CODE_REGISTRATION_NUMBER_FAIL}: 주민등록번호 인식 실패
    *              {@link ImageRecognizer#ERROR_CODE_LICENSE_NUMBER_FAIL}: 운전면허번호 인식 실패
    */
  @Override
  public void onError(int code) {
  }
};

Functions List

// 인식엔진 생성자
ImageRecognizer(Context context)
// 인식엔진 생성자(결과 암호화)
ImageRecognizer(Context context, byte[] encryptKey, byte[] encryptIV)
// 입력된 이미지를 인식하고 그 결과를 리스너로 반환
void startRecognition(Bitmap input, RecognitionListener recognitionListener)
// 입력된 카메라 프리뷰 이미지를 인식하고 그 결과를 리스너로 반환
void startRTRRecognition(byte[] data, int width, int height, Rect guideRect, int cameraOrientation, RecognitionListener recognitionListener)
// 인식기 메모리 해제
void release()

com.selvasai.selvyocr.idcard.ImageRecognizer
(OCR 인식)

ImageRecognizer

클래스 생성자

Parameters
# Name Description Type
[in] context App context Context
Returns

-

Example
ImageRecognizer mImageRecognizer = new ImageRecognizer(getApplicationContext());
ImageRecognizer

클래스 생성자

Parameters
# Name Description Type
[in] context App context Context
[in] encryptKey 인식결과 암호화를 위한 키 byte[]
[in] encryptIV 인식결과 함호화를 위한 초기 벡터 byte[]
Returns

-

Example
byte[] mEncryptKey = {'s', 'e', 'l', 'v', 'a', 's', 'a', 'i' ...};
byte[] mEncryptIV = {'s', 'e', 'l', 'v', 'a', 's', 'a', 'i' ...};
ImageRecognizer mImageRecognizer = new ImageRecognizer(getApplicationContext(), mEncryptKey, mEncryptIV);
startRecognition

입력된 이미지를 인식하고 그 결과를 리스너로 반환

Parameters
# Name Description Type
[in] input 입력 이미지 Bitmap
[in] recognitionListener 결과 반환 리스너 RecognitionListener
Returns

-

Example
ImageRecognizer mImageRecognizer = new ImageRecognizer(getApplicationContext());
Bitmap inputImage = BitmapFactory.decodeFile("/path/to/image.jpg");
ImageRecognizer.RecognitionListener mRecognitionListener = new ImageRecognizer.RecognitionListener() {...);
mImageRecognizer.startRecognition(inputImage, mRecognitionListener);
                
startRTRRecognition

입력된 카메라 프리뷰 이미지를 인식하고 그 결과를 리스너로 반환

Parameters
# Name Description Type
[in] data 카메라 프리뷰 데이터 byte[]
[in] width 카메라 프리뷰 width int
[in] height 카메라 프리뷰 height int
[in] guideRect 가이드 Rect(카메라 프리뷰 화면에 그려주는 영역) Rect
[in] cameraOrientation 카메라 회전 값 int
[in] recognitionListener 결과 반환 리스너 RecognitionListener
Returns

-

Example
ImageRecognizer mImageRecognizer = new ImageRecognizer(getApplicationContext());
ImageRecognizer.RecognitionListener mRecognitionListener = new ImageRecognizer.RecognitionListener() {...);
mImageRecognizer.startRTRRecognition(previewData, previewWidth, previewHeight, mGuideRect, mCameraOrientation, mRecognitionListener);
release

인식기 메모리 해제

Parameters
# Name Description Type
Returns

-

Example
mImageRecognizer.release();
maskInputImage

출력 이미지 마스킹 여부 설정

Parameters
# Name Description Type
[in] useMasking 내부에서 마스킹처리 할지 여부 boolean
Returns

-

Example
mImageRecognizer = new ImageRecognizer(getApplicationContext(), mEncryptKey, mEncryptIV);
mImageRecognizer.maskInputImage(true);
encrypt

입력 String 을 key 와 iv 를 사용하여 암호화

Parameters
# Name Description Type
[in] text 압호화 하고자 하는 String String
[in] key 암호화에 사용할 key byte[]
[in] iv 암호화에 사용할 iv byte[]
Returns

암호화된 String

Example
byte[] mEncryptKey = {'s', 'e', 'l', 'v', 'a', 's', 'a', 'i' ...};
byte[] mEncryptIV = {'s', 'e', 'l', 'v', 'a', 's', 'a', 'i' ...};
ImageRecognizer.encrypt("text", mEncryptKey, mEncryptIV);
decrypt

입력된 String 을 key 와 iv 를 사용하여 복호화

Parameters
# Name Description Type
[in] text 암호화된 String String
[in] key 암호화에 사용한 key byte[]
[in] iv 암호화에 사용한 kv byte[]
Returns

복호화된 String

Example
byte[] mEncryptKey = {'s', 'e', 'l', 'v', 'a', 's', 'a', 'i' ...};
byte[] mEncryptIV = {'s', 'e', 'l', 'v', 'a', 's', 'a', 'i' ...};
String decodedText = ImageRecognizer.decrypt("encrypted_text", mEncryptKey, mEncryptIV);
encrypt

입력 byteArray 를 key 와 iv 를 사용하여 암호화

Parameters
# Name Description Type
[in] byteArray 암호화 하고자 하는 byte 배열 byte[]
[in] key 암호화에 사용할 key byte[]
[in] iv 암호화에 사용할 iv byte[]
Returns

암호화된 byte 배열

Example
byte[] mEncryptKey = {'s', 'e', 'l', 'v', 'a', 's', 'a', 'i' ...};
byte[] mEncryptIV = {'s', 'e', 'l', 'v', 'a', 's', 'a', 'i' ...};
byte[] encodedText = ImageRecognizer.encrypt(byteArray, mEncryptKey, mEncryptIV);
decrypt

입력된 byteArray 를 key 와 iv 를 사용하여 복호화

Parameters
# Name Description Type
[in] byteArray 암호화된 byte 배열 byte[]
[in] key 암호화에 사용한 key byte[]
[in] iv 암호화에 사용한 kv byte[]
Returns

복호화된 String

Example
byte[] mEncryptKey = {'s', 'e', 'l', 'v', 'a', 's', 'a', 'i' ...};
byte[] mEncryptIV = {'s', 'e', 'l', 'v', 'a', 's', 'a', 'i' ...};
byte[] decodedImage = ImageRecognizer.decrypt(encryptImage, mEncryptKey, mEncryptIV);
getEncryptedImage

입력된 비트맵을 key 를 사용하여 암호화하고, 1/4 크기(너비 1/2, 높이 1/2)로 리사이징 후 JPEG 으로 80% 압축한 뒤 암호화합니다.

Parameters
# Name Description Type
[in] origin 암호화 하고자 하는 비트맵 이미지 Bitmap
[in] key 암호화에 사용할 key byte[]
[in] iv 암호화에 사용할 iv byte[]
Returns

암호화된 byte 배열

Example
Bitmap inputImage = BitmapFactory.decodeFile("/path/to/image.jpg");
byte[] mEncryptKey = {'s', 'e', 'l', 'v', 'a', 's', 'a', 'i' ...};
byte[] mEncryptIV = {'s', 'e', 'l', 'v', 'a', 's', 'a', 'i' ...};
byte[] encryptByteArray = ImageRecognizer.getEncryptedImage(inputImage, mEncryptKey, mEncryptIV);
                

SelvyIDCardData.h

//  SelvyIDCardData.h
//  SelvyIDCardRecognizer
//
//  Created by selvasAI on 2018. 8. 8..
//  Copyright © 2018년 SelvasAI. All rights reserved.
//

#import <UIKit/UIKit.h>
#import <Foundation/Foundation.h>

/*!
  * @class   SelvyIDCardData
  * @abstract    SelvyIDCardData 클래스
  * @discussion  신분증 인식 결과 클래스
  */
@interface SelvyIDCardData : NSObject

/*!
  * @typedef IDCardType
  * @brief   신분증 종류 정보
  * @constant    IDCardTypeIDCard    주민등록증
  * @constant    IDCardTypeDriverLicense 자동차운전면허증
  * @constant    IDCardTypeAlienRegistration 외국인등록증
  * @constant    IDCardTypeForeign 주민등록증(재외국민)
  */
typedef NS_ENUM(NSInteger, IDCardType) {
    IDCardTypeIDCard,
    IDCardTypeDriverLicense,
    IDCardTypeAlienRegistration,
    IDCardTypeForeign,
} __TVOS_PROHIBITED;

/*!
  * @property image
  * @brief   영역 검출된 신분증 이미지
  */
@property (strong, nonatomic, readwrite) UIImage *image;

/*!
  * @property type
  * @brief   신분증 종류
  */
@property IDCardType type;

#ifdef _VENDOR_KOSCOM_
/*!
  * @property typeStr
  * @brief   신분증 타입(공통), 주어진 키로 암호화되고 Base64Encoding 된 데이터
  */
@property (strong, nonatomic, readwrite)  NSString *typeStr;

/*!
  * @property name
  * @brief   이름(공통), 주어진 키로 암호화되고 Base64Encoding 된 데이터
  */
@property (strong, nonatomic, readwrite)  NSString *name;

/*!
  * @property rrn
  * @brief   등록번호(공통), 주어진 키로 암호화되고 Base64Encoding 된 데이터
  */
@property (strong, nonatomic, readwrite)  NSString *rrn;

/*!
  * @property birth
  * @brief   생년월일(공통), 주어진 키로 암호화되고 Base64Encoding 된 데이터
  */
@property (strong, nonatomic, readwrite)  NSString *birth;

/*!
  * @property date
  * @brief   발급일(공통), 주어진 키로 암호화되고 Base64Encoding 된 데이터
  */
@property (strong, nonatomic, readwrite)  NSString *date;

/*!
  * @property organization
  * @brief   발급처(주민등록증/자동차운전면허증), 주어진 키로 암호화되고 Base64Encoding 된 데이터
  */
@property (strong, nonatomic, readwrite)  NSString *organization;

/*!
  * @property licenseNumber
  * @brief   면허번호(자동차운전면허증), 주어진 키로 암호화되고 Base64Encoding 된 데이터
  */
@property (strong, nonatomic, readwrite)  NSString *licenseNumber;

/*!
  * @property licenseAptitudeDate
  * @brief   적성검사 만료일(자동차운전면허증), 주어진 키로 암호화되고 Base64Encoding 된 데이터
  */
@property (strong, nonatomic, readwrite)  NSString *licenseAptitudeDate;

/*!
  * @property licenseType
  * @brief   면허종류(자동차운전면허증), 주어진 키로 암호화되고 Base64Encoding 된 데이터
  */
@property (strong, nonatomic, readwrite)  NSString *licenseType;

/*!
  * @property nation
  * @brief   국가(외국인등록증), 주어진 키로 암호화되고 Base64Encoding 된 데이터
  */
@property (strong, nonatomic, readwrite)  NSString *nation;

/*!
  * @property residentStatus
  * @brief   체류자격(외국인등록증), 주어진 키로 암호화되고 Base64Encoding 된 데이터
  */
@property (strong, nonatomic, readwrite)  NSString *residentStatus;

/*!
  * @property address
  * @brief   주소, 주어진 키로 암호화되고 Base64Encoding 된 데이터
  */
@property (strong, nonatomic, readwrite)  NSString *address;

/*!
  * @property licenseIdentificationNumber
  * @brief   면허증 식별번호, 주어진 키로 암호화되고 Base64Encoding 된 데이터
  */
@property (strong, nonatomic, readwrite)  NSString *licenseIdentificationNumber;
#else
/*!
  * @property typeStr
  * @brief   신분증 타입(공통)
  */
@property (strong, nonatomic, readwrite)  NSData *typeStr;

/*!
  * @property name
  * @brief   이름(공통)
  */
@property (strong, nonatomic, readwrite)  NSData *name;

/*!
  * @property rrn
  * @brief   등록번호(공통)
  */
@property (strong, nonatomic, readwrite)  NSData *rrn;

/*!
  * @property date
  * @brief   발급일(공통)
  */
@property (strong, nonatomic, readwrite)  NSData *date;

/*!
  * @property organization
  * @brief   발급처(주민등록증/자동차운전면허증)
  */
@property (strong, nonatomic, readwrite)  NSData *organization;

/*!
  * @property licenseNumber
  * @brief   면허번호(자동차운전면허증)
  */
@property (strong, nonatomic, readwrite)  NSData *licenseNumber;

/*!
  * @property licenseAptitudeDate
  * @brief   적성검사 만료일(자동차운전면허증)
  */
@property (strong, nonatomic, readwrite)  NSData *licenseAptitudeDate;

/*!
  * @property licenseType
  * @brief   면허종류(자동차운전면허증)
  */
@property (strong, nonatomic, readwrite)  NSData *licenseType;

/*!
  * @property nation
  * @brief   국가(외국인등록증)
  */
@property (strong, nonatomic, readwrite)  NSData *nation;

/*!
  * @property residentStatus
  * @brief   체류자격(외국인등록증)
  */
@property (strong, nonatomic, readwrite)  NSData *residentStatus;

/*!
  * @property address
  * @brief   주소
  */
@property (strong, nonatomic, readwrite)  NSData *address;

/*!
  * @property licenseIdentificationNumber
  * @brief   면허증 식별번호
  */
@property (strong, nonatomic, readwrite)  NSData *licenseIdentificationNumber;
#endif

/*!
  * @property rrnRect
  * @brief   등록번호 뒷자리 영역(공통)
  */
@property CGRect rrnRect;

/*!
  * @property licenseNumberRect
  * @brief   면허번호 가운데 영역(자동차운전면허증)
  */
@property CGRect licenseNumberRect;

/*!
  * @property photoRect
  * @brief   사진 영역(공통)
  */
@property CGRect photoRect;

/*!
  * @property isValidColor
  * @brief   흑백 복사본 판별 (YES:컬러 NO:흑백)
  */
@property BOOL isValidColor;

/*!
  * @property isValidRagistrationNumber
  * @brief   주민번호(외국인등록번호) 유효성 여부 (YES:유효함 NO:유효하지않음)
  */
@property BOOL isValidRagistrationNumber;

/*!
  * @property isCropArea
  * @brief   신분증 영역 검출 여부 (YES:영역 검출 NO:영역 검출 실패)
  */
@property BOOL isCropArea;

@end
// 인식엔진 생성자
// 인식엔진 생성자(결과 암호화)

// 입력된 이미지를 인식하고 그 결과를 리스너로 반환

// 입력된 카메라 프리뷰 이미지를 인식하고 그 결과를 리스너로 반환

// 인식기 메모리 해제

SelvyIDCardRecognizer

(void)recognizeIDCard:(UIImage *)image key:(NSString *)key iv:(NSString *)iv delegate:(id<SelvyIDCardRecognizerDelegate>)delegate UseMasking:(BOOL)useMasking

신분증을 인식하고 결과를 delegate로 전달 받음

Parameters
# Name Description Type
[in] image 신분증 촬영 이미지 UIImage *
[in] key 인식 결과 암호화에 사용될 키(길이 : 32byte(256bit)) NSString *
[in] iv 인식 결과 암호화에 사용될 Initialization Vector(길이 : 16byte(128bit)) NSString *
[in] delegate 인식 결과를 리턴하기 위한 콜백 id<SelvyIDCardRecognizerDelegate>
[in] useMasking 결과 신분증 이미지 개인정보 마스킹 여부 UIImage *
Returns

-

(void)recognizeIDCard:(UIImage *)image key:(NSString *)key iv:(NSString *)iv delegate:(id<SelvyIDCardRecognizerDelegate>)delegate UseMasking:(BOOL)useMasking

NSData를 복호화 하여 NSString으로 리턴

Parameters
# Name Description Type
[in] key 인식 결과 복호화에 사용될 키(길이 : 32byte(256bit) NSString *
[in] iv 인식 결과 복호화에 사용될 Initialization Vector(길이 : 16byte(128bit)) NSString *
[in] data 복호화 할 데이터 NSString *
Returns

NSString: 복호화된 스트링 데이터

(NSString *)dataToString:(NSData *)data

주어진 NSData를 NSString 타입으로 리턴

Parameters
# Name Description Type
[in] data NSString 타입으로 변경할 NSData NSString *
Returns

NSString : 변경된 결과(데이터가 유효하지 않을 경우 nil 리턴)

(NSDateComponents *)getExpiredNSDateComponents

라이선스 만료 날짜를 NSDateComponents 객체로 리턴

Parameters
# Name Description Type
Returns

NSDateComponents : 라이선스 만료 날짜

(BOOL)checkLicense

라이선스 유효 여부를 리턴

Parameters
# Name Description Type
Returns

BOOL : 라이선스 유효 여부

(NSString *)getVersion

버전 정보 스트링을 리턴

Parameters
# Name Description Type
Returns

NSString : 버전 정보 스트링

SelvyIDCardRecognizerDelegate

(void)onIDCardRecognized:(SelvyIDCardData *)selvyIDCardData

신분증 촬영 및 인식 성공 시, 결과 전달

Parameters
# Name Description Type
[in] selvyIDCardData 신분증 인식 결과 SelvyIDCardData *
Returns

-

(void)onIDCardError:(IDCardError)errorCode msg:(NSString *)msg

신분증 촬영화면에서 촬영이나 인식 실패 시, 결과 전달

Parameters
# Name Description Type
[in] errorCode 신분증 인식 실패 코드
  • IDCardErrorLicense: 라이선스 만료
  • IDCardErrorCamera: 카메라 초기화 실패
  • IDCardErrorRecognize: 인식 실패
  • IDCardErrorEngine: 인식 엔진 초기화 실패
IDCardError
[in] msg 신분증 인식 실패 메시지 NSString *
Returns

-

SelvyBlurDetector

(double)blurValueOnImage:(UIImage *)image

주어진 이미지의 흐릿함(blur) 값(double)을 판단함

Parameters
# Name Description Type
[in] image 흐릿함을 판단할 이미지 UIImage *
Returns

double: 흐릿함(blur) 값(0.0 ~ 1.0)

SelvyAreaChecker

(bool)checkAreaSimilar:(UIImage *)cropImage outputPoints:(AreaPoints&)outputPoints

이미지에서 검출된 영역이 주어진 영역과 비슷한 영역인지 판단

Parameters
# Name Description Type
[in] cropImage 크롭된 신분증 이미지 UIImage *
[in] outputPoints 비교할 영역 AreaPoints&
Returns

bool : 검출된 영역과 주어진 영역이 비슷하면 YES, 아니면 NO