Bạn có thể dùng Firebase ML để gắn nhãn cho các đối tượng được nhận dạng trong hình ảnh. Xem Overview (Tổng quan) để biết thông tin về API các tính năng AI mới.
Trước khi bắt đầu
-
Nếu bạn chưa thêm Firebase vào ứng dụng của mình, hãy thực hiện bằng cách làm theo hướng dẫn
các bước trong hướng dẫn bắt đầu sử dụng.
- Trong Xcode, khi dự án ứng dụng của bạn đang mở, hãy chuyển đến Tệp > Thêm gói.
- Khi được nhắc, hãy thêm kho lưu trữ SDK nền tảng Apple của Firebase:
- Chọn thư viện Firebase ML.
- Thêm cờ
-ObjC
vào mục Cờ trình liên kết khác trong chế độ cài đặt bản dựng của mục tiêu. - Khi hoàn tất, Xcode sẽ tự động bắt đầu phân giải và tải xuống các phần phụ thuộc trong nền.
- Trong ứng dụng của bạn, hãy nhập Firebase:
Swift
import FirebaseMLModelDownloader
Objective-C
@import FirebaseMLModelDownloader;
-
Nếu bạn chưa bật API trên đám mây cho dự án của mình, hãy bật bây giờ:
- Mở Firebase ML trang API của bảng điều khiển Firebase.
-
Nếu bạn chưa nâng cấp dự án của mình lên Gói giá linh hoạt, hãy nhấp vào Hãy nâng cấp để làm điều này. (Bạn sẽ chỉ được nhắc nâng cấp nếu không có trong Kế hoạch linh hoạt.)
Chỉ các dự án cấp Blaze mới có thể sử dụng API trên đám mây.
- Nếu bạn chưa bật API trên đám mây, hãy nhấp vào Bật API dựa trên đám mây API.
Sử dụng Trình quản lý gói Swift để cài đặt và quản lý các phần phụ thuộc Firebase.
https://github.com/firebase/firebase-ios-sdk.git
Tiếp theo, hãy thực hiện một số thiết lập trong ứng dụng:
Bây giờ, bạn đã sẵn sàng để gắn nhãn cho hình ảnh.
1. Chuẩn bị hình ảnh đầu vào
Tạo đối tượng VisionImage
bằng UIImage
hoặc
CMSampleBufferRef
.
Cách sử dụng UIImage
:
- Nếu cần, hãy xoay hình ảnh để
imageOrientation
là.up
. - Tạo đối tượng
VisionImage
bằng chế độ xoay chính xácUIImage
Không chỉ định bất kỳ siêu dữ liệu xoay vòng nào—mặc định bạn phải sử dụng giá trị.topLeft
.Swift
let image = VisionImage(image: uiImage)
Objective-C
FIRVisionImage *image = [[FIRVisionImage alloc] initWithImage:uiImage];
Cách sử dụng CMSampleBufferRef
:
-
Tạo đối tượng
VisionImageMetadata
chỉ định của dữ liệu hình ảnh chứa trong Vùng đệmCMSampleBufferRef
.Cách lấy hướng ảnh:
Swift
func imageOrientation( deviceOrientation: UIDeviceOrientation, cameraPosition: AVCaptureDevice.Position ) -> VisionDetectorImageOrientation { switch deviceOrientation { case .portrait: return cameraPosition == .front ? .leftTop : .rightTop case .landscapeLeft: return cameraPosition == .front ? .bottomLeft : .topLeft case .portraitUpsideDown: return cameraPosition == .front ? .rightBottom : .leftBottom case .landscapeRight: return cameraPosition == .front ? .topRight : .bottomRight case .faceDown, .faceUp, .unknown: return .leftTop } }
Objective-C
- (FIRVisionDetectorImageOrientation) imageOrientationFromDeviceOrientation:(UIDeviceOrientation)deviceOrientation cameraPosition:(AVCaptureDevicePosition)cameraPosition { switch (deviceOrientation) { case UIDeviceOrientationPortrait: if (cameraPosition == AVCaptureDevicePositionFront) { return FIRVisionDetectorImageOrientationLeftTop; } else { return FIRVisionDetectorImageOrientationRightTop; } case UIDeviceOrientationLandscapeLeft: if (cameraPosition == AVCaptureDevicePositionFront) { return FIRVisionDetectorImageOrientationBottomLeft; } else { return FIRVisionDetectorImageOrientationTopLeft; } case UIDeviceOrientationPortraitUpsideDown: if (cameraPosition == AVCaptureDevicePositionFront) { return FIRVisionDetectorImageOrientationRightBottom; } else { return FIRVisionDetectorImageOrientationLeftBottom; } case UIDeviceOrientationLandscapeRight: if (cameraPosition == AVCaptureDevicePositionFront) { return FIRVisionDetectorImageOrientationTopRight; } else { return FIRVisionDetectorImageOrientationBottomRight; } default: return FIRVisionDetectorImageOrientationTopLeft; } }
Sau đó, hãy tạo đối tượng siêu dữ liệu:
Swift
let cameraPosition = AVCaptureDevice.Position.back // Set to the capture device you used. let metadata = VisionImageMetadata() metadata.orientation = imageOrientation( deviceOrientation: UIDevice.current.orientation, cameraPosition: cameraPosition )
Objective-C
FIRVisionImageMetadata *metadata = [[FIRVisionImageMetadata alloc] init]; AVCaptureDevicePosition cameraPosition = AVCaptureDevicePositionBack; // Set to the capture device you used. metadata.orientation = [self imageOrientationFromDeviceOrientation:UIDevice.currentDevice.orientation cameraPosition:cameraPosition];
- Tạo đối tượng
VisionImage
bằng Đối tượngCMSampleBufferRef
và siêu dữ liệu xoay:Swift
let image = VisionImage(buffer: sampleBuffer) image.metadata = metadata
Objective-C
FIRVisionImage *image = [[FIRVisionImage alloc] initWithBuffer:sampleBuffer]; image.metadata = metadata;
2. Định cấu hình và chạy công cụ gắn nhãn hình ảnh
Để gắn nhãn cho các đối tượng trong hình ảnh, hãy truyền đối tượngVisionImage
vào phương thức
Phương thức processImage()
của VisionImageLabeler
.
Trước tiên, hãy lấy một thực thể của
VisionImageLabeler
:Swift
let labeler = Vision.vision().cloudImageLabeler() // Or, to set the minimum confidence required: // let options = VisionCloudImageLabelerOptions() // options.confidenceThreshold = 0.7 // let labeler = Vision.vision().cloudImageLabeler(options: options)
Objective-C
FIRVisionImageLabeler *labeler = [[FIRVision vision] cloudImageLabeler]; // Or, to set the minimum confidence required: // FIRVisionCloudImageLabelerOptions *options = // [[FIRVisionCloudImageLabelerOptions alloc] init]; // options.confidenceThreshold = 0.7; // FIRVisionImageLabeler *labeler = // [[FIRVision vision] cloudImageLabelerWithOptions:options];
Sau đó, hãy truyền hình ảnh đó vào phương thức
processImage()
:Swift
labeler.process(image) { labels, error in guard error == nil, let labels = labels else { return } // Task succeeded. // ... }
Objective-C
[labeler processImage:image completion:^(NSArray<FIRVisionImageLabel *> *_Nullable labels, NSError *_Nullable error) { if (error != nil) { return; } // Task succeeded. // ... }];
3. Nhận thông tin về đối tượng được gắn nhãn
Nếu gắn nhãn hình ảnh thành công, một mảngVisionImageLabel
các đối tượng này sẽ được chuyển đến trình xử lý hoàn thành. Từ mỗi đối tượng, bạn có thể lấy được
thông tin về đối tượng nhận diện được trong hình ảnh.
Ví dụ:
Swift
for label in labels {
let labelText = label.text
let entityId = label.entityID
let confidence = label.confidence
}
Objective-C
for (FIRVisionImageLabel *label in labels) {
NSString *labelText = label.text;
NSString *entityId = label.entityID;
NSNumber *confidence = label.confidence;
}
Các bước tiếp theo
- Trước khi triển khai phát hành công khai một ứng dụng sử dụng Cloud API, bạn nên thực hiện một số bước bổ sung nhằm ngăn chặn và giảm thiểu ảnh hưởng của việc truy cập trái phép API.