ML Kit는 Android 및 iOS 애플리케이션에 기성 ML 모델을 통합하기 위한 Google의 모바일 SDK입니다. ML Kit는 텍스트 인식, 얼굴 감지, 바코드 스캔, 객체 감지, 텍스트 번역, 포즈 감지 및 이미지 분할을 위한 API를 제공합니다. 모든 모델은 서버 연결 없이 기기에서(on-device) 작동합니다. Google ML Kit, 2025에 따르면 이 라이브러리는 10만 개 이상의 애플리케이션에서 사용되며, 하루에 20억 개 이상의 요청을 처리합니다
핵심 요점
ML Kit는 모바일 플랫폼용 Firebase 호환 SDK로, Android 및 iOS에 14개의 ML API를 제공합니다. ML Kit는 2020년에 Firebase ML(이전 이름)을 대체했으며, 현재 Google Play Services(Android) 또는 CocoaPods/SPM(iOS)을 통해 독립형 SDK로 사용할 수 있습니다. 주요 장점은 모든 모델이 기기에서 작동하여 데이터 프라이버시와 오프라인 작동을 보장한다는 것입니다.
ML Kit 아키텍처는 번들(모델이 APK/IPA에 포함) 및 다운로드(첫 호출 시 Google Play Services를 통해 모델 다운로드)의 두 가지 모드를 중심으로 구축되었습니다. 번들 모드는 즉시 시작할 수 있지만 앱 크기가 5~20MB 증가합니다. 다운로드 모드는 공간을 절약하지만 첫 실행 시 인터넷이 필요합니다. Google은 모든 화면에서 사용되지 않는 API(Object Detection, Pose Detection)에 다운로드 모드를 권장합니다.
TFLite를 통한 사용자 정의 — ML Kit를 사용하면 Custom Model API를 통해 자체 TensorFlow Lite 모델을 로드할 수 있습니다. 이를 통해 유연성이 향상되어 표준 작업에는 기성 API를, 특정 작업에는 자체 모델을 사용할 수 있습니다. ML Kit는 ByteBuffer 및 FloatArray와 함께 작동하는 범용 입력/출력 핸들러를 제공합니다. Google(2025년)에 따르면 ML Kit 프로젝트의 40%가 기성 API와 커스텀 모델을 결합합니다.
// ML Kit Text Recognition 설정(Android)
val recognizer = TextRecognition.getClient(TextRecognizerOptions.DEFAULT_OPTIONS)
val image = InputImage.fromBitmap(bitmap)
recognizer.process(image)
.addOnSuccessListener { result ->
for (block in result.textBlocks) {
Log.d("MLKit", block.text)
}
}
.addOnFailureListener { error ->
// 처리 오류
}
Firebase vs 독립형 — ML Kit는 Firebase(Cloud 기능, Analytics, Crashlytics)와 함께 사용하거나 Firebase 없이 독립형 SDK로 사용할 수 있습니다. 독립형 모드는 Firebase 계정 설정 없이 Google Play Services(Android)를 통해 연결됩니다. Cloud API는 Google 서버의 신경망이 필요한 작업을 위해 Firebase(Cloud Vision, Natural Language)를 통해 사용할 수 있지만, 이러한 기능은 유료이며 온디바이스가 아닙니다.
ML Kit Text Recognition — 이미지에서 광학 문자 인식(OCR)을 위한 API입니다. 라틴 문자 기반(라틴 문자, 키릴 문자, 숫자 — 45개 언어)과 중국어/일본어/한국어(CJK — 표의 문자 언어)의 두 가지 모드를 지원합니다. 라틴 문자 인식은 V2 모델(더 빠름) 또는 V1(고정밀)을 사용합니다. V2는 프레임당 10~30ms, V1은 50~100ms입니다.
Text Recognition 기능에는 인쇄 텍스트 및 필기 텍스트 인식, 텍스트 방향 감지, 줄, 단어 및 문자 감지, 텍스트 언어 결정이 포함됩니다. API는 Text → TextBlock → Line → Element(단어/기호) 구조를 반환합니다. 각 요소에는 경계 상자, 신뢰도 및 인식된 텍스트가 있습니다. Google(2025년)에 따르면 라틴 문자에서 ML Kit Text Recognition V2의 정확도는 96%, 키릴 문자에서는 91%입니다.
실시간 Text Recognition — 비디오 스트림에는 CameraX 또는 Camera2를 사용합니다. ImageAnalysis.Analyzer를 만들고 프레임을 ML Kit에 전달합니다. 성능을 위해 프레임 해상도를 480p(640x480)로 낮추십시오. 이것이 속도와 정확도 간의 최적의 균형입니다. ML Kit는 이미지 회전을 자동으로 처리하지만, 최대 속도를 위해 올바른 방향으로 이미지를 전달하십시오.
// CameraX Analyzer를 사용한 텍스트 인식
class TextAnalyzer : ImageAnalysis.Analyzer {
private val recognizer = TextRecognition.getClient(
TextRecognizerOptions.DEFAULT_OPTIONS
)
override fun analyze(image: ImageProxy) {
val inputImage = InputImage.fromMediaImage(
image.image, image.imageInfo.rotationDegrees
)
recognizer.process(inputImage)
.addOnSuccessListener { /* text found */ }
.addOnCompleteListener { image.close() }
}
}
Text Recognition 최적화: ImageDecoder를 사용하여 흐릿하거나 어두운 이미지의 인식을 개선합니다. 인쇄 텍스트의 경우 TextRecognizerOptions.DEFAULT_OPTIONS(V2 모델), 필기 텍스트의 경우 TextRecognizerOptions.SCRIPT_LATIN(더 정확하지만 느림)를 사용합니다. IT Sectr 프로젝트에서는 문서 인식에 V2를, 수표 및 영수증에 Latin 모델을 사용합니다.
ML Kit Face Detection — 이미지 및 비디오에서 얼굴을 감지하는 API입니다. 얼굴 경계 상자, 눈, 코, 입, 귀 좌표(468개 윤곽점) 및 기본 표정(미소, 열린 입, 닫힌 눈)을 감지합니다. Face Detection은 가장 빠른 ML Kit API 중 하나로, 얼굴 수와 윤곽점에 따라 프레임당 5~15ms입니다.
Face Detection 모드: 윤곽 모드(정확한 마스크/필터 오버레이를 위한 468개 얼굴 윤곽점), 분류 모드(미소, 열린 눈 감지), 랜드마크 모드(윤곽 없는 주요 포인트). 모드는 FaceDetectorOptions에서 결합됩니다. 모든 모드를 활성화하면 감지 속도가 2~3배 느려지므로 작업에 필요한 최소한의 세트를 사용하십시오.
AR 애플리케이션의 Face Detection — 윤곽점을 기반으로 ML Kit는 Snapchat과 같은 필터용 얼굴 마스크를 만듭니다. ML Kit는 x, y, z 좌표(z = 깊이)가 있는 468개 점을 반환합니다. 최신 기기에서 점은 초당 30~60회 업데이트됩니다. AR 오버레이에는 FaceMeshDetector(전문 버전)를 사용하십시오. 텍스처링을 위한 메시 삼각형도 반환합니다.
// 윤곽점을 사용한 얼굴 감지
val options = FaceDetectorOptions.Builder()
.setPerformanceMode(FaceDetectorOptions.PerformanceMode.FAST)
.setContourMode(FaceDetectorOptions.ContourMode.ALL)
.setClassificationMode(FaceDetectorOptions.ClassificationMode.ALL)
.build()
val detector = FaceDetection.getClient(options)
detector.process(inputImage)
.addOnSuccessListener { faces ->
faces.forEach { face ->
val bounds = face.boundingBox
val smileProb = face.smilingProbability
}
}
Face Detection 제한 사항: API는 얼굴이 누구의 것인지 인식하는(얼굴 인식) 기능이 없으며 얼굴만 감지합니다. 신원 확인에는 커스텀 TFLite 모델에서 FaceNet 또는 ArcFace를 사용하십시오. ML Kit는 45도까지의 각도, 안경 및 부분 마스크를 착용한 얼굴에서도 올바르게 작동합니다. 프로필 각도(90°)에서는 정확도가 40~60%로 떨어집니다.
ML Kit Barcode Scanning — 1D(EAN, UPC, Code 128) 및 2D(QR, Data Matrix, PDF417) 바코드를 읽고 디코딩하는 API입니다. Barcode Scanning은 이미지에서 코드를 감지합니다. ZXing처럼 코드가 거의 전체 프레임을 차지할 필요가 없습니다. ML Kit는 모든 크기와 방향의 코드를 감지하며, 단일 프레임에서 여러 코드(멀티 바코드 모드)도 처리할 수 있습니다.
지원되는 형식: EAN-8, EAN-13, UPC-A, UPC-E, Code 39, Code 93, Code 128, ITF, Codabar, QR, Data Matrix, PDF417, Aztec. ML Kit는 자동으로 형식을 결정하므로 코드 유형을 지정할 필요가 없습니다. 프로덕션에서는 setBarcodeFormats()를 사용하여 지원 형식을 제한하면 불필요한 디코딩 알고리즘을 제외하여 스캔 속도가 30~50% 향상됩니다.
실시간 Barcode Scanning — Text Recognition과 유사하게 CameraX와 통합됩니다. ML Kit는 최대 60FPS로 프레임을 처리합니다. 최대 속도를 위해 setPerformanceMode(PerformanceMode.FAST)를 활성화하십시오. ML Kit Barcode Scanning은 ZXing보다 2~3배 빠르며 흐릿하거나 부분적으로 가려진 코드 감지 정확도도 더 높습니다. Google(2025년)에 따르면 표준 조명에서 ML Kit Barcode Scanning의 정확도는 98.5%입니다.
// 형식 필터를 사용한 바코드 스캔
val options = BarcodeScannerOptions.Builder()
.setBarcodeFormats(Barcode.FORMAT_QR_CODE,
Barcode.FORMAT_EAN_13)
.build()
val scanner = BarcodeScanning.getClient(options)
scanner.process(inputImage)
.addOnSuccessListener { barcodes ->
barcodes.forEach { barcode ->
val value = barcode.rawValue
val type = barcode.format
}
}
ZXing과의 비교: ML Kit는 더 빠르고 정확하며 통합이 쉽습니다. ZXing은 오픈 소스이며 완전히 오프라인에서 작동하고 Google Play Services가 필요하지 않습니다. ML Kit에는 Google Play Services(Android) 또는 CocoaPods(iOS)가 필요합니다. Google이 없는 기기(Huawei, Amazon Fire)에서 실행되는 앱의 경우 폴백으로 ZXing을 사용하십시오. 그 외의 경우에는 멀티 코드 감지를 통해 더 나은 UX를 제공하는 ML Kit를 사용하십시오.
ML Kit Object Detection — 이미지에서 객체를 감지하고 추적하는 API입니다. 1000개 이상의 카테고리(ImageNet 클래스)에서 객체(사람, 동물, 차량, 가정용품)를 감지합니다. Object Detection은 단일 이미지(단일 사진) 및 스트리밍(추적 기능이 있는 비디오 스트림)의 두 가지 모드로 작동합니다. 스트리밍 모드는 프레임 간에 객체를 추적하고 각각에 고유한 추적 ID를 할당합니다.
Pose Detection — 33개의 주요 포인트(골격)를 통해 인간의 자세를 결정하는 API입니다: 머리, 어깨, 팔꿈치, 손목, 엉덩이, 무릎, 발. 각 포인트의 좌표(x, y, z)와 신뢰도를 결정합니다. Pose Detection은 피트니스 트래커(반복 횟수 계산, 자세 확인), AR 애플리케이션(아바타가 움직임을 모방) 및 스포츠 분석에 사용됩니다. 속도는 사람 수에 따라 프레임당 10~30ms입니다.
Object Tracking — 프레임 간 추적 기능이 있는 ML Kit Object Detection은 Optical Flow 기반 트래커를 사용합니다. 객체가 감지되면 트래커는 재감지 없이 추적을 계속하여 CPU/GPU를 절약합니다. 트래커가 객체를 놓친 경우(빠른 움직임, 폐색) ML Kit는 재감지를 시작합니다. Google(2025년)에 따르면 트래커는 시속 30km까지의 속도에서 95%의 프레임에서 객체를 유지합니다.
// 포즈 감지(인간 골격)
val poseDetector = PoseDetection.getClient(
PoseDetectorOptions.Builder()
.setDetectorMode(PoseDetectorOptions.STREAM_MODE)
.build()
)
poseDetector.process(inputImage)
.addOnSuccessListener { pose ->
pose.allPoseLandmarks.forEach { landmark ->
val type = landmark.landmarkType // 왼쪽_어깨, 오른쪽_팔꿈치...
val position = landmark.position3D
}
}
Selfie Segmentation — 이미지에서 사람을 분할(배경에서 사람 분리)하는 API입니다. 각 픽셀에 대한 신뢰 마스크를 반환합니다. Selfie Segmentation은 화상 통화, 사진 편집기 및 AR 애플리케이션에서 배경을 흐리게 하거나 교체하는 데 사용됩니다. 마스크는 원본 이미지 크기의 UInt8Array로 반환되며, 각 픽셀에는 0.0(배경)에서 1.0(사람)까지의 값이 포함됩니다.
Custom Model API — ML Kit 인터페이스를 통해 자체 TensorFlow Lite 모델을 로드하고 실행하는 기능입니다. ML Kit는 통합된 입출력 API(입력으로 ByteBuffer, 출력으로 FloatArray/TensorImage)를 제공합니다. 이를 통해 ML Kit의 장점(모델 관리, 이미지 처리, CameraX 통합)을 얼굴 인식, 객체 분류, NLP 등을 위한 커스텀 모델과 함께 활용할 수 있습니다.
모델 로드 — .tflite 파일을 assets/(Android) 또는 bundle(iOS)에 배치하고 CustomModelDownloadConditions 또는 Firebase Model Manager를 통해 로드합니다. 큰 모델(5MB 이상)을 다운로드하려면 Wi-Fi, 충전 중, 백그라운드와 같은 다운로드 조건을 사용하십시오. Google은 첫 사용 시점이 아닌 앱 첫 실행 시 모델을 다운로드할 것을 권장합니다.
// 커스텀 TFLite 모델 로드 중
val conditions = CustomModelDownloadConditions.Builder()
.requireWifi()
.build()
val remoteModel = CustomRemoteModel.Builder("my_model")
.setRemoteModelName("my_model_v2")
.build()
remoteModel.download(conditions)
.addOnSuccessListener { /* model ready */ }
.addOnFailureListener {
// assets에서 번들 모델 사용
}
커스텀 모델 최적화: 델리게이트 호환성과 함께 TFLite Converter를 사용하십시오. 최대 성능을 위해 모델을 양자화(INT8)하십시오. 이렇게 하면 모델 크기가 4배 감소하고 XNNPACK Delegate를 통해 추론이 2~3배 빨라집니다. ML Kit Custom Model API는 Dynamic Shape(batch = 1), Image Input(UInt8, Float32) 및 Tensor Output을 지원합니다.
자주 묻는 질문
ML Kit는 Android 및 iOS용 기성 ML 모델을 갖춘 Google SDK입니다. 텍스트 인식(OCR), 얼굴 감지, 바코드 스캔, 객체 감지, 포즈 감지, 번역 및 분할을 위한 API가 포함됩니다. 기기에서 작동하며 인터넷이 필요하지 않습니다. Google Play Services(Android) 또는 CocoaPods(iOS)를 통해 최소한의 종속성(한 줄)으로 연결됩니다.
ML Kit는 특정 작업(텍스트, 얼굴, 코드)을 위한 기성 API를 갖춘 고수준 SDK입니다. TensorFlow Lite는 모든 TFLite 모델을 실행하기 위한 저수준 런타임입니다. ML Kit는 내부적으로 TFLite를 포함하지만 표준 작업을 위한 기성 코드와 최적화를 제공합니다. 텍스트 인식이 필요하면 ML Kit(5줄 코드), 자체 신경망이 있으면 TFLite(20줄 이상)를 사용하십시오.
네, 모든 주요 ML Kit API(Text Recognition, Face Detection, Barcode Scanning, Object Detection, Pose Detection, Image Labeling)는 초기 모델 다운로드 후 인터넷 연결 없이 기기에서 완전히 작동합니다. Cloud API(Cloud Vision, Natural Language)는 선택 사항이며 인터넷이 필요합니다. 다운로드 모델의 경우 인터넷은 첫 번째 모델 다운로드 시에만 필요합니다.
네, ML Kit는 CocoaPods 또는 Swift Package Manager를 통해 iOS를 완전히 지원합니다. API는 Android 버전과 유사합니다. iOS의 경우 ML Kit는 내부적으로 Vision Framework와 Core ML을 사용하며, 모델은 Apple Neural Engine(A12+)에서 실행됩니다. iOS의 ML Kit는 UIImage, CVPixelBuffer 및 CMSampleBuffer와 함께 작동합니다. iOS 12+ 및 Xcode 15+를 지원합니다.
네, ML Kit 온디바이스 API는 완전히 무료이며 요청 수에 제한이 없습니다. Cloud API(Firebase를 통해)는 무료 한도를 초과하면 유료입니다(월 $200 무료). 온디바이스 모델에는 Firebase 계정이 필요하지 않으며, ML Kit는 Google Play Services를 통해 독립적으로 작동합니다. 상용 애플리케이션의 경우 온디바이스 ML Kit는 운영 비용이 0인 안전한 선택입니다.
요약
턴키 방식의 모바일 애플리케이션을 개발해 드립니다
IT Sectr는 2017년부터 스타트업과 기업을 위한 iOS 및 Android 애플리케이션을 만듭니다. 저희가 상담해 드리고 최적의 솔루션을 제안하겠습니다.