...

пятница, 11 мая 2018 г.

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


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

Let's block ads! (Why?)

Комментариев нет:

Отправить комментарий