Когда-то я учился в 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)
Bombus
12.05.2018 09:37-3Т.е. продукт Google (Firebase) доступен в IOS?
Из статьи показалось что даже из коробки.
sshikov
12.05.2018 10:06+2Распознавание текста? А ничего, что оно еще под DOS работало? И тоже без интернета, естественно. Я прекрасно понимаю, что это далеко не все, что может сегодняшний ML, но тем не менее автор слегка лукавит.
slutsker Автор
12.05.2018 11:29+3А я вовсе не говорю, что подобных технологий не было, просто их распространение, доступность и порог входа были совсем другими.
sshikov
12.05.2018 13:33Ну да, были конечно. Но тем не менее, текст можно было распознавать уже очень давно.
Ну и так, не в качестве претензии — вы в пример кода включили на мой взгляд много лишнего. Доступ к камере, перебор картинок — это все не относится именно к распознаванию, и возможно стоило бы это опустить, и добавить распознавание именно картинок, котиков там, или что оно умеет :)
samodum
12.05.2018 10:29+7Статья странная.
Где мысли про порог входа в технологии?
Это сначала кажется, что порог вхождения стал ниже. Из-за фреймворков и обёрточных библиотек люди перестали понимать как оно работает внутри и многие проблемы могут быть от этого непонимания.
nikweter
12.05.2018 17:15+313 лет назад, когда я искал первую работу, джуниору php достаточно было знать сам язык, немного чистого js и html. Сравните это с современными требованиями...
powerman
12.05.2018 17:42+6open stackoverflow, copy, paste?
nikweter
12.05.2018 19:09+1Вы пройдете собеседование с copy — paste? Я не так давно пробовал сунуться в область которую не знаю — не получилось. И хотя я понимаю, что с помощью гугла, стэковер и какой-то матери справлюсь, но результат налицо…
slutsker Автор
12.05.2018 19:15Все зависит от того, на что именно вас будут собеседовать и какие знания проверять.
enjoykaz
12.05.2018 19:01-2Я закончил школу в 2005, программирование начали изучать с одноклассниками с 2002 года. Тогда компьютер дома был у 5 человека из класса, остальные делали домашнее задание в тетрадке, а компилировать приходили в компьютерный класс в школе. Сейчас ребята все разъехались — Германия, США, Франция, Австрия, в общем география широкая. Когда я слышу, что нынешние поколение так гениально, что может в 15 лет написать собственное приложение для Android/iOS, то я просто улыбаюсь и вспоминаю свои школьные годы.
slutsker Автор
12.05.2018 19:11+1А где в статье написано про гениально? Написано про другой уровень доступа к технологиям.
enjoykaz
12.05.2018 19:34-1А где у меня в комментарии написано, что в статье написано «Гениально»?
В статье как раз небольшой пример, как меняется уровень вхождения.slutsker Автор
12.05.2018 21:26+2Из того что вы пишите «Когда я слышу, что нынешнее поколение так гениально...», я просто подумал, что вы где-то в статье это нашли.
Cekory
12.05.2018 21:19+3В статье скорее про развитие технологий, а не про порог вхождения. Технологии развились, а порог вхождения, наверное, стал даже выше. Когда я учился, компьютер включался за секунду и можно было сразу же написать что-нибудь типа
10 PRINT 2 + 2
, никаких предварительных настроек и телодвижений. И знания, что именно написать, можно было подчерпнуть из журнальной статьи в две страницы. А для того, чтобы сделать то, что в статье написано, даже окружение не пять минут надо настраивать. И чтобы настроить, надо еще долго гуглить, что именно скачать и установить. Ну или я не так, как автор понимаю слова "порог вхождения".
SergeiMinaev
12.05.2018 21:27Чем использование готовых компонентов по сути отличается от использования готового приложения? Я как-то давным давно в борланд билдере свой медиа плеер «написал» — перетащил компонент на форму и готово. Не думаю, что это можно называть «входом в технологии».
slutsker Автор
12.05.2018 21:30сам по себе плеер в билдере может большой ценности и не несет, но он может дать вау-эффект его автору, когда своими руками делаешь что-то очень крутое в своих же глазах. а это зачастую сильный мотиватор продолжать изучение и углубляться.
nikitashalnov
12.05.2018 22:53+2Спасибо за статью.
Начали круто, а закончили, как говорится, за упокой. Статья имеет смысловую незаконченность, она как будто оборвана.
Хотелось бы прочитать больше мыслей и ваших рассуждений по теме. А то видишь спойлер, читаешь, думаешь: хм, круто! А заходишь и видишь просто код приложения и два предложения на этот счет.
vsb
13.05.2018 07:32Как-то не очень показательно. Когда я в школе учился программировать, я писал игры на досовском паскале с ассемблерными вставками, для быстрой работы с видеокартой и звуком. Конечно большинство этих вставок было копипастой из книжки, но в целом понимание происходящего было. Помню, как делал путешествие в трёхмерном космосе со звёздами, астероидами, как на бумажке часами выписывал синусы-котангенсы, чтобы это всё работало. И ведь справлялся и работало. Понятно, что в плане результата это был примитив, но в плане понимания математики и технологий это было мощно. Ваш же пример это просто использование готовых библиотек с копипастом кода из примеров. Человек, который не пойдёт дальше этого, ничего особого не покажет. Тут скорей надо демонстрировать, как школьник сможет научить новую нейронную сеть распознавать какой-нибудь казахский язык и его же произносить. Вот это было бы здорово.
Nucleotide
А сайт-то какой выбрали?
alekciy
Возможно порнохаб. Хотя на этом устройстве видео врятли игралось. Да и на модеме это наверное издевательство.
samodum
Не было в то время видео в интернете (во времена карточек от Вэб-пласа). Там одна только картинка грузилась по несколько минут сверху вниз.
Специально для этого в формате GIF (тот, что без анимации) был предусмотрен режим чересстрочного отображения изображения.
DrPass
Ну как это не было? QuickTime и RealPlayer в нашей юности рулили. Маленькое, отвратительное, с постоянными «buffering 70%», но 20 лет назад мой модем вполне его переваривал. Правда, у меня канал в инет был неплохой, модем (вот этот зверь: retropc.org/Modem_Acorp_56_PCI_Conexant_k_2381.html) честно вытягивал целых 49К.
NoRegrets
Была такая шутка, что если бы GIF догадались сделать загружаемым снизу вверх это бы серьезно сократило мировой трафик.
samodum
и нет такого слова «врятли».
Есть «вряд ли»
decomeron
У меня тоже сразу же возник этот вопрос, но я подумала наверно что то саязанное с компьютерами и программированием если сегодня все задачи решаются так просто
slutsker Автор
Если я не путаю, то тогда выбрали сайт футбольного клуба Зенит.
decomeron
Очень интересно. А я когда первый раз вошла в интернет открыла страницу футбольного клуба Барселона