Когда-то я учился в 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?

Комментарии (32)


  1. Nucleotide
    11.05.2018 23:41
    +1

    Вся группа долго обсуждала — какой именно это будет сайт. Голосование, дебаты.

    А сайт-то какой выбрали?


    1. alekciy
      11.05.2018 23:43

      Возможно порнохаб. Хотя на этом устройстве видео врятли игралось. Да и на модеме это наверное издевательство.


      1. samodum
        12.05.2018 05:17

        Не было в то время видео в интернете (во времена карточек от Вэб-пласа). Там одна только картинка грузилась по несколько минут сверху вниз.
        Специально для этого в формате GIF (тот, что без анимации) был предусмотрен режим чересстрочного отображения изображения.


        1. DrPass
          12.05.2018 13:46
          +3

          Не было в то время видео в интернете (во времена карточек от Вэб-пласа).

          Ну как это не было? QuickTime и RealPlayer в нашей юности рулили. Маленькое, отвратительное, с постоянными «buffering 70%», но 20 лет назад мой модем вполне его переваривал. Правда, у меня канал в инет был неплохой, модем (вот этот зверь: retropc.org/Modem_Acorp_56_PCI_Conexant_k_2381.html) честно вытягивал целых 49К.


        1. NoRegrets
          12.05.2018 19:29
          +4

          Была такая шутка, что если бы GIF догадались сделать загружаемым снизу вверх это бы серьезно сократило мировой трафик.


      1. samodum
        12.05.2018 10:23
        -2

        и нет такого слова «врятли».
        Есть «вряд ли»


    1. decomeron
      12.05.2018 06:43

      У меня тоже сразу же возник этот вопрос, но я подумала наверно что то саязанное с компьютерами и программированием если сегодня все задачи решаются так просто


    1. slutsker Автор
      12.05.2018 09:17
      +4

      Если я не путаю, то тогда выбрали сайт футбольного клуба Зенит.


      1. decomeron
        13.05.2018 21:31

        Очень интересно. А я когда первый раз вошла в интернет открыла страницу футбольного клуба Барселона


  1. Bombus
    12.05.2018 09:37
    -3

    Т.е. продукт Google (Firebase) доступен в IOS?
    Из статьи показалось что даже из коробки.


    1. atamanenko
      12.05.2018 19:34
      +2

      Firebase чуть ли не везде доступен


  1. sshikov
    12.05.2018 10:06
    +2

    Распознавание текста? А ничего, что оно еще под DOS работало? И тоже без интернета, естественно. Я прекрасно понимаю, что это далеко не все, что может сегодняшний ML, но тем не менее автор слегка лукавит.


    1. slutsker Автор
      12.05.2018 11:29
      +3

      А я вовсе не говорю, что подобных технологий не было, просто их распространение, доступность и порог входа были совсем другими.


      1. sshikov
        12.05.2018 13:33

        Ну да, были конечно. Но тем не менее, текст можно было распознавать уже очень давно.

        Ну и так, не в качестве претензии — вы в пример кода включили на мой взгляд много лишнего. Доступ к камере, перебор картинок — это все не относится именно к распознаванию, и возможно стоило бы это опустить, и добавить распознавание именно картинок, котиков там, или что оно умеет :)


  1. samodum
    12.05.2018 10:29
    +7

    Статья странная.
    Где мысли про порог входа в технологии?
    Это сначала кажется, что порог вхождения стал ниже. Из-за фреймворков и обёрточных библиотек люди перестали понимать как оно работает внутри и многие проблемы могут быть от этого непонимания.


    1. gnomeby
      12.05.2018 15:23
      +3

      Просто понудеть или есть реальные примеры косяков?


  1. nikweter
    12.05.2018 17:15
    +3

    13 лет назад, когда я искал первую работу, джуниору php достаточно было знать сам язык, немного чистого js и html. Сравните это с современными требованиями...


    1. powerman
      12.05.2018 17:42
      +6

      open stackoverflow, copy, paste?


      1. nikweter
        12.05.2018 19:09
        +1

        Вы пройдете собеседование с copy — paste? Я не так давно пробовал сунуться в область которую не знаю — не получилось. И хотя я понимаю, что с помощью гугла, стэковер и какой-то матери справлюсь, но результат налицо…


        1. slutsker Автор
          12.05.2018 19:15

          Все зависит от того, на что именно вас будут собеседовать и какие знания проверять.


        1. powerman
          12.05.2018 22:53

          Вообще-то это сарказм был. Когда я искал первую работу php ещё и в проекте не было, но в остальном я согласен с nikweter.


    1. tangro
      13.05.2018 21:49

      13 лет назад веб-разработчику и платили, небось, поменьше нынешнего


  1. enjoykaz
    12.05.2018 19:01
    -2

    Я закончил школу в 2005, программирование начали изучать с одноклассниками с 2002 года. Тогда компьютер дома был у 5 человека из класса, остальные делали домашнее задание в тетрадке, а компилировать приходили в компьютерный класс в школе. Сейчас ребята все разъехались — Германия, США, Франция, Австрия, в общем география широкая. Когда я слышу, что нынешние поколение так гениально, что может в 15 лет написать собственное приложение для Android/iOS, то я просто улыбаюсь и вспоминаю свои школьные годы.


    1. slutsker Автор
      12.05.2018 19:11
      +1

      А где в статье написано про гениально? Написано про другой уровень доступа к технологиям.


      1. enjoykaz
        12.05.2018 19:34
        -1

        А где у меня в комментарии написано, что в статье написано «Гениально»?
        В статье как раз небольшой пример, как меняется уровень вхождения.


        1. slutsker Автор
          12.05.2018 21:26
          +2

          Из того что вы пишите «Когда я слышу, что нынешнее поколение так гениально...», я просто подумал, что вы где-то в статье это нашли.


  1. Nookie-Grey
    12.05.2018 21:01
    -1

    Что делает такая ни о чем ная статья в топе?


  1. Cekory
    12.05.2018 21:19
    +3

    В статье скорее про развитие технологий, а не про порог вхождения. Технологии развились, а порог вхождения, наверное, стал даже выше. Когда я учился, компьютер включался за секунду и можно было сразу же написать что-нибудь типа 10 PRINT 2 + 2, никаких предварительных настроек и телодвижений. И знания, что именно написать, можно было подчерпнуть из журнальной статьи в две страницы. А для того, чтобы сделать то, что в статье написано, даже окружение не пять минут надо настраивать. И чтобы настроить, надо еще долго гуглить, что именно скачать и установить. Ну или я не так, как автор понимаю слова "порог вхождения".


  1. SergeiMinaev
    12.05.2018 21:27

    Чем использование готовых компонентов по сути отличается от использования готового приложения? Я как-то давным давно в борланд билдере свой медиа плеер «написал» — перетащил компонент на форму и готово. Не думаю, что это можно называть «входом в технологии».


    1. slutsker Автор
      12.05.2018 21:30

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


  1. nikitashalnov
    12.05.2018 22:53
    +2

    Спасибо за статью.
    Начали круто, а закончили, как говорится, за упокой. Статья имеет смысловую незаконченность, она как будто оборвана.
    Хотелось бы прочитать больше мыслей и ваших рассуждений по теме. А то видишь спойлер, читаешь, думаешь: хм, круто! А заходишь и видишь просто код приложения и два предложения на этот счет.


  1. vsb
    13.05.2018 07:32

    Как-то не очень показательно. Когда я в школе учился программировать, я писал игры на досовском паскале с ассемблерными вставками, для быстрой работы с видеокартой и звуком. Конечно большинство этих вставок было копипастой из книжки, но в целом понимание происходящего было. Помню, как делал путешествие в трёхмерном космосе со звёздами, астероидами, как на бумажке часами выписывал синусы-котангенсы, чтобы это всё работало. И ведь справлялся и работало. Понятно, что в плане результата это был примитив, но в плане понимания математики и технологий это было мощно. Ваш же пример это просто использование готовых библиотек с копипастом кода из примеров. Человек, который не пойдёт дальше этого, ничего особого не покажет. Тут скорей надо демонстрировать, как школьник сможет научить новую нейронную сеть распознавать какой-нибудь казахский язык и его же произносить. Вот это было бы здорово.