Инструменты python для работы с изображениями
Содержание:
- Другие параметры PyTesseract
- Разработка игр
- Thrill Pill рэпер
- Рисование эллипса и прямоугольника в Python
- OpenCV
- Installing Pillow
- Рисование линии, многоугольника и точки в Python
- SciPy
- The ImageColor Module
- Графический интерфейс
- Thrill Pill сейчас
- Python – изменить размер изображения с использованием библиотеки подушки
- Вместо послесловия
- OpenCV
- Changelog (Pillow)
- Platform Support¶
- Что мы будем использовать?
- Some Examples
- The ImageGrab Mobule
- Reading image from URL
- Что мы еще не сделали
Другие параметры 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.
Разработка игр
Python — это очень разносторонний язык,
позволяющий программистам создавать
самые разнообразные приложения, включая
видеоигры.
Pygame. Набор модулей для написания видеоигр. Pygame расширяет функционал прекрасной библиотеки SDL. Благодаря ему на Python можно создавать полнофункциональные игры и мультимедиа-программы.
Pyglet. Мощная, но при этом простая в использовании библиотека Python для разработки игр и других приложений с большим количеством визуальных эффектов для Windows, Mac OS X и Linux.
pyOpenGL. Этот модуль чаще других используется для обеспечения работы с библиотекой OpenGL и связанными с нею API в программах на Python.
Thrill Pill рэпер
Сколько лет рэпер занимается творчеством? Первые тексты к будущим песням молодой рэпер начинает писать с 2010 года. Но дебютный трек, который сделал его творческий рост, он смог сделать только в 2013 году. В то время хип-хоп культура не была особо популярна среди российской молодёжи. Возможно, по этой причине одноклассники не понимали увлечений Тимура Самедова.
В это же время будущий рэпер делает первые попытки зарабатывать, на тот момент его возраст был всего лишь 14 лет. Но получается у него это нелегальным способом, распространяя лёгкие наркотические вещества и продавая ворованные мобильные телефоны. Сейчас за эти поступки Тимуру стыдно, но тогда — это был единственный способ быстро получить наличные деньги.
Псевдоним Thrill Pill родился в 2015 году, когда будущий рэп-исполнитель выпил мамин коньяк, и в алкогольном опьянении написал песню, и придумал себе сценическое имя и новую прическу.
Thrill Pill Закат 99.1
В 2015 году рэпер записывает свой дебютный альбом, под названием «WorldWideWar», состоящий из четырёх песен
Через год юноша записывает свой второй альбом, получивший название «Kill Pill», сборник оказался настолько удачным, что сразу же привлёк к себе внимание именитых российских рэперов. Именно в этом году рэпер Lizer приглашает Тимура в творческое объединение «Закат 99.1»
Thrill Pill и Lizer
16 ноября 2016 года Тимур заканчивает работать над третьим музыкальным сборником, получивший название «Chelsea». Совместно с Thrill Pill над ним так же трудились, в качестве гостевых вокалистов такие исполнители, как Flesh, Lizer и Krestall/Courier.
В начале следующего года, рэпер Thrill Pill решает покинуть группу «Закат 99.1» из-за постоянных споров с другими участниками творческого объединения. Но разрывом этот уход вряд ли можно назвать, так как ребята, так и остались друзьями. В феврале 2017 года Тимур заканчивает работать над EP «From Russia With Rage». В записи одного из треков участвовал Lil $ega.
В конце апреля состоялся релиз очередного альбома, под названием «Trap Star», после чего состоялся концертный тур в его поддержку. Через два месяца рэпер представил на суд общественности сингл «Я е**л рэп», а чуть позднее видеоклип, снятый на эту песню.
Thrill Pill Lizer Flesh FACE Закат 99.1
В начале августа поклонники творчества Thrill Pill узнали о появлении долгожданного альбома «Chelsea 2». Обложка имела пошлое содержание. И как заявлял рэпер, сделано это было в знак протеста против индустрии.
Рисование эллипса и прямоугольника в Python
- Эллипс (Круг): ;
- Прямоугольник (Квадрат): .
Метод рисует эллипс, область рисования указывается в параметр . Если мы зададим четыре координата которые будут соответствовать квадрату, то у нас получится ровный круг.
Нарисуем небольшой смайл используя круги.
Python
from PIL import Image, ImageDraw
image = Image.new(‘RGB’, (90, 90), ‘white’)
draw = ImageDraw.Draw(image)
draw.ellipse((0, 0, 90, 90), ‘yellow’, ‘blue’)
draw.ellipse((25, 20, 35, 30), ‘yellow’, ‘blue’)
draw.ellipse((50, 20, 60, 30), ‘yellow’, ‘blue’)
draw.arc((20, 40, 70, 70), 0, 180, 0)
image.save(‘draw-smile.jpg’)
1 2 3 4 5 6 7 8 9 10 |
fromPIL importImage,ImageDraw image=Image.new(‘RGB’,(90,90),’white’) draw=ImageDraw.Draw(image) draw.ellipse((,,90,90),’yellow’,’blue’) draw.ellipse((25,20,35,30),’yellow’,’blue’) draw.ellipse((50,20,60,30),’yellow’,’blue’) draw.arc((20,40,70,70),,180,) image.save(‘draw-smile.jpg’) |
Результат:
OpenCV
OpenCV is one of the most famous and widely used open-source libraries for computer vision tasks such as image processing, object detection, face detection, image segmentation, face recognition, and many more. Other than this, it can also be used for machine learning tasks. This is developed by Intel in 2002. It is written in C++ but developers have provided Python and Java bindings. It is easy to read and use.
To build computer vision and machine learning models, OpenCV has more than 2500+ algorithms. These algorithms are very much useful to perform various tasks such as face recognition, object detection, and many more. Let’s see some examples where we can perform using OpenCV:
Gray Scaling
Gray-scaling is a method of converting a 3 channel image eg, RGB, HSV, etc into a single channel image i.e to shades of grey. The final image varies between complete white and black. The importance of Gray-Scaling includes Dimension reduction (converting 3 channels to a single-channel image), Reduce model complexity, etc.
Below code, snippet shows the gray-scaling in OpenCV
import cv2 as cv img = cv.imread('example.jpg') cv.imshow('Original', img) cv.waitKey() #Use cvtColor, to convert to grayscale gray_img = cv.cvtColor(img, cv.COLOR_BGR2GRAY) cv.imshow('Grayscale', gray_img) cv.waitKey(0)
Check the below code to rotate the image by 180 degrees.
import cv2 as cv import matplotlib.pyplot as plt img = cv.imread('example.jpg') h, w = image.shape rot_matrix = cv.getRotationMatrix2D((w/2,h/2), -180, 0.5) rot_image = cv.warpAffine(img, rot_matrix, (w, h)) plt.imshow(cv.cvtColor(rot_image, cv.COLOR_BGR2RGB))
OpenCV provides other functionalities as well other than what we have discussed so far. Apart from this, it also helps in Face Detection, Image Segmentation, Feature Extraction, Object Detection, 3-D Reconstruction, and many more.
For more information, check official documentation: Link
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.
Рисование линии, многоугольника и точки в Python
-
Линия: :
- Параметр
- Указывает несколько координат двух или более точек как ;
- Рисуются линии, связывающие каждую точку между собой.
- : Ширина линии в пикселях
- Параметр
-
Многоугольник: :
- Параметр
- Указывается несколько координат, трех или более точек как ;
- Рисуется многоугольник, в котором каждая точка соединяется между собой при помощи линии.
- Параметр
-
Точка: :
- Параметр
- Указывается несколько координат одной или более точек как ;
- Одна точка (в размере одного пикселя) рисуется для каждого координата.
- Параметр
Примеры рисования линий , многоугольника и точки представлены ниже. Каждая точка представляет собой 1 пиксель, потому их трудно увидеть, но они все-таки нарисованы в правой части области.
Python
from PIL import Image, ImageDraw
# Пустой желтый фон.
im = Image.new(‘RGB’, (500, 300), (219, 193, 27))
draw = ImageDraw.Draw(im)
# Три черные линии в шириной в 1 пиксель.
draw.line(
xy=(
(30, 200),
(130, 100),
(80, 50)
), fill=’black’)
# Три красные линии с размером в 5 пикселей.
draw.line(
xy=(
(80, 200),
(180, 100),
(130, 50)
), fill=’red’, width=10)
# Имея три точки и связь между ними, у нас получится синий триугольник.
draw.polygon(
xy=(
(200, 200),
(300, 100),
(250, 50)
), fill=’blue’, outline=(0, 0, 0)
)
# Рисуем три точки.
draw.point(
xy=(
(350, 200),
(450, 100),
(400, 50)
), fill=’black’
)
im.save(‘draw-dots.jpg’, quality=95)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 |
fromPIL importImage,ImageDraw im=Image.new(‘RGB’,(500,300),(219,193,27)) draw=ImageDraw.Draw(im) draw.line( xy=( (30,200), (130,100), (80,50) ),fill=’black’) draw.line( xy=( (80,200), (180,100), (130,50) ),fill=’red’,width=10) draw.polygon( xy=( (200,200), (300,100), (250,50) ),fill=’blue’,outline=(,,) ) draw.point( xy=( (350,200), (450,100), (400,50) ),fill=’black’ ) im.save(‘draw-dots.jpg’,quality=95) |
Полученный результат:
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
The ImageColor Module
Модуль ImageColor содержит функции для преобразования строки определяющую цвет в RGB кортеж. Этот модуль используется в Image.new и ImageDraw модуле.
Модуль ImageColor поддерживает следующие форматы строк:
- Шестнадцатеричные спецификаторы цвета, вида «#RGB» или «#RRGGBB». Например, «# ff0000»;
- RGB функции, вида «rgb(красный, зеленый, синий)». Например, «rgb(255,0,0)» и «rgb(100%, 0%, 0%)»;
- HSL функций (Тон-Насыщенность-Яркость) заданных в качестве «HSL (тон, насыщенность%, яркость%)», где тон цвета дается как угол между 0 и 360, насыщение значения между 0% и 100%, и яркость это значение от 0% до 100. Например, «hsl(0,100%, 50%)»;
- HTML названия цветов. Модуль ImageColor поддерживает около 140 стандартных названий цветов. Например «red» или «white».
Графический интерфейс
В стандартной библиотеке Python есть
графическая библиотека интерфейсов
Tkinter. Но при помощи внешних модулей вы
можете поднять GUI ваших приложений на
новый уровень.
wxPython. Создает по-настоящему нативные пользовательские интерфейсы для Python-приложений, которые могут запускаться на Windows, Mac и Linux, а также прочих Unix-подобных системах практически без каких-либо модификаций.
PyGObject. Пакет Python, предоставляющий привязки для библиотек на базе Gobject, таких как GTK, GStreamer, WebKitGTK, GLib, GIO и др.
Pmw. Набор инструментов для создания на Python высокоуровневых составных виджетов (с использованием модуля Tkinter).
WCK. Расширение API, позволяющее реализовывать на чистом Python всевозможные пользовательские виджеты.
Tix. Мощный набор компонентов пользовательского интерфейса, при помощи которого можно расширить возможности ваших Tcl/Tk и Python-приложений. Использование Tix вместе с Tk очень улучшает внешний вид и функционал приложений.
Thrill Pill сейчас
22 октября 2017 года рэпер завершил съёмки видеоклипа на музыкальную композицию «Я не ребёнок». Несколько ранее он побывал во множестве городов России с большим концертным туром, под названием «F*ck School Tour». 20 января в сети Интернет появился очередной видеоклип Тимура Самедова, на композицию «Как Достать Соседа». Клип был снят в формате сеттинга компьютерной игры «Neighbours from Hell». Возможно, это говорит о том, что сам молодой человек иногда любит коротать время за ней.
Thrill Pill — Как достать соседа
После релиза видеоклипа Thrill Pill рассказал журналистам о том, каким видит своё будущее творчество. Цель Тимура — возродить хип-хоп культуру в России. Он не собирается прятаться за устоявшимися рамками, и готов экспериментировать не только с текстами песен, но и со звучанием. Музыкант так же пообещал своим поклонникам поработать над качеством звука. Хочется верить в то, что все свои планы и обещания молодой исполнитель выполнит, ведь его музыка пришлась по душе десяткам тысяч любителей рэпа, и они ожидают свежий лучший материал от Thrill Pill.
Thrill Pill концерт
Python – изменить размер изображения с использованием библиотеки подушки
Чтобы изменить размер изображения с Python подушками, вы можете использовать изменить размер () метод Pil.image.image Класс. Вы можете пройти параметры, такие как результирующий размер изображения, Pixel Resampling Filter и область коробки источника для рассмотрения.
В этом руководстве мы узнаем, как изменить размер изображения, используя PIL, с примером программы Python.
Синтаксис – PIL Image.resize ()
Синтаксис изменения изменений (), как показано в следующем фрагменте кода.
Image.resize(size, resample=0, box=None)
где
- Размер это передается как кортеж (ширина, высота). Это размер, запрашиваемый для полученного выходного изображения после размера.
-
Resample это фильтр, который должен использоваться для перезарядки. Это необязательно. Вы можете пройти:
- Pil.image.nearest.
- PIL.Image.BOX
- Pil.image.bilinear
- Pil.image.hamming.
- Pil.image.bicubic
- Pil.image.lanczos.
- коробка является необязательным 4-стручком, дающими область исходного изображения, которое следует рассматривать как вход для изменения изменения размера. Значения должны быть в пределах (0, 0, шириной, высоты) прямоугольника. Если их опущен или нет, используется весь источник.
С соответствующими значениями, предоставленными для Размер Параметр, вы можете либо уменьшить, либо увеличить входное изображение.
Пример 1: Изменить размер изображения с значениями по умолчанию
В следующем примере мы будем читать изображение и изменить его в размере до (200, 200).
Python Program
from PIL import Image #read the image im = Image.open("sample-image.png") #image size size=(200,200) #resize image out = im.resize(size) #save resized image out.save('resize-output.png')
Входное изображение: образец Image.png
Выходное изображение – Resize-Optift.png
Все исходное изображение рассматривается для изменения изменения размера, так как мы не предоставили никакого значения для коробка параметр. В следующем примере мы предоставим коробка Параметр и найдите выходное изображение.
Пример 2. Изменение размера изображения только с коробкой входного изображения
В следующем примере мы предоставим коробка параметр. Этим мы рассмотрим только область коробки входного изображения, а затем изменить его в размере Размер Отказ
Python Program
from PIL import Image #read the image im = Image.open("sample-image.png") #image size size = (200,200) box = (100,100,500,400) #resize image out = im.resize(size, box=box) #save resized image out.save('resize-output.png')
Выходное изображение – Resize-Optift.png
Если вы наблюдаете, только для действий введите только часть входного изображения.
Вместо послесловия
Работа с графикой таким образом иногда напоминает магию, особенно когда действий несколько. Например, загрузить файл по http, преобразовать в поток байт, открыть по нему Image, повернуть/отразить/уменьшить и записать на диск. Да, это, конечно же, всего десяток строк, но провозиться с этим можно долго. Мне помогает отлаживать программы метод , который показывает текущую картинку на экране. Можно сказать, что это своего рода println для pillow 🙂
Как всегда код на GitHub. В файле примеры к статье, в файле — генерация таблицы Менделеева. Картинки, к сожалению, в открытый доступ загрузить не смогу, т.к. они отрисованы вручную дизайнером. Если интересуют именно они, пишите в личку в Telegram (@TyVik).
OpenCV
Одна из наиболее популярных библиотек, которая используется при обработке приложений по компьютерному зрению (Computer Vision — популярнейшее сегодня направление и технология, используемая в системах управления процессами, системах видеонаблюдения с камер, системах дополненной реальности и т. д.) Версия интерфейса для Пайтона называется OpenCV-Python, и именно Python-обертка во фронтенде обеспечивает легкое развертывание и настройку. Отличный инструмент для высоконагруженных вычислительных программ, работа которых связана с Computer Vision. Руководство здесь.
На jpg картинке ниже — пример наложения изображения посредством пирамид с целью создания нового фрукта.
Changelog (Pillow)
2.2.0 (2013-10-02)
- Fix #254: Bug in image transformations resulting from uninitialized memory
- Fix for encoding of b_whitespace, similar to closed issue #272
- Fix #273: Add numpy array interface support for 16 and 32 bit integer modes
- Partial fix for #290: Add preliminary support for TIFF tags.
- Fix #251 and #326: circumvent classification of pngtest_bad.png as malware
- Add typedef uint64_t for MSVC.
- Fix #329: setup.py: better support for C_INCLUDE_PATH, LD_RUN_PATH, etc.
- Fix #328: _imagingcms.c: include windef.h to fix build issue on MSVC
- Automatically discover homebrew include/ and lib/ paths on OSX
- Fix bytes which should be bytearray
- Add respective paths for C_INCLUDE_PATH, LD_RUN_PATH (rpath) to build
if specified as environment variables. - Fix #312 + gif optimize improvement
- Be more tolerant of tag read failures
- Fix #318: Catch truncated zTXt errors.
- Fix IOError when saving progressive JPEGs.
- Add RGBA support to ImageColor
- Fix #304: test for str, not “utf-8”.
- Fix missing import os in _util.py.
- Added missing exif tags.
- Fail on all import errors, fixes #298.
- Fixed Windows fallback (wasn’t using correct file in Windows fonts).
- Moved ImageFile and ImageFileIO comments to docstrings.
- Restore compatibility with ISO C.
- Use correct format character for C int type.
- Allocate enough memory to hold pointers in encode.c.
- Fix #279, fillorder double shuffling bug when FillOrder ==2 and decoding using libtiff.
- Moved Image module comments to docstrings.
- Add 16-bit TIFF support, fixes #274.
- Ignore high ascii characters in string.whitespace, fixes #272.
- Added clean/build to tox to make it behave like travis.
- Adding support for metadata in webp images.
2.1.0 (2013-07-02)
- Add /usr/bin/env python shebangs to all scripts in /Scripts.
- Add several TIFF decoders and encoders.
- Added support for alpha transparent webp images.
- Adding Python 3 support for StringIO.
- Adding Python3 basestring compatibility without changing basestring.
- Fix webp encode errors on win-amd64.
- Better fix for ZeroDivisionError in ImageOps.fit for image.size height is 1.
- Better support for ICO images.
- Changed PY_VERSION_HEX, fixes #166.
- Changes to put everything under the PIL namespace.
- Changing StringIO to BytesIO.
- Cleanup whitespace.
- Don’t skip ‘import site’ on initialization when running tests for inplace builds.
- Enable warnings for test suite.
- Fix for ZeroDivisionError in ImageOps.fit for image.size == (1,1)
- Fix for if isinstance(filter, collections.Callable) crash. Python bug #7624 on <2.6.6
- Fix #193: remove double typedef declaration.
- Fix msvc compile errors (#230).
- Fix rendered characters have been chipped for some TrueType fonts.
- Fix usage of pilfont.py script.
- Fresh start for docs, generated by sphinx-apidoc.
- Introduce –enable-x and fail if it is given and x is not available.
- Partial work to add a wrapper for WebPGetFeatures to correctly support #204.
- Significant performance improvement of alpha_composite function.
- Support explicitly disabling features via –disable-* options.
- Support selftest.py –installed, fixes #263.
- Transparent WebP Support, #204
- Use PyCapsule for py3.1, fixes #237.
2.0.0 (2013-03-15)
- Add Python 3 support. (Pillow >= 2.0.0 supports Python 2.6, 2.7, 3.2, 3.3. Pillow < 2.0.0 supports Python 2.4, 2.5, 2.6, 2.7.)
- Add WebP support.
- Add Tiff G3/G4 support (experimental)
- Backport PIL’s PNG/Zip improvements.
- Various 64 bit and Windows fixes.
- Add testing suite.
- Added support for PNG images with transparency palette.
- Many other bug fixes and enhancements by many other people (see commit log and/or docs/CONTRIBUTORS.txt).
- Special thanks to Christoph Gohlke and Eric Soroos for rallying around the effort to get a release out for PyCon 2013.
1.7.8 (2012-11-01)
- Removed doctests.py that made tests of other packages fail.
- Fix opening psd files with RGBA layers when A mode is not of type 65535 but 3.
Fixes #3
1.7.6 (2012-01-20)
- Bug fix: freetype not found on Mac OS X with case-sensitive filesystem
- Bug fix: Backport fix to split() after open() (regression introduced in PIL 1.1.7).
Platform Support¶
Current platform support for Pillow. Binary distributions are
contributed for each release on a volunteer basis, but the source
should compile and run everywhere platform support is listed. In
general, we aim to support all current versions of Linux, macOS, and
Windows.
Continuous Integration Targets
These platforms are built and tested for every change.
Operating system |
Tested Python versions |
Tested architecture |
---|---|---|
Alpine |
3.8 |
x86-64 |
Arch |
3.8 |
x86-64 |
Amazon Linux 2 |
3.7 |
x86-64 |
CentOS 7 |
3.6 |
x86-64 |
CentOS 8 |
3.6 |
x86-64 |
Debian 10 Buster |
3.7 |
x86 |
Fedora 33 |
3.9 |
x86-64 |
Fedora 34 |
3.9 |
x86-64 |
macOS 10.15 Catalina |
3.6, 3.7, 3.8, 3.9, PyPy3 |
x86-64 |
Ubuntu Linux 16.04 LTS (Xenial) |
3.6, 3.7, 3.8, 3.9, PyPy3 |
x86-64 |
Ubuntu Linux 18.04 LTS (Bionic) |
3.6, 3.7, 3.8, 3.9, PyPy3 |
x86-64 |
Ubuntu Linux 20.04 LTS (Focal) |
3.8 |
x86-64 |
Windows Server 2016 |
3.6 |
x86-64 |
Windows Server 2019 |
3.6, 3.7, 3.8, 3.9 |
x86, x86-64 |
PyPy3 |
x86 |
|
3.9/MinGW |
x86, x86-64 |
Что мы будем использовать?
Для этого проекта OCR мы будем использовать библиотеку Python-Tesseract или просто PyTesseract, которая является оболочкой для Google Tesseract-OCR Engine.
Я выбрал его, потому что он полностью открыт и разрабатывается и поддерживается Google. Следуйте этим инструкциям, чтобы установить Tesseract на свой компьютер, поскольку от него зависит PyTesseract.
Мы также будем использовать веб-фреймворк Flask для создания нашего простого OCR-сервера, на котором мы можем делать снимки через веб-камеру или загружать фотографии для распознавания символов.
Мы также собираемся использовать Pipenv, поскольку он также выполняет настройку виртуальной среды и управление требованиями.
Помимо этого, мы также будем использовать библиотеку Pillow, которая является ответвлением Python Imaging Library (PIL) для обработки открытия и обработки изображений во многих форматах.
В этом посте мы сконцентрируемся на PyTesseract, хотя есть и другие библиотеки Python, которые могут помочь вам извлекать текст из изображений, например:
- Textract: который может извлекать данные из PDF-файлов, но является тяжелым пакетом.
- Pyocr: предлагает больше вариантов обнаружения, таких как предложения, цифры или слова.
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.
The ImageGrab Mobule
Модуль ImageGrab может быть использован для копирования содержимого экрана (скриншот). Текущая версия работает только в Windows.
grabImageGrab.grab() => изображениеImageGrab.grab(BBOX) => изображение
Сделает снимок экрана, и вернёт «RGB» изображение. При использование с аргументом можно копирования только часть экрана. BBOX это кортеж определяющий координаты левого верхнего пикселя и ширина с высотой.
grabclipboardImageGrab.grabclipboard () => изображений или список строк или None
Сделает снимок содержимого буфера обмена и вернёт изображение или список имен файлов. Если буфер обмена не содержит данных, то функция возвратит None.
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.
Что мы еще не сделали
Мы многого достигли в этом посте, но еще многое предстоит сделать, чтобы усовершенствовать наш проект и подготовить его к работе в реальном мире. Во-первых, мы можем добавить стиль нашему сайту и сделать его более привлекательным для конечного пользователя с помощью CSS. Мы также можем добавить возможность загрузки и сканирования нескольких изображений одновременно и одновременного отображения.
Браузер позволяет нам подключаться к камере машины и снимать изображения, разумеется, с разрешения пользователя. Это может быть очень полезным, особенно на мобильных устройствах. Вместо того, чтобы пользователю приходилось снимать и сохранять изображение, а затем загружать его на веб-сайт, если мы добавим функцию камеры, мы можем позволить пользователю выполнять операции непосредственно из веб-приложения Flask. Это ускорит процесс сканирования.
Вы также можете создать инструмент CLI. Он позволит вам запустить команду, включая местоположение изображения, а затем распечатать вывод сканера на ваш терминал или отправить его в базу данных или API. Если вы выбрали этот путь, Docopt – фантастический инструмент для создания инструментов командной строки с использованием Python.