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 |
신분증 인식 실패 코드
|
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