Разное

Распознать картинку – поиск изображений в интернете, поиск по картинке

19.07.2018

Содержание

Чтобы распознавать картинки, не нужно распознавать картинки / Habr

Посмотрите на это фото.

Это совершенно обычная фотография, найденная в Гугле по запросу «железная дорога». И сама дорога тоже ничем особенным не отличается.

Что будет, если убрать это фото и попросить вас нарисовать железную дорогу по памяти?

Если вы ребенок лет семи, и никогда раньше не учились рисовать, то очень может быть, что у вас получится что-то такое:


Упс. Кажется, что-то пошло не так.


Давайте еще раз вернемся к рельсам на первой картинке и попробуем понять, что не так.

На самом деле, если долго разглядывать ее, становится понятно, что она не совсем точно отображает окружающий мир. Главная проблема, о которую мы немедленно споткнулись — там, например, пересекаются параллельные прямые. Ряд одинаковых (в реальности) фонарных столбов на самом деле изображен так, что каждый следующий столб имеет все меньшие и меньшие размеры. Деревья вокруг дороги, у которых поначалу различимы отдельные ветки и листья, сливаются в однотонный фон, который еще и вдобавок почему-то приобретает отчетливо-фиолетовый оттенок.

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

Еще один замечательный пример — как маленькие дети рисуют небо.


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

И так происходит всегда и везде. Мы знаем, что куб состоит из квадратных граней, но посмотрите на картинку, и вы не увидите там ни одного прямого угла — более того, эти углы постоянно меняются, стоит сменить угол обзора. Как будто где-то в голове у нас сохранена грубая схема правильного, трехмерного объекта, и именно к ней мы обращаемся в процессе рисования рельс, не сразу успевая сопоставить результат с тем, что видим своими глазами.

На самом деле все еще хуже. Каким образом, например, на самой первой картинке с дорогой мы определяем, какая часть дороги расположена ближе к нам, а какая дальше? По мере удаления предметы становятся меньше, ок — но вы уверены, что кто-то не обманул вас, коварно разместив друг за другом последовательно уменьшающиеся шпалы? Далекие объекты обычно имеют бледно-голубоватый оттенок (эффект, который называется «атмосферная перспектива») — но предмет может быть просто окрашен в такой цвет, и в остальном казаться совершенно нормальным. Мост через железнодорожные пути, который едва видно отсюда, кажется нам находящимся позади, потому что его заслоняют фонари (эффект окклюзии) — но опять-таки, как вы можете быть уверены, что фонари просто не нарисованы на его поверхности? Весь этот набор правил, с помощью которых вы оцениваете трехмерность сцены, во многом зависит от вашего опыта, и возможно, генетического опыта ваших предков, обученных выживать в условиях нашей атмосферы, падающего сверху света и ровной линии горизонта.

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

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

Представьте, что вы — нейронная сеть.

Это не должно быть очень сложно — в конце концов, как-то так оно и есть на самом деле. Вы проводите свободное время за распознаванием лиц на документах в паспортном столе. Вы — очень хорошая нейронная сеть, и работа у вас не слишком сложная, потому что в процессе вы ориентируетесь на паттерн, строго характерный именно для человеческих лиц — взаимное расположение двух глаз, носа и рта. Глаза и носы сами по себе могут различаться, какой-то один из признаков иногда может оказаться на фотографии неразличимым, но вам всегда помогает наличие других. И вдруг вы натыкаетесь вот на такое:

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

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

Самое обидное, что не видно, как можно решить этот вопрос механическим способом. Компьютерное зрение сталкивалось с соответствующими проблемами очень давно, с момента своего появления, и периодически находило эффективные частные решения — так, мы можем опознать сдвинутый в сторону предмет, последовательно передвигая свой проверочный паттерн по всему изображению (чем успешно пользуются сверточные сети), можем справляться с отмасштабированными или повернутыми картинками с помощью признаков SIFT, SURF и ORB, но эффекты перспективы и поворот предмета в пространстве сцены — похоже, вещи качественно другого уровня. Здесь нам нужно знать, как предмет выглядит

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


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

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

Вообще с двумя глазами все не так просто

Для некоторых действий они, похоже, и правда приносят пользу с точки зрения оценки пространственного положения. Возьмите два карандаша, закройте один глаз и попытайтесь сдвигать эти карандаши так, чтобы они соприкоснулись кончиками грифелей где-то вблизи вашего лица. Скорее всего, грифели разойдутся, причем ощутимо (если у вас получилось легко, поднесите их еще ближе к лицу), при этом со вторым открытым глазом такого не происходит. Пример взят из книги Марка Чангизи «Революция в зрении» — там есть целая глава о стереопсисе и бинокулярном зрении с любопытной теорией о том, что два смотрящих вперед глаза нужны нам для того, чтобы видеть сквозь мелкие помехи вроде свисающих листьев. Кстати, забавный факт — на первом месте в списке преимуществ бинокулярного зрения в Википедии стоит «It gives a creature a spare eye in case one is damaged».

Итак, бинокулярное зрение нам не подходит — и вместе с ним мы отвергаем стереокамеры, дальномеры и Kinect. Какой бы ни была способость нашей зрительной системы воссоздавать трехмерные образы увиденного, она явно не требует наличия двух глаз. Что остается в итоге?

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

Вернемся к теме поездов, только на этот раз выглянем из окна:

То, что мы при этом видим, называется «параллакс движения», и вкратце он заключается в том, что когда мы двигаемся вбок, близкие предметы смещаются в поле зрения сильнее, чем далекие. Для движения вперед/назад и поворотов тоже можно сформулировать соответствующие правила, но давайте их пока проигнорируем. Итак, мы собираемся двигаться, оценивать смещения предметов в кадре и на основании этого определять их расстояние от наблюдателя — техника, которая официально называется «structure-from-motion». Давайте попробуем.


Прежде всего — а не сделали ли все, случайно, до нас? Страница «Structure from motion» в Википедии предлагает аж тринадцать инструментов (и это только опенсорсных) для воссоздания 3D-моделей из видео или набора фотографий, большинство из них пользуются подходом под названием bundle adjustment, а самым удобным мне показался Bundler (и демо-результаты у него крутые). К сожалению, тут возникает проблема, с которой мы еще столкнемся — Bundler для корректной работы хочет знать от нас модель камеры и ее внутренние параметры (в крайнем случае, если модель неизвестна, он требует указать фокусное расстояние).

Если для вашей задачи это не проблема — можете смело бросать чтение, потому что это самый простой и одновременно эффективный метод (а знаете, кстати, что примерно таким способом делались модели в игре «Исчезнование Итана Картера»?). Для меня, увы, необходимость быть привязанным к модели камеры — это условие, которого очень хотелось бы избежать. Во-первых, потому что у нас под боком полный ютуб визуального видео-опыта, которым хотелось бы в будущем пользоваться в качестве выборки. Во-вторых (и это, может быть, даже важнее), потому что наш с вами человеческий мозг, похоже, если и знает в цифрах внутренние параметры камеры наших глаз, то прекрасно умеет приспосабливаться к любым оптическим искажениями. Взгляд через объектив широкофокусной камеры, фишай, просмотр кино и ношение окулусрифта совершенно не разрушает ваших зрительных способностей. Значит, наверное, возможен и какой-то другой путь.

Итак, мы печально закрыли страницу с Итаном Картером википедии и опускаемся на уровень ниже — в OpenCV, где нам предлагают следующее:

1. Взять два кадра, снятые с откалиброванной камеры.
2. Вместе с параметрами калибровки (матрицей камеры) положить их оба в функцию stereoRectify, которая выпрямит (ректифицирует) эти два кадра — это преобразование, которое искажает изображение так, чтобы точка и ее смещение оказывались на одной горизонтальной прямой.
3. Эти ректифицированые кадры мы кладем в функцию stereoBM и получаем карту смещений (disparity map) — такую картинку в оттенках серого, где чем пиксель ярче, тем большее смещение он выражает (по ссылке есть пример).
4. Полученную карту смещений кладем в функцию с говорящим названием reprojectImageTo3D (понадобится еще и матрица Q, которую в числе прочих мы получим на шаге 2). Получаем наш трехмерный результат.

Черт, похоже, мы наступаем на те же грабли — уже в пункте 1 от нас требуют откалиброванную камеру (правда, OpenCV милостиво дает возможность сделать это самому). Но погодите, здесь есть план Б. В документации прячется функция с подозрительным названием stereoRectifyUncalibrated…

План Б:

1. Нам нужно оценить примерную часть смещений самим — хотя бы для ограниченного набора точек. StereoBM здесь не подойдет, поэтому нам нужен какой-то другой способ. Логичным вариантом будет использовать feature matching — найти какие-то особые точки в обоих кадрах и выбрать сопоставления. Про то, как это делается, можно почитать здесь.
2. Когда у нас есть два набора соответствующих друг другу точек, мы можем закинуть их в findFundamentalMat, чтобы получить фундаментальную матрицу, которая понадобится нам для stereoRectifyUncalibrated.
3. Запускаем stereoRectifyUncalibrated, получаем две матрицы для ректификации обоих кадров.
4. И… а дальше непонятно. Выпрямленные кадры у нас есть, но нет матрицы Q, которая была нужна для завершающего шага. Погуглив, я наткнулся примерно на такой же недоумения пост, и понял, что либо я что-то упустил в теории, либо в OpenCV этот момент не продумали.

OpenCV: мы — 2:0.

4.1 Меняем план


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

Это все прекрасно, но вообще говоря, нам не нужно. Реальные размеры предметов интересовали бы нас, если бы наша модель использовалась потом для промышленных целей, в каких-нибудь 3d-принтерах. Но мы собираемся (эта цель слегка уже расплылась, правда) запихивать полученные данные в нейросети и им подобные классификаторы. Для этого нам достаточно знать только относительные размеры предметов. Они, как мы все еще помним, обратно пропорциональны смещениям параллакса — чем дальше от нас предмет, тем меньше смещается при нашем движении. Нельзя ли как-то найти эти смещения еще проще, просто каким-то образом сопоставив обе картинки?

Само собой, можно. Привет, оптический поток.

Это замечательный алгоритм, который делает ровно то, что нам нужно. Кладем в него картинку и набор точек. Потом кладем вторую картинку. Получаем на выходе для заданных точек их новое положение на второй картинке (приблизительное, само собой). Никаких калибровок и вообще никаких упоминаний о камере — оптический поток, несмотря на название, можно рассчитывать на базе чего угодно. Хотя обычно он все-таки используется для слежения за объектами, обнаружения столкновений и даже дополненной реальности.

Для наших целей мы (пока) хотим воспользоваться «плотным» потоком Гуннара Фарнебака, потому что он умеет рассчитывать поток не для каих-то отдельных точек, а для всей картинки сразу. Метод доступен с помощью calcOpticalFlowFarneback, и первые же результаты начинают очень-очень радовать — смотрите, насколько оно выглядит круче, чем предыдущий результат stereoRectifyUncalibrated + stereoBM.


Большое спасибо замечательной игре Portal 2 за возможность строить собственные комнаты и играть в кубики. I’m doin’ Science!

Код для для этой маленькой демонстрации
# encoding: utf-8

import cv2
import numpy as np
from matplotlib import pyplot as plt

img1 = cv2.imread('0.jpg', 0)
img2 = cv2.imread('1.jpg', 0)


def stereo_depth_map(img1, img2):
    # 1: feature matching
    orb = cv2.ORB()
    kp1, des1 = orb.detectAndCompute(img1, None)
    kp2, des2 = orb.detectAndCompute(img2, None)

    bf = cv2.BFMatcher(cv2.NORM_HAMMING, crossCheck=True)
    matches = bf.match(des1, des2)
    matches = sorted(matches, key=lambda x: x.distance)

    src_points = np.vstack([np.array(kp1[m.queryIdx].pt) for m in matches])
    dst_points = np.vstack([np.array(kp2[m.trainIdx].pt) for m in matches])

    # 2: findFundamentalMat
    F, mask = cv2.findFundamentalMat(src_points, dst_points)

    # 3: stereoRectifyUncalibrated
    _, h2, h3 = cv2.stereoRectifyUncalibrated(src_points.reshape(src_points.shape[
                                              0], 1, 2), dst_points.reshape(dst_points.shape[0], 1, 2), F, img1.shape)

    rect1 = cv2.warpPerspective(img1, h2, (852, 480))
    rect2 = cv2.warpPerspective(img2, h3, (852, 480))

    # 3.5: stereoBM
    stereo = cv2.StereoBM(cv2.STEREO_BM_BASIC_PRESET, ndisparities=16, SADWindowSize=15)
    return stereo.compute(rect1, rect2)


def optical_flow_depth_map(img1, img2):
    flow = cv2.calcOpticalFlowFarneback(img1, img2, 0.5, 3, 20, 10, 5, 1.2, 0)
    mag, ang = cv2.cartToPolar(flow[..., 0], flow[..., 1])
    return mag


def plot(title, img, i):
    plt.subplot(2, 2, i)
    plt.title(title)
    plt.imshow(img, 'gray')
    plt.gca().get_xaxis().set_visible(False)
    plt.gca().get_yaxis().set_visible(False)

plot(u'Первый кадр', img1, 1)
plot(u'Второй кадр (шаг вправо)', img2, 2)
plot(u'stereoRectifyUncalibrated', stereo_depth_map(img1, img2), 3)
plot(u'Первый кадр', optical_flow_depth_map(img1, img2), 4)

plt.show()

Итак, отлично. Смещения у нас есть, и на вид неплохие. Как теперь нам получить из них координаты трехмерных точек?

4.2 Часть, в которой мы получаем координаты трехмерных точек


Эта картинка уже мелькала на одной из ссылок выше.

Расстояние до объекта здесь рассчитывается методом школьной геометрии (подобные треугольники), и выглядит так: . А координаты, соответственно, вот так: . Здесь w и h — ширина и высота картинки, они нам известны, f — фокусное расстояние камеры (расстояние от центра камеры до поверхности ее экрана), и B — камеры же шаг. Кстати, обратите внимание, что мы тут слегка нарушаем общепринятые названия осей, когда Z направлена вверх — у нас Z смотрит «вглубь» экрана, а X и Y — соответственно, направлены по ширине и высоте картинки.

Ну, насчет f все просто — мы уже оговаривали, что реальные параметры камеры нас не интересуют, лишь бы пропорции всех предметов изменялись по одному закону. Если подставить Z в формулу для X выше, то можно увидеть, что X от фокусного расстояния вообще не зависит (f сокращается), поэтому разные его значения буду менять только глубину — «вытягивать» или «сплющивать» нашу сцену. Визуально — не очень приятно, но опять же, для алгоритма классификации — совершенно все равно. Так что зададим фокусное расстояние интеллектуальным образом — просто придумаем. Я, правда, оставляю за собой право слегка изменить мнение дальше по тексту.

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

Настало время написать немного кода
import cv2
import numpy as np

f = 300   # раз мы занимаемся визуализацией, фокус я все-таки подобрал так, чтобы сцена выглядела условно реальной
B = 1
w = 852
h = 480

img1 = cv2.imread('0.jpg', 0)
img2 = cv2.imread('1.jpg', 0)

flow = cv2.calcOpticalFlowFarneback(img1, img2, 0.5, 3, 20, 10, 5, 1.2, 0)
mag, ang = cv2.cartToPolar(flow[..., 0], flow[..., 1])

edges = cv2.Canny(img1, 100, 200)

result = []
for y in xrange(img1.shape[0]):
    for x in xrange(img1.shape[1]):
        if edges[y, x] == 0:
            continue
        delta = mag[y, x]
        if delta == 0:
            continue
        Z = (B * f) / delta
        X = (Z * (x - w / 2.)) / f
        Y = (Z * (y - h / 2.)) / f
        point = np.array([X, Y, Z])
        result.append(point)

result = np.vstack(result)


def dump2ply(points):
    # сохраняем в формат .ply, чтобы потом открыть Блендером
    with open('points.ply', 'w') as f:
        f.write('ply\n')
        f.write('format ascii 1.0\n')
        f.write('element vertex {}\n'.format(len(points)))
        f.write('property float x\n')
        f.write('property float y\n')
        f.write('property float z\n')
        f.write('end_header\n')
        for point in points:
            f.write('{:.2f} {:.2f} {:.2f}\n'.format(point[0], point[2], point[1]))

dump2ply(result)

Вот так выглядит результат. Надеюсь, эта гифка успела загрузиться, пока вы дочитали до этого места.


Для наглядности я взял не все точки подряд, а только границы, выделенные Canny-детектором

С первого взгляда (во всяком случае, мне) все показалось отличным — даже углы между гранями кубиков образовали симпатичные девяносто градусов. С предметами на заднем плане получилось похуже (обратите внимание, как исказились контуры стен и двери), но хэй, наверное, это просто небольшой шум, его можно будет вылечить использованием большего количества кадров или чем-нибудь еще.

Из всех возможных поспешных выводов, которые можно было здесь сделать, этот оказался дальше всех от истины.


В общем, основная проблема оказалась в том, что какая-то часть точек довольно сильно искажалась. И — тревожный знак, где уже пора было заподозрить неладное — искажалась не случайным образом, а примерно в одних и тех же местах, так что исправить проблему путем последовательного наложения новых точек (из других кадров) не получалось.Выглядело это примерно так:
Лестница сминается, местами превращаясь в аморфный кусок непонятно-чего.

Я очень долго пытался это починить, и за это время перепробовал следующее:

— сглаживать каринку с оптическим потоком: размытие по Гауссу, медианный фильтр и модный билатеральный фильтр, который оставляет четкими края. Бесполезно: предметы наоборот, еще сильнее расплывались.
— пытался находить на картинке прямые линии с помощью Hough transform и переносить их в неизменном прямом состоянии. Частично работало, но только на границах — поверхности по-прежнему оставались такими же искаженными; плюс никуда не получалось деть мысль в духе «а что если прямых линий на картинке вообще нет».
— я даже попытался сделать свою собственную версию оптического потока, пользуясь OpenCVшным templateMatching. Работало примерно так: для любой точки строим вокруг нее небольшой (примерно 10×10) квадрат, и начинаем двигать его вокруг и искать максимальное совпадение (если известно направление движения, то «вокруг» можно ограничить). Получилось местами неплохо (хотя работало оно явно медленнее оригинальной версии):

Слева уже знакомый поток Фарнебака, справа вышеописаный велосипед

С точки зрения шума, увы, оказалось ничуть не лучше.

В общем, все было плохо, но очень логично. Потому что так оно и должно было быть.


Иллюстрация к проблеме. Движение здесь — по-прежнему шаг вправо

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

Чуть сложнее, но все еще легко обстоит ситуация с вертикальной линией (вторая левая зеленая точка). Учитывая, что мы двигаемся вправо, вертикальная линия встретится нам только один раз за весь период поиска. Представьте, что мы ползем своим поисковым окном по картинке и видим однотонный фон, фон, снова фон, вертикальный отрезок, опять фон, фон, и снова фон. Тоже несложно.

Проблема появляется, когда мы пытаемся отслеживать кусок линии, расположенной параллельно движению. У красной точки нет одного четко выраженного кандидата на роль смещенного близнеца. Их много, все они находятся рядом, и выбрать какого-то одного тем методом, что мы пользуемся, просто невозможно. Это функциональное ограничение оптического потока. Как нас любезно предупреждает википедия в соответствующей статье, «We cannot solve this one equation with two unknown variables», и тут уже ничего не сделаешь.

Совсем-совсем ничего?

Вообще, если честно, то это, наверное, не совсем правда. Вы ведь можете найти на правой картинке соответствие красной точке? Это тоже не очень сложно, но для этого мы мысленно пользуемся каким-то другим методом — находим рядом ближайшую «зеленую точку» (нижний угол), оцениваем расстояние до нее и откладываем соответствующее расстояние на второй грани куба. Алгоритмам оптического потока есть куда расти — этот способ можно было бы и взять на вооружение (если этого еще не успели сделать).


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

Собственно, все оказалось вот так просто. Мы будем рассчитывать тот же самый оптический поток, но только для «зеленых», устойчивых точек. И кстати, в OpenCV о нас уже позаботились. Нужная нам штука называется поток Лукаса-Канаде.

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

С появлением поворотов координаты X и Z у нас смешиваются. Оставим старые формулы для расчета координат относительно камеры, и будем переводить их в абсолютные координаты следующим образом (здесь — координаты положения камеры, альфа — угол поворота):



(игрек — читер; это потому, что мы считаем, что камера не двигается вверх-вниз)

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


Неочевидно, но это попытка устроить обход камеры вокруг обычного кубика. Каждый кадр — оценка видимых точек после очередного поворота камеры. Вид сверху, как на миникарте.

К счастью, у нас все еще есть оптический поток. При повороте мы можем увидеть, какие точки переходят в какие, и рассчитать для них координаты с двух углов зрения. Отсюда несложно получить фокусное расстояние (просто возьмите две вышеприведенных формулы для разных значений альфа, приравняйте координаты и выразите f). Так гораздо лучше:


Не то что бы все точки легли идеально одна в другую, но можно хотя бы догадаться о том, что это кубик.

И, наконец, нам нужно как-то справляться с шумом, благодаря которому наши оценки положения точек не всегда совпадают (видите на гифке сверху аккуратные неровные колечки? вместо каждого из них, в идеале, должна быть одна точка). Тут уже простор для творчества, но наиболее адекватный способ мне показался таким:
— когда у нас есть подряд несколько сдвигов в сторону, объединяем информацию с них вместе — так для одной точки у нас будет сразу несколько оценок глубины;
— когда камера поворачивается, мы пытаемся совместить два набора точек (до поворота и после) и подогнать один к другому. Эта подгонка по-правильному называется «регистрацией точек» (о чем вы бы никогда не догадались, услышав термин в отрыве от контекста), и для нее я воспользовался алгоритмом Iterative closest point, нагуглив версию для питона + OpenCV;
— потом точки, которые лежат в пределах порогового радиуса (определяем методом ближайшего соседа), сливаются вместе. Для каждой точки мы еще отслеживаем что-то типа «интенсивности» — счетчик того, как часто она объединялась с другими точками. Чем больше интенсивность — тем больше шанс на то, что это честная и правильная точка.

Результат может и не такой цельный, как в случае с кубиками из Портала, но по крайней мере, точный. Вот пара воссозданных моделей, которые я сначала загрузил в Блендер, покрутил вокруг них камеру и сохранил полученные кадры:


Голова профессора Доуэля


Какая-то рандомная машина

Бинго! Дальше нужно их все запихать в распознающий алгоритм и посмотреть, что получится. Но это, пожалуй, оставим на следующую серию.


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

Вообще говоря, это ведь наверняка проблема не только зрения. Это скорее правило, а не исключение — наши сенсоры не всемогущи, они постоянно воспринимают информацию об объекте частями — но любопытно, насколько все подобные случаи можно объединить в какой-то общий фреймворк? Скажем (возвращаясь к зрению), ваши глаза сейчас постоянно совершают мелкие и очень быстрые движения — саккады — перескакивая между предметами в поле зрения (а в промежутках между этими движениями ваше зрение вообще не работает — именно поэтому нельзя увидеть собственные саккады, даже уставившись в зеркало в упор). Мозг постоянно занимается упорной работой по «сшиванию» увиденных кусочков. Это — та же самая задача, которую мы только что пытались решить, или все-таки другая? Восприятие речи, когда мы можем соотнести десяток разных вариантов произношения слова с одним его «идеальным» написанием — это тоже похожая задача? А как насчет сведения синонимов к одному «образу» предмета?

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

Очевидные соображения говорят, что когда мы пытаемся воссоздать какую-то штуку, увиденную в природе, нет смысла слепо копировать все ее составные части. Чтобы летать по воздуху, не нужны машущие крылья и перья, достаточно жесткого крыла и подъемной силы; чтобы быстро бегать, не нужны механические ноги — колесо справится гораздо лучше. Вместо того, чтобы копировать увиденное, мы хотим найти принцип и повторить его своими силами (может быть, сделав это проще/эффективней). В чем состоит принцип интеллекта, аналог законов аэродинамики для полета, мы пока не знаем. Deep learning и Ян Лекун, пророк его (и вслед за ним много других людей) считают, что нужно смотреть в сторону способности строить «глубокие» иерархии фич из получаемых данных. Может быть, мы сможем добавить к этому еще одно уточнение — способность объединять вместе релевантные куски данных, воспринимая их как части одного объекта и размещая в новом измерении?

habr.com

Оптическое распознавание текста (OCR) | Яндекс.Облако

В этом разделе описано, как работает возможность распознавание текста (Optical Character Recognition, OCR) в сервисе.

Процесс распознавания текста

Распознавание текста на изображении состоит из двух этапов:

  1. Определение языковой модели для распознавания текста.
  2. Поиск текста на изображении.

В результате распознавания сервис вернет JSON-объект с распознанным текстом, его расположением на странице и достоверностью распознавания.

Определение языковой модели

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

Модель выбирается автоматически на основе списка языков, указанных в запросе в свойстве language_codes. Если вы не знаете язык текста, укажите "language_codes": ["*"], чтобы сервис выбрал наиболее подходящую модель.

Для каждой запрошенной возможности (feature) используется только одна модель. Например, если на изображении текст на китайском и японском, то распознан будет только один из этих языков. Чтобы распознать языки из разных моделей, укажите несколько возможностей в запросе.

Примеры смотрите в инструкции Распознавание текста.

Совет

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

Поиск текста на изображении

Сервис выделяет найденный текст на изображении и группирует его по уровням: слова группируются в строки, строки в блоки, блоки в страницы.

В результате сервис возвращает JSON-объект, где для каждого из уровней дополнительно указывается:

  • страницы (pages[]) — размер страницы;
  • блоки текста (blocks[]) — расположение текста на странице;
  • строки (lines[]) — расположение и достоверность распознавания;
  • слова (words[]) — расположение, достоверность, текст и язык, использованный при распознавании.

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

Координаты прямоугольника считаются от левого верхнего угла и указываются против часовой стрелки:

Пример распознанного слова с координатами:

{
  "boundingBox": {
    "vertices": [{
        "x": "410",
        "y": "404"
      },
      {
        "x": "410",
        "y": "467"
      },
      {
        "x": "559",
        "y": "467"
      },
      {
        "x": "559",
        "y": "404"
      }
    ]
  },
  "languages": [{
    "languageCode": "en",
    "confidence": 0.9412244558
  }],
  "text": "you",
  "confidence": 0.9412244558
}

Требования к изображению

Изображение в запросе должно соответствовать следующим требованиям:

  • Поддерживаемые форматы файлов: JPEG, PNG, PDF.

    MIME-тип файла указывается указывается в свойстве mime_type. По умолчанию image.

  • Максимальный размер файла: 1 МБ.

  • Размер изображения не должен превышать 20 мегапикселей (длина x ширина).

Достоверность распознавания

Достоверность распознавания показывает уверенность сервиса в результате. Например, значение "confidence": 0.9412244558 для строки we like you означает, что с вероятностью в 94% текст распознан корректно.

Сейчас достоверность считается только для строк. В значение confidence для слов и языка подставляется значение для confidence строки.

Что дальше

cloud.yandex.ru

Удобная функция распознавания картинок с Google search by image

С недавнего времени самый массовый поисковик  предоставляет интересную возможность «поиск по картинке» — Google search by image.  По сути это распознавание изображения или как ещё называют распознавание по картинке). В чём суть сервиса?  Предположим Вы не знаете кто это такой:

Не беда, Google image подскажет! Открываем страничку Google image:

И в правом углу строки поиска видим иконку фотоаппарата (для настройки в Opera читайте ниже). Нажимаем и в появившемся меню либо вводим адрес картинки, либо загружаем её, если картинка сохранена у Вас на диске.

После поиска Google выдаёт ответ на вопрос «кто же на изображении?»: «арнольд шварценеггер»

Если Вы уберёте в левой части строки поиска параметр JPG (показано стрелкой), то поисковик выдаст более широкий перечень подходящих изображений, но теперь уже критерием поиска будет не изображение, а поисковая фраза » арнольд шварценеггер «: 

Данной функцией можно воспользоваться и при поиске в  Google по картинке. Например Вас заинтересовало какое-то изображение:

Жмёте и переходите на страницу, на которой расположено данное изображение. В меню справа в таком случае также доступна функция Поиск по картинке.

Хочу сразу обратить внимание, что данная функция именно анализирует изображение и не имеет ничего общего с функцией «Похожие», которая ориентируется на словесное описание. В режиме «Поиск по картинке» Google использует технологии компьютерного зрения, чтобы сопоставить изображение с другими картинками. Ради забавы можете проанализировать какое-нибудь своё изображение и узнать на кого Вы похожи по мнению  Google.

Существуют также расширения для браузеров Google Chrome или  Firefox, с помощью которых можно выполнять поиск по картинкам в Интернете, просто нажимая на нужное изображение правой кнопкой мыши. В  Chrome это выглядит примерно так:

В Opera всё немного  печальнее, но тоже возможно реализовать данную функцию. Открываете любую страницу поисковика  Google и кликаете правой кнопкой мыши. В контекстном меню выбираете «Настройки для сайта»

Затем вкладку «Сеть» и в поле «Идентификация браузера» выбираем «Представляться как Firefox».

 

После обновления страницы функция Search by Image станет доступной и в Opera. Есть также неплохое видео, поясняющее как настроить данную функцию

 [youtube]http://www.youtube.com/watch?v=KuPetpKb-vc[/youtube]

Можно пойти дальше и установить расширенное меню в котором «включена» данная функция. После установки меню при клике правой кнопкой мыши по изображению, доступна функция «Распознать с Google image». Узнать как скачать и установить меню можно в статье Смена темы оформления и профиля меню в Opera.  Из трёх меню выбирайте standard_menu (1).ini.

Похожие записи

z-force.info

Как проверить фото на совпадение в интернете

Приветствую, друзья! Недавно озаботился таким вопросом – как проверить фото на совпадение в интернете? Не секрет же, что поисковые системы весьма трепетно относятся к уникальным текстам. Вот и к фотографиям они также неравнодушны, поскольку считают, что авторское право никто еще не отменял. Поразмыслив над темой, я понял, что существует несколько способов узнать, насколько «чистое» фото и нет ли у него копий во всемирной паутине.

Сразу хочу сказать, что по-настоящему уникальные фотографии можно найти исключительно на специализированных сайтах. Они называются по-разному – фотобанки, стоки и так далее. Только там есть авторские фотографии, которые можно купить или скачать бесплатно. Это зависит от того, насколько щедр тот или иной фотобанк, насколько он популярен и насколько автор снимка или картинки ценит себя и свое творчество.

Какие есть способы

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

  • поисковые системы Google и Yandex;
  • сайт tineye.com;
  • программа Etxt Антиплагиат.

Остановимся на каждом пункте поподробнее.

Поисковые системы Google и Yandex

Очень часто Гугл в сознании людей – это поисковик. Немного реже – почта. Однако сервис хранит в себе очень много интересного как для рядового пользователя, так и для вебмастера. Одной из его таких «фишек» является как раз проверка изображений на уникальность. Алгоритм поиска совпадений достаточно прост – система просто мониторит то, насколько часто то или иное изображение встречалось в сети по заданному пользователем образцу и выдает примерные совпадения (среди которых как раз и может оказаться искомая картинка или фотография).

Для проверки изображения на уникальность вам нужно будет перейти на сайт https://images.google.com. В привычной строке поиска с правой стороны вы увидите небольшой значок фотоаппарата.

Нажав на него, вам будет предложено два варианта: указать ссылку на картинку в интернете или загрузить свой собственный файл. Нам, например, нужно узнать, насколько уникально изображение с нашего винчестера. Кликнув по второму варианту «Загрузить файл», вы увидите строчку «Выберите файл». При нажатии на нее откроется небольшое диалоговое окно, в котором вам будет предложено найти фото на своем компьютере и загрузить его для проверки. Выбрав нужное изображение, следует нажать «Открыть». После этого система загрузит картинку и начнет поиск по фото. Он, как правило, занимает доли секунды, а после этого вы узнаете, есть ли в сети копии того изображения или оно уникально.

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

Примерно также обстоит дело и с отечественным поисковиком Яндексом. Чтобы осуществить поиск через него нужно зайти по адресу https://yandex.ru/images/.

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

Как по мне, Гугл работает несколько шустрее Яндекса, да и результат у него, как правило, точнее и лучше.

Сайт tineye.com

Для поиска через этот интернет-ресурс нужно перейти на сайт https://tineye.com/. Он очень простой и обладает интуитивно понятным интерфейсом. Прямо по центру вы увидите небольшую строку. С левой части от нее есть кнопка для загрузки файла на сайт и последующей проверки, а справа кнопка поиск. Она нужна для того, чтобы проверить, сколько упоминаний о требуемом изображении можно отыскать, если ввести URL-адрес фотографии.

Сайт отличается от среди подобных тем, что очень быстро работает в режиме онлайн и прост в освоении. После загрузки картинки он покажет, сколько раз она встречается в интернете. Интересно, что он практически никогда не показывает похожие изображения. Хотя может это мне просто везло всегда – не знаю. Либо уникально, либо нет, других вариантов не предусмотрено.

Программа Etxt Антиплагиат

Если вам лень постоянно открывать браузер, щелкать ссылки, загружать фотографии в сеть, то можно воспользоваться бесплатной программой для компьютеров под названием Etxt Антиплагиат. Это официальная утилита от биржи контента etxt.ru, которая когда-то специализировалась только на текстах и переводах, а теперь пробует себя в качестве фотобанка. Любой пользователь может выставить на продажу свои авторские снимки или нарисованные картинки, но все они проходят проверку на уникальность внутри системы. Нам же нужно просто проверить, а не выставлять на продажу, поэтому скачиваем программу с официального сайта: https://www.etxt.biz/antiplagiat/ и устанавливаем ее.

После этого необходимо перейти в меню «Операции» и выбрать пункт «Уникальность изображения». Далее вы увидите кнопку с правой стороны от поисковой строки. Нажав ее, вы откроете диалоговое окно, где сможете найти оригинал картинки на своем компьютере и загрузить его для проверки. Программа работает четко и достоверно. Единственный минус – порой поиск может немного затянуться.

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

Как видите, ничего сложного в проверке изображений на уникальность нет. Зато если вы будете уверены, что таких картинок нигде больше нет, то точно не будете бояться штрафных санкций от поисковиков или, что еще хуже, судебных исков от правообладателей!

А какими средствами поиска похожих картинок или фото пользуетесь вы? Обязательно напишите в комментариях. Возможно ваш метод окажется более эффективным.

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

PS: Интересные факты по поиску картинок в Яндекс

Дорогой читатель! Вы посмотрели статью до конца. Получили вы ответ на свой вопрос? Напишите в комментариях пару слов.Если ответа не нашли, укажите что искали.

tvojkomp.ru

Распознавание текста онлайн — ТОП-9 сервисов

Распознавание текста с картинки, OCR (optical character recognition), то есть превращение картинки в текст доступно бесплатно на многих сайтах в режиме онлайн. Но везде свое качество и свои ограничения на количество распознаваемых картинок.

Я проверила с десяток онлайн-сервисов и составила рейтинг лучших.

Для примера распознавала фотографию документа, который есть у каждого – свидетельство ИНН физического лица (разрешением 1275×1750 пикселей).

Google

В Google можно распознавать неограниченное количество картинок, лишь бы они поместились на Google Drive. Нужно просто открыть картинку с Google диска с помощью Google Документов, и она автоматически распознается.

Входные форматыPDF , JPEG, PNG, GIF
Выходные форматыWord, Open Document, RTF, Adobe PDF, HTML, Text Plain, Epub (но форматирование исчезает – нарушается компоновка картинок с текстом)
Размер файлаДо 2 Мб
ОграниченияОграничено только размером хранилищ Google.

Качество исходника рекоменовано не меньше 10 пикселей по высоте для строки.

КачествоТак себе – качество распознавания свидетельства инн хуже, чем с Finereader. И ФИО, и номер инн полностью потеряны.

Как пользоваться

У вас должен быть Google-аккаунт для пользования сервисом, если есть почта gmail – подойдет аккаунт от нее.

  1. Загрузите файл на страницу drive.google.com  или выберите там уже загруженную картинку
  2. Нажмите правой кнопкой мыши на нужный файл.
  3. Выберите “Открыть с помощью” –>  “Google Документы”.
  4. Картинка преобразуется в документ Google и откроется на вкладке https://docs.google.com

Abbyy Finereader

В Abbyy Finereader Online самый удобный интерфейс, хорошее качество, но доступна только ознакомительная версия – можно распознать не более 10 страниц за две недели. (200 страниц в месяц стоят 299р).  Для использования сервиса нужно зарегистрироваться (можно войти через аккаунты социальных сетей). Кроме того, полученный текст можно там же перевести на другой язык с помощью машинного перевода.

Бесплатно доступно не более 10 страниц в две недели.

Входные форматыPDF, TIF, JPEG, BMP, PCX, PNG
Выходные форматыWord, Excel, Power Point, Open Document, RTF, Adobe PDF,  Text Plain, Fb2, Epub
Размер файлаДо 100Мб
Ограничения10 картинок на две недели
КачествоКачество распознавания свидетельства инн оказалось хорошее. Примерно как  у Online OCR  – какие-то части документа лучше распознались тем сервисом, а какие-то – этим.

 

Результат распознавания Finereader. (ФИО и город распознаны, но стерты вручную)

Как пользоваться

  1. Загрузите файлы
  2. Выберите язык
  3. Выберите выходной формат
  4. Щелкните кнопку «Распознать»

Распознавание текста онлайн без регистрации

Online OCR

Online OCR  http://www.onlineocr.net/  – единственный наряду с Abbyy Finereader сервис, который позволяет сохранять в выходном формате картинки вместе с текстом. Вот как выглядит распознанный вариант с выходным форматом Word:

Результат распознавания в Online OCR (ФИО и дата распознаны, но стерты вручную)
Входные форматыPDF, TIF, JPEG, BMP, PCX, PNG, GIF
Выходные форматыWord, Excel, Adobe PDF,  Text Plain
Размер файлаДо 5Мб без регистрации и до 100Мб с ней
ОграниченияРаспознает не более 15 картинок в час без регистрации
КачествоКачество распознавания свидетельства инн оказалось хорошее. Примерно как у Abbyy Finereader – какие-то части документа лучше распознались тем сервисом, а какие-то – этим.
Как пользоваться
  1. Загрузите файл (щелкните «Select File»)
  2. Выберите язык и выходной формат
  3. Введите капчу и щелкните «Convert»

Внизу появится ссылка на выходной файл (текст с картинками) и окно с текстовым содержимым

Free Online OCR

Free Online OCR  https://www.newocr.com/ позволяет выделить часть изображения. Выдает результат в текстовом формате (картинки не сохраняются).

Входные форматыPDF, DjVu  JPEG, PNG, GIF, BMP, TIFF
Выходные форматыText Plain (PDF и Word тоже можно загрузить, но внутри них все равно текст без форматирования и картинок).
Размер файлаДо 5Мб без регистрации и до 100Мб с ней
ОграниченияОграничения на количество нет
КачествоКачество распознавания свидетельства инн плохое.

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

 Как пользоваться
  1. Выберите файл или вставьте url файла и щелкните «Preview» – картинка загрузится и появится в окне браузера Не забудьте правильно указать язык.
  2. Выберите область сканирования (можно оставить целиком как есть)
  3. Выберите языки, на которых написан текст на картинке и щелкните кнопку «OCR»
  4. Внизу появится окно с текстом

OCR Convert

OCR Convert http://www.ocrconvert.com/ txt

Входные форматыМногостраничные PDF, JPG, PNG, BMP, GIF, TIFF
Выходные форматыText Plain
Размер файлаДо 5Мб общий размер файлов за один раз.
ОграниченияОдновременно до 5 файлов. Сколько угодно раз.
КачествоКачество распознавания свидетельства инн среднее. (ФИО распознано частично). Лучше, чем Google, хуже, чем Finereader

 

Как пользоваться
      1. Загрузите файл, выберите язык и щелкните кнопку «Process»

      1. Появится ссылка на файл с распознанным текстом

Free OCR

Free OCR www.free-ocr.com распознал документ хуже всех.

Входные форматыPDF, JPG, PNG, BMP, GIF, TIFF
Выходные форматыText Plain
Размер файлаДо 6Мб
ОграниченияУ PDF-файла распознается только первая страница
КачествоКачество распознавания свидетельства инн низкое – правильно распознано только три слова.
Как пользоваться
      1. Выберите файл
      2. Выберите языки на картинке
      3. Щелкните кнопку “Start”

I2OCR

I2OCR http://www.i2ocr.com/ неплохой сервис со средним качеством выходного файла. Отличается приятным дизайном, отсутствием ограничений на количество распознаваемых картинок. Но временами зависает.

Входные форматыJPG, PNG, BMP, TIF, PBM, PGM, PPM
Выходные форматыText Plain (PDF и Word тоже можно загрузить, но внутри них все равно текст без форматирования и картинок).
Размер файлаДо 10Мб
Ограничениянет
КачествоКачество распознавания свидетельства инн среднее – сравнимо с OCR Convert.

Замечено, что сервис временами не работает.

Как пользоваться
  1. Выберите язык
  2. Загрузите файл
  3. Введите капчу
  4. Щелкните кнопку «Extract text»
  5. По кнопке «Download» можно загрузить выходной файл в нужном формате

Яндекс OCR

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

Просто перейдите на https://translate.yandex.ru/ocr, загрузите картинку (можно перетащить) и щелкните “Открыть в Переводчике”. Откроется как текст с картинки, так и перевод в правом поле.

Перетащите картинкуРезультат распознавания

Convertio

Convertio hhttps://convertio.co/ru/ocr/ работает своеобразно, поэтому сравнивать его тяжело. В целом не понравился. Свидетельство ИНН, загруженное целиком, он не распознал совсем, так как плохо выделяет текст среди картинок. Не распозналось ни одного слова! Для его проверки я вырезала текстовый кусочек из ИНН и распознала его – это удалось сделать.

К тому же временами он зависает в попытках что-либо распознать.

Входные форматыpdf, jpg, bmp, gif, jp2, jpeg, pbm, pcx, pgm, png, ppm, tga, tiff, wbmp, webp
Выходные форматыText Plain, PDF, Word , Excel, Pptx, Djvu, Epub, Fb2, Csv
Размер файла?, зависит от тарифа
Ограничения10 страниц бесплатно, дальше тарифы от 7 долларов.
КачествоСложно оценить – файл с картинками (ИНН) не распознал совсем, отдельно вырезанный кусок текста распознал.

Замечено, что  при распознавании сервис временами зависает, возможно ваши картинки ставятся в большую очередь на бесплатном тарифе.

Как пользоваться
  1. Загрузите файл
  2. Выберите язык
  3. Выберите выходной формат
  4. Введите капчу
  5. Щелкните “Преобразовать”
  6. Чтобы увидеть результат, промотайте наверх к форме загрузки файлов. Там же можно будет и скачать результат.
Интерфейс Convertio

Вырезанный и распознанный кусок (целиком не распознается):

Результат работы Convertio

Заключение

Лучше всего документ распознал Abbyy Finereader и Online OCR. Кроме того, эти сервисы сохраняют форматирование файла: где нет текста, оставляют картинки и компонуют их с распознанным текстом. Из новых сервисов хорош Яндекс OCR.

Хуже всего сработал Free OCR – он распознал всего три слова.

 

itlang.ru

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

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

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

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

Видео — распознавание текста с картинки в WORD

Извлечение текста с помощью OneNote

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

Это стандартная программа, скорее всего вам не придется устанавливать ее самостоятельно. Найдите ее на компьютере в папке Microsoft Office или же с помощью поиска на панели «Пуск». Запустите программу.

Инструкции по извлечению текста:

  1. Шаг 1. Откройте любую страницу в OneNote, желательно пустую.

    Открываем любую страницу в OneNote

  2. Шаг 2. Перейдите в меню «Вставка»> «Изображения» и выберите файл изображения и настройте язык распознавания.

    Выберите файл изображения

  3. Шаг 3. Щелкните правой кнопкой мыши по вставленному изображению и выберите «Копировать текст с изображения». Он сохранится в буфере обмена.

Копируем текст с изображения

Теперь вы можете вставить его куда угодно. Удалите вставленное изображение, если оно вам больше не нужно.

Вставляем текст куда угодно

На заметку! Это быстрый и удобный способ извлечения текста из картинки, но есть одно «но» — One Note работает подобным образом лишь с латиницей. Он не распознает русский текст.

Использование онлайн-сервисов

Онлайн-сервисы по распознаванию текста с изображения работают примерно по одному и тому же принципу. В примере ниже использовался Free Online OCR. На этом сайте стоит ограничение. Регистрация даст вам доступ к дополнительным функциям, недоступным для гостей: конвертировать многостраничный PDF (более 15 страниц) в текст, большие изображения и ZIP-архивы, выбирать языки распознавания, конвертировать в редактируемые форматы и многое другое. Распознать короткий тест можно и без регистрации.

  1. Шаг 1. Откройте сайт бесплатного OCR. Выберите изображение посредством кнопки «Select File». Это может быть и PDF файл.

    Открываем сайт бесплатного OCR

  2. Шаг 2. Выберите язык и нажмите на кнопку «CONVERT».

    Выбираем язык и нажимаем на кнопку «CONVERT»

Текст появится в поле ниже. Вы также можете скачать в формате Microsoft Word.

Этот способ имеет ряд преимуществ:

  1. Вам не придется скачивать и устанавливать стороннее программное обеспечение.
  2. Итог можно скачать в виде текстового документа.
  3. Это быстро.
  4. Более того на сайте можно распознавать текст на одном из множества предложенных языков.

Видео — Как распознавать текст с картинки, фотографии или PDF файла

Как извлечь текст из изображений с помощью ABBY FineReader

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

Онлайн версия

  1. Шаг 1. Перейдите на сайт FineReader.

    Открываем сайт FineReader

  2. Шаг 2. Загрузите изображение. Выберите нужный вам язык и нажмите на кнопку регистрации. Следуйте указаниям на сайте. Как только вы зарегистрируетесь, сайт перенаправит вас на другую страницу. Нажмите на кнопку «Распознать» и дождитесь окончания процесса.

Загружаем файл, выбираем язык, выбираем формат сохранения

Текст сохранится в формате docs. Скачайте его.

Десктопная версия

  1. Шаг 1. Запустите FreeReader и нажмите «Сканировать изображение», чтобы выбрать файл, содержащий текст. Он загрузится в программу, при необходимости их можно отредактировать, чтобы улучшить распознаваемость текста. Программа предложит вам выделить область, текст с которой нужно распознать.
  2. Шаг 2. Извлечение текста. Нажмите «Распознать», чтобы извлечь текст из выделения. Выбранный текст будет отображаться в текстовом окне через несколько секунд.

    Извлекаем текст

Шаг 3. Проверка. В этой программе есть функция проверки. Нажав на эту кнопку, пользователь на экране будет видеть некорректно распознанные слова и фрагмент оригинала. На этом этапе можно быстро исправить практически все ошибки программы.

Шаг 4. Сохраните текст любым из предложенных способов.

Сохраняем текст

Обратите внимание:

  1. Во-первых, вам нужно убедиться, что исходное изображение четкое, хорошего качества.
  2. Во-вторых, выбор правильного механизма OCR важен, и вам нужно учитывать их сильные и слабые стороны.
  3. В-третьих, убедитесь, что ваши изображения масштабированы до нужного размера (не менее 300 DPI).
  4. Низкая контрастность приведет к плохому OCR, поэтому вам необходимо исправить это до распознавания.
  5. Удалите шумы и дефекты.
  6. Если изображение перекошено, отредактируйте его.

Видео — Как распознать PDF в Word

Сравнение популярный инструментов распознавания текста

Название программыOneNoteFineReader OCR OnlineFree Online OCR
Условия использованияСтандартная программа, входящая в пакет Microsoft Office. Как правило, присутствует на всех компьютерах ОС WindowsОнлайн версия программы. До 5 страниц бесплатно при регистрацииБесплатный онлайн-сервис. Не требует регистрации
СкоростьМгновенное распознаваниеПроцесс происходит на сервере. Время ожидания не больше 5 минутМгновенное распознавание
ОсобенностиЭто не главная функция программы, а лишь побочная. Хоть она и достаточно хороша, не ждите от нее совершенства
Сокращенная версия основной программы. В полной компьютерной версии намного больше опций, повышающих качество распознавания.
Доступно распознавание теста сразу на нескольких языках, если в тексте есть вставки на другом языке.
Сохраняет форматирование
Скорость. Доступность
Число доступных языковВ русскоязычной версии программы доступно три языка: русский, английский, немецкийМножество языковМножество языков
Результат

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

Понравилась статья?
Сохраните, чтобы не потерять!

pc-consultant.ru

7 бесплатных программ и веб-сервисов для распознавания текста

1. Office Lens

  • Распознаёт: снимки камеры.
  • Сохраняет: DOCX, PPTX, PDF.

Этот сервис от компании Microsoft превращает камеру смартфона или ПК в мощный сканер документов. С помощью Office Lens вы можете распознать текст на любом физическом носителе и сохранить его в одном из «офисных» форматов или в PDF. Итоговые текстовые файлы можно редактировать в Word, OneNote и других сервисах Microsoft, интегрированных с Office Lens.

Цена: Бесплатно

Цена: Бесплатно

Разработчик: Microsoft Corporation

Цена: Бесплатно

2. Adobe Scan

  • Распознаёт: снимки камеры.
  • Сохраняет: PDF.

Adobe Scan тоже использует камеру смартфона, чтобы сканировать бумажные документы, но сохраняет их копии только в формате PDF. Результаты удобно экспортировать в кросс-платформенный сервис Adobe Acrobat, который позволяет редактировать PDF-файлы: выделять, подчёркивать и зачёркивать слова, выполнять поиск по тексту и добавлять комментарии.

Разработчик: Adobe

Цена: Бесплатно

Цена: Бесплатно

3. Free OCR to Word

  • Распознаёт: JPG, TIF, BMP, GIF, PNG, EMF, WMF, JPE, ICO, JFIF, PCX, PSD, PCD, TGA и другие форматы.
  • Сохраняет: DOC, DOCX, TXT.

Настольная программа Free OCR to Word распознаёт выбранные пользователем изображения, извлекая из них чистый текст без форматирования. Его можно копировать в буфер обмена, сохранять в формате TXT или экспортировать в Word.

Воспользоваться Free OCR to Word →

4. FineReader Online

  • Распознаёт: JPG, TIF, BMP, PNG, PCX, DCX, PDF (не защищённые паролем).
  • Сохраняет: DOC, DOCX, XLS, XLSX, ODT, TXT, RTF, PDF, PDF/A.

Онлайновый сервис, который конвертирует не только тексты, но и таблицы. Увы, бесплатные возможности FineReader Online ограничены. После регистрации вам позволят распознать без оплаты всего 10 страниц. Зато каждый месяц будут начислять ещё по пять страниц в качестве бонуса. Поэтому сервис больше подойдёт тем, кто не нуждается в услугах распознавания слишком часто.

Воспользоваться FineReader Online →

5. Online OCR

  • Распознаёт: JPG, BMP, TIFF, GIF, PDF.
  • Сохраняет: DOCX, XLSX, TXT.

Ещё один сайт, с помощью которого можно распознать тексты и таблицы. В отличие от FineReader, в Online OCR вполне можно обойтись без регистрации. Хотя она может понадобиться, если вы планируете загружать несколько файлов для распознавания за один раз. В то же время FineReader поддерживает больше форматов.

Воспользоваться Online OCR →

6. Free OCR

  • Распознаёт: JPG, GIF, TIFF BMP, PNG, PDF.
  • Сохраняет: TXT.

Free OCR — простейший онлайн-сервис, извлекающий текст из PDF-файлов и изображений. Результат распознавания — чистый текст без форматирования. Кроме того, сервис может уступать по точности вышеперечисленным аналогам. Зато Free OCR не требует регистрации и справляется с мультиязычными документами.

Воспользоваться Free OCR →

7. Microsoft OneNote

  • Распознаёт: популярные форматы изображений.
  • Сохраняет: файлы OneNote.

В настольной версии популярного заметочника OneNote тоже есть функция распознавания текста, которая работает с загруженными в сервис изображениями. Если кликнуть правой кнопкой мыши по снимку документа и выбрать в появившемся меню «Рисунок» → «Текст», то всё текстовое содержимое будет скопировано в буфер обмена.

Разработчик: Microsoft Corporation

Цена: Бесплатно

Цена: Бесплатно

Если вы не нашли подходящей программы, взгляните на наши предыдущие подборки приложений для Android и iOS.

lifehacker.ru

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *