Opencv-python 4.2.0.34

Step 3: Install Python Libraries

sudo apt -y install python3-dev python3-pip
sudo -H pip3 install -U pip numpy
sudo apt -y install python3-testresources

We are also going to install and modules to create Python virtual environments.

cd $cwd
############ For Python 3 ############
# create virtual environment
python3 -m venv OpenCV-"$cvVersion"-py3
echo "# Virtual Environment Wrapper" >> ~/.bashrc
echo "alias workoncv-$cvVersion=\"source $cwd/OpenCV-$cvVersion-py3/bin/activate\"" >> ~/.bashrc
source "$cwd"/OpenCV-"$cvVersion"-py3/bin/activate

# now install python libraries within this virtual environment
pip install wheel numpy scipy matplotlib scikit-image scikit-learn ipython dlib
 
# quit virtual environment
deactivate

Download Installation Script To easily follow along this tutorial, please download installation script by clicking on the button below. It’s FREE!Download Installation Script

Step 4: Sym-link OpenCV 3.0

If you’ve reached this step, OpenCV 3.0 should now be installed in

Figure 4: The Python 3.4+ OpenCV 3.0 bindings are now installed in /usr/local/lib/python3.4/site-packages/

Here, our OpenCV bindings are stored under the name

Be sure to take note of this filename, you’ll need it in just a few seconds!

However, in order to use OpenCV 3.0 within our   virtual environment, we first need to sym-link OpenCV into the   directory of the   environment, like this:

$ cd ~/.virtualenvs/cv/lib/python3.4/site-packages/
$ ln -s /usr/local/lib/python3.4/site-packages/cv2.cpython-34m.so cv2.so

Notice how I am changing the name from   to   — this is so Python can import our OpenCV bindings using the name  .

So now when you list the contents of the   virtual environment’s   directory, you’ll see our OpenCV 3.0 bindings (the   file):

Figure 5: In order to access the OpenCV 3.0 bindings from our Python 3.4+ interpreter, we need to sym-link the cv2.so file into our site-packages directory.

Again, this is a very important step, so be sure that you have the   file in your virtual environment, otherwise you will not be able to import OpenCV in your Python scripts!

Step 3: Install Python Libraries

sudo apt -y install python3-dev python3-pip
sudo -H pip3 install -U pip numpy
sudo apt -y install python3-testresources

We are also going to install and modules to create Python virtual environments.

cd $cwd
############ For Python 3 ############
# create virtual environment
python3 -m venv OpenCV-"$cvVersion"-py3
echo "# Virtual Environment Wrapper" >> ~/.bashrc
echo "alias workoncv-$cvVersion=\"source $cwd/OpenCV-$cvVersion-py3/bin/activate\"" >> ~/.bashrc
source "$cwd"/OpenCV-"$cvVersion"-py3/bin/activate

# now install python libraries within this virtual environment
pip install wheel numpy scipy matplotlib scikit-image scikit-learn ipython dlib
 
# quit virtual environment
deactivate

Download Installation Script To easily follow along this tutorial, please download installation script by clicking on the button below. It’s FREE!Download Installation Script

Камера

Я выбрал недорогую, но при этом функциональную камеру Intel RealSense SR305, которая может снимать и цветное изображение, и глубинное изображение в разрешении 640 на 480 пикселей с частотой до 60 кадров в секунду.

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

Так выглядит камера, установленная на треногу

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

В комплекте с камерой идет провод USB и инструкция со ссылкой на официальный SDK в репозитории на GitHub.

Step 13:

Now that OpenCV has been configured and installed, let’s build a quick Python script to detect the red game cartridge in the image named   below:

Figure 3: Our goal is to detect the red game cartridge (on the right) in this image.

Open up your favorite editor, create a new file, name it  , and insert the following code:

# import the necessary packages
import numpy as np
import imutils
import cv2

# load the games image
image = cv2.imread("games.jpg")

# find the red color game in the image
upper = np.array()
lower = np.array()
mask = cv2.inRange(image, lower, upper)

# find contours in the masked image and keep the largest one
cnts = cv2.findContours(mask.copy(), cv2.RETR_EXTERNAL,
	cv2.CHAIN_APPROX_SIMPLE)
cnts = imutils.grab_contours(cnts)
c = max(cnts, key=cv2.contourArea)

# approximate the contour
peri = cv2.arcLength(c, True)
approx = cv2.approxPolyDP(c, 0.05 * peri, True)

# draw a green bounding box surrounding the red game
cv2.drawContours(image, , -1, (0, 255, 0), 4)
cv2.imshow("Image", image)
cv2.waitKey(0)

You’ll also need to download the games.jpg image and place it in the same directory as your   file. Once the   file has been downloaded, you can execute the script via:

$ python find_game.py

Assuming that you have downloaded the   image and placed it in the same directory as our   script, you should see the following output:

Figure 4: We have successfully detected the red game cartridge in the image!

Notice how our script was able to successfully detect the red game cartridge in the right portion of the image, followed by drawing a green bounding box surrounding it.

Obviously this isn’t the most exciting example in the world — but it has demonstrated that we have OpenCV 3.0 with Python 2.7+ bindings up and running on our Ubuntu system!

So, what’s next?

Congrats! You have a brand new, fresh install of OpenCV on your Ubuntu system — and I’m sure you’re just itching to leverage your new install to build some awesome computer vision apps.

But I’m also willing to bet that you’re just getting started learning computer vision and OpenCV, and you’re probably feeling a bit confused and overwhelmed on where exactly to start.

Personally, I’m a big fan of learning by example, so a good first step would be to read this blog post on accessing your webcam with OpenCV. This tutorial details the exact steps you need to take to (1) capture photos from your webcam and (2) access the raw video stream.

And if you’re really interested in leveling-up your computer vision skills, you should definitely check out my book, Practical Python and OpenCV + Case Studies. My book not only covers the basics of computer vision and image processing, but also teaches you how to solve real world computer vision problems including face detection in images and video streams, object tracking in video, and handwriting recognition.

So let’s put your fresh install of OpenCV on your Ubuntu system to good use — just click here to learn more about the real-world projects you can solve using your new OpenCV install + Practical Python and OpenCV .

Summary

To celebrate the OpenCV 3.0 release, I am working my way through OpenCV 3.0 and Python 2.7/Python 3.4 installation instructions on OSX, Ubuntu, and the Raspberry Pi.

Last week I covered how to install OpenCV 3.0 and Python 2.7+ on OSX.

And today we covered how to install OpenCV 3.0 with Python 2.7 bindings on Ubuntu. I have personally tested these instructions on my own Ubuntu 14.04 machine, but they should work on any Debian-based system.

Next week we’ll continue the install-fest and hop back to OSX — this time installing OpenCV 3.0 and Python 3!

This will be the first time we’ve used Python 3 on the PyImageSearch blog, so you won’t want to miss it!

Поиск книг на изображениях с помощью Python и OpenCV

Прим. перев. Вы можете заметить, что исходный код в нашей статье отличается от кода в оригинале. Автор, вероятно, использовал установку необходимых библиотек через репозитории. Мы предлагаем использовать pip, что гораздо проще. Во избежание появления ошибок рекомендуем использовать версию кода, приведенную в нашей статье.

Откройте свой любимый редактор кода, создайте новый файл с именем и начнем:

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

PHP-программист

«ООО «ОЛКОН»», Самара

tproger.ru

Вакансии на tproger.ru

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

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

Теперь давайте определим края (т.е. контуры) объектов на изображении:

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

Мы нашли контуры объектов на изображениях. Однако, как вы видите, некоторые из контуров не закрыты — между контурами существуют промежутки. Чтобы убрать промежутки между белыми пикселями изображения, мы применим операцию «закрытия»:

Теперь пробелы в контурах закрыты:

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

Рассмотрим геометрию книги.

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

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

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

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

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

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

На данном этапе наше изображение будет выглядеть так:

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

Распознавание лиц

На этот раз без пёсиков.

Лиц обнаружено: 2

— общая функция для распознавания как лиц, так и объектов. Чтобы функция искала именно лица, мы передаём ей соответствующий каскад.

Функция принимает 4 параметра:

  1. Обрабатываемое изображение в градации серого.
  2. Параметр . Некоторые лица могут быть больше других, поскольку находятся ближе, чем остальные. Этот параметр компенсирует перспективу.
  3. Алгоритм распознавания использует скользящее окно во время распознавания объектов. Параметр определяет количество объектов вокруг лица. То есть чем больше значение этого параметра, тем больше аналогичных объектов необходимо алгоритму, чтобы он определил текущий объект, как лицо. Слишком маленькое значение увеличит количество ложных срабатываний, а слишком большое сделает алгоритм более требовательным.
  4. — непосредственно размер этих областей.

Вычисления

Вычисления пределов

Для вычисления пределов в SymPy предусмотрен очень простой синтаксис, а именно . Например, если вы хотите вычислить предел функции , где , то надо написать .

sym.limit(sym.sin(x) / x, x, 0) # результат 1

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

sym.limit(x, x, sym.oo) # результат oo
sym.limit(1 / x, x, sym.oo) # результат 0
sym.limit(x ** x, x, 0) # результат 1

Дифференцирование

Для дифференцирования выражений в есть функция . Ниже даны примеры ее работы.

sym.diff(sym.sin(x), x) # результат cos(?)
sym.diff(sym.sin(2 * x), x) # результат 2cos(2?)
sym.diff(sym.tan(x), x)

Проверим результат последней функции при помощи определения производной через предел.

sym.limit((sym.tan(x + y) - sym.tan(x)) / y, y, 0)

Результат тот же.

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

sym.diff(sym.sin(2 * x), x, 1) # результат 2cos(2?)
sym.diff(sym.sin(2 * x), x, 2) # результат −4sin(2?)
sym.diff(sym.sin(2 * x), x, 3) # результат −8cos(2?)

Разложение в ряд

Для разложения выражения в ряд Тейлора используется следующий синтаксис: .

sym.series(sym.cos(x), x)
sym.series(1/sym.cos(x), x)

Интегрирование

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

sym.integrate(sym.sin(x), x) # результат −cos(?)
sym.integrate(sym.log(x), x) # результат ?log(?)−?

Также несложно посчитать интеграл и от специальных функций. Возьмем, например, функцию Гаусса:

sym.integrate(sym.exp(-x ** 2) * sym.erf(x), x)

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

sym.integrate(x**3, (x, -1, 1)) # результат 0
sym.integrate(sym.sin(x), (x, 0, sym.pi / 2)) # результат 1
sym.integrate(sym.cos(x), (x, -sym.pi / 2, sym.pi / 2)) 
# результат 2

Также можно вычислять определенные интегралы с бесконечными пределами интегрирования (несобственные интегралы).

sym.integrate(sym.exp(-x), (x, 0, sym.oo)) # результат 1

Решение уравнений

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

sym.solveset(x ** 4 - 1, x) # результат {−1,1,−?,?}

Как можно заметить, первое выражение функции приравнивается к и решается относительно . Также возможно решать некоторые уравнения с трансцендентными функциями.

sym.solveset(sym.exp(x) + 1, x) # результат {?(2??+?)|?∈ℤ}

Системы линейных уравнений

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

solution = sym.solve((x + 5 * y - 2, -3 * x + 6 * y - 15), (x, y))
solution, solution # результат (-3, 1) 

Факторизация

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

f = x ** 4 - 3 * x ** 2 + 1
sym.factor(f)
sym.factor(f, modulus=5)

Булевы уравнения

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

sym.satisfiable(x & y) # результат {x: True, y: True}

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

sym.satisfiable(x & ~x) # результат False

Преобразование изображений

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

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

Масштабирование

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

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

image = cv2.imread('my_bike.jpg')

# Увеличиваем масштаб/расширяем в 2 раза по ширине и высоте
result_1 = cv2.resize(image, None, fx=2, fy=2, interpolation=cv2.INTER_CUBIC)

# Уменьшаем масштаб/сжимаем в 2 раза по ширине и высоте
result_2 = cv2.resize(image, None, fx=2, fy=2, interpolation=cv2.INTER_AREA)

# Выводим на экран получившиеся изображения
plt.imshow(result_1)
plt.imshow(result_2)
plt.show()

Здесь в функции параметр определяет масштаб изменений по ширине, — по высоте, а параметр отвечает за сам способ изменений (то есть расширение или сжатие).

Вращение

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

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

import cv2
import matplotlib.pyplot as plt

# Загружаем изображение велосипеда
image = cv2.imread('my_bike.jpg',0)

# ряды и колонки
r, c = image.shape

matrix = cv2.getRotationMatrix2D((cols/2,rows/2), 180, 1)
result = cv2.warpAffine(image,matrix,(c,r))

# Выводим на экран повернутое изображение
plt.imshow(result)
plt.show()

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

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

Step 8:

Install virtualenv and virtualenvwrapper. These two packages allow us to create separate Python environments for each project we are working on. While installing   and   is not a requirement to get OpenCV 3.0 and Python 2.7+ up and running on your Ubuntu system, I highly recommend it and the rest of this tutorial will assume you have them installed!

$ sudo pip install virtualenv virtualenvwrapper
$ sudo rm -rf ~/.cache/pip

Now that we have   and   installed, we need to update our   file:

# virtualenv and virtualenvwrapper
export WORKON_HOME=$HOME/.virtualenvs
source /usr/local/bin/virtualenvwrapper.sh

This quick update will ensure that both   and   are loaded each time you login.

To make the changes to our   file take effect, you can either (1) logout and log back in, (2) close your current terminal window and open a new one, or preferably, (3) reload the contents of your   file:

$ source ~/.bashrc

Lastly, we can create our   virtual environment where we’ll be doing our computer vision development and OpenCV 3.0 + Python 2.7+ installation:

$ mkvirtualenv cv

Step 2: Install OS Libraries

sudo apt -y remove x264 libx264-dev

## Install dependencies
sudo apt -y install build-essential checkinstall cmake pkg-config yasm
sudo apt -y install git gfortran
sudo apt -y install libjpeg8-dev libjasper-dev libpng12-dev

sudo apt -y install libtiff5-dev

sudo apt -y install libtiff-dev

sudo apt -y install libavcodec-dev libavformat-dev libswscale-dev libdc1394-22-dev
sudo apt -y install libxine2-dev libv4l-dev
cd /usr/include/linux
sudo ln -s -f ../libv4l1-videodev.h videodev.h
cd $cwd

sudo apt -y install libgstreamer0.10-dev libgstreamer-plugins-base0.10-dev
sudo apt -y install libgtk2.0-dev libtbb-dev qt5-default
sudo apt -y install libatlas-base-dev
sudo apt -y install libfaac-dev libmp3lame-dev libtheora-dev
sudo apt -y install libvorbis-dev libxvidcore-dev
sudo apt -y install libopencore-amrnb-dev libopencore-amrwb-dev
sudo apt -y install libavresample-dev
sudo apt -y install x264 v4l-utils

# Optional dependencies
sudo apt -y install libprotobuf-dev protobuf-compiler
sudo apt -y install libgoogle-glog-dev libgflags-dev
sudo apt -y install libgphoto2-dev libeigen3-dev libhdf5-dev doxygen

Looking for installation script for OpenCV 3.4.4 on Ubuntu 16.04? Have a look at this blog.

Documentation for opencv-python

Build process

The project is structured like a normal Python package with a standard file.
The build process for a single entry in the build matrices is as follows (see for example file):

  1. In Linux and MacOS build: get OpenCV’s optional C dependencies that we compile against

  2. Checkout repository and submodules

    • OpenCV is included as submodule and the version is updated
      manually by maintainers when a new OpenCV release has been made
    • Contrib modules are also included as a submodule
  3. Find OpenCV version from the sources

  4. Install Python dependencies

    setup.py installs the dependencies itself, so you need to run it in an environment
    where you have the rights to install modules with Pip for the running Python

  5. Build OpenCV

    • tests are disabled, otherwise build time increases too much
    • there are 4 build matrix entries for each build combination: with and without contrib modules, with and without GUI (headless)
    • Linux builds run in manylinux Docker containers (CentOS 5)
  6. Rearrange OpenCV’s build result, add our custom files and generate wheel

  7. Linux and macOS wheels are transformed with auditwheel and delocate, correspondingly

  8. Install the generated wheel

  9. Test that Python can import the library and run some sanity checks

  10. Use twine to upload the generated wheel to PyPI (only in release builds)

Steps 1—5 are handled by .

The build can be customized with environment variables.
In addition to any variables that OpenCV’s build accepts, we recognize:

  • and . Set to to build the contrib and/or headless version
  • . Additional arguments for OpenCV’s CMake invocation. You can use this to make a custom build.

Manual builds

If some dependency is not enabled in the pre-built wheels, you can also run the locally to create a custom wheel.

  1. Clone this repository:
  2. Go to the root of the repository
  3. Add custom Cmake flags if needed, for example:
  4. Run
  5. You’ll have the wheel file in the folder and you can do with that whatever you wish

Versioning

script searches for the version information from OpenCV sources and appends also a revision number specific to this repository to the version string.

Releases

A release is made and uploaded to PyPI when a new tag is pushed to master branch. These tags differentiate packages (this repo might have modifications but OpenCV version stays same) and should be incremented sequentially. In practice, release version numbers look like this:

e.g.

The master branch follows OpenCV master branch releases. 3.4 branch follows OpenCV 3.4 bugfix releases.

Development builds

Every commit to the master branch of this repo will be built. Possible build artifacts use local version identifiers:

e.g.

These artifacts can’t be and will not be uploaded to PyPI.

Supported Python versions

Python 3.x releases are provided for officially supported versions (not in EOL).

Currently, builds for following Python versions are provided:

  • 3.5
  • 3.6
  • 3.7
  • 3.8

Backward compatibility

Starting from 4.2.0 and 3.4.9 builds the macOS Travis build environment was updated to XCode 9.4. The change effectively dropped support for older than 10.13 macOS versions.

Шаг 10: Система отслеживания местоположения объекта

Мы хотим, чтобы наш объект всегда находился на экране. Итак, давайте определим, например, что наш объект будет «центрирован», если:

220 < x < 280

И

160 < y < 210

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

Обратите внимание, что «x» и «y», используемые в качестве параметров в этой функции, те же, что мы использовали ранее для печати центрального положения:

На основе координат (x, y) генерируются команды сервопозиции, используя функцию positionServo (servo, angle). Например, предположим, что y-позиция равна «50», что означает, что наш объект находится почти в верхней части экрана, что можно перевести, что «взгляд камеры» направлен вниз (скажем, угол наклона 120 градусов) Таким образом, мы должны «уменьшить» угол наклона (скажем, до 100 градусов), поэтому «взгляд камеры» будет двигаться «вверх», и объект будет перемещаться «вниз» на экране (у увеличится, скажем, 190). На приведенной выше диаграмме показан пример с точки зрения геометрии.

Функция positionServo (servo, angle) может быть записана как:

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

Обратите внимание, что angleServoCtrl.py должен находиться в том же каталоге, что и objectDetectTrac.py

Полный код можно скачать с GitHub: objectDetectTrack.py

Ниже gif показан пример работы нашего проекта:

Шаг 4: Определение Лица

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

Наиболее распространенный способ обнаружения лица (или любых объектов), использует «классификатор каскадов Хаар».

Обнаружение объектов с использованием «классификатора каскадов Хаар» — эффективный метод обнаружения объектов, предложенный Полом Виолой и Майклом Джонсом в своей статье «Быстрое обнаружение объектов с использованием расширенного каскада простых функций» в 2001 году. Это подход, основанный на механизме обучения, каскадная функция обучается из множества положительных и отрицательных изображений. Затем он используется для обнаружения объектов на других изображениях.

В уроке мы будем работать с распознаванием лиц. Первоначально алгоритм требует много положительных изображений (изображений лиц) и негативных изображений (изображений без лиц) для обучения классификатора. Затем нам нужно извлечь из него функции. Хорошей новостью является то, что OpenCV поставляется с тренером, а также с детектором. Если вы хотите обучить свой классификатор для любого объекта, такого как автомобиль, самолеты и т. Д., Вы можете использовать OpenCV для его создания. Его полная информация приведена здесь: Обучение каскадного классификатора.

Если вы не хотите создавать свой собственный классификатор, OpenCV уже содержит много предварительно подготовленных классификаторов для лица, глаз, улыбки и т. Д. Эти файлы XML можно загрузить из каталога haarcascades.

Достаточно теории, давайте создадим детектор лица с OpenCV!

Загрузите файл: faceDetection.py из GitHub.

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

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

Обратите внимание на следующую строку:. Это строка, которая загружает «классификатор» (который должен находиться в каталоге с именем «Cascades /» в каталоге вашего проекта)

Это строка, которая загружает «классификатор» (который должен находиться в каталоге с именем «Cascades /» в каталоге вашего проекта).

Затем мы установим нашу камеру и внутри цикла, загрузим входное видео в режиме серого (то же, что мы видели раньше).

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

Где,

  • grey- это входное изображение в оттенках серого.
  • scaleFactor — это параметр, определяющий размер изображения при каждой шкале изображения. Он используется для создания масштабной пирамиды.
  • minNeighbors — параметр, указывающий, сколько соседей должно иметь каждый прямоугольник кандидата, чтобы сохранить его. Более высокое число дает более низкие ложные срабатывания.
  • minSize — минимальный размер прямоугольника, который считается лицом.

Функция будет определять лица на изображении. Затем мы должны «маркировать» лица на изображении, используя, например, синий прямоугольник. Это делается с помощью этой части кода:

Если грани найдены, они возвращают позиции обнаруженных лиц в виде прямоугольника с левым углом (x, y) и имеют «w» в качестве его ширины и «h» как его высоту ==> (x, y, w, час). См. Приведенную выше картинку.

Как только мы получим эти координаты, мы можем создать «ROI» (рисованный прямоугольник) для лица и представить результат с помощью функции imshow ()

Запустите вышеупомянутый скрипт python в вашей среде python, используя терминал Rpi:

Результат:

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

На GitHub вы найдете другие примеры:

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

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

А оно нам нужно?

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

Я — студентка факультета компьютерной инженерии и работаю над проектом под названием «Машинное обучения для умного обнаружения и идентификации опухолей».

Цветовая сегментация изображений нужна для того, чтобы научить компьютер обнаружению опухолей. Получая МРТ снимок, программа должна определить по нему стадию развития рака. Это делается путем разделения снимка на различные полутоновые уровни, в которых самые темные области заполнены раковыми клетками, а белые — здоровыми. Затем программа рассчитывает степень принадлежности каждого полутонового уровня к раковой опухоли. Благодаря этой информации программа может не только обнаружить опухоль, но и определить ее стадию.

Данный проект основан на мягких вычислениях, нечеткой логике и машинном обучении.

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

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