Назад к блогу
1 марта 2024
20 минут чтения
iOS
AI
Swift
Разработка

Интеграция AI в iOS-приложения: практическое руководство

Максим Артемов

Максим Артемов

iOS-разработчик, AI-интегратор

Интеграция AI в iOS-приложения

Искусственный интеллект стал неотъемлемой частью современных мобильных приложений. В этой статье я расскажу, как интегрировать AI-функциональность в iOS-приложения, используя различные инструменты и фреймворки Apple.

Введение в AI для iOS-разработчиков

Apple предоставляет несколько мощных фреймворков для работы с искусственным интеллектом и машинным обучением:

  • Core ML — основной фреймворк для интеграции моделей машинного обучения
  • Create ML — инструмент для создания и обучения моделей без глубоких знаний в ML
  • Vision — фреймворк для компьютерного зрения и обработки изображений
  • Natural Language — для обработки естественного языка
  • Speech — для распознавания и синтеза речи

Эти инструменты позволяют добавить в приложение такие функции, как распознавание объектов на фото, классификация изображений, анализ текста, распознавание речи и многое другое.

Core ML: основа AI в iOS

Core ML — это фреймворк, который позволяет интегрировать предварительно обученные модели машинного обучения в ваше iOS-приложение. Он оптимизирован для работы на устройствах Apple и обеспечивает высокую производительность при минимальном энергопотреблении.

Интеграция модели Core ML

Вот базовый пример интеграции модели классификации изображений:


import UIKit
import CoreML
import Vision

class ImageClassifierViewController: UIViewController {
    @IBOutlet weak var imageView: UIImageView!
    @IBOutlet weak var resultLabel: UILabel!
    
    // Загрузка модели
    lazy var classificationRequest: VNCoreMLRequest = {
        do {
            let model = try VNCoreMLModel(for: MobileNetV2().model)
            return VNCoreMLRequest(model: model, completionHandler: handleClassification)
        } catch {
            fatalError("Failed to load Core ML model: \(error)")
        }
    }()
    
    override func viewDidLoad() {
        super.viewDidLoad()
    }
    
    @IBAction func classifyImage(_ sender: Any) {
        guard let image = imageView.image else { return }
        
        // Преобразование UIImage в CIImage
        guard let ciImage = CIImage(image: image) else {
            fatalError("Could not convert UIImage to CIImage")
        }
        
        // Выполнение запроса классификации
        let handler = VNImageRequestHandler(ciImage: ciImage)
        do {
            try handler.perform([classificationRequest])
        } catch {
            print("Failed to perform classification: \(error)")
        }
    }
    
    func handleClassification(request: VNRequest, error: Error?) {
        guard let results = request.results as? [VNClassificationObservation],
              let topResult = results.first else {
            resultLabel.text = "Не удалось классифицировать изображение"
            return
        }
        
        DispatchQueue.main.async {
            self.resultLabel.text = "Это \(topResult.identifier) с уверенностью \(Int(topResult.confidence * 100))%"
        }
    }
}

Create ML: создание собственных моделей

Create ML позволяет создавать собственные модели машинного обучения без глубоких знаний в этой области. Вы можете обучать модели прямо в Xcode или использовать отдельное приложение Create ML.

Вот пример создания простой модели классификации изображений с помощью Create ML:


import CreateML
import Foundation

// Создание модели классификации изображений
let imageClassifier = try MLImageClassifier(trainingData: .labeledDirectories(
   at: URL(fileURLWithPath: "/path/to/training/data")
))

// Оценка модели
let evaluationMetrics = imageClassifier.evaluation(on: .labeledDirectories(
   at: URL(fileURLWithPath: "/path/to/test/data")
))

print("Accuracy: \(evaluationMetrics.classificationError)")

// Сохранение модели
try imageClassifier.write(to: URL(fileURLWithPath: "/path/to/save/model.mlmodel"))

Vision: компьютерное зрение

Фреймворк Vision предоставляет инструменты для работы с изображениями и видео. Он позволяет распознавать лица, определять текст, находить прямоугольники и другие объекты на изображениях.

Распознавание текста на изображении


import Vision
import UIKit

func recognizeText(in image: UIImage) {
    guard let cgImage = image.cgImage else { return }
    
    // Создание запроса на распознавание текста
    let request = VNRecognizeTextRequest { (request, error) in
        guard let observations = request.results as? [VNRecognizedTextObservation],
              error == nil else {
            print("Ошибка распознавания текста: \(error?.localizedDescription ?? "Unknown error")")
            return
        }
        
        // Обработка результатов
        let recognizedText = observations.compactMap { observation in
            observation.topCandidates(1).first?.string
        }.joined(separator: "\n")
        
        print("Распознанный текст: \(recognizedText)")
    }
    
    // Настройка запроса
    request.recognitionLevel = .accurate
    
    // Выполнение запроса
    let handler = VNImageRequestHandler(cgImage: cgImage, options: [:])
    do {
        try handler.perform([request])
    } catch {
        print("Ошибка выполнения запроса: \(error)")
    }
}

Natural Language: обработка текста

Фреймворк Natural Language предоставляет инструменты для анализа и обработки текста. Он позволяет определять язык текста, выделять именованные сущности, анализировать тональность и многое другое.

Анализ тональности текста


import NaturalLanguage
import UIKit

func analyzeSentiment(of text: String) -> String {
   let tagger = NLTagger(tagSchemes: [.sentimentScore])
   tagger.string = text
   
   let (sentiment, _) = tagger.tag(at: text.startIndex, unit: .paragraph, scheme: .sentimentScore)
   
   guard let sentimentScore = sentiment?.rawValue, let score = Double(sentimentScore) else {
       return "Не удалось определить тональность"
   }
   
   if score < -0.3 {
       return "Негативная тональность"
   } else if score > 0.3 {
       return "Позитивная тональность"
   } else {
       return "Нейтральная тональность"
   }
}

Интеграция с внешними AI-сервисами

Помимо встроенных инструментов Apple, вы можете интегрировать в свое приложение внешние AI-сервисы, такие как OpenAI, Google Cloud AI или Azure Cognitive Services.

Пример интеграции с OpenAI API


import Foundation

class OpenAIService {
   private let apiKey: String
   private let baseURL = "https://api.openai.com/v1/chat/completions"
   
   init(apiKey: String) {
       self.apiKey = apiKey
   }
   
   func generateText(prompt: String, completion: @escaping (Result<String, Error>) -> Void) {
       // Создание запроса
       var request = URLRequest(url: URL(string: baseURL)!)
       request.httpMethod = "POST"
       request.addValue("Bearer \(apiKey)", forHTTPHeaderField: "Authorization")
       request.addValue("application/json", forHTTPHeaderField: "Content-Type")
       
       // Подготовка данных запроса
       let requestData: [String: Any] = [
           "model": "gpt-4o",
           "messages": [
               ["role": "system", "content": "You are a helpful assistant."],
               ["role": "user", "content": prompt]
           ],
           "max_tokens": 500
       ]
       
       do {
           request.httpBody = try JSONSerialization.data(withJSONObject: requestData)
       } catch {
           completion(.failure(error))
           return
       }
       
       // Выполнение запроса
       let task = URLSession.shared.dataTask(with: request) { data, response, error in
           if let error = error {
               completion(.failure(error))
               return
           }
           
           guard let data = data else {
               completion(.failure(NSError(domain: "OpenAIService", code: 0, userInfo: [NSLocalizedDescriptionKey: "No data received"])))
               return
           }
           
           do {
               if let json = try JSONSerialization.jsonObject(with: data) as? [String: Any],
                  let choices = json["choices"] as? [[String: Any]],
                  let firstChoice = choices.first,
                  let message = firstChoice["message"] as? [String: Any],
                  let content = message["content"] as? String {
                   completion(.success(content))
               } else {
                   completion(.failure(NSError(domain: "OpenAIService", code: 1, userInfo: [NSLocalizedDescriptionKey: "Failed to parse response"])))
               }
           } catch {
               completion(.failure(error))
           }
       }
       
       task.resume()
   }
}

Практические примеры использования AI в iOS-приложениях

1. Умная фотогалерея

Создайте приложение, которое автоматически классифицирует фотографии пользователя по категориям (пейзажи, еда, люди и т.д.) с помощью модели Core ML.

2. Персональный ассистент

Разработайте приложение-ассистента, которое может отвечать на вопросы пользователя, используя интеграцию с OpenAI API или другими сервисами генерации текста.

3. Переводчик с распознаванием текста

Создайте приложение, которое распознает текст на изображении с помощью Vision, определяет язык с помощью Natural Language и переводит его с использованием внешнего API перевода.

Заключение

Интеграция AI в iOS-приложения открывает огромные возможности для создания умных и полезных функций. Apple предоставляет мощные инструменты, которые позволяют реализовать большинство сценариев использования AI прямо на устройстве, без необходимости отправлять данные на сервер.

Начните с простых примеров, используя готовые модели Core ML, а затем переходите к более сложным сценариям с использованием Create ML для создания собственных моделей или интеграции с внешними AI-сервисами.

Не забывайте о конфиденциальности пользовательских данных и старайтесь использовать модели, работающие на устройстве, когда это возможно. Это не только защитит данные пользователей, но и обеспечит работу вашего приложения даже при отсутствии интернет-соединения.

Поделиться статьей