Технологии

Tesseract OCR: бесплатное распознавание текста с фото и скриншота

28 минАктуально на 12 августа 2026

Tesseract OCR — распознавание текста с фото

У тебя есть папка с фотографиями чеков от клиентов, стопка отсканированных договоров или сотня скриншотов с переписками, из которых нужно вытащить текст. Перепечатывать всё руками — дни механической работы. Отправлять каждый файл в онлайн-сервис или ИИ-чат — долго, неудобно, а с чувствительными данными ещё и рискованно: скан паспорта или чек пользователя не должен улетать на чужой сервер. Для таких задач существует проверенный инструмент — Tesseract OCR. Это бесплатная программа с открытым кодом, которая превращает текст на картинке в обычный редактируемый текст и работает полностью локально, на твоём компьютере или сервере. Ниже — простыми словами о том, что такое OCR и Tesseract, чем он отличается от ИИ-чатов, как его установить и подключить русский язык, где он буксует и когда вместо него лучше взять нейросеть.

Содержание
  1. Что такое OCR и Tesseract простыми словами
  2. Чем Tesseract отличается от ИИ-чата «прочитай текст с фото»
  3. Почему локальная работа — главный плюс Tesseract
  4. Когда выбрать Tesseract, а когда ИИ-модель
  5. Как использовать Tesseract на практике
  6. Ограничения: где Tesseract буксует
  7. Практический пример: приложение для учёта расходов
  8. Частые вопросы
  9. Заключение
  10. Источники

Что такое OCR и Tesseract простыми словами

OCR расшифровывается как Optical Character Recognition — оптическое распознавание символов. Это технология, которая смотрит на картинку с текстом — фото чека, скан документа, скриншот экрана — и превращает буквы, «нарисованные» на изображении, в обычный текст, который можно выделить, скопировать, отредактировать или вставить в таблицу.

Аналогия простая. Когда ты фотографируешь страницу книги, для компьютера это просто набор пикселей — как картина. Ты сам читаешь её глазами, а компьютер видит только цветные точки. OCR выполняет ту работу, которую делает твой глаз: находит на картинке буквы, «читает» их и выдаёт результат текстом. Дальше с этим текстом можно делать всё что угодно: искать по нему, считать суммы, складывать в базу данных.

Tesseract — самая известная бесплатная OCR-библиотека с открытым исходным кодом. У неё длинная история: разработку начала компания Hewlett-Packard ещё в 1980-е годы, в 2005 году код открыли, а с 2006 года проект развивается при участии Google. Современные версии Tesseract используют нейросетевой движок на основе LSTM (это тип рекуррентной нейросети, хорошо работающий с последовательностями — например, со строками текста) и поддерживают более сотни языков, включая русский.

Tesseract — это не готовая программа с красивым окном и кнопками, а движок. Им пользуются двумя способами:

  • из командной строки — как утилиту: дал файл с картинкой, получил файл с текстом;
  • как библиотеку внутри своего приложения — через готовые обёртки для популярных языков программирования: pytesseract для Python, tesseract.js для JavaScript, Tess4J для Java и другие.

Второй сценарий особенно интересен вайбкодеру: ты можешь попросить ИИ-ассистента встроить распознавание текста прямо в твоё приложение, и Tesseract будет работать «под капотом», не требуя ни ключей, ни подписок, ни оплаты за каждый запрос.

Чем Tesseract отличается от ИИ-чата «прочитай текст с фото»

Сегодня любой мультимодальный ИИ — Claude, ChatGPT и другие — умеет принимать картинку и отвечать на вопросы о её содержимом. Возникает законный вопрос: зачем вообще нужен отдельный Tesseract, если можно просто загрузить фото в чат и попросить «выпиши весь текст»?

Разница принципиальная, и она в задаче, которую решает каждый инструмент.

ИИ-чат понимает смысл. Он может не только прочитать документ, но и пересказать его своими словами, ответить на вопрос по содержимому, найти нужный пункт в договоре, сравнить два документа. Мы уже разбирали такой сценарий в статье про анализ документов с ChatPDF: ты загружаешь PDF и задаёшь вопросы о том, что внутри. Но за это понимание приходится платить — деньгами за подписку или API, временем на обработку каждого запроса и, главное, отправкой данных на сторонний сервер.

Tesseract — узкоспециализированный инструмент. Он делает ровно одну вещь: быстро и бесплатно вытаскивает сырой текст из изображения. Он не понимает, что написано. Он не ответит на вопрос «а что это за документ?», не найдёт в нём нужный пункт, не объяснит условия договора. Он просто вернёт строки текста — как очень быстрый и безотказный переписчик, который не вникает в смысл.

Из этого следует простое правило выбора:

  • нужен сырой текст из множества картинок — бери Tesseract;
  • нужно понять и интерпретировать содержимое — бери ИИ-модель.

Чтобы разница ощущалась наглядно, сравним оба подхода по практическим параметрам:

Tesseract OCR ИИ-чат с картинками
Что делает Вытаскивает текст с изображения Понимает содержимое и отвечает на вопросы
Цена Бесплатно всегда Подписка или оплата за запросы
Скорость Доли секунды на страницу Секунды на каждую картинку
Где работает Локально, даже без интернета В облаке, нужен интернет
Куда уходят данные Никуда, остаются у тебя На серверы сервиса
Массовая обработка Тысячи файлов скриптом Каждый файл — отдельный запрос
Рукописный текст Плохо Заметно лучше
Понимание структуры таблиц Слабое Хорошее

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

Почему локальная работа — главный плюс Tesseract

Ключевое преимущество Tesseract перед облачными сервисами и ИИ-чатами — он работает полностью локально. Программа устанавливается на твой компьютер или твой сервер, и изображение никуда не отправляется: ни в облако, ни к разработчику, ни к рекламодателю. Данные физически не покидают машину, на которой идёт распознавание.

Для многих задач это не «приятный бонус», а жёсткое требование. Примеры:

  • ты делаешь приложение, куда пользователи загружают сканы паспортов или других документов — персональные данные нельзя бездумно отправлять в сторонние сервисы;
  • сервис обрабатывает чеки и платёжные документы клиентов — там суммы, реквизиты, ФИО;
  • внутренняя система компании читает договоры и накладные, которые нельзя показывать третьим лицам по условиям конфиденциальности.

Во всех этих случаях локальный OCR снимает целый класс проблем: не нужно согласовывать передачу данных с юристами, не нужно беспокоиться, что сервис хранит загруженные файлы или использует их для обучения моделей, не нужен даже интернет — Tesseract работает на ноутбуке в самолёте.

Вторая сторона локальности — экономика. У облачных OCR-сервисов и ИИ-моделей каждый запрос стоит денег, и на больших объёмах счёт растёт быстро. Tesseract бесплатен при любом количестве изображений: распознаёшь десять картинок или десять миллионов — цена одна, ноль. Платишь только электричеством и временем процессора.

Если тема локальной работы с ИИ тебе интересна в целом — не только для OCR, но и для текстовых моделей — загляни в наш обзор локальных LLM: там разобрано, как запускать нейросети на своём железе и что для этого нужно.

Когда выбрать Tesseract, а когда ИИ-модель

Сформулируем критерии выбора максимально конкретно.

Tesseract подходит, когда:

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

ИИ-модель лучше, когда:

  • нужно понять содержимое: ответить на вопрос по документу, сделать выжимку, объяснить, что значит пункт 3.2 договора;
  • изображение сложное: рукописный текст, художественные шрифты, записки «на коленке», фото под странным углом;
  • нужна структура: не просто текст, а «выпиши из чека название магазина, дату и итоговую сумму в формате JSON»;
  • объёмы небольшие, а данные нечувствительные — тогда цена и отправка в облако не критичны.

Честная граница такая: Tesseract — это глаза, которые читают буквы. ИИ-модель — это голова, которая понимает прочитанное. В серьёзных проектах часто нужны оба: глаза дёшево снимают текст с потока картинок, голова разбирает его по смыслу. А чтобы приложение могло обратиться к модели или сервису из кода, используется API — если это слово пока пугает, прочти нашу статью что такое API простыми словами, там всё разложено на примерах.

Пара жизненных сценариев для закрепления. Интернет-магазин получает от поставщиков сканы накладных: задача — перегнать их в текст и сверить позиции с заказами. Это чистый Tesseract: документы типовые, объём большой, данные коммерческие и лишний раз светить их в облаке не хочется. А вот служба поддержки, которая получает от клиентов фотографии «посмотрите, что у меня сломалось», и хочет понимать, о чём просьба, — это территория ИИ-модели: там нужен не текст, а смысл. Определи, что именно нужно твоему проекту — символы или смысл, — и выбор инструмента станет очевидным.

Как использовать Tesseract на практике

Теперь к делу: как реально получить текст с картинки. Разберём оба пути — для человека и для приложения.

Установка

Tesseract бесплатно скачивается и ставится на любую систему:

  • Windows. Проще всего взять готовый установщик из репозитория UB Mannheim (это поддерживаемая сообществом сборка, ссылка есть на официальной странице проекта на GitHub). Ставишь как обычную программу, дальше утилита доступна из командной строки.
  • macOS. Одна команда через Homebrew: brew install tesseract.
  • Linux (Debian/Ubuntu). Тоже одна команда: sudo apt install tesseract-ocr.

Актуальные ссылки и варианты установки всегда смотри на официальной странице проекта: github.com/tesseract-ocr/tesseract

Главная грабля для русскоязычных: языковой пакет

Здесь спотыкается большинство новичков. По умолчанию Tesseract часто устанавливается только с английским языком. Если запустить его на русском тексте, получишь на выходе тарабарщину — программа будет честно пытаться прочитать кириллицу латинскими буквами.

Решение — отдельно установить русский языковой пакет. Языки в Tesseract хранятся в файлах вида <язык>.traineddata, для русского это rus.traineddata. В Linux он ставится пакетом tesseract-ocr-rus, в установщике для Windows русский язык выбирается галочкой при установке, а при ручной установке файл можно скачать из официального репозитория tessdata и положить в папку tessdata рядом с программой.

Дальше язык указывается при запуске флагом -l:

tesseract foto-cheka.jpg result -l rus

Эта команда читает картинку foto-cheka.jpg и сохраняет распознанный русский текст в файл result.txt. Нужны сразу два языка, русский и английский? Перечисли их через плюс: -l rus+eng. Проверить, какие языки установлены, можно командой tesseract --list-langs.

Подключение к приложению

Для вайбкодера интереснее второй путь — встроить Tesseract в своё приложение. Для этого существуют готовые обёртки:

  • pytesseract — для Python: буквально две строки кода, и функция возвращает текст с картинки;
  • tesseract.js — для JavaScript: работает и в браузере, и на сервере под Node.js;
  • обёртки есть и под другие языки — Java, C#, Go, PHP.

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

И вот практический лайфхак для вайбкодинга: тебе не нужно помнить эти команды и названия библиотек наизусть. Достаточно описать задачу ИИ-ассистенту человеческими словами: «добавь в приложение распознавание текста с загруженной фотографии через Tesseract, язык — русский, результат покажи в текстовом поле». Ассистент напишет код, подключит обёртку и подскажет, что установить в систему. Твоя задача — знать, что такой инструмент существует и для чего он нужен.

Режимы распознавания страницы

У Tesseract есть настройка, про которую редко рассказывают новичкам, а зря: режимы сегментации страницы, они же PSM (page segmentation mode). Это подсказка движку, как устроена картинка, которую ты ему даёшь. Режим задаётся флагом --psm и номером.

Самые полезные на практике:

  • --psm 3 — режим по умолчанию: Tesseract сам определяет, где на странице блоки текста. Подходит для обычных документов и книжных страниц.
  • --psm 6 — «один единый блок текста». Хорошо работает для чеков, табличек, вывесок и скриншотов, где текст идёт сплошным куском. Часто даёт результат заметно лучше, чем режим по умолчанию.
  • --psm 7 — «одна строка текста». Для коротких надписей: номер документа, артикул, название на этикетке.
  • --psm 11 — «разрозненный текст»: ищет отдельные слова и фрагменты в любом порядке по всей картинке. Полезен для коллажей, скриншотов интерфейсов с разбросанными подписями.

Полный список режимов есть в официальной документации проекта. Практический совет простой: если результат распознавания тебя не устраивает, первым делом попробуй --psm 6 — для одиночных изображений вроде чеков и скриншотов он нередко превращает мусор в чистый текст.

В каком виде Tesseract отдаёт результат

По умолчанию ты получаешь простой текстовый файл, но движок умеет больше. Через параметры можно запросить, например, TSV-таблицу, где для каждого распознанного слова указаны его координаты на картинке и оценка уверенности. Это полезно, когда приложению важно не только «что написано», но и «где написано»: так можно вырезать значение из конкретной области документа или отбросить слова, в которых движок не уверен. Есть и режим создания PDF с невидимым текстовым слоем: поверх скана кладётся распознанный текст, и «картинка» становится документом, по которому работают поиск и копирование. Для архивов сканов это отдельно ценный сценарий.

Массовая обработка: распознать целую папку

Главная суперсила Tesseract — пакетная обработка. Пока ИИ-чат вынуждает загружать картинки по одной, Tesseract спокойно перемалывает тысячи файлов подряд. В командной строке это обычный цикл: для каждой картинки в папке вызвать tesseract и сохранить результат в одноимённый текстовый файл. Например, в Linux и macOS:

for f in skany/*.jpg; do tesseract "$f" "${f%.jpg}" -l rus; done

После выполнения рядом с каждым skany/doc1.jpg появится skany/doc1.txt с распознанным текстом. Дальше эти файлы можно искать, складывать в базу данных, отдавать на разбор ИИ. В приложении то же самое делает код с обёрткой вроде pytesseract: проходишь по списку файлов, скармливаешь каждый движку, сохраняешь результаты. И снова: писать этот цикл руками необязательно — опиши ассистенту задачу «пройди по всем файлам в папке, распознай каждый через Tesseract на русском, результаты сохрани в CSV», и он сгенерирует готовый скрипт.

Именно здесь локальность даёт второе преимущество, кроме приватности: никаких лимитов. Облачные сервисы ограничивают число запросов в минуту и берут плату за каждый, а локальный движок работает со скоростью твоего процессора — и всё.

Как выглядит процесс целиком

flowchart TB
    A["Фото или скан документа"] --> B["Предобработка картинки"]
    B --> C["Tesseract распознаёт символы"]
    C --> D["Готовый текст на выходе"]
    D --> E["Использование в приложении"]

Каждый шаг важен, но новички чаще всего пропускают второй — предобработку. А именно она решает половину проблем с качеством.

Ограничения: где Tesseract буксует

Чтобы не разочароваться в инструменте, нужно честно понимать его слабые места. Tesseract отлично читает чёткий печатный текст — и заметно теряет точность в сложных случаях.

Рукописный текст. Почерк — самый тяжёлый случай для классического OCR. Tesseract обучен в первую очередь на печатных шрифтах, и рукописные заметки распознаёт плохо. Если задача — читать почерк, смотри в сторону ИИ-моделей или специализированных сервисов.

Низкое разрешение и плохое качество. Размытое фото, снятое в темноте на старый телефон, мелкий шрифт, смятый чек с бликами — всё это резко снижает точность. Программе, как и человеку, нужно разглядеть буквы.

Сложная вёрстка. Многоколоночные страницы, таблицы, текст поверх пёстрого фона, плотные журнальные макеты — Tesseract может перепутать порядок строк, склеить колонки или потерять структуру таблицы. Текст он вытащит, но вот «таблица останется таблицей» — уже не гарантировано.

Повороты и искажения. Фото документа, снятое под углом, или повёрнутая страница тоже ухудшают результат.

Хорошая новость: многое лечится предобработкой изображения. Перед распознаванием картинку стоит подготовить:

  • обрезать лишнее, оставив только область с текстом;
  • выровнять, если страница повёрнута;
  • перевести в чёрно-белый вид и повысить контраст;
  • увеличить слишком мелкое изображение;
  • убрать шум и блики.

Эти операции выполняются программно — например, библиотекой OpenCV или встроенными средствами графических библиотек твоего языка. В вайбкодинге ты просто добавляешь в задачу ассистенту: «перед распознаванием улучши картинку: обрежь поля, повысь контраст, переведи в градации серого». Разница в точности до и после предобработки бывает огромной — иногда это отличие «половина слов с ошибками» от «текст почти идеальный».

Почему предобработка так сильно влияет? Tesseract внутри себя превращает картинку в чёрно-белую: каждый пиксель решается либо «буква», либо «фон». Если исходное фото тёмное, с тенями и бликами, эта граница проходит не там: куски букв уходят в фон, а пятна фона превращаются в ложные символы. Когда ты заранее выравниваешь яркость и повышаешь контраст, граница ложится ровно по контурам букв — и дальше движок работает уже с чистым материалом.

Практический минимум, который стоит сделать всегда:

  1. Выровняй. Даже небольшой наклон в пару градусов ухудшает результат. Для сканов это редко проблема, для фото с телефона — почти всегда.
  2. Обрежь. Чем меньше на картинке лишнего — стола вокруг чека, пальцев, фона — тем меньше ложных символов на выходе.
  3. Увеличь мелкое. Если буквы на картинке совсем маленькие, увеличь изображение в два-три раза перед распознаванием.
  4. Повысь контраст. Особенно для чеков: термобумага выцветает, и слабый серый текст на сером фоне читается плохо.

Если Tesseract не справляется совсем

Бывают задачи, где и предобработка не спасает: сложные макеты, нестандартные шрифты, документы с печатями поверх текста. Тогда есть три пути. Первый — попробовать другие открытые OCR-движки: кроме Tesseract существуют, например, EasyOCR и PaddleOCR, они построены на нейросетях и на части сложных изображений работают лучше, хотя тоже ставятся локально и бесплатно. Второй — передать картинку мультимодальной ИИ-модели, если данные нечувствительные. Третий — гибрид: Tesseract снимает текст там, где справляется, а спорные места дообрабатывает ИИ. Выбор зависит от объёма, бюджета и требований к приватности.

Практический пример: приложение для учёта расходов

Соберём всё в одну картинку на реальном сценарии. Допустим, ты делаешь приложение для учёта расходов и хочешь функцию «сфотографируй чек — трата добавится сама».

Как это работает с Tesseract:

  1. Пользователь загружает фото чека в приложение.
  2. Приложение предобрабатывает картинку: выравнивает, повышает контраст, переводит в чёрно-белый вид.
  3. Tesseract с русским языковым пакетом распознаёт текст чека: название магазина, позиции, цены, итоговую сумму, дату.
  4. Дальше простой код (или ИИ, если хочется умнее) находит в этом тексте итоговую сумму и дату и заполняет форму новой траты.
  5. Пользователь проверяет результат и нажимает «Сохранить».

Обрати внимание на честное разделение труда: Tesseract на шаге 3 делает то, что умеет, — вытаскивает сырой текст. Разбор «где здесь сумма» на шаге 4 — уже задача логики приложения или ИИ-модели. Для типовых чеков хватает простых правил (найти строку со словом «ИТОГО»), для хитрых случаев можно отправить распознанный текст в ИИ — но уже текст, а не картинку, что дешевле.

Как проверить качество результата

Перед тем как запускать распознавание на сотнях файлов, проверь точность на пяти-десяти типичных изображениях из твоей реальной задачи. Смотри на три вещи:

  • узнаваемость ключевых слов. Если в чеках тебе важна строка «ИТОГО», убедись, что она распознаётся без ошибок — по ней потом будет искать код;
  • характерные ошибки. У каждого типа документов они свои: чеки путают «0» и «О», сканы книг — «е» и «ё», скриншоты с мелким шрифтом теряют точки и запятые;
  • доля мусора. Отдельные ложные символы не страшны, если их легко отфильтровать; страшно, когда искажаются сами нужные данные.

Если на тестовой выборке точность не устраивает — сначала крути предобработку и режимы --psm, и только потом делай вывод, что инструмент не подходит. Опыт показывает: в большинстве «плохих» случаев проблема не в Tesseract, а в сырой картинке.

Тот же шаблон работает и для других задач:

  • автозаполнение формы по скриншоту — пользователь делает скриншот письма или документа, приложение само вытаскивает ФИО, адрес, номер заказа;
  • поиск по архиву сканов — прогоняешь тысячи отсканированных страниц через Tesseract, складываешь текст в базу и получаешь поиск по документам, которые раньше были «картинками»;
  • модерация изображений — проверка, нет ли на загруженных пользователями картинках запрещённого текста;
  • доступность — извлечение текста со скриншотов для людей, которые пользуются программами чтения с экрана.

Частые вопросы

Tesseract OCR действительно полностью бесплатный?

Да. Это проект с открытым исходным кодом под лицензией Apache 2.0: можно бесплатно использовать, в том числе в коммерческих приложениях, без ограничений на количество распознаваний. Скачивается с официальной страницы проекта на GitHub.

Как установить Tesseract OCR для Windows?

Скачай установщик со страницы проекта на GitHub (там ведёт ссылка на сборку UB Mannheim), запусти его и обязательно отметь русский язык в списке компонентов при установке. После этого программа вызывается из командной строки командой tesseract.

Почему Tesseract выдаёт непонятные символы вместо русского текста?

Почти наверняка не установлен русский языковой пакет. По умолчанию часто ставится только английский. Скачай rus.traineddata или доустанови пакет русского языка и укажи его при запуске флагом -l rus. Проверить список установленных языков можно командой tesseract --list-langs.

Может ли Tesseract распознать рукописный текст?

Плохо. Он предназначен для печатного текста, и на почерке точность сильно падает. Для рукописных заметок лучше подходят мультимодальные ИИ-модели или специализированные сервисы распознавания почерка.

Что лучше для сканов паспортов и чеков пользователей — Tesseract или ИИ-чат?

Для чувствительных данных безопаснее Tesseract: он работает локально, и изображения никуда не отправляются. Если потом нужно понять содержимое, в ИИ можно отправить уже распознанный текст — или развернуть ИИ-модель локально, о чём мы писали в обзоре локальных LLM.

Точно ли Tesseract распознаёт таблицы?

Текст из таблиц он извлечёт, но структуру — какие значения в каких ячейках стояли — часто теряет. Если таблица простая, помогает предобработка и режимы сегментации страницы; если сложная и важна структура, надёжнее ИИ-модель.

Заключение

Tesseract OCR — редкий пример инструмента, который одновременно бесплатный, проверен десятилетиями и решает свою задачу без лишних сложностей. Он превращает текст с фото, сканов и скриншотов в обычный редактируемый текст, работает полностью локально и не просит ни денег, ни ключей, ни интернета.

Главное, что стоит запомнить:

  • Tesseract — это «глаза», а не «голова»: он вытаскивает сырой текст, но не понимает его смысла. Для понимания нужна ИИ-модель — и оба инструмента отлично дополняют друг друга.
  • Для русского текста сразу ставь языковой пакет rus.traineddata — иначе получишь тарабарщину.
  • Качество результата наполовину зависит от предобработки: обрежь, выровняй, повысь контраст.
  • На рукописном тексте, сложных таблицах и плохих фото Tesseract слаб — это честные границы технологии.

Если в твоём приложении есть сценарий «пользователь загружает картинку, а нам нужен текст с неё» — попробуй описать эту задачу своему ИИ-ассистенту и попросить подключить Tesseract. Скорее всего, рабочий прототип появится быстрее, чем ты дочитаешь эту статью во второй раз.

Источники

  1. Tesseract OCR — официальный репозиторий проекта: github.com/tesseract-ocr/tesseract
  2. tessdata — официальные языковые данные (включая rus.traineddata): github.com/tesseract-ocr/tessdata

Читай дальше

Все статьи

Не просто статьи — тебя доведут до результата

В практикуме за 2499 ₽ рядом живая команда практикующих разработчиков и маркетологов: ведём по шагам до твоего работающего приложения. Не «ролики и сам разбирайся» — помогаем на каждом затыке.

Перейти к практикуму
Все статьи Ещё: технологии и архитектура