Содержание
swift — сбой приложения только для Iphone 6 и iPad в IOS 11 с использованием Vision & Machine Learning API
Я создал приложение для живого перевода, которое идентифицирует объект и переводит его с помощью камеры пользователя. Он отлично работает на моем iPhone 6s и не падает ни в одном из симуляторов, но когда я запускаю его на iPhone 6, он падает, как только я пытаюсь перейти к каналу камеры. Apple также говорит, что на iPad происходит сбой.
Некоторые устройства просто не поддерживают Vision API или что-то не так с моим кодом?
импорт UIKit импортировать AVKit импортировать видение переменная языка = "" переменная языка2 = "" класс ViewController: UIViewController, AVCaptureVideoDataOutputSampleBufferDelegate, AVCapturePhotoCaptureDelegate { @IBAction func screenshotB(_ отправитель: любой) { //скриншот экрана камеры } Скриншот @IBOutlet слабой версии BOutlet: UIButton! @IBOutlet слабая переменная swirlyGuy: UIActivityIndicatorView! @IBOutlet слабая переменная title1: UILabel! @IBOutlet слабая переменная settingsButtonOutlet: UIButton! @IBOutlet слабый var launchScreen: UIViewX! @IBOutlet слабая переменная launchScreenLogo: UIImageView! функция остановкиSwirlyGuy(){ swirlyGuy. stopAnimating() } пусть идентификаторLabel: UILabel = { пусть метка = UILabel() label.backgroundColor = UIColor (красный: 0, зеленый: 0, синий: 0, альфа: 0,4) label.textColor = .белый label.textAlignment = .центр label.translatesAutoresizingMaskIntoConstraints = false ярлык возврата }() Функция @IBAction prepareForUnwind (segue:UIStoryboardSegue) { } переопределить функцию viewDidLoad() { super.viewDidLoad() LaunchScreen.alpha = 1 LaunchScreenLogo.alpha = 1 swirlyGuy.startAnimating() // запускаем камеру пусть CaptureSession = AVCaptureSession() CaptureSession.sessionPreset = .hd4K3840x2160 охранять let captureDevice = AVCaptureDevice.default (для: .video) else { return } охрана пусть ввод = попробовать? AVCaptureDeviceInput (устройство: устройство захвата) еще { return } CaptureSession.addInput(ввод) CaptureSession.startRunning() let previewLayer = AVCaptureVideoPreviewLayer (сеанс: CaptureSession) view. layer.addSublayer (previewLayer) предварительный просмотрLayer.frame = вид.кадр пусть dataOutput = AVCaptureVideoDataOutput() dataOutput.setSampleBufferDelegate (я, очередь: DispatchQueue (метка: "videoQueue")) CaptureSession.addOutput(вывод данных) setupIdentifierConfidenceLabel() НастройкаКнопкаНастройки() setupTitle() настройкаSwirlyGuy() настройкаСкриншот() } переопределить func viewDidAppear (_ анимированный: Bool) { super.viewDidAppear(анимированный) UIView.animate(withDuration: 1.5) { self.launchScreen.alpha = 0 self.launchScreenLogo.alpha = 0 } } приватная функция файла setupSettingsButton() { view.addSubview (настройкиButtonOutlet) } fileprivate func setupScreenshot() { view.addSubview (скриншот BOutlet) } приватная функция файла setupSwirlyGuy() { view.addSubview (swirlyGuy) } функция приватного файла setupTitle() { view. addSubview (название1) } fileprivate func setupIdentifierConfidenceLabel() { view.addSubview (identifierLabel) идентификаторLabel.bottomAnchor.constraint(equalTo: view.bottomAnchor).isActive = true идентификаторLabel.leftAnchor.constraint(equalTo: view.leftAnchor).isActive = true идентификаторLabel.rightAnchor.constraint(equalTo: view.rightAnchor).isActive = true идентификаторLabel.heightAnchor.constraint(equalToConstant: 100).isActive = true идентификаторLabel.numberOfLines = 0 } func captureOutput(_ output: AVCaptureOutput, didOutput sampleBuffer: CMSampleBuffer, from connection: AVCaptureConnection) { // print("Камера смогла зафиксировать кадр:", Date()) защитите пусть pixelBuffer: CVPixelBuffer = CMSampleBufferGetImageBuffer (sampleBuffer) else { return } // модель охрана пусть модель = попробуй? VNCoreMLModel(для: Resnet50().model) иначе {return} пусть запрос = VNCoreMLRequest (модель: модель) { (finishedReq, ошибка) в //возможно, проверим ошибку // print(finishedReq. results) охранять пусть результаты = finishReq.results как? [VNClassificationObservation] иначе { return } охранять let firstObservation = results.first else { return } печать (firstObservation.identifier, firstObservation.confidence) пусть x = (firstObservation.confidence) пусть y = (x * 10000).rounded () / 10000 пусть z = (firstObservation.identifier) пусть s = (self.translateSpanish (object1: firstObservation.identifier)) пусть f = (self.translateFrench (object1: firstObservation.identifier)) // переменная языка = "" // переменная lang2 = "" если язык == "английский" { язык = г } иначе, если язык == "Испанский" { язык = с } еще { язык = ф } если language2 == "Испанский" { язык2 = с } иначе, если язык2 == "Английский" { язык2 = г } еще { язык2 = f } DispatchQueue. main.async { self.identifierLabel.text = "\(lang)" + " = " + "\(lang2) \n \(y * 100)% точность" self.stopSwirlyGuy() } } пытаться? VNImageRequestHandler (cvPixelBuffer: pixelBuffer, параметры: [:]). Выполнить ([запрос]) } //Функции перевода опущены для краткости
Это код для контроллера представления, который переходит на главный экран, где происходит подача камеры и обработка Vision.
импортировать UIKit
класс FirstLaunchViewController: UIViewController {
@IBOutlet слабый var title1: UILabelX! @IBOutlet слабая переменная logo1: UIImageView! @IBOutlet слабое описание переменной 1: UILabel! @IBOutlet слабая переменная buttonOutlet: UIButtonX! @IBOutlet слабый var initialBackground: UIViewX! @IBOutlet слабый var initialLogo: UIImageView! Функция @IBAction toVC (_ отправитель: любой) { UserDefaults.standard.set(false, forKey: "имя") выполнитьSegue(withIdentifier: "toMain", отправитель: сам) } переопределить функцию viewDidLoad() { super. viewDidLoad() начальныйЛого.альфа = 1 начальный фон.альфа = 1 title1.альфа = 0 логотип1.альфа = 0 описание1.альфа = 0 кнопкаOutlet.alpha = 0 // Выполните любую дополнительную настройку после загрузки представления. } переопределить func viewDidAppear (_ анимированный: Bool) { super.viewDidAppear(анимированный) UIView.animate(withDuration: 1.5, анимация: { self.initialLogo.alpha = 0 self.initialBackground.alpha = 0 }) { (истина) в self.initialBackgroundGone() } } func initialBackgroundGone() { UIView.animate(withDuration: 1.5, анимация: { self.title1.alpha = 1 }) { (истина) в self.showBackgroundAgain() } } функция showBackgroundAgain() { UIView.animate(withDuration: 1.3, анимация: { self.logo1.alpha = 1 }) { (истина) в self.showTitle() } } функция showTitle () { UIView.animate(withDuration: 1.5, анимация: { self.description1.alpha = 1 }) { (истина) в self. showEverythingElse() } } функция showEverythingElse() { UIView.animate(withDuration: 3.5) { self.buttonOutlet.alpha = 1 } }
}
iOS 13.2 и iPadOS 13.2 от Apple доступны для iPhone и iPad, загрузите их сейчас
Сегодня Apple выпускает iOS 13.2 и iPadOS 13.2, в которых Deep Fusion совершенствует обработку изображений, обновляет Emoji, а также ряд исправлений и в целом улучшения системы.
Теперь вы можете загрузить и установить iOS 13.2 и iPadOS 13.2 на iPhone/iPod touch и iPad соответственно. Обновление выходит примерно через месяц после запуска iOS 13.1 и в основном приносит пользу новым владельцам iPhone, хотя есть и кое-что полезное для других людей.
Кто может выполнить обновление до iOS 13.2 и iPadOS 13.2?
Начиная с iOS 13, существуют разные операционные системы для iPhone/iPod touch и iPad.
iOS 13.2
Обновление iOS 13.2 совместимо с недавно выпущенными iPhone 11, iPhone 11 Pro и iPhone 11 Pro Max. Кроме того, вы можете установить обновление на iPhone XS, iPhone XS Max, iPhone XR, iPhone X, iPhone 8, iPhone 8 Plus, iPhone 7, iPhone 7 Plus, iPhone 6s, iPhone 6s Plus, iPhone SE и iPod touch ( 7-е поколение).
iPadOS 13.2
Между тем, iPadOS 13.2 доступна для 12,9-дюймового iPad Pro, 11-дюймового iPad Pro, 10,5-дюймового iPad Pro, 9,7-дюймового iPad Pro, iPad (7-го поколения), iPad (6-го поколения), iPad (5-го поколения), iPad mini (5-го поколения), iPad mini 4, iPad Air (3-го поколения) и iPad Air 2.
Новые функции
Камера
Deep Fusion — это новая функция камеры, которая работает исключительно с A13 Bionic Neural Engine используется в iPhone 11, iPhone 11 Pro и iPhone 11 Pro Max. Он позволяет захватывать несколько изображений с разной экспозицией, используя попиксельный анализ. При этом лучшие части каждого изображения сливаются в один великий шедевр. Те же пользователи теперь также могут изменять разрешение видео в приложении «Камера», а не в настройках.
Emoji
И iOS 13.2, и iPad 13.2 включают 70 новых и обновленных смайликов. К ним относятся новые взгляды на животных, еду, занятия и многое другое.
Siri
Впервые вы можете решить, разрешено ли Apple сохранять звук ваших взаимодействий Siri и Диктовки. Вы также можете удалить историю Siri и Диктовки в настройках Siri на вашем устройстве.
Приложение Home
Приложение Home теперь поддерживает защищенную камеру HomeKit и маршрутизаторы с поддержкой HomeKit.
Apple AirPods Pro
В тот же день, когда Apple выпустила iOS 13.2, компания представила AirPods Pro, который официально выйдет 30 октября. его, выбрав Настройки > Общие > Обновление ПО . Обязательно создайте резервную копию своего iPhone или iPad, выбрав «Настройки» > Apple ID > iCloud > «Резервное копирование iCloud» > «Резервное копирование сейчас» . Или создайте резервную копию через iTunes или стороннее приложение, чтобы на всякий случай иметь локальную архивную копию.
Полный список изменений iOS 13.2
Вот список всех новых функций и исправлений ошибок, включенных в это последнее обновление iOS 13.2 от Apple:
iOS 13.2 представляет Deep Fusion, передовую систему обработки изображений, использующую A13 Bionic Neural Engine для захвата изображений со значительно улучшенной текстурой, детализацией и уменьшенным шумом при слабом освещении на iPhone 11, iPhone 11 Pro и iPhone 11 Pro Max. Дополнительные функции включают в себя обновленные и дополнительные смайлики, анонсы сообщений для «AirPods», поддержку «AirPods Pro», «HomeKit» Secure Video, маршрутизаторы с поддержкой «HomeKit» и новые настройки конфиденциальности «Siri». Это обновление также содержит исправления ошибок и улучшения.
Камера
- Deep Fusion для iPhone 11, iPhone 11 Pro и iPhone 11 Pro Max использует A13 Bionic Neural Engine для захвата нескольких изображений с различной экспозицией, выполнения попиксельного анализа и объединения самых высоких качественные части изображений вместе, что приводит к фотографиям со значительно лучшей текстурой, детализацией и уменьшенным шумом, особенно для сцен со средним и низким освещением 11 Про Макс
Emoji
- Более 70 новых или обновленных смайликов, включая животных, еду, действия, новые специальные смайлики, гендерно-нейтральные смайлики и выбор оттенка кожи для пары смайликов. Поддержка AirPods
Анонсируйте сообщения с помощью Siri, чтобы читать входящие сообщения вслух на ваши AirPods
Поддержка AirPods Pro
Домашнее приложение
- HomeKit Безопасное видео позволяет вам в частном порядке захватывать, хранить и просматривать зашифрованное видео с ваших камер безопасности и функции обнаружения людей, животных и транспортных средств
- Маршрутизаторы с поддержкой HomeKit позволяют вам контролировать, с чем ваши аксессуары HomeKit взаимодействуют через Интернет или в вашем доме
Siri
- Настройки конфиденциальности, позволяющие контролировать, помогать ли улучшать Siri и «Диктовка», разрешив Apple хранить звук ваших взаимодействий «Siri» и «Диктовки»
- Возможность удалить историю «Siri» и «Диктовки» из настроек «Siri»
Это обновление также включает исправления ошибок и другие улучшения. Это обновление:
Устраняет проблему, которая может препятствовать автозаполнению паролей в сторонних приложениях.