تصنيف الصور باستخدام حزمة تعلّم الآلة على نظام التشغيل iOS
تنظيم صفحاتك في مجموعات
يمكنك حفظ المحتوى وتصنيفه حسب إعداداتك المفضّلة.
يمكنك استخدام حزمة تعلّم الآلة لتصنيف العناصر التي يتم التعرّف عليها في صورة. يتناسب النموذج الافتراضي المقدم مع
تتيح حزمة تعلّم الآلة استخدام أكثر من 400 تصنيف مختلف.
جرّبه الآن
يمكنك تجربة نموذج التطبيق من أجل
يمكنك الاطّلاع على مثال حول استخدام واجهة برمجة التطبيقات هذه.
قبل البدء
تضمين مجموعات ML Kit التالية في Podfile:
pod 'GoogleMLKit/ImageLabeling', '8.0.0'
بعد تثبيت لوحات مشروعك أو تحديثها، افتح مشروع Xcode باستخدام
.xcworkspace تتوفّر حزمة تعلّم الآلة في الإصدار 12.4 من Xcode أو الإصدارات الأحدث.
أنت الآن جاهز لتسمية الصور.
1. تحضير صورة الإدخال
إنشاء عنصر VisionImage باستخدام UIImage أو
CMSampleBuffer
إذا كنت تستخدم UIImage، يُرجى اتّباع الخطوات التالية:
أنشئ كائن VisionImage باستخدام UIImage. تأكَّد من تحديد قيمة .orientation الصحيحة.
Swift
let image = VisionImage(image: UIImage)
visionImage.orientation = image.imageOrientation
لتصنيف العناصر في صورة، مرِّر كائن VisionImage إلى
طريقة processImage() لـ ImageLabeler.
أولاً، عليك الحصول على مثيل لـ ImageLabeler.
Swift
letlabeler=ImageLabeler.imageLabeler()// Or, to set the minimum confidence required:// let options = ImageLabelerOptions()// options.confidenceThreshold = 0.7// let labeler = ImageLabeler.imageLabeler(options: options)
Objective-C
MLKImageLabeler*labeler=[MLKImageLabelerimageLabeler];// Or, to set the minimum confidence required:// MLKImageLabelerOptions *options =// [[MLKImageLabelerOptions alloc] init];// options.confidenceThreshold = 0.7;// MLKImageLabeler *labeler =// [MLKImageLabeler imageLabelerWithOptions:options];
إذا نجح تصنيف الصور، فسيتلقّى معالج الإكمال صفيفًا من
ImageLabel عناصر ويمثل كل كائن ImageLabel عنصرًا
المحدد في الصورة. يتوافق النموذج الأساسي مع أكثر من 400 تصنيف مختلف.
يمكنك الحصول على وصف نصي لكل تصنيف، وفهرسته بين جميع التصنيفات المتوافقة مع
والنموذج ونتيجة الثقة للمطابقة. على سبيل المثال:
إذا أردت تصنيف الصور في تطبيق في الوقت الفعلي، فاتبع هذه
الإرشادات لتحقيق أفضل معدلات عرض الإطارات:
لمعالجة إطارات الفيديوهات، استخدِم واجهة برمجة التطبيقات المتزامنة results(in:) الخاصة بأداة تصنيف الصور. اتصل
لهذه الطريقة من AVCaptureVideoDataOutputSampleBufferDelegatecaptureOutput(_, didOutput:from:) للحصول على النتائج من الفيديو المحدّد بشكل متزامن
الإطار. إبقاء
جهاز AVCaptureVideoDataOutputalwaysDiscardsLateVideoFrames كـ true لمنع المكالمات الواردة إلى مصنِّف الصور. إذا كانت تجربة
يصبح إطار الفيديو متاحًا أثناء تشغيل أداة تصنيف الصور، وسيتم إسقاطه.
إذا كنت تستخدم مخرجات أداة تصنيف الصور لتراكب الرسومات على
الصورة المدخلة، والحصول أولاً على النتيجة من ML Kit، ثم عرض الصورة
وتراكبها في خطوة واحدة. ومن خلال القيام بذلك، يمكنك العرض على سطح الشاشة
مرة واحدة فقط لكل إطار إدخال تمت معالجته. راجع updatePreviewOverlayViewWithLastFrame
في عينة البدء السريع لأدوات تعلُّم الآلة كمثال.
تاريخ التعديل الأخير: 2025-08-29 (حسب التوقيت العالمي المتفَّق عليه)
[null,null,["تاريخ التعديل الأخير: 2025-08-29 (حسب التوقيت العالمي المتفَّق عليه)"],[[["\u003cp\u003eML Kit's image labeling API lets you identify objects in images using a pre-trained model that recognizes over 400 labels.\u003c/p\u003e\n"],["\u003cp\u003eTo use this API, you need to include the \u003ccode\u003eGoogleMLKit/ImageLabeling\u003c/code\u003e pod, create a \u003ccode\u003eVisionImage\u003c/code\u003e object from your image, and then process it with an \u003ccode\u003eImageLabeler\u003c/code\u003e instance.\u003c/p\u003e\n"],["\u003cp\u003eResults are provided as an array of \u003ccode\u003eImageLabel\u003c/code\u003e objects, each containing the label's text, confidence score, and index.\u003c/p\u003e\n"],["\u003cp\u003eFor real-time applications, leverage the synchronous \u003ccode\u003eresults(in:)\u003c/code\u003e API and manage video frame processing efficiently to maintain optimal frame rates.\u003c/p\u003e\n"]]],["ML Kit allows image labeling using a default model with 400+ labels. To begin, include the `GoogleMLKit/ImageLabeling` pod in your Podfile and open the `.xcworkspace` in Xcode. Input images are prepared using `VisionImage` objects, created from either `UIImage` or `CMSampleBuffer`. An `ImageLabeler` instance processes the image, returning `ImageLabel` objects with text, confidence, and index. For real-time performance, use the synchronous `results(in:)` API with video frames, managing the frame rate.\n"],null,["You can use ML Kit to label objects recognized in an image. The default model provided with\nML Kit supports 400+ different labels.\n\n\u003cbr /\u003e\n\n| **Note:** ML Kit iOS APIs only run on 64-bit devices. If you build your app with 32-bit support, check the device's architecture before using this API.\n\nTry it out\n\n- Play around with [the sample app](https://github.com/googlesamples/mlkit/tree/master/ios/quickstarts/vision) to see an example usage of this API.\n\nBefore you begin\n\n1. Include the following ML Kit pods in your Podfile: \n\n ```\n pod 'GoogleMLKit/ImageLabeling', '8.0.0'\n ```\n2. After you install or update your project's Pods, open your Xcode project using its `.xcworkspace`. ML Kit is supported in Xcode version 12.4 or greater.\n\nNow you are ready to label images.\n\n1. Prepare the input image\n\nCreate a [`VisionImage`](/ml-kit/reference/swift/mlkitvision/api/reference/Classes/VisionImage) object using a `UIImage` or a\n`CMSampleBuffer`.\n\nIf you use a `UIImage`, follow these steps:\n\n- Create a [`VisionImage`](/ml-kit/reference/swift/mlkitvision/api/reference/Classes/VisionImage) object with the `UIImage`. Make sure to specify the correct `.orientation`. \n\n Swift \n\n ```text\n let image = VisionImage(image: UIImage)\n visionImage.orientation = image.imageOrientation\n ```\n\n Objective-C \n\n ```objective-c\n MLKVisionImage *visionImage = [[MLKVisionImage alloc] initWithImage:image];\n visionImage.orientation = image.imageOrientation;\n ```\n\nIf you use a `CMSampleBuffer`, follow these steps:\n\n- Specify the orientation of the image data contained in the\n `CMSampleBuffer`.\n\n To get the image orientation: \n\n Swift \n\n ```gdscript\n func imageOrientation(\n deviceOrientation: UIDeviceOrientation,\n cameraPosition: AVCaptureDevice.Position\n ) -\u003e UIImage.Orientation {\n switch deviceOrientation {\n case .portrait:\n return cameraPosition == .front ? .leftMirrored : .right\n case .landscapeLeft:\n return cameraPosition == .front ? .downMirrored : .up\n case .portraitUpsideDown:\n return cameraPosition == .front ? .rightMirrored : .left\n case .landscapeRight:\n return cameraPosition == .front ? .upMirrored : .down\n case .faceDown, .faceUp, .unknown:\n return .up\n }\n }\n \n ```\n\n Objective-C \n\n ```css+lasso\n - (UIImageOrientation)\n imageOrientationFromDeviceOrientation:(UIDeviceOrientation)deviceOrientation\n cameraPosition:(AVCaptureDevicePosition)cameraPosition {\n switch (deviceOrientation) {\n case UIDeviceOrientationPortrait:\n return cameraPosition == AVCaptureDevicePositionFront ? UIImageOrientationLeftMirrored\n : UIImageOrientationRight;\n\n case UIDeviceOrientationLandscapeLeft:\n return cameraPosition == AVCaptureDevicePositionFront ? UIImageOrientationDownMirrored\n : UIImageOrientationUp;\n case UIDeviceOrientationPortraitUpsideDown:\n return cameraPosition == AVCaptureDevicePositionFront ? UIImageOrientationRightMirrored\n : UIImageOrientationLeft;\n case UIDeviceOrientationLandscapeRight:\n return cameraPosition == AVCaptureDevicePositionFront ? UIImageOrientationUpMirrored\n : UIImageOrientationDown;\n case UIDeviceOrientationUnknown:\n case UIDeviceOrientationFaceUp:\n case UIDeviceOrientationFaceDown:\n return UIImageOrientationUp;\n }\n }\n \n ```\n- Create a [`VisionImage`](/ml-kit/reference/swift/mlkitvision/api/reference/Classes/VisionImage) object using the `CMSampleBuffer` object and orientation: \n\n Swift \n\n ```povray\n let image = VisionImage(buffer: sampleBuffer)\n image.orientation = imageOrientation(\n deviceOrientation: UIDevice.current.orientation,\n cameraPosition: cameraPosition)\n ```\n\n Objective-C \n\n ```objective-c\n MLKVisionImage *image = [[MLKVisionImage alloc] initWithBuffer:sampleBuffer];\n image.orientation =\n [self imageOrientationFromDeviceOrientation:UIDevice.currentDevice.orientation\n cameraPosition:cameraPosition];\n ```\n\n2. Configure and run the image labeler To label objects in an image, pass the `VisionImage` object to the `ImageLabeler`'s `processImage()` method.\n\n\u003cbr /\u003e\n\n1. First, get an instance of `ImageLabeler`.\n\nSwift \n\n```swift\nlet labeler = ImageLabeler.imageLabeler()\n\n// Or, to set the minimum confidence required:\n// let options = ImageLabelerOptions()\n// options.confidenceThreshold = 0.7\n// let labeler = ImageLabeler.imageLabeler(options: options)\n```\n\nObjective-C \n\n```objective-c\nMLKImageLabeler *labeler = [MLKImageLabeler imageLabeler];\n\n// Or, to set the minimum confidence required:\n// MLKImageLabelerOptions *options =\n// [[MLKImageLabelerOptions alloc] init];\n// options.confidenceThreshold = 0.7;\n// MLKImageLabeler *labeler =\n// [MLKImageLabeler imageLabelerWithOptions:options];\n```\n\n1. Then, pass the image to the `processImage()` method:\n\nSwift \n\n```swift\nlabeler.process(image) { labels, error in\n guard error == nil, let labels = labels else { return }\n\n // Task succeeded.\n // ...\n}\n```\n\nObjective-C \n\n```objective-c\n[labeler processImage:image\ncompletion:^(NSArray *_Nullable labels,\n NSError *_Nullable error) {\n if (error != nil) { return; }\n\n // Task succeeded.\n // ...\n}];\n```\n\n3. Get information about labeled objects\n\nIf image labeling succeeds, the completion handler receives an array of\n`ImageLabel` objects. Each `ImageLabel` object represents something that was\nlabeled in the image. The base model supports [400+ different labels](/ml-kit/vision/image-labeling/label-map).\nYou can get each label's text description, index among all labels supported by\nthe model, and the confidence score of the match. For example: \n\nSwift \n\n```swift\nfor label in labels {\n let labelText = label.text\n let confidence = label.confidence\n let index = label.index\n}\n```\n\nObjective-C \n\n```objective-c\nfor (MLKImageLabel *label in labels) {\n NSString *labelText = label.text;\n float confidence = label.confidence;\n NSInteger index = label.index;\n}\n```\n\nTips to improve real-time performance\n\nIf you want to label images in a real-time application, follow these\nguidelines to achieve the best framerates:\n\n- For processing video frames, use the `results(in:)` synchronous API of the image labeler. Call this method from the [`AVCaptureVideoDataOutputSampleBufferDelegate`](https://developer.apple.com/documentation/avfoundation/avcapturevideodataoutputsamplebufferdelegate)'s [`captureOutput(_, didOutput:from:)`](https://developer.apple.com/documentation/avfoundation/avcapturevideodataoutputsamplebufferdelegate/1385775-captureoutput) function to synchronously get results from the given video frame. Keep [`AVCaptureVideoDataOutput`](https://developer.apple.com/documentation/avfoundation/avcapturevideodataoutput)'s [`alwaysDiscardsLateVideoFrames`](https://developer.apple.com/documentation/avfoundation/avcapturevideodataoutput/1385780-alwaysdiscardslatevideoframes) as `true` to throttle calls to the image labeler. If a new video frame becomes available while the image labeler is running, it will be dropped.\n- If you use the output of the image labeler to overlay graphics on the input image, first get the result from ML Kit, then render the image and overlay in a single step. By doing so, you render to the display surface only once for each processed input frame. See the [updatePreviewOverlayViewWithLastFrame](https://github.com/googlesamples/mlkit/blob/master/ios/quickstarts/vision/VisionExample/CameraViewController.swift) in the ML Kit quickstart sample for an example."]]