1. מבוא
ML Kit הוא SDK לנייד שמביא את המומחיות של Google בתחום הלמידה מחישובים אל אפליקציות ל-Android ול-iOS בחבילה עוצמתית ונוחה לשימוש. לא משנה אם אתם חדשים בתחום של למידת מכונה או מנוסים בו, תוכלו להטמיע בקלות את הפונקציונליות שאתם צריכים בכמה שורות קוד בלבד. לא צריך ידע מעמיק ברשתות עצביות או באופטימיזציה של מודלים כדי להתחיל.
איך זה עובד
ML Kit מאפשר לכם להחיל בקלות טכניקות של למידת מכונה באפליקציות שלכם, על ידי שילוב של טכנולוגיות למידת מכונה של Google, כמו Mobile Vision ו-TensorFlow Lite, ב-SDK יחיד. בין אם אתם צריכים את העוצמה של היכולות בזמן אמת של מודלים במכשיר של Mobile Vision, או את הגמישות של מודלים מותאמים אישית של סיווג תמונות ב-TensorFlow Lite, ML Kit מאפשר לכם לעשות זאת בכמה שורות קוד בלבד.
ב-Codelab הזה תלמדו איך ליצור אפליקציה ל-iOS משלכם שיכולה לזהות באופן אוטומטי טקסט ותווי פנים בתמונה.
מה תפַתחו
ב-Codelab הזה תלמדו איך לפתח אפליקציה ל-iOS באמצעות ML Kit. האפליקציה שלכם:
|
|
מה תלמדו
- איך משתמשים ב-ML Kit SDK כדי להוסיף בקלות יכולות מתקדמות של למידת מכונה, כמו זיהוי טקסט וזיהוי תכונות של פנים, לכל אפליקציה ל-iOS
מה תצטרכו
- גרסה עדכנית של Xcode (גרסה 12.4 ואילך)
- iOS Simulator או מכשיר iOS פיזי עם iOS בגרסה 10.0 ומעלה
- ML Kit תומך רק בשתי הארכיטקטורות הבאות של 64 ביט:
x86_64ו-arm64 - קוד לדוגמה
- ידע בסיסי בפיתוח ל-iOS ב-Swift
- הבנה בסיסית של מודלים של למידת מכונה
ה-Codelab הזה מתמקד ב-ML Kit. מושגים ובלוקים של קוד שלא רלוונטיים מוצגים בקצרה, ואתם יכולים פשוט להעתיק ולהדביק אותם.
2. תהליך ההגדרה
הורדת הקוד
כדי להוריד את כל הקוד של ה-Codelab הזה, לוחצים על הקישור הבא:
מחלצים את קובץ ה-ZIP שהורד. תיקיית הבסיס (mlkit-ios-codelab) תיווצר עם כל המשאבים שתצטרכו. ב-codelab הזה, תצטרכו רק את המשאבים בספריית המשנה vision.
ספריית המשנה vision במאגר mlkit-ios-codelab מכילה שתי ספריות:
-
starter – קוד התחלתי שעליו מתבססים ב-Codelab הזה. -
final – קוד מלא של אפליקציית הדוגמה המוגמרת.
הוספת יחסי התלות של ML Kit באמצעות CocoaPods
משתמשים ב-CocoaPods כדי להוסיף את יחסי התלות של ML Kit לאפליקציה. אם CocoaPods לא מותקן במחשב, אפשר למצוא את הוראות ההתקנה כאן. אחרי ההתקנה, פותחים את Podfile בכלי העריכה המועדף ומוסיפים את ML Kit כתלות:
Podfile
platform :ios, '10.0'
use_frameworks!
pod 'GoogleMLKit/FaceDetection'
pod 'GoogleMLKit/TextRecognition'
target 'MLKit-codelab' do
end
התקנת ML Kit Cocoa Pods
כדי לוודא שכל קשרי התלות זמינים לאפליקציה, צריך להשתמש בשורת הפקודה כדי להתקין את ה-Cocoa Pods של ML Kit.
שורת פקודה
# Make sure you are in the root of your app
pod install
xed .
3. הפעלת האפליקציה לתחילת הדרך
עכשיו אפשר להפעיל את האפליקציה בפעם הראשונה. לוחצים על
Run ב-Xcode כדי לקמפל את האפליקציה ולהריץ אותה בסימולטור של iOS.
האפליקציה אמורה להיפתח בסימולטור. בשלב הזה אמור להופיע פריסת תוכן בסיסית עם כלי לבחירת תמונות, שמאפשר לבחור בין 2 תמונות. בקטע הבא, מוסיפים לאפליקציה זיהוי טקסט כדי לזהות טקסט בתמונות.
4. הוספת זיהוי טקסט במכשיר
בשלב הזה, נוסיף לאפליקציה פונקציונליות לזיהוי טקסט בתמונות.
ייבוא המודול MLVision
בודקים שהייבוא הבא קיים בכיתה ViewController.
ViewController.swift
import MLKit
יצירת VisionTextRecognizer
מוסיפים את המאפיינים הבאים של lazy ל-class ViewController.
ViewController.swift
private lazy var textRecognizer = TextRecognizer.textRecognizer()
הגדרה והפעלה של זיהוי טקסט בתמונה במכשיר
מוסיפים את הטקסט הבא לשיטה runTextRecognition של המחלקה ViewController:
ViewController.swift
func runTextRecognition(with image: UIImage) {
let visionImage = VisionImage(image: image)
textRecognizer.process(visionImage) { features, error in
self.processResult(from: features, error: error)
}
}
הקוד שלמעלה מגדיר את הגלאי לזיהוי טקסט ומפעיל את הפונקציה processResult(from:, error:) עם התגובה.
עיבוד התגובה של זיהוי הטקסט
מוסיפים את הקוד הבא ל- processResult בכיתה ViewController כדי לנתח את התוצאות ולהציג אותן באפליקציה.
ViewController.swift
func processResult(from text: Text?, error: Error?) {
removeDetectionAnnotations()
guard error == nil, let text = text else {
let errorString = error?.localizedDescription ?? Constants.detectionNoResultsMessage
print("Text recognizer failed with error: \(errorString)")
return
}
let transform = self.transformMatrix()
// Blocks.
for block in text.blocks {
drawFrame(block.frame, in: .purple, transform: transform)
// Lines.
for line in block.lines {
drawFrame(line.frame, in: .orange, transform: transform)
// Elements.
for element in line.elements {
drawFrame(element.frame, in: .green, transform: transform)
let transformedRect = element.frame.applying(transform)
let label = UILabel(frame: transformedRect)
label.text = element.text
label.adjustsFontSizeToFitWidth = true
self.annotationOverlayView.addSubview(label)
}
}
}
}
הרצת האפליקציה בסימולטור
עכשיו לוחצים על
Run (הפעלה) ב-Xcode. אחרי שהאפליקציה נטענת, מוודאים ש-Image 1 נבחר בכלי לבחירת תמונות ולוחצים על הלחצן Find Text.
האפליקציה שלכם אמורה להיראות עכשיו כמו בתמונה שלמטה, עם תוצאות זיהוי הטקסט ותיבות התוחמות שמוצגות מעל התמונה המקורית.

צילום: קאי שרייבר (Kai Schreiber) / Wikimedia Commons / CC BY-SA 2.0
ברכות, הרגע הוספתם לאפליקציה שלכם זיהוי טקסט במכשיר באמצעות ML Kit! זיהוי טקסט במכשיר מתאים למקרים רבים, כי הוא פועל גם כשהאפליקציה לא מחוברת לאינטרנט, והוא מהיר מספיק לשימוש בתמונות סטילס וגם בפריים של סרטונים בשידור חי.
5. הוספת זיהוי קווי מתאר של הפנים במכשיר
בשלב הזה, נוסיף לאפליקציה פונקציונליות שתאפשר לזהות את קווי המתאר של הפנים בתמונות.
יצירת FaceDetector
מוסיפים את המאפיינים הבאים של lazy ל-class ViewController.
ViewController.swift
private lazy var faceDetectorOption: FaceDetectorOptions = {
let option = FaceDetectorOptions()
option.contourMode = .all
option.performanceMode = .fast
return option
}()
private lazy var faceDetector = FaceDetector.faceDetector(options: faceDetectorOption)
הגדרה והרצה של זיהוי קווי מתאר של פנים בתמונה במכשיר
מוסיפים את הטקסט הבא לשיטה runFaceContourDetection של המחלקה ViewController:
ViewController.swift
func runFaceContourDetection(with image: UIImage) {
let visionImage = VisionImage(image: image)
faceDetector.process(visionImage) { features, error in
self.processResult(from: features, error: error)
}
}
הקוד שלמעלה מגדיר את הגלאי לזיהוי טקסט ומפעיל את הפונקציה processResult(from:, error:) עם התגובה.
עיבוד התגובה של גלאי הפנים
מוסיפים את הקוד הבא ל- processResult בכיתה ViewController כדי לנתח את התוצאות ולהציג אותן באפליקציה.
ViewController.swift
func processResult(from faces: [Face]?, error: Error?) {
removeDetectionAnnotations()
guard let faces = faces else {
return
}
for feature in faces {
let transform = self.transformMatrix()
let transformedRect = feature.frame.applying(transform)
UIUtilities.addRectangle(
transformedRect,
to: self.annotationOverlayView,
color: UIColor.green
)
self.addContours(forFace: feature, transform: transform)
}
}
לבסוף, מוסיפים את שיטת העזר addContours במחלקה ViewController כדי לשרטט את נקודות המתאר.
ViewController.swift
private func addContours(forFace face: Face, transform: CGAffineTransform) {
// Face
if let faceContour = face.contour(ofType: .face) {
for point in faceContour.points {
drawPoint(point, in: .blue, transform: transform)
}
}
// Eyebrows
if let topLeftEyebrowContour = face.contour(ofType: .leftEyebrowTop) {
for point in topLeftEyebrowContour.points {
drawPoint(point, in: .orange, transform: transform)
}
}
if let bottomLeftEyebrowContour = face.contour(ofType: .leftEyebrowBottom) {
for point in bottomLeftEyebrowContour.points {
drawPoint(point, in: .orange, transform: transform)
}
}
if let topRightEyebrowContour = face.contour(ofType: .rightEyebrowTop) {
for point in topRightEyebrowContour.points {
drawPoint(point, in: .orange, transform: transform)
}
}
if let bottomRightEyebrowContour = face.contour(ofType: .rightEyebrowBottom) {
for point in bottomRightEyebrowContour.points {
drawPoint(point, in: .orange, transform: transform)
}
}
// Eyes
if let leftEyeContour = face.contour(ofType: .leftEye) {
for point in leftEyeContour.points {
drawPoint(point, in: .cyan, transform: transform)
}
}
if let rightEyeContour = face.contour(ofType: .rightEye) {
for point in rightEyeContour.points {
drawPoint(point, in: .cyan, transform: transform)
}
}
// Lips
if let topUpperLipContour = face.contour(ofType: .upperLipTop) {
for point in topUpperLipContour.points {
drawPoint(point, in: .red, transform: transform)
}
}
if let bottomUpperLipContour = face.contour(ofType: .upperLipBottom) {
for point in bottomUpperLipContour.points {
drawPoint(point, in: .red, transform: transform)
}
}
if let topLowerLipContour = face.contour(ofType: .lowerLipTop) {
for point in topLowerLipContour.points {
drawPoint(point, in: .red, transform: transform)
}
}
if let bottomLowerLipContour = face.contour(ofType: .lowerLipBottom) {
for point in bottomLowerLipContour.points {
drawPoint(point, in: .red, transform: transform)
}
}
// Nose
if let noseBridgeContour = face.contour(ofType: .noseBridge) {
for point in noseBridgeContour.points {
drawPoint(point, in: .yellow, transform: transform)
}
}
if let noseBottomContour = face.contour(ofType: .noseBottom) {
for point in noseBottomContour.points {
drawPoint(point, in: .yellow, transform: transform)
}
}
}
הרצת האפליקציה בסימולטור
עכשיו לוחצים על
Run (הפעלה) ב-Xcode. אחרי שהאפליקציה נטענת, מוודאים ש-Image 2 נבחר בכלי לבחירת תמונות ולוחצים על הלחצן Find Face Contour. האפליקציה אמורה להיראות כמו בתמונה שלמטה, עם קווי המתאר של הפנים של גרייס הופר כנקודות שמוצגות על גבי התמונה המקורית.

מזל טוב, הרגע הוספת לאפליקציה שלך זיהוי קווי מתאר של פנים במכשיר באמצעות ML Kit. זיהוי קווי מתאר של פנים במכשיר מתאים למקרים רבים כי הוא פועל גם כשהאפליקציה לא מחוברת לאינטרנט, והוא מהיר מספיק לשימוש בתמונות סטילס וגם בפריימים של סרטונים בשידור חי.
6. מעולה!
השתמשתם ב-ML Kit כדי להוסיף בקלות יכולות מתקדמות של למידת מכונה לאפליקציה.
מה נכלל
- איך מוסיפים את ML Kit לאפליקציית iOS
- איך משתמשים בזיהוי טקסט במכשיר ב-ML Kit כדי למצוא טקסט בתמונות
- איך משתמשים בזיהוי פנים במכשיר ב-ML Kit כדי לזהות תכונות פנים בתמונות
השלבים הבאים
- שימוש ב-ML Kit באפליקציית iOS משלכם.
מידע נוסף
- https://g.co/mlkit

