![](https://habrastorage.org/webt/5h/cl/st/5hclst-vlxwuskvzcidz1k-wjrq.jpeg)
Когда-то я учился в 5-ом классе и сейчас мне почему-то кажется, что между мной тогдашним и ребятами, которые сейчас ходят в 5-ый класс, огромная пропасть с точки зрения доступа к технологиям. А так как технологии развиваются все быстрее и быстрее, интересно, что будет происходить, когда ребята, которые сейчас ходят в 5-ый класс, станут моими ровесниками.
В этой короткой статье я на примере простого мобильного приложения для iPhone хочу показать, насколько доступны технологии.
Немного лирики
Прошло около 20 лет с момента, когда мои глаза расширились до предела при виде анимированной скрепки на экране компьютера, которая предлагала мне помочь. Скрепка тогда казалась всемогущей, между тем, что могла она и магией для меня не было большой разницы.
![](https://habrastorage.org/webt/np/hm/ac/nphmacj8ghxy22pmcvigol3cfum.jpeg)
Всего 13 лет назад я впервые подержал в руках КПК (это карманный персональный компьютер). Компьютер. Карманный. C Windows. Работает не от сети 220 В., а от батарейки, имеет доступ в Интернет. Без провода и карточки «Вэб Плас». Доступ в Интернет. В тот самый Интернет, 5 минутный доступ в который получила в подарок за большие заслуги наша группа компьютерного кружка. Нам было разрешено посетить 1 сайт (модем на 33 Кбит). Вся группа долго обсуждала — какой именно это будет сайт. Голосование, дебаты.
![](https://habrastorage.org/webt/ra/br/2w/rabr2w1lghfkyvb0xc84-6sqaga.jpeg)
Перенесемся в май 2018 года
В Калифорнии проходит конференция Google I/O 2018, в числе десятков прочих анонсов: в сервис Firebase добавили ML Kit — инструмент, дающий возможность на смартфоне или в облаке распознавать содержимое картинок, лица, текст и много другого разного, даже свои модели TensorFlow. Эка невидаль? Что мы не знаем про машинное обучение и нейронные сети?
Ладно, а давайте сделаем приложение, чтобы текст распознавало.
Открываем Xcode — создаем новый проект. Создаем Podfile куда пишем код ниже и устанавливаем:
pod 'Firebase/Core'
pod 'Firebase/MLVision'
pod 'Firebase/MLVisionTextModel'
Интерфейс простой:
- один UIImageView, куда выведем картину с камеры,
- две UIButton, первая запустит камеру, вторая запустит чтение
![](https://habrastorage.org/webt/vc/bv/m7/vcbvm75ebmmjrbf4vxwuj0erikm.png)
Чтобы iPhone дал доступ к камере, добавим в Info.plist
<key>NSCameraUsageDescription</key>
<string>Предоставьте приложению доступ к камере</string>
Создадим контроллер, подключим к нему UIImageView и нажатия наших двух UIButton.
А пусть нам ещё то, что удалось распознать, смартфон произнесет голосом.
import UIKit
import Firebase
import AVKit
import AVFoundation
class ViewController: UIViewController, UIImagePickerControllerDelegate, UINavigationControllerDelegate {
//разпознование текста из картинки
lazy var vision = Vision.vision()
var textDetector: VisionTextDetector?
//синтез речь
let synthesizer = AVSpeechSynthesizer()
override func viewDidLoad() {
super.viewDidLoad()
textDetector = vision.textDetector()
}
//подключаем UIImageView
@IBOutlet weak var imagePicked: UIImageView!
//включаем камеру после нажатия на кнопку
@IBAction func openCamera(_ sender: Any) {
if UIImagePickerController.isSourceTypeAvailable(.camera) {
var imagePicker = UIImagePickerController()
imagePicker.delegate = self
imagePicker.sourceType = .camera
imagePicker.allowsEditing = false
self.present(imagePicker, animated: true, completion: nil)
}
}
//после нажатия на кнопку текст нужно распознать и произнести
@IBAction func getText(_ sender: Any) {
if let image = imagePicked.image as? UIImage {
let visionImage = VisionImage(image: image)
textDetector?.detect(in: visionImage, completion: { [weak self] (visionTextItems, error) in
if error != nil {
print("произошла ошибка \(error)")
return
}
if let foundItems = visionTextItems {
if foundItems.count > 0 {
for item in foundItems {
print("распознан текст: \(item.text)")
let utterance = AVSpeechUtterance(string: item.text)
utterance.rate = 0.4
utterance.voice = AVSpeechSynthesisVoice(language: "en-US")
self?.synthesizer.speak(utterance)
}
} else {
print("no images found")
}
}
})
}
}
//переносим фотографию с камеры в UIImageView
func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : AnyObject]) {
let image = info[UIImagePickerControllerOriginalImage] as! UIImage
imagePicked.image = image
dismiss(animated:true, completion: nil)
}
}
Запускаем, пишем ручкой на листике (с печатным текстом совсем неинтересно), фотографируем
![](https://habrastorage.org/webt/5h/cl/st/5hclst-vlxwuskvzcidz1k-wjrq.jpeg)
и смотрим в консоль:
![](https://habrastorage.org/webt/z8/bd/el/z8bdelxj_i295fdeyohmyd0pfgi.png)
Ах да! Все это работает в авиарежиме, то есть без доступа к Интернету. И распознавание рукописного текста, и синтез речи.
Инструменты, методы и задачи, которые казались очень сложными ещё вчера, сегодня доступны быстро и бесплатно прямо «из коробки». А что будет дальше, лет так через 20, а через 50?