Как стать автором
Обновить

Мысли про порог входа в технологии в 2018, пример простого мобильного приложения и не только

Время на прочтение3 мин
Количество просмотров27K

Когда-то я учился в 5-ом классе и сейчас мне почему-то кажется, что между мной тогдашним и ребятами, которые сейчас ходят в 5-ый класс, огромная пропасть с точки зрения доступа к технологиям. А так как технологии развиваются все быстрее и быстрее, интересно, что будет происходить, когда ребята, которые сейчас ходят в 5-ый класс, станут моими ровесниками.

В этой короткой статье я на примере простого мобильного приложения для iPhone хочу показать, насколько доступны технологии.

Немного лирики


Прошло около 20 лет с момента, когда мои глаза расширились до предела при виде анимированной скрепки на экране компьютера, которая предлагала мне помочь. Скрепка тогда казалась всемогущей, между тем, что могла она и магией для меня не было большой разницы.



Всего 13 лет назад я впервые подержал в руках КПК (это карманный персональный компьютер). Компьютер. Карманный. C Windows. Работает не от сети 220 В., а от батарейки, имеет доступ в Интернет. Без провода и карточки «Вэб Плас». Доступ в Интернет. В тот самый Интернет, 5 минутный доступ в который получила в подарок за большие заслуги наша группа компьютерного кружка. Нам было разрешено посетить 1 сайт (модем на 33 Кбит). Вся группа долго обсуждала — какой именно это будет сайт. Голосование, дебаты.



Перенесемся в май 2018 года


В Калифорнии проходит конференция Google I/O 2018, в числе десятков прочих анонсов: в сервис Firebase добавили ML Kit — инструмент, дающий возможность на смартфоне или в облаке распознавать содержимое картинок, лица, текст и много другого разного, даже свои модели TensorFlow. Эка невидаль? Что мы не знаем про машинное обучение и нейронные сети?

Ладно, а давайте сделаем приложение, чтобы текст распознавало.
Открываем Xcode — создаем новый проект. Создаем Podfile куда пишем код ниже и устанавливаем:

  pod 'Firebase/Core'
  pod 'Firebase/MLVision'
  pod 'Firebase/MLVisionTextModel'

Интерфейс простой:

  • один UIImageView, куда выведем картину с камеры,
  • две UIButton, первая запустит камеру, вторая запустит чтение



Чтобы 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)
     }
}

Запускаем, пишем ручкой на листике (с печатным текстом совсем неинтересно), фотографируем



и смотрим в консоль:



Ах да! Все это работает в авиарежиме, то есть без доступа к Интернету. И распознавание рукописного текста, и синтез речи.


Инструменты, методы и задачи, которые казались очень сложными ещё вчера, сегодня доступны быстро и бесплатно прямо «из коробки». А что будет дальше, лет так через 20, а через 50?
Теги:
Хабы:
Всего голосов 52: ↑43 и ↓9+34
Комментарии33

Публикации

Истории

Работа

iOS разработчик
24 вакансии
Data Scientist
77 вакансий
Swift разработчик
27 вакансий

Ближайшие события

19 сентября
CDI Conf 2024
Москва
24 сентября
Конференция Fin.Bot 2024
МоскваОнлайн
30 сентября – 1 октября
Конференция фронтенд-разработчиков FrontendConf 2024
МоскваОнлайн