Библиотека pytesseract в python

SciPy

SciPy is primarily used for mathematical and scientific computations, but sometimes it can also be used for basic image manipulation and processing tasks using the submodule .At the end of the day, images are just multidimensional arrays, SciPy provides a set of functions that are used to operate n-dimensional Numpy operations. SciPy provides some basic image processing operations such as Face Detection, Convolution, Image Segmentation, Reading Images, Feature Extraction, and many more. Along with this, you also perform filtering, draw contour lines on images.

Check the below code for Blurring an image with SciPy:

from scipy import ndimage, misc
from matplotlib import pyplot as plt
f = misc.face()
b_face = ndimage.gaussian_filter(f, sigma=3)
figure, axis = plt.subplots(1, 2, figsize=(16, 8))

For more information, check official documentation: Link

Scikit-Image

Scikit-Image is another great open-source image processing library. It is useful in almost any computer vision task. It is among one of the most simple and straightforward libraries. Some parts of this library are written in Cython ( It is a superset of python programming language designed to make python faster as C language). It provides a large number of algorithms which include segmentation, color space manipulation, geometric transformation, filtering, morphology, feature detection, and many more.

Scikit Image uses Numpy arrays as image objects. Let’s see how can we perform active contour operation in the scikit image. Active contour describes the boundaries of shapes in an image. 

Check the below code for active contour operation:

import numpy as np
import matplotlib.pyplot as plt
from skimage.color import rgb2gray
from skimage import data
from skimage.filters import gaussian
from skimage.segmentation import active_contour
image = data.astronaut()
# Data for circular boundary
s = np.linspace(0, 2*np.pi, 400)
x = 220 + 100*np.cos(s)
y = 100 + 100*np.sin(s)
init = np.array().T
# formation of the active contour
centre = active_contour(gaussian(image, 3),init, alpha=0.015, beta=10, gamma=0.001)
figure, axis = plt.subplots(1, 2, figsize=(7, 7))
ax.imshow(image, cmap=plt.cm.gray)
ax.set_title("Original Image")
ax.imshow(image, cmap=plt.cm.gray)

For more information, check official documentation: Link

Создаем Searchable PDF с помощью Tesseract OCR

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

Мною был рассмотрен движок распознавания текста с открытым исходным кодом Tesseract.

В данной статье будут рассмотрены основные моменты возможной реализации.

Предположим, что у нас есть многостраничный отсканированные документ в формате PDF, но нераспознанный.

И наша задача распознать текст с помощью OCR (Optical character recognition — Оптическое распознавание символов) и создать так называемый Searchable PDF.

Searchable PDF — это PDF, в котором поверх изображения размещается дополнительный слой, содержащий распознанный текст, причем на тех же позициях что и на изображении.

Для начала нужно установить необходимые программы.

  • imagemagick — набор программ (консольных утилит) для работы с множеством графических форматов;
  • tesseract-ocr — приложение оптического распознавания символов;
  • tesseract-ocr-all — все языковые пакеты (но можно установить только конкретные языковые пакеты)

У tesseract есть языковые пакеты для русского и казахских языков, что очень круто.

Также можно не устанавливать локально у себя tesseract, а запустить через docker.

Официального образа на hub.docker.com я не нашел, поэтому сделал свой.

Запустить контейнер с tesseract из образа naik85/tesseract можно так (пример для linux/unix):

docker run --rm -v "$(PWD)":files -w files -it naik85tesseract bash

После старта контейнера откроется консоль bash, где можно будет выполнять команды.
Также будут доступны ваши файлы из директории, где вы запустили команду docker run.

Первый этап

На первом этапе нужно извлечь изображения из PDF. Здесь есть два варианта либо преобразовать PDF в один файл TIFF, либо преобразовать в набор изображений.

TIFF — это многостраничный формат хранения растровых графических изображений.

Для конвертации в TIFF использовалась следующая команда:

convert -density 300 YOUR_FILE.pdf -depth 1 -strip -background white -alpha off YOUR_FILE.tiff

Для конвертации в PNG использовалась следующая команда:

convert -density 300 YOUR_FILE.pdf -depth 1 -strip -background white -alpha off YOUR_FILE.png

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

После выполнения конвертации в PNG для каждой страницы будет создан отдельный файл изображения.

Например:

YOUR_FILE-0.png
YOUR_FILE-1.png
...
YOUR_FILE-N.png

Второй этап

К сожалению, у меня не получилось преобразовать документ TIFF в Searchable PDF через tesseract.

Была использована следующая команда:

tesseract YOUR_FILE.tiff searchable -l rus PDF

Выходила следующая ошибка:

Tesseract Open Source OCR Engine v4.1.1 with Leptonica
Error in pixReadFromTiffStream: failed to read tiffdata

Для нашей задачи постраничное деление на отдельные файлы (изображения) было даже предпочтительней (об этом ниже).

Конвертируем каждую страницу (файл png) в Searchable PDF:

tesseract YOUR_FILE-.png searchable- -l rus+kaz+eng pdf
tesseract YOUR_FILE-1.png searchable-1 -l rus+kaz+eng pdf
...
tesseract YOUR_FILE-N.png searchable-2 -l rus+kaz+eng pdf

На выходе получаем файлы:

searchable-0.pdf
searchable-1.pdf
...
searchable-N.pdf

Очень крутая фишка, что можно разпозначать несколько языков, перечислив их через символ ‘+’: rus+kaz+eng.

Команда распознавания и извлечения текста

tesseract YOUR_FILE-.png -l rus+kaz+eng YOUR_FILE-
tesseract YOUR_FILE-1.png -l rus+kaz+eng YOUR_FILE-1
...
tesseract YOUR_FILE-N.png -l rus+kaz+eng YOUR_FILE-N

В результате будут созданы текстовые файлы:

YOUR_FILE-0.txt
YOUR_FILE-1.txt
...
YOUR_FILE-N.txt

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

Склеив тексты страниц и положив их в поисковый движок, получим подокументый поиск.

Если нужен целый Searchable PDF, то можно его склеивать из отдельных страниц.

p.s. Деление на отдельные страницы затратно получается, но, думаю, зато это более гибко.

Поделиться данной статьей через:  

Обрезка изображений через Pillow (crop)

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

Python

from PIL import Image

image = Image.open(‘jelly.jpg’)
cropped = image.crop((0, 80, 200, 400))
cropped.save(‘/path/to/photos/cropped_jelly.png’)

1
2
3
4
5

fromPIL importImage

image=Image.open(‘jelly.jpg’)

cropped=image.crop((,80,200,400))

cropped.save(‘/path/to/photos/cropped_jelly.png’)

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

В Pillow пиксель 0 является верхним левым уровнем. С увеличением значения идет смещение вправо. С увеличением значения идет смещение вниз. После запуска вышеуказанного кода будет получено следующее изображение:

Довольно унылый результат. Я ведь хотел получить «голову» медузы. Для быстрого получения правильных координат можно использовать Gimp или Photoshop. Он поможет определить координаты для следующего обрезания.

Python

from PIL import Image

image = Image.open(‘jelly.jpg’)
cropped = image.crop((177, 882, 1179, 1707))
cropped.save(‘/path/to/photos/cropped_jelly2.png’)

1
2
3
4
5

fromPIL importImage

image=Image.open(‘jelly.jpg’)

cropped=image.crop((177,882,1179,1707))

cropped.save(‘/path/to/photos/cropped_jelly2.png’)

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

Намного лучше!

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

Открытие изображения в Python с Pillow

Через Pillow можно легко открыть изображение и отобразить его на экране через внешнюю программу. Взглянем на пример:

Python

from PIL import Image

image = Image.open(‘jelly.jpg’)
image.show()

1
2
3
4

fromPIL importImage

image=Image.open(‘jelly.jpg’)

image.show()

Метод в основном используется для отладки. В примере импортируется модуль Image и открывается указанное изображение. На Unix метод открытия сохраняет изображения во временном PPM файле и открывает его через утилиту . К примеру, на установленной у меня системе Linux картинка открывается через ImageMagick. На Windows изображение сохранится во временной файле BMP и откроется через простую программу вроде Paint.

Другие параметры PyTesseract

У Python-Tesseract есть больше возможностей, которые вы можете изучить. Например, вы можете указать язык с помощью флага lang:

pytesseract.image_to_string(Image.open(filename), lang='fra')

Это результат сканирования изображения без lang:

А теперь с lang:

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

Без flag lang скрипт пропустил некоторые французские слова, но после введения flag он смог обнаружить весь французский контент. Перевод невозможен, но все равно впечатляет. Официальная документация Tesseract включает в себя поддерживаемые языки в этом разделе.

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

print(pytesseract.image_to_osd(Image.open('downloaded_handwritten.png')))

На изображении не было информации о номере страницы, поэтому это не было обнаружено. Движок Tesseract способен извлекать информацию об ориентации текста на изображении и повороте. Уверенность в ориентации – это показатель уверенности двигателя в обнаруженной ориентации, которая действует как ориентир, а также показывает, что она не всегда на 100% точна. Раздел скрипта обозначает систему письма, используемую в тексте, и за ним также следует маркер уверенности.

Если бы мы следили за распознанными символами и их границами боксов, PyTesseract добивается этого с помощью pytesseract.image_to_boxes (Image.open (‘loaded_handwritten.png’)).

Это некоторые из возможностей PyTesseract среди других, такие как преобразование извлеченного текста в PDF-файл с возможностью поиска или вывод HOCR.

The ImageColor Module

Модуль ImageColor содержит функции для преобразования строки определяющую цвет в RGB кортеж. Этот модуль используется в Image.new и ImageDraw модуле.

Модуль ImageColor поддерживает следующие форматы строк:

  1. Шестнадцатеричные спецификаторы цвета, вида «#RGB» или «#RRGGBB». Например, «# ff0000»;
  2. RGB функции, вида «rgb(красный, зеленый, синий)». Например, «rgb(255,0,0)» и «rgb(100%, 0%, 0%)»;
  3. HSL функций (Тон-Насыщенность-Яркость) заданных в качестве «HSL (тон, насыщенность%, яркость%)», где тон цвета дается как угол между 0 и 360, насыщение значения между 0% и 100%, и яркость это значение от 0% до 100. Например, «hsl(0,100%, 50%)»;
  4. HTML названия цветов. Модуль ImageColor поддерживает около 140 стандартных названий цветов. Например «red» или «white».

Drawing to Pillow image

Pillow has some basic 2D graphics capabilities. module
provides simple 2D graphics for objects. We can create new
images, annotate or retouch existing images, and generate graphics
on the fly for web use.

draw2image.py

#!/usr/bin/python

from PIL import Image, ImageDraw

img = Image.new('RGBA', (200, 200), 'white')    
idraw = ImageDraw.Draw(img)

idraw.rectangle((10, 10, 100, 100), fill='blue')
 
img.save('rectangle.png')

The example creates a new image and draws a blue rectangle
on the image.

img = Image.new('RGBA', (200, 200), 'white') 

A new is created. The image mode is ‘RGBA’.
Its size is 200×200 and the background is white.

idraw = ImageDraw.Draw(img)

From the image we create the object. Now
we can perform some drawing operations on the image.

idraw.rectangle((10, 10, 100, 100), fill='blue')

With the method, we draw a blue rectangle
on the image.

Использование библиотеки PIL в Python

http-equiv=»Content-Type» content=»text/html;charset=UTF-8″>yle=»margin-bottom:5px;»>Теги:  python  PIL

Откройте окно DOS и установите библиотеку:

Исходное изображение:

Очевидно, что картина немного большая, давайте ее укоротим:

После этого мы все работаем над beauty.jpg

Сохранить как PNG:

Превратись в старые черно-белые фотографии:

Измените цветовой канал изображения:

Нам часто приходится участвовать в волне нечетких операций, притворяясь:

Получить ее схему легко:

Наконец, увеличьте контраст в 5 раз по сравнению с начальным:

\

В библиотеке PIL так много модулей, усердно учитесь, будущее страны зависит от вас

Image ImageChops ImageColor ImageCrackCode ImageDraw
ImageEnhance ImageFile ImageFileIO ImageFilter ImageFont
ImageGL ImageGrab Imagemath ImageOps ImagePalette
ImagePath ImageQt ImageSequence ImageStat ImageTk
ImageWin

Интеллектуальная рекомендация

Наша страна — большая страна с далеко зашедшей винной культурой. Еще во времена династии Сун мы варили вкусные и мягкие спиртные напитки. Мы часто слышим, как старшие поколения говорят, что с возрасто…

1. Предположим, что вы tomcat6 и добавили библиотеку драйверов mysql в D: \ Program Files \ Apache Software Foundation \ Tomcat 6.0 \ lib   2. Добавьте в «Tomcat 6.0 \ conf \ context.xml&ra…

4. Условное суждение После выполнения условного тестового выражения обычно возвращается «истина» или «ложь», так же как возвращаемое значение после выполнения команды равно 0 д…

1. Что такое куча? Стек: особый видПолное двоичное деревоструктура.    Большая корневая куча: полное двоичное дерево, удовлетворяющее тому, что любой узел больше, чем его дочерний узел.Большой; Неболь…

Вам также может понравиться

1. Введение Аполлон (Аполлон) — это НИОКР в Ctrip Framework SectorРаспределенный Центр конфигурацииМожно централизовать управление для управления различными средами, разными кластерами. После настройк…

               …

Список может быть изменен, но иногда вам необходимо создать серию немодифицируемых элементов, а кортеж может удовлетворить эти потребности. Значение, которое не может быть изменено в Python, называетс…

тема: код показан ниже: Ожидание является обратной величиной вероятности. Накопите все ожидаемые значения, чтобы получить: N + N / 2 +… + 1, и положите N, чтобы получить: N (1 + 1/2 +… +…

1. Ролевое управление фоновым менеджментом 1.1 Определение ролевой формы для управления ролями Определите форму роли в файле forms.py в каталоге администратора приложения. 1.2 Список всех ролей в упра…

Функции

loadImageFont.load(file) => объект шрифта

Загружает шрифт из указанного файла, и возвращает соответствующий объект шрифта.

load_pathImageFont.load_path(file) => объект шрифта

То же, что функция load, но ищет файл вместе c sys.path, если он не найден в текущем каталоге.

truetypeImageFont.truetype(file, size) => объект шрифта

Загружает TrueType или OpenType файл шрифта и создаёт объект со шрифтом заданного размера.

ImageFont.truetype(file, size, encoding=value) => объект шрифта

Загружает TrueType или OpenType файл шрифта и создаёт объект со шрифтом заданного размера. И задаёт кодировку: «UNIC» (Unicode), «Symb» (Microsoft Symbol), «ADOB» (Adobe Standard), «ADBE» (Adobe Expert), и «armn» (Apple Roman).

load_defaultImageFont.load_default() => объект шрифта

Загружает шрифт по умолчанию.

Поворачивание изображения — метод rotate() Pillow

возвращает развернутую копию изображения.

Python

from PIL import Image
import sys

try:
tatras = Image.open(«tatras.jpg»)
except IOError:
print(«Unable to load image»)
sys.exit(1)

rotated = tatras.rotate(180)
rotated.save(‘tatras_rotated.jpg’)

1
2
3
4
5
6
7
8
9
10
11

fromPIL importImage

importsys

try

tatras=Image.open(«tatras.jpg»)

exceptIOError

print(«Unable to load image»)

sys.exit(1)

rotated=tatras.rotate(180)

rotated.save(‘tatras_rotated.jpg’)

Данная программа поворачивает изображения на 180 градусов и сохраняет файл результат в виде новой картинки на диск.

Reading image from URL

The next example reads an image from URL.

read_from_url.py

#!/usr/bin/python

from PIL import Image
import requests
import sys

url = 'https://i.ytimg.com/vi/vEYsdh6uiS4/maxresdefault.jpg'

try:
    resp = requests.get(url, stream=True).raw

except requests.exceptions.RequestException as e:  
    sys.exit(1)

try:
    img = Image.open(resp)

except IOError:
    print("Unable to open image")
    sys.exit(1)

img.save('sid.jpg', 'jpeg')    

The example reads an image from the URL and saves it on
disk.

import requests

We use the library to download the image.

resp = requests.get(url, stream=True).raw

We read the image as raw data.

img = Image.open(resp)

is created from the response object.

img.save('sid.jpg', 'jpeg')

The image is saved.

Some Examples

In this section, I’ll demonstrate a few simple things we can do with PIL.

I’ll perform these tests on the following image:

If you’d like to follow along with these examples, download the image.

Read an image

This is the most basic operation in an image processing task, since to process an image, you must read it first. With PIL, this can be easily accomplished as follows:

Notice here that is a PIL image object, created by the function, which is part of the PIL module.

You can also read already open files, or from a string, or from a tar archive.

Convert an image to grayscale, display it, and save it

The file is a color image. To convert it to grayscale, display it, and then save the new grayscale image, you can simply do the following:

Notice that we have used three main functions to perform this operation: , , and . Since we want to convert to a grayscale image, the parameter was used with .

Here is the returned image:

Convert to another image type

The image we are working on is of type . Say that you want to convert it to another image type, for instance . This operation can be done using the function we used to save our result (write output to disk) in the above subsection:

Resize an image

The size (dimensions) of our original image is 440 x 600px. If we want to resize it, and make it of size 256 x 256px, this can be done as follows:

This produces a new square image:

As you can see, this squeezes the image into the desired dimensions rather than cropping it, which may not be what you want. You can, of course, also the image while retaining the proper aspect ratio.

Conclusion

So in this article, we have covered the top 8 image processing libraries in python for machine learning in 2021. I hope you learn something from this blog and it will turn out best for your project. Thanks for reading and your patience. Good luck!

You can check my articles here: Articles

Thanks for reading this article on python libraries for image processing and for your patience. Do let me in the comment section. Share this article, it will give me the motivation to write more blogs for the data science community.

Follow me on LinkedIn: LinkedIn

The media shown in this article are not owned by Analytics Vidhya and is used at the Author’s discretion. 

Использование OCR

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

Если у вас есть сканер документов на вашем телефоне, например Adobe Scan, вы, вероятно, сталкивались с использованием технологии OCR.

Аэропорты также могут использовать OCR для автоматизации процесса распознавания паспортов и извлечения из них информации.

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

Что такое оптическое распознавание символов?

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

Как этого добиться на самом деле? Для нас текст на изображении легко различим, и мы можем обнаруживать символы и читать текст, но для компьютера это все серии точек.

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

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

Процесс может быть неточным на 100% и может потребоваться вмешательство человека для исправления некоторых элементов, которые не были отсканированы правильно. Исправление ошибок также может быть достигнуто с помощью словаря или даже обработки естественного языка (NLP).

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

Installing Pillow

Since Pillow supports versions of Python back to Python 2.4, I’ll only focus on installing Pillow and not the older version of PIL.

Python on a Mac

I’m currently writing this tutorial on a Mac OS X Yosemite 10.10.5, and thus will describe how to install Pillow on a Mac OS X machine. But, don’t worry, I’ll provide a link at the end of this section that describes how to install Pillow on other operating systems.

I just want to note here that Mac OS X comes with Python pre-installed. However, the version most likely will be prior to 3.X.

For instance, on my machine, when I run in the terminal, I get .

Python and pip

A very easy way to install Pillow is through pip.

If you don’t have pip installed on your machine, simply type the following command in your terminal, and you’re all done:

Now, to install Pillow, simply type the following in your terminal:

That was easy, wasn’t it?

As I promised, for installing Pillow on other operating systems, you can find the instructions for that here.

What You Can Do with PIL

PIL is a free library that adds image processing capabilities to your Python interpreter, supporting a range of image file formats such as PPM, PNG, JPEG, GIF, TIFF and BMP.

PIL offers several standard procedures for image processing/manipulation, such as:

  • pixel-based manipulations
  • masking and transparency handling
  • filtering (for example, blurring, contouring, smoothing, edge detection)
  • image enhancement (for example, sharpening, brightness adjustment, contrast)
  • geometrical, color and other transforms
  • adding text to images
  • cutting, pasting and merging images
  • creating thumbnails.

Introduction

As indicated by IDC, digital information will soar up to 175 zettabytes, and the immense piece of this information pictures. Data scientists need to (pre) measure these images before taking care of them into any Artificial Intelligence and deep learning models. They need to do the significant (and at times filthy) work before the pleasant part starts.

To handle a lot of information with effectiveness and speed without bargaining the outcomes Data scientists need to utilize picture preparing instruments for Artificial Intelligence and deep learning tasks.

In this article, I will drill down the most helpful image processing libraries in Python which are being utilized vigorously in Artificial intelligence and deep learning tasks. So let’s get started!

Создание рисунка в Pillow

У Pillow есть базовые возможности для создания 2D графики. Модуль предоставляет простую 2D графику для объектов . Мы можем создавать новые изображения, аннотации к ним, ретушировать существующие фото, а также сразу генерировать графику для веб.

Python

from PIL import Image, ImageDraw

# Создаем белый квадрат
img = Image.new(‘RGBA’, (200, 200), ‘white’)
idraw = ImageDraw.Draw(img)

idraw.rectangle((10, 10, 100, 100), fill=’blue’)

img.save(‘rectangle.png’)

1
2
3
4
5
6
7
8
9

fromPIL importImage,ImageDraw

 
# Создаем белый квадрат

img=Image.new(‘RGBA’,(200,200),’white’)

idraw=ImageDraw.Draw(img)

idraw.rectangle((10,10,100,100),fill=’blue’)

img.save(‘rectangle.png’)

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

Python

img = Image.new(‘RGBA’, (200, 200), ‘white’)

1 img=Image.new(‘RGBA’,(200,200),’white’)

Создается новое изображение, у которого режим «RGBA», размер 200х200 и белый фон.

Python

idraw = ImageDraw.Draw(img)

1 idraw=ImageDraw.Draw(img)

Из картинки создается объект . Теперь на нем можно что-то нарисовать.

Python

idraw.rectangle((10, 10, 100, 100), fill=’blue’)

1 idraw.rectangle((10,10,100,100),fill=’blue’)

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

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

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

Adblock
detector