Программирование компьютерного зрения Raspberry Pi: 11~13
Программирование компьютерного зрения Raspberry Pi: 11~13

11. Практическое применение компьютерного зрения

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

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

В этой главе мы изучим и продемонстрируем код по следующим темам:

  • Реализуйте максимум фильтров RGB
  • Реализация вычитания фона
  • Рассчитать оптический поток
  • Обнаружение и отслеживание движения
  • Обнаружение штрих-кодов на изображениях
  • Реализация эффектов хромакей

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

Технические требования

Можно найти в GitHub Файлы кода для этой главы можно найти по адресу .

Посмотрите видео ниже,к Проверятьэта страницаначальствоиз“толькосуществоватьосуществлятьизкод”。

Реализуйте максимум фильтров RGB

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

Затем мы сохраняем максимальную интенсивность канала и уменьшаем интенсивность всех остальных каналов до нуля. Это происходит для каждого пикселя изображения. гипотезадляодинкартинабелый,Интенсивность(30, 200, 120)。 Затем,существоватьотвечатьиспользовать Максимальный RGB-фильтрназад,это Волядля(0, 200, 0)。 Давайте посмотрим на тот, который будет использовать NumPy и OpenCV Функция Программа, реализующая эту функциональность:

код Язык:javascript
копировать
import cv2
import numpy as np
def maxRGB(img):
    b = img[:, :, 0]
    g = img[:, :, 1]
    r = img[:, :, 2]
    M = np.maximum(np.maximum(b, g), r)
    b[b < M] = 0
    g[g < M] = 0
    r[r < M] = 0
    return(cv2.merge((b, g, r)))
cap = cv2.VideoCapture(0)
while True:
    ret, frame = cap.read()
    cv2.imshow('Max RGB Filter', maxRGB(frame))
    if cv2.waitKey(1) == 27:
        break
cv2.destroyAllWindows()
cap.release()

Запустите предыдущую программу и просмотрите результат. Интересно посмотреть отфильтрованную прямую трансляцию. Вывод следующий:

[Не удалось передать изображение по внешней ссылке. Исходный сайт может иметь механизм защиты от кражи. Рекомендуется сохранить изображение и загрузить его напрямую (img-aMrzZUHy-1681873301183) (https://gitcode.net/apachecn/apachecn-cv). -zh/-/raw /master/docs/raspi-cv-prog/img/B16208_11_01.jpg)]

Рисунок 11.1 – Выход фильтра Max RGB

существуют В следующем разделе мы, Воля, изучим и продемонстрируем вычитание фона из концепции.

Реализация вычитания фона

Статические камеры используются во многих приложениях, таких как безопасность и наблюдение. Мы можем разделить фон и движущиеся объекты с помощью процесса, называемого вычитанием фона. Обычно возвращается двоичное изображение с фоновым изображением (статической частью сцены) в черных пикселях и движущейся частью (изменяющейся или динамической) в белых пикселях. OpenCV Этого можно добиться с помощью двух алгоритмов. 第одиндаcreateBackgroundSubtractorKNN()。 Это создаст К ближайший соседKNN)Объект вычитания фона。 Тогда мы сможем киспользоватьтон объектаиспользоватьapply()функцияк Получите маску переднего плана。 Мы можем напрямую отображать маску переднего плана в реальном времени.

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

код Язык:javascript
копировать
import cv2
import numpy as np
cap = cv2.VideoCapture(0)
fgbg = cv2.createBackgroundSubtractorKNN()
while(True):
    ret, frame = cap.read()
    fgmask = fgbg.apply(frame)
    cv2.imshow('frame', fgmask)
    if cv2.waitKey(30) == 27:
        break
cap.release()
cv2.destroyAllWindows()

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

[Не удалось передать изображение по внешней ссылке. Исходный сайт может иметь механизм защиты от кражи. Рекомендуется сохранить изображение и загрузить его напрямую (img-SmKfCDkW-1681873301184) (https://gitcode.net/apachecn/apachecn-cv). -zh/-/raw /master/docs/raspi-cv-prog/img/B16208_11_02.jpg)]

Рисунок 10.2 – Вычитание фона с использованием KNN

Обратите внимание: если вы не использовали его какое-то время, OpenCV будет считаться частью фона и медленно растворяться в выводе.

另один类似изфункциядаcv2.createBackgroundSubtractorMOG2()。 Это все равно произойдетиспользоватьapply()функция Создать маску переднего плана。 Вот пример программы, использующей его:

код Язык:javascript
копировать
import cv2
import numpy as np
cap = cv2.VideoCapture(0)
fgbg = cv2.createBackgroundSubtractorMOG2()
while(True):
    ret, frame = cap.read()
    fgmask = fgbg.apply(frame)
    cv2.imshow('frame', fgmask)
    if cv2.waitKey(30) == 27:
        break
cap.release()
cv2.destroyAllWindows()

Запустите предыдущую программу и просмотрите результат. есть в обеих программах,мы все Волясоздаватьfgbgобъект,ииспользоватьapply()функциярассчитать маску переднего плана,Прямо сейчасfgmask。 Затем,мы толькодаиспользоватьimshow()функция Отображение масок переднего плана в реальном времени。 Можно найти См. этот код ожидаемого вывода на предыдущем снимке экрана. Запустите программу и посмотрите результат самостоятельно.

Рассчитать оптический поток

Оптический поток (также известный как оптический поток) — это закономерность, возникающая при движении объектов в видео (в реальном времени или в записи). 注意前一句серединаизПоявлениеслово。 Это означает, что если наблюдатель (камера в нашем примере) находится в движении, объекты в сцене считаются движущимися, даже если они неподвижны. Это называется относительным движением. Проще говоря, оптический поток подчеркивает относительное движение в видео. OpenCV Есть что предложить оптический функция потокового из реализации. cv2.calcOpticalFlowFarneback()функцияиспользоватьПлотныйметод Рассчитать оптический поток。 Это означает, что он рассчитает расход во всех точках. Эта функция реализует Gunner Farneback алгоритм.

Уведомление:

Дополнительную информацию о параметрах Gunner Farneback можно прочитать по следующему URL-адресу:

http://www.diva-portal.org/smash/get/diva2:273847/FULLTEXT01.pdfTwo-Frame

Давайте посмотрим, как использовать следующий код OpenCV и Python 3 Рассчитать оптический поток:

код Язык:javascript
копировать
import cv2
import numpy as np
cap = cv2.VideoCapture(0)
ret, frame1 = cap.read()
prvs = cv2.cvtColor(frame1,
                    cv2.COLOR_BGR2GRAY)
hsv = np.zeros_like(frame1)
hsv[..., 1] = 255
while(cap):
    ret, frame2 = cap.read()
    next = cv2.cvtColor(frame2,
                        cv2.COLOR_BGR2GRAY)
    flow = cv2.calcOpticalFlowFarneback(prvs,
                                       next,
                                       None, 0.5,
                                       3, 15,
                                       3, 5,
                                       1.2, 0)
    mag, ang = cv2.cartToPolar(flow[..., 0],
                               flow[..., 1])
    hsv[..., 0] = ang * 180/np.pi/2
    hsv[..., 2] = cv2.normalize(mag, None, 0,
                                255, cv2.NORM_MINMAX)
    rgb = cv2.cvtColor(hsv, cv2.COLOR_HSV2BGR)
    cv2.imshow('Optical Flow', rgb)
    if cv2.waitKey(1) == 27:
        break
    prvs = next
cap.release()
cv2.destroyAllWindows()

существовать Переднийизпрограммасередина, cv2.calcOpticalFlowFarneback()возвращаться Координаты потока в системе XY (декартовой). Затем,использоватьcv2.cartToPolar()функция Воля Что转换для极性。 Затем оттенок показывает угол движения, а значение показывает окончательный результат. HSV Интенсивность движения в кадре, которая преобразуется в BGR и отображается как результат. Результат будет выглядеть как на предыдущем скриншоте. Единственное отличие состоит в том, что оптический поток будет представлен разными цветами.

Концепция оптического потока существуетк имеет следующие области:

  • Обнаружение и сопровождение целей
  • Обнаружение движения и отслеживание
  • Робот-навигация

Обнаружение и отслеживание движения

Давайте создадим один для использования RPi,OpenCV и Python Система обнаружения и отслеживания движения в режиме реального времени. Мы будем использовать очень простые методы для обнаружения движения. По сути, мы рассчитаем источник видео (видеофайл или USB Разница между последовательными кадрами прямой трансляции с веб-камеры). Затем мы Волясуществовать хотим обнаружить различия между последовательными кадрами и нарисовать контуры вокруг воксельной области:

Мы будем импортировать из OpenCV и NumPy начинать. Кроме того, инициализация соответствует USB Объект веб-камеры:

код Язык:javascript
копировать
import cv2
код Язык:javascript
копировать
import numpy as np
код Язык:javascript
копировать
cap = cv2.VideoCapture(0)

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

код Язык:javascript
копировать
k = np.ones((3, 3), np.uint8)

захват кода и сохранение последовательных кадров в отдельных переменных:

код Язык:javascript
копировать
t0 = cap.read()[1]
код Язык:javascript
копировать
t1 = cap.read()[1]

сейчассуществовать,让насдляwhileЗапишите этот блок в цикле。 В этом блоке мы вычисляем абсолютную разницу между кадрами перед их захватом. нас Волядляэтотиспользоватьcv2.absdiff()функция。 Затем мы конвертируем вычисленные абсолютные разности в оттенки серого для дальнейшей обработки:

код Язык:javascript
копировать
while(True):
код Язык:javascript
копировать
d=cv2.absdiff(t1, t0)
код Язык:javascript
копировать
grey = cv2.cvtColor(d, cv2.COLOR_BGR2GRAY)

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

[Не удалось передать изображение по внешней ссылке. Исходный сайт может иметь механизм защиты от кражи. Рекомендуется сохранить изображение и загрузить его напрямую (img-IFbiNnHs-1681873301184) (https://gitcode.net/apachecn/apachecn-cv). -zh/-/raw /master/docs/raspi-cv-prog/img/B16208_11_03.jpg)]

Рисунок 11.3 – Абсолютная разница между последовательными кадрами

нассуществоватьначальство一步середина计算из Результат:Некоторыйшум。 Поэтому мы должны сначала размыть его, используя технику размытия по Гауссу, чтобы удалить шум:

код Язык:javascript
копировать
blur = cv2.GaussianBlur(grey, (3, 3), 0)

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

код Язык:javascript
копировать
ret, th = cv2.threshold(blur, 15, 255, cv2.THRESH_BINARY)

сейчассуществовать,让нас Воля膨胀形态学操作отвечатьиспользовать При этомдвоичныйкартинакартина。 Это позволяет легко обнаружить границы в пороговых изображениях:

код Язык:javascript
копировать
dilated = cv2.dilate(th, k, iterations=2)

Ниже приведен результат операции расширения:

[Не удалось передать изображение по внешней ссылке. Исходный сайт может иметь механизм защиты от кражи. Рекомендуется сохранить изображение и загрузить его напрямую (img-TMLBgIxd-1681873301185) (https://gitcode.net/apachecn/apachecn-). cv-zh/-/raw /master/docs/raspi-cv-prog/img/B16208_11_04.jpg)]

Рисунок 11.4 – Расширенный вывод

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

код Язык:javascript
копировать
contours, hierarchy = cv2.findContour(dilated,
код Язык:javascript
копировать
cv2.RETR_TREE,
код Язык:javascript
копировать
cv2.CHAIN_APPROX_SIMPLE)
код Язык:javascript
копировать
t2=t0
код Язык:javascript
копировать
cv2.drawContours(t2, contours, -1, (0, 255, 0), 2)
код Язык:javascript
копировать
cv2.imshow('Output', t2)

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

код Язык:javascript
копировать
t0=t1
код Язык:javascript
копировать
t1=cap.read()[1]

当按Вниз键盘начальствоизEscКлючевое время,нас结束whileцикл:

код Язык:javascript
копировать
if cv2.waitKey(5) == 27 :
код Язык:javascript
копировать
break

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

код Язык:javascript
копировать
cap.release()
код Язык:javascript
копировать
cv2.destroyAllWindows()

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

[Не удалось передать изображение по внешней ссылке. Исходный сайт может иметь механизм защиты от кражи. Рекомендуется сохранить изображение и загрузить его напрямую (img-lIWVxnbc-1681873301185) (https://gitcode.net/apachecn/apachecn-cv). -zh/-/raw /master/docs/raspi-cv-prog/img/B16208_11_05.jpg)]

Рисунок 11.5 – Обнаружено и выделено движение

Помните, что этот код существует, рассчитан на большие затраты. не ожидай RPi Старые модели и модели без разгона имеют очень высокую частоту кадров. В качестве упражнения нарисуйте контуры разными цветами. нас还Можетк С помощьюcv2.moments()функциявычислить центр масс,ииспользовать小圆圈表示это们。 Это сделает результат более интересным.

Обнаружение штрих-кодов на изображениях

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

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

[Не удалось передать изображение по внешней ссылке. Исходный сайт может иметь механизм защиты от кражи. Рекомендуется сохранить изображение и загрузить его напрямую (img-fU4VinsU-1681873301185) (https://gitcode.net/apachecn/apachecn-cv). -zh/-/raw /master/docs/raspi-cv-prog/img/B16208_11_06.jpg)]

Рисунок 11.6 – Исходное изображение

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

код Язык:javascript
копировать
import numpy as np
код Язык:javascript
копировать
import cv2
код Язык:javascript
копировать
image=cv2.imread('/home/pi/book/dataset/barcode.jpeg', 1)
код Язык:javascript
копировать
input = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)

Штрих-код с горизонтальной картинкой карты имеет низкий и высокий вертикальный градиент. Следовательно, изображения-кандидаты должны иметь области, соответствующие этому критерию. нас Воляиспользоватьcv2.Sobel()функциячтобы рассчитать уровеньивертикальная производная,Затем вычислите разницу к, чтобы найти площадь, удовлетворяющую условиям из. Давайте посмотрим, как это сделать:

код Язык:javascript
копировать
hor_der = cv2.Sobel(input, ddepth=-1, dx=1, dy=0, ksize = 5)
код Язык:javascript
копировать
ver_der = cv2.Sobel(input, ddepth=-1, dx=0, dy=1, ksize=5)
код Язык:javascript
копировать
diff = cv2.subtract(hor_der, ver_der)

OpenCV поставлятьcv2.convertScaleAbs()функция。 Он преобразует любой массив чисел в 8-битное целое число без знакаизмножество. Давайте использовать его следующим образом:

код Язык:javascript
копировать
diff = cv2.convertScaleAbs(diff)

Вывод следующий:

[Не удалось передать изображение по внешней ссылке. Исходный сайт может иметь механизм защиты от кражи. Рекомендуется сохранить изображение и загрузить его напрямую (img-8wzzJHmr-1681873301185) (https://gitcode.net/apachecn/apachecn-cv). -zh/-/raw /master/docs/raspi-cv-prog/img/B16208_11_07.jpg)]

картина 11.7 – горизонтальные и вертикальные Sobel Разница между производными

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

код Язык:javascript
копировать
blur = cv2.GaussianBlur(diff, (3, 3), 0)

Вот вывод приведенного выше кода:

[Внешняя ссылка: передача изображения не удалась,Исходный сайт может иметь механизм защиты от кражи.,Рекомендуется сохранить фильм Волякартина напрямую, загрузив(img-uHxqu9E8-1681873301186)(https://gitcode.net/ apachecn/apachecn-cv-zh/-/raw/master/docs/raspi-cv-prog/img/B16208_11_08.jpg)]

картина 11.8 – После применения размытия по Гауссу

сейчассуществовать,让наспроходить对Чтоотвечатьиспользоватьпорог Воля Что转换длядвоичныйкартинакартина。 Вот код для этого:

код Язык:javascript
копировать
ret, th = cv2.threshold(blur, 225, 255, cv2.THRESH_BINARY)

к Вниздавыходдвоичныйкартинакартина:

[Внешняя ссылка: передача изображения не удалась,Исходный сайт может иметь механизм защиты от кражи.,Рекомендуется сохранить фильм Волякартина напрямую, загрузив(img-CEUHsFjV-1681873301186)(https://gitcode.net/ apachecn/apachecn-cv-zh/-/raw/master/docs/raspi-cv-prog/img/B16208_11_09.jpg)]

картина 11.9 –Двоичный выход

Как показано выше,Это дадвоичнаякартинакартина,штрих-код выделени Что他高вертикальный градиентобласть。 Мы можем отобразитькартинак для дальнейшей обработки. Он заполняет пробелы между вертикальными линиями:

код Язык:javascript
копировать
dilated = cv2.dilate(th, None, iterations = 10)

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

[Внешняя ссылка: передача изображения не удалась,Исходный сайт может иметь механизм защиты от кражи.,Рекомендуется сохранить фильм Волякартина напрямую, загрузив(img-hBAAzKE3-1681873301186)(https://gitcode.net/ apachecn/apachecn-cv-zh/-/raw/master/docs/raspi-cv-prog/img/B16208_11_10.jpg)]

картина 11.10 – Расширенный двоичный выход

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

код Язык:javascript
копировать
eroded = cv2.erode(dilated, None, iterations = 15)

Вот вывод приведенного выше кода:

[Внешняя ссылка: передача изображения не удалась,Исходный сайт может иметь механизм защиты от кражи.,Рекомендуется сохранить фильм Волякартина напрямую, загрузив(img-5Me5B6c4-1681873301186)(https://gitcode.net/ apachecn/apachecn-cv-zh/-/raw/master/docs/raspi-cv-prog/img/B16208_11_011.jpg)]

картина 11.11 –коррозиякартинакартина

让нассуществовать Это рассчитаноиздвоичныйкартинакартинасерединаоказаться所有контуриз списка. Для этого используйте следующий код:

код Язык:javascript
копировать
(contours, hierarchy) = cv2.findContours(eroded, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)

Максимальный контур и область штрих-кода в двоичной картинке соответствуют контуру. Найдите максимальный профиль в разделе «Кодсуществоватькартинакартина»:

код Язык:javascript
копировать
areas = [cv2.contourArea(temp) for temp in contours]
код Язык:javascript
копировать
max_index = np.argmax(areas)
код Язык:javascript
копировать
largest_contour = contours[max_index]

Давайте использовать OpenCV cv2.boundingRect()функция Поискмаксимумконтуризограничивающий прямоугольникизкоординировать,Затем нарисуйте этот прямоугольник в существующейкартинакартина:

код Язык:javascript
копировать
```py
x, y, width, height = cv2.boundingRect(largest_contour)
```

```py
cv2.rectangle(image, (x, y), (x+width, y+height),(0,255,0), 2)
```

```py
cv2.imshow('Detected Barcode',image)
```

```py
cv2.waitKey(0)
```

```py
cv2.destroyAllWindows()
```

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

[Внешняя ссылка: передача изображения не удалась,Исходный сайт может иметь механизм защиты от кражи.,Рекомендуется сохранить фильм «Волякартина» напрямую, загрузив(img-cukzbIYg-1681873301186)(https://gitcode.net/ apachecn/apachecn-cv-zh/-/raw/master/docs/raspi-cv-prog/img/B16208_11_012.jpg)]

картина 11.12 – Обнаружен штрих-код

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

код Язык:javascript
копировать
blur = cv2.GaussianBlur(diff, (3, 3), 0)
dilated = cv2.dilate(th, None, iterations = 10)
eroded = cv2.erode(dilated, None, iterations = 15)

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

существовать Вниз一节середина,нас Воляузнать, какиспользовать RPi и USB пропуск на веб-камеру OpenCV и Python 3 Примените хроматическую манипуляцию в стиле кино.

Реализация эффектов хромакей

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

Сначала импортируйте все необходимые библиотеки и запустите объект видеозахвата:

код Язык:javascript
копировать
import numpy as np
код Язык:javascript
копировать
import cv2
код Язык:javascript
копировать
cap = cv2.VideoCapture(0)

для了获得更好из Частота кадровиликадров в секундуFPS)ставка,нас Воля USB Веб-камеракартинаголоваиз分辨率设置для640x480картинабелый。 Это приводит к повышению частоты кадров, а эффект зеленого экрана выглядит естественно:

код Язык:javascript
копировать
cap.set(3, 640)
код Язык:javascript
копировать
cap.set(4, 480)
```** 

существования Далее мы читаем Воляиспользовать как фон изкартинакартина. использовать в качестве фона изкартина Картина должна иметь настройки изображения веб-камеры с таким же разрешением, как и разрешение. существоватьэтот种情况Вниз,нас Воля Что设置для640x480。 Мы знаем, мы Волясуществовать NumPy из Все арифметические и логические операции выполняются над массивом (существовать В данном случае фон картиныкартинаи происходит от подключения к RPi из USB Веб-камера (изображение в реальном времени или кадры) требуют, чтобы массивы операндов имели одинаковый размер. ; В противном случае Питон 3 Интерпретатор выдаст ошибку. Вот код для этого:

код Язык:javascript
копировать
bg = cv2.imread('/home/pi/book/dataset/bg.jpg', 1)

Напишем знакомую логику для циклов,и читайте прямую трансляцию кадров с веб-камеры USB.,Как показано ниже:

код Язык:javascript
копировать
while True:
код Язык:javascript
копировать
ret, frame = cap.read()

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

[Внешняя ссылка: передача изображения не удалась,Исходный сайт может иметь механизм защиты от кражи.,Рекомендуется сохранить фильм Волякартина напрямую, загрузив(img-bWRbp28x-1681873301187)(https://gitcode.net/ apachecn/apachecn-cv-zh/-/raw/master/docs/raspi-cv-prog/img/B16208_11_013.jpg)]

картина 11.13 – Входное видео

Как мы существуем 6 Как обсуждалось в главе «Цветовые пространства, преобразования и пороги», когда нам нужен цветовой диапазон, HSV Цветовое пространство представляет собой лучший способ представления цветов. Давайте конвертируем Волякартинакартина в HSV цветовое Затем рассчитаем маску для зеленого экрана на заднем плане:

код Язык:javascript
копировать
hsv=cv2.cvtColor(frame, cv2.COLOR_BGR2HSV)
код Язык:javascript
копировать
image_mask=cv2.inRange(hsv, np.array([40, 50, 50]),
код Язык:javascript
копировать
np.array([80, 255, 255]))

Этот Воля вычисляет маску картиныкартинаиз. Зеленый (или любой его оттенок) штрих-картина заменяется цветом, оставшийся штрих изображения заменяется черным:

[Внешняя ссылка: передача изображения не удалась,Исходный сайт может иметь механизм защиты от кражи.,Рекомендуется сохранить фильм Волякартина напрямую, загрузив(img-VSKDkjBT-1681873301187)(https://gitcode.net/ apachecn/apachecn-cv-zh/-/raw/master/docs/raspi-cv-prog/img/B16208_11_014.jpg)]

картина 11.14 – Рассчитать маску

существования вычисляет фон изображениякартина, соответствующий маске после,Мы можем к Воля Эту маску следует использовать в фоновом режиме,кн Воля имеет черный элемент изображения из объекта, скрытого на переднем плане, существует,Как показано ниже:

код Язык:javascript
копировать
bg_mask=cv2.bitwise_and(bg, bg, mask=image_mask)

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

[Внешняя ссылка: передача изображения не удалась,Исходный сайт может иметь механизм защиты от кражи.,Рекомендуется сохранить фильм Волякартина напрямую, загрузив(img-o5KaCMQr-1681873301187)(https://gitcode.net/ apachecn/apachecn-cv-zh/-/raw/master/docs/raspi-cv-prog/img/B16208_11_015.jpg)]

изображение 11.15 – Замените белый элемент изображения в маске фоном.

Теперь существуют, мы должны начать с USB Извлеките передний план из прямой трансляции с веб-камеры. Мы можем сделать это, используя следующий код:

код Язык:javascript
копировать
fg_mask=cv2.bitwise_and(frame, frame, mask=cv2.bitwise_not(image_mask))

Передний изкод извлекает все незеленые (или его оттенки) элементы изкартины. Также воля черного цвета назначается и фону (зеленому экрану) соответствующего элемента изкартина:

[Внешняя ссылка: передача изображения не удалась,Исходный сайт может иметь механизм защиты от кражи.,Рекомендуется сохранить фильм Волякартина напрямую, загрузив(img-NP9wFDgR-1681873301187)(https://gitcode.net/ apachecn/apachecn-cv-zh/-/raw/master/docs/raspi-cv-prog/img/B16208_11_016.jpg)]

изображение 11.16 – Замените черный элемент изображения в маске на передний план.

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

код Язык:javascript
копировать
cv2.imshow('Output', cv2.add(bg_mask, fg_mask))
код Язык:javascript
копировать
if cv2.waitKey(1) == 27:
код Язык:javascript
копировать
break
код Язык:javascript
копировать
cv2.destroyAllWindows()
код Язык:javascript
копировать
cap.release()

Вот окончательный результат:

[Внешняя ссылка: передача изображения не удалась,Исходный сайт может иметь механизм защиты от кражи.,Рекомендуется сохранить фильм Волякартина напрямую, загрузив(img-ci4H5v3j-1681873301188)(https://gitcode.net/ apachecn/apachecn-cv-zh/-/raw/master/docs/raspi-cv-prog/img/B16208_11_017.jpg)]

картина 11.17 – окончательный результат

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

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

Подвести итог

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

отсейчассуществоватьначинать,Получите знания из экспериментов в этой книге.,нас Можетк Изучите более подробно OpenCV изкартинакартина ручка икомпьютерное зрениеполе。 мы окружаем OpenCV На этом путешествие Куиза заканчивается.

существуют В следующей главе мы, Воля, узнаем, как Python использовать Еще одно мощное, но очень простоеиспользованиеизкомпьютерное зрение Библиотека Mahotas。 Мы также будем Узнать и показать, как использовать Jupyter Блокнот Python 3 изнаукапрограммирование.

12. Объединение Mahotas и Jupyter

В предыдущей главе мы узнали, как использовать функциональность программирования OpenCV и Python 3 в существующем компьютерном мире Raspberry Pi. Практическое применение в области зренияиспользовать и демонстрации.

В этой главе мы, Воля, изучаем еще одно компьютерное зрение Библиотека Mahotas из Основы. Мы также давайте посмотрим на один Jupyter проекты и научитесь Jupyter блокнот для Python 3 программирование. Наше исследование «Волясуществовать» по темам в этой главе заключается в следующем:

  • использовать Mahotas иметь дело скартинакартина
  • Объединение Mahotas и OpenCV
  • Другие популярные библиотеки обработки изображений
  • Изучите блокноты Jupyter для программирования на Python 3

Прочитав эту главу, вы привыкнете к использованию Mahotas Выполните обработку изображениякартины. Вы также можете использовать Jupyter Ноутбук работает уверенно Python 3 программа.

Технические требования

Можно найти в GitHub Файлы кода для этой главы можно найти по адресу .

Посмотрите видео ниже,к Проверятьэта страницаначальствоиз“толькосуществоватьосуществлятьизкод”。

Обработка изображений с помощью Mahotas

Mahotas это Python Библиотека,использовать Вкартинакартинаиметь дело сиикомпьютерное зрение, связанное с задачами. Его создал Луис Педро. Педро), разработанный из.

Это позволяет добиться многих икомпьютерных зрение Связанныйизалгоритм. оно было использовано C++ осознать, и можно найти в NumPy Работайте с массивом. Он также имеет Python 3 из Простой интерфейс.

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

Уведомление:

Ты можешькпроходитьдоступэта страницаУзнайте о Mahotas из Подробнее.

Мы можем киспользоватьк Вниз Заказсуществовать Raspberry Pi Установить наmahotas

код Язык:javascript
копировать
pip3 install mahotas

Mahotas изкомпоненты Воля Установитьсуществовать/home/pi/.local/binсередина。 Мы можемнавсегда добавлен вPATH变量середина,Как показано ниже:

проходитьбегатьк Вниз Заказ,к Режим редактирования Открыть~/.profileдокумент:

код Язык:javascript
копировать
nano ~/.profile

Добавьте в конец следующие строки:

код Язык:javascript
копировать
PATH='$PATH:/home/pi/.local/bin'

Перезагрузите Raspberry Pi:

код Язык:javascript
копировать
sudo reboot

нас Можеткпроходитьсуществовать Заказпо подсказкебегатьк Вниз Заказпроверитьmahotasда否已成功Установить:

код Язык:javascript
копировать
python3 -c 'import mahotas'

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

Чтение изображений и встроенных изображений

Mahotas Имеет множество встроенных картинок. Давайте посмотрим,как их использовать. существовать Вниз面изкодсередина Проверять:

код Язык:javascript
копировать
import matplotlib.pyplot as plt
import mahotas
photo = mahotas.demos.load('luispedro')
plt.imshow(photo)
plt.axis('off')
plt.show()

существовать Переднийизкодсередина, mahotas.demos.load()использовать ВВолявстроенныйкартинакартиназагрузить в NumPy множество. luispedroда Должен Библиотека作者изкартинакартина。 и OpenCV Разные, Махатас к RGB Формат для чтения и хранения цветной картиныкартина. Мы тоже Можно найти в灰度模式Вниз加载ипоказыватькартинакартина,Как показано ниже:

код Язык:javascript
копировать
photo = mahotas.demos.load('luispedro', as_grey=True)
plt.imshow(photo, cmap='gray')

Можем загрузить другие библиотеки,Как показано ниже:

код Язык:javascript
копировать
photo = mahotas.demos.load('nuclear')
photo = mahotas.demos.load('lena')
photo = mahotas.demos.load('DepartmentStore')

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

код Язык:javascript
копировать
photo= mahotas.imread('/home/pi/book/dataset/4.1.01.tiff')

этотфункцияизметод работыиcv2.imread() OpenCV Функции те же.

Применить порог к изображению

Мы уже знаем основы пороговой обработки. нас Можеткпроходитьиспользоватьmahotasсерединапоставлятьизфункцияв оттенки серогокартинакартина进行порогиметь дело с。 Давайте продемонстрируем бинаризацию Оцуки:

код Язык:javascript
копировать
import matplotlib.pyplot as plt
import numpy as np
import mahotas
photo = mahotas.demos.load('luispedro', as_grey=True)
photo = photo.astype(np.uint8)
T_otsu = mahotas.otsu(photo)
plt.imshow(photo > T_otsu, cmap='gray')
plt.axis('off')
plt.show()

mahotas.otsu()функция Принять оттенки серогокартинакартина作для参число,ивозвращатьсяпорог。photo > T_otsuкодвозвращатьсяпорогкартинакартина。 Следующий вывод:

[Внешняя ссылка: передача изображения не удалась,Исходный сайт может иметь механизм защиты от кражи.,Рекомендуется сохранить фильм Волякартина напрямую, загрузив(img-BmvVbXSb-1681873301188)(https://gitcode.net/ apachecn/apachecn-cv-zh/-/raw/master/docs/raspi-cv-prog/img/B1608_12_001.jpg)]

изображение 12.1 – Бинаризация Оцуки

нас也Можеткиспользовать Riddler-Calvard Метод выполняет пороговую обработку следующим образом:

код Язык:javascript
копировать
T_rc = mahotas.rc(photo)
plt.imshow(photo > T_rc, cmap='gray')

mahotas.rc()функция Принять оттенки серогокартинакартина作для参число,ивозвращатьсяпорог。 photo > T_rcкодвозвращатьсяпорогкартинакартина。 Запустите эту команду и проверьте вывод. он будет использовать Riddler-Calvard Метод показывает нам порог картиныкартина.

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

преобразование дальнозорда Морфологическая операция. Лучше использовать двоичный (0 и 1)картина для визуализации. Он преобразует волядвочнуюкартинукартину в полутоновуюкартинукартины, что позволяет использовать интенсивность точки в оттенках серого, чтобы визуализировать ее расстояние от границыкартины. mahotas.distance()функцияперениматькартинакартинаи计算преобразование расстояния。 Давайте посмотрим на пример:

код Язык:javascript
копировать
import matplotlib.pyplot as plt
import numpy as np
import mahotas
f = np.ones((256, 256), bool)
f[64:191, 64:191] = False
plt.subplot(121)
plt.imshow(f, cmap='gray')
plt.title('Original Image')
dmap = mahotas.distance(f)
plt.subplot(122)
plt.imshow(dmap, cmap='gray')
plt.title('Distance Transform')
plt.show()

Это Создатель Квадрат, изготовленный по индивидуальному заказу, представляет собой белый фон, заполненный черным. Затем он вычисляет преобразование расстояние и воля его визуализация. Эта Воля выдает следующий результат:

[Внешняя ссылка: передача изображения не удалась,Исходный сайт может иметь механизм защиты от кражи.,Рекомендуется сохранить фильм Волякартина напрямую, загрузив(img-Lx2qOOP3-1681873301188)(https://gitcode.net/ apachecn/apachecn-cv-zh/-/raw/master/docs/raspi-cv-prog/img/B1608_12_002.jpg)]

картина 12.2 –преобразование расстояния Демо

цветовое пространство

Мы можем RGB картинакартина转换длязагар,Как показано ниже:

код Язык:javascript
копировать
import matplotlib.pyplot as plt
import mahotas
photo = mahotas.demos.load('luispedro')
photo = mahotas.colors.rgb2sepia(photo)
plt.imshow(photo)
plt.axis('off')
plt.show()

Ранее изкод читает картинукартина в градациях серого из библиотеки.,ииспользоватьrgb2sepia()функцияизнастраиватьиспользовать Воля Что转换для具有загарцветовое пространствоизкартинакартина。 Он принимает картинукартина в качестве аргумента и возвращает преобразованную изкартинакартину. Ниже приведен результат нашей предыдущей программы:

[Внешняя ссылка: передача изображения не удалась,Исходный сайт может иметь механизм защиты от кражи.,Рекомендуется сохранить фильм Волякартина напрямую, загрузив(img-L34p3ZMA-1681873301188)(https://gitcode.net/ apachecn/apachecn-cv-zh/-/raw/master/docs/raspi-cv-prog/img/B1608_12_003.jpg)]

картина 12.3 –загаркартинакартина

существуют В следующем разделе мы Воля узнаем, как использовать United Mahotas, OpenCV и зкод.

Объединение Mahotas и OpenCV

картина OpenCV То же, Махотас использовать NumPy Массивы хранят и обрабатывают картинукартина. Мы также можем OpenCV и Mahotas Комбинированный. 让нас Приходить看одинэтот样из Пример,Как показано ниже:

код Язык:javascript
копировать
import cv2
import numpy as np
import mahotas as mh
cap = cv2.VideoCapture(0)
while True:
    ret, frame = cap.read()
    frame = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
    T_otsu = mh.otsu(frame)
    output = frame > T_otsu
    output = output.astype(np.uint8) * 255
    cv2.imshow('Output', output)
    if cv2.waitKey(1) == 27:
        break
cv2.destroyAllWindows()
cap.release()

существует Front изпрограмма, в которой мы с Воля живые кадры преобразуем в версию в оттенках серого. Тогда нам следует использовать двойнойизменятьиз Mahotas Реализация: Воля из кадров из источника живого видео преобразуется в логическую двойнуюкартинакартина. нас需要Воля Что转换дляnp.uint8тип,Затем Воля Его умножениек255(Все формы принимаютсяиспользоватьдвоичный 8 Немного из формы),кудобный Воля Чтоиcv2.imshow()。 Вывод следующий:

[Внешняя ссылка: передача изображения не удалась,Исходный сайт может иметь механизм защиты от кражи.,Рекомендуется сохранить фильм Волякартина напрямую, загрузив(img-7xByv84X-1681873301188)(https://gitcode.net/ apachecn/apachecn-cv-zh/-/raw/master/docs/raspi-cv-prog/img/B1608_12_004.jpg)]

картина 12.4 – Окно вывода из скриншота

нас通常использовать OpenCV Функция из USB Веб-камера считывает прямую трансляцию. Тогда мы сможем киспользовать Mahotas или любая другая библиотека обработки изображенийкартины с функцией обработки кадров. Таким образом, мы можем объединить библиотеки обработки из двух разных картинкартинаизкода.

существуют В следующем разделе мы Воля узнаем о других Некоторые Python картинакартинаобработка библиотеки по имени URL。

Другие популярные библиотеки обработки изображений

Python 3 Существует множество сторонних библиотек. Многие из этих библиотек NumPy Приходитьиметь дело скартинакартина。 Давайте посмотрим на список доступных используемых библиотек:

Они основаны на NumPy библиотека обработки изкартинакартина. Python Библиотека картиныкартина и ее ухоженные филиалы Pillow правильно или неправильно, исходя из NumPy библиотека обработки изкартинакартина. Они также существуют NumPy и PIL Интерфейс для конвертации форматов картинок.

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

В следующей части мы, Воля, исследуем блокнот Jupyter.

Изучите блокноты Jupyter для программирования на Python 3

Jupyter блокнотдана основе изна основе Web из интерактивного интерфейса, который работает как Python 3 из Интерактивный режим. Юпитер В блокноте есть 40 языки программирования, в том числе Python 3,R,Скала и Джулия. Он обеспечивает интерактивную среду для программирования.,Окружающая среда также может иметь визуализацию,форматированный текст,коды других компонентов.

Jupyter да IPython Проект из филиала. IPython Раздел «Все» и «Независимо от языка» перенесен в Юпитер, в то время как Jupyter из Python Сопутствующие функции предоставляются IPython предоставляется ядром. Посмотрим, как существовать Raspberry Pi Установить на Jupyter:

существовать Заказбыстрыйсередина逐一бегатьк Вниз Заказ:

код Язык:javascript
копировать
sudo pip3 uninstall ipykernel 

ранееиз Заказ Воляудалитьipykernelинструментизболее ранняя версия。

к Под Заказ Воля установите все необходимые из библиотек:

код Язык:javascript
копировать
sudo pip3 install ipykernel==4.8.0 
код Язык:javascript
копировать
sudo pip3 install jupyter 
код Язык:javascript
копировать
sudo pip3 install prompt-toolkit==2.0.5

Эти Заказ Волясуществовать Raspberry Pi Установить на Jupyter инеобходимыйизкомпоненты。

начать Jupyter Ноутбук, пожалуйста, войдите Raspberry Pi среда в форме изкартины (прямо или использовать удаленный рабочий стол),Затемсуществоватьlxterminalсерединабегатьк Вниз Заказ:

код Язык:javascript
копировать
jupyter notebook

Это начнется Jupyter Процесс сервера ноутбука и откройте его с помощью Jupyter блокнотинтерфейсиз Web Окно браузера выглядит так:

[Внешняя ссылка: передача изображения не удалась,Исходный сайт может иметь механизм защиты от кражи.,Рекомендую сохранить и напрямую скачать фильм «Волякартинафильм» (img-8ESTWpTu-1681873301189)(https://gitcode.net/apachecn/apachecn-cv-zh/-/raw/master/docs/raspi-cv-prog/img/B1608_12_005. jpg )]

картина 12.5 –Каталог запуска

начальствоодинскриншоткартинапоказывать了бегать Заказкзапускатьиз Оглавлениеиз Структура каталога. ясуществовать Текущая глава/home/pi/book/chapter12изкод Оглавлениесерединабегать了это。 насбегать Заказиз LXTerminal В окне отображается журнал сервера, как показано ниже:

[Внешняя ссылка: передача изображения не удалась,Исходный сайт может иметь механизм защиты от кражи.,Рекомендуется сохранить фильм Волякартина напрямую, загрузив(img-2QBKEnaN-1681873301189)(https://gitcode.net/ apachecn/apachecn-cv-zh/-/raw/master/docs/raspi-cv-prog/img/B1608_12_006.jpg)]

картина 12.6 – Jupyter Журнал сервера ноутбука

Теперь существуем, давайте Воля вернемся в проект Jupyter из окна браузера. существуют В правом верхнем углу окна браузера есть опции выхода из системы и выхода. существовать Что Вниз方,нас Можетк Видетьзагрузитькнопка,НовыйВниз拉менюки обновить символ。

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

让нас探索右侧изНовыйВниз拉Параметры。 На снимке экрана ниже показаны параметры, доступные в этом меню:

[Внешняя ссылка: передача изображения не удалась,Исходный сайт может иметь механизм защиты от кражи.,Рекомендуется сохранить фильм Волякартина напрямую, загрузив(img-k6OEezFE-1681873301189)(https://gitcode.net/ apachecn/apachecn-cv-zh/-/raw/master/docs/raspi-cv-prog/img/B1608_12_007.jpg)]

картина 12.7 – Создать новое раскрывающееся меню.

существоватьблокнот部分Вниз,нас Можетк Видеть Python 3 из варианта. Если у вас есть использовать Jupyter из любых других языков программирования, то эти языки также будут отображаться здесь. Мы скоро это изучим. Что他Параметрыдатекстовый файл,папкаиТерминалдругойВнизиз前两个Параметры分别создаватьодин空白документиодин空白Оглавление。 щелкнутьТерминал,Волясуществовать окно браузера из новых опций Карта и запуск LXTerminal, как показано на скриншоте ниже:

[Внешняя ссылка: передача изображения не удалась,Исходный сайт может иметь механизм защиты от кражи.,Рекомендуется сохранить фильм Волякартина напрямую, загрузив(img-VyCx7AFE-1681873301189)(https://gitcode.net/ apachecn/apachecn-cv-zh/-/raw/master/docs/raspi-cv-prog/img/B1608_12_008.jpg)]

картина 12.8 –существовать Web Параметры браузера Картасерединабегатьиз Заказбыстрый

如果насщелкнуть原始Параметры Карта(существовать Параметры браузера Картасередина列дляДомашняя страница),ЗатемсуществоватьбегатьПараметры Вниз进行исследовать,Вы можете увидеть запись, соответствующую текущей опции окна «Из Терминал» Картаиз.,Как показано на скриншоте ниже:

[Внешняя ссылка: передача изображения не удалась,Исходный сайт может иметь механизм защиты от кражи.,Рекомендуется сохранить фильм Волякартина напрямую, загрузив(img-cP8eLTMq-1681873301189)(https://gitcode.net/ apachecn/apachecn-cv-zh/-/raw/master/docs/raspi-cv-prog/img/B1608_12_009.jpg)]

картина 12.9 – Jupyter серединатолькосуществоватьбегатьизподпроцессизсписок

Как мы видим, есть возможность просмотреть текущий блокноти Терминал на этом сервере. Мы можем закрыть их отсюда. Перейти кдокумент,ЗатемсуществоватьНовыйВниз拉меню Вниз,выбирать Python 3。 Это Волясуществовать то же окно браузера из новых опций Карта под Открыть Python 3 блокнот:

[Внешняя ссылка: передача изображения не удалась,Исходный сайт может иметь механизм защиты от кражи.,Рекомендуется сохранить фильм Волякартина напрямую, загрузив(img-c032nkyu-1681873301190)(https://gitcode.net/ apachecn/apachecn-cv-zh/-/raw/master/docs/raspi-cv-prog/img/B1608_12_010.jpg)]

картина 12.10 –новыйиз Jupyter Вкладка «Блокнот»

нас Можетк ВидетьблокнотизимядаUntitled。 Можем нажать на название, это Воля Открыть модальное диалоговое окно, Переименовать блокнот,Как показано ниже:

[Внешняя ссылка: передача изображения не удалась,Исходный сайт может иметь механизм защиты от кражи.,Рекомендуется сохранить фильм Волякартина напрямую, загрузив(img-qq8svSQz-1681873301190)(https://gitcode.net/ apachecn/apachecn-cv-zh/-/raw/master/docs/raspi-cv-prog/img/B1608_12_011.jpg)]

картина 12.11 Переименовать блокнот

Переименуйте блокнот. 之назад,существоватьДомашняя страницаДомашняя страницасерединаиздокументВниз,нас Можетк Видетьtest01.ipynbдокумент。 существоватьздесь,IPYNB представляет собой IPython блокнот. Ты тоже Можно найти вбегатьПараметры Картасередина Видетьодин条目。 существовать/home/pi/book/chapter12/Оглавлениесередина,нас Можеткоказатьсяtest01.ipynbдокумент。 Теперь посмотрим, как будет происходить использование этого документа. Python 3 программирование. сновасуществовать Просматривать器середина切换到test01Вкладка «Блокнот»。 Изучим интерфейс подробно:

[Внешняя ссылка: передача изображения не удалась,Исходный сайт может иметь механизм защиты от кражи.,Рекомендую сохранить и напрямую скачать фильм «Волякартинафильм» (img-KJ2iTY0T-1681873301190)(https://gitcode.net/apachecn/apachecn-cv-zh/-/raw/master/docs/raspi-cv-prog/img/B1608_12_012. jpg )]

картина 12.12 – Jupyter блокнот

существоватьIn []:文本之назад,нас Можетк Видетьодин较长из文本область。 Мы можем найти В Напишите здесь код абзаца. убеждатьсяотменюиз Вниз拉менюсерединавыбирать了код。 Затем добавьте следующий Воляккод в текстовую область:

код Язык:javascript
копировать
print('Hello World')

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

[Внешняя ссылка: передача изображения не удалась,Исходный сайт может иметь механизм защиты от кражи.,Рекомендуется сохранить фильм Волякартина напрямую, загрузив(img-IcVfOV3G-1681873301190)(https://gitcode.net/ apachecn/apachecn-cv-zh/-/raw/master/docs/raspi-cv-prog/img/B1608_12_013.jpg)]

картина 12.13 -бегать HelloWorld программа

Самое приятное в этом то, что мы можем редактировать и повторно выполнять предыдущие модули. 让нас尝试了解Менюкартинаотметка:

[Внешняя ссылка: передача изображения не удалась,Исходный сайт может иметь механизм защиты от кражи.,Рекомендуется сохранить фильм Волякартина напрямую, загрузив(img-mkOEanL5-1681873301190)(https://gitcode.net/ apachecn/apachecn-cv-zh/-/raw/master/docs/raspi-cv-prog/img/B1608_12_014.jpg)]

картина 12.14:Менюкартинаотметкакнопка

Пойдем слева направо. Первый символ (дискета) будет сохранен. +символсуществоватьтекущий突出показыватьизклетка之назад添加один文本областьклетка。 Затем мы вырезаем, копируем и вставляем варианты. Стрелки вверх и вниз используются для перемещения текущей ячейки текстовой области вверх или вниз. Затем,нас有бегатьисередина断内核,перезапустить ядро,Затем重новыйзапускатьибегатьвесьблокноткнопка。 Раскрывающийся список ОК клеткаизтип. Он имеет следующие четыре варианта:

[Внешняя ссылка: передача изображения не удалась,Исходный сайт может иметь механизм защиты от кражи.,Рекомендуется сохранить фильм Волякартина напрямую, загрузив(img-mVGzxgnH-1681873301191)(https://gitcode.net /apachecn/apachecn-cv-zh/-/raw/master/docs/raspi-cv-prog/img/B1608_12_15.jpg)]

картина 12.15 –Тип ячейки

Если вы хотите объединить проекткод,则выбиратькодMarkdown даиспользовать в RTF из языка разметки. Выберите пустую ячейку текстовой области и измените ее на Markdown тип. Затем,существоватьклеткасередина输入#Testиосуществлятьэто。 Это создастодин一название уровня,Как показано ниже:

[Внешняя ссылка: передача изображения не удалась,Исходный сайт может иметь механизм защиты от кражи.,Рекомендую сохранить и напрямую скачать фильм «Волякартинафильм» (img-1MiOKlNo-1681873301191) (https://gitcode.net/apachecn/apachecn-cv-zh/-/raw/master/docs/raspi-cv-prog/img/B1608_12_016. jpg )]

картина 12.16 – 1 название уровня

Мы можем##использовать В第二название уровня,Воля###использовать В三название уровень и так далее.

Jupyter Одна из главных особенностей блокнотизда, мы даже Можно найти вблокнотсерединабегать OS Заказ. нас需要существовать Заказ Передний加начальство!символ,Затем Воля Что作длякодсуществоватьклеткасерединабегать。 Давайте посмотрим на этот пример. существоватьблокнотсерединабегать!ls -laЗаказ,Это дает следующие результаты:

[Внешняя ссылка: передача изображения не удалась,Исходный сайт может иметь механизм защиты от кражи.,Рекомендуется сохранить фильм Волякартина напрямую, загрузив(img-5FsQMdtf-1681873301191)(https://gitcode.net/ apachecn/apachecn-cv-zh/-/raw/master/docs/raspi-cv-prog/img/B1608_12_017.jpg)]

картина 12.17 –существовать Jupyter блокнотсерединабегать OS Заказ

Мы тоже Можно найти вблокнотсерединаиспользовать Matplotlib Отображение визуализации икартинакартина. дляэтот,нас需要использоватьмагияиз%matplotlibфункция。 Мы можем киспользовать Воля Matplotlib из бэкэнда установлено значение Jupyter блокнотизв соответствииназад端,Как показано ниже:

код Язык:javascript
копировать
%matplotlib inline

Давайте посмотрим на это короткое демо:

[Внешняя ссылка: передача изображения не удалась,Исходный сайт может иметь механизм защиты от кражи.,Рекомендуется сохранить фильм Волякартина напрямую, загрузив(img-8GDjvHgN-1681873301191)(https://gitcode.net/ apachecn/apachecn-cv-zh/-/raw/master/docs/raspi-cv-prog/img/B1608_12_018.jpg)]

картина 12.18 –существовать Jupyter блокнотсерединапоказыватькартинакартина

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

Это очень полезная концепция. Мы можем найти ваблокнот использовать Rich Text, Заказ ОС, Python вывод кодов (включая визуализацию). Мы можем даже поделиться ими в электронном виде. IPYNB блокнотдокумент。 Сразукартина Python 3 То же самое, мы можем Jupyter заблокировать множество языков вместе, например. Julia,R и Scala。 Единственное ограничение — мы не можем смешивать несколько языков программирования в одном блокноте.

И последнее, что я хочу объяснить изда, как происходит Прозрачный вывод. щелкнутьклеткаменю。 Это выглядит так:

[Внешняя ссылка: передача изображения не удалась,Исходный сайт может иметь механизм защиты от кражи.,Рекомендуется сохранить фильм «Волякартина» напрямую, загрузив(img-Keu933nd-1681873301191)(https://gitcode.net/ apachecn/apachecn-cv-zh/-/raw/master/docs/raspi-cv-prog/img/B1608_12_019.jpg)]

картина 12.19 –Очистить весь вывод

существоватьтекущий выходиВесь выводВниз都具有ПрозрачныйПараметры。 Эти соответственно Прозрачный ток клетки блокируют весь выходной сигнал.

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

Подвести итог

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

О последней теме мы узнали изда Jupyter Прототип типа блокнота и обмен кодом в электронном виде очень полезны. сейчассуществовать,многокомпьютерное зрениеи Профессионалы в области обработки данных — Воля Jupyter блокнот для Что Python программные проекты.

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

13. Приложение

Здесь рассматриваются все темы, не затронутые в основных главах этой книги. В этом приложении в основном собраны темы, включая советы и подсказки. Итак, давайте посмотрим Raspberry Pi,Python 3 и OpenCV О из Советы.

Технические требования

Можно найти в GitHub Файлы кода для этой главы можно найти по адресу .

Посмотрите видео ниже,к Проверятьэта страница начальствоиз“толькосуществоватьосуществлятьизкод”。

Оценка производительности и управление OpenCV

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

нас Можеткисследоватьда否толькосуществоватьиспользоватьcv2.useOptimized()функциясуществоватьтекущийиспользоватьиз计算机начальство启использовать OpenCV оптимизация. Также мы предлагаем киспользоватьcv2.setUseOptimized()функцияпереключатьсяоптимизация. cv2.getTickCount()функциявозвращаться自Открыть计算机назадначинатьиз Количество тактов(也称длятактовый цикл)。 существование выполняет интересующий нас сегмент изкода до и после мелодии, используя эту функцию.

Затем вычисляем тактовый из разницы между циклом и возвратом необходимого изтактового кода для выполнения сегмента кода циклчисло。 cv2.getTickFrequency()функциявозвращатьсятактовый циклизчастота. Тогда мы сможем к Волятактовый циклмеждуиз Разницактактовый циклизчастота, чтобы получить время, необходимое для выполнения сегмента кода:

код Язык:javascript
копировать
import cv2
cv2.setUseOptimized(True)
print(cv2.useOptimized())
img = cv2.imread('/home/pi/book/dataset/4.1.01.tiff', 0)
e1 = cv2.getTickCount()
img1 = cv2.medianBlur(img, 23)
e2 = cv2.getTickCount()
t = (e2 - e1)/cv2.getTickFrequency()
print(t)

Переднийкодиз Вывод следующий:

код Язык:javascript
копировать
True
0.004361807

Также мы предлагаем киспользовать Python 3 timeБиблиотекасерединаизфункциячтобы подтвердитьбегатьлюбойкодтребуется сегментизвремя。 Попробуйте это в качестве упражнения. Далее мы увидим, как повторно использовать Raspbian OS microSD Карта.

Повторное использование карты microSD Raspbian OS

Мы научились использовать Win32 Disk Imager Воля Raspbian запись операционной системы microSD Карта. Теперь существуем, мы, Воля, узнаем, как Воля microSD Карту можно повторно использовать для других целей. Воля microSD карта вставлена microSD Считыватель карт, а затем Воля подключите его к Windows PC。 Это Воля показывает два раздела. Чтосередина只有одиндачитаемыйиз,и且Воля Чтоотметка记длязапускать。 это还отвечать具有config.txtдокумент,Что大小约для 250 MB。 Другой раздел не читается. Мы не можем этого сделать microSD Картаиспользовать ВЧто他目из。 因этот,Нам нужно использовать Некоторый инструмент для форматирования карты,Затемталант Воля Чтосноваиспользовать Влюбой Что他目из。

Отформатируйте SD-карту с помощью форматтера SD-карт.

Есть бесплатные инструменты для форматирования SD Карта. нас Можеткотэта страницаВниз载。 Установите этот инструмент и выполните поиск, он отобразит следующее окно. В зависимости от количества дисков на вашем компьютере буква диска может отличаться. к Вниз следует использовать Из Скриншот изображения:

[Внешняя ссылка: передача изображения не удалась,Исходный сайт может иметь механизм защиты от кражи.,Рекомендуется сохранить фильм Волякартина напрямую, загрузив(img-Vv84t5lt-1681873301192)(https://gitcode.net/apa checn/apachecn-cv-zh/-/raw/master/docs/raspi-cv-prog/img/B16208_Appendix_01.jpg)]

картина 13.1 – SD Картаформатпрограмма

Выберите любой диск (он всегда форматирует всю Карту),затем нажмитеформаткнопканачальствоиз。 Этот Воля показывает следующее окно подтверждения:

[Внешняя ссылка: передача изображения не удалась,Исходный сайт может иметь механизм защиты от кражи.,Рекомендуется сохранить фильм Волякартина напрямую, загрузив(img-fQhndJ7G-1681873301192)(https://gitcode.net/apa checn/apachecn-cv-zh/-/raw/master/docs/raspi-cv-prog/img/B16208_Appendix_02.jpg)]

картина 13.2 – Диалог подтверждения

щелкнутьдакнопка,это Воляформат Карта. После формата и того, что Карта соответствует только одной букве диска. Должен Картасейчассуществовать Полныйформатдля,Мы можем Что当作новыйиз Такой жеиспользовать。

Инструменты управления дисками в Windows

мы даже можем найти в Windows серединаиспользоватьУправление дискамиинструмент Приходитьформат microSD Карта. существовать搜索栏середина,Типдиск,ты ВоляоказатьсяСоздать и форматдиска разделПараметры。 Вы также можете выбрать из Windows Найдите этот инструмент в Панели управления. Опять Воля хочешь повторитьиспользуизиз Raspbian OS microSD карта вставлена SD Читатель карт и Воля, которая подключена к Windows компьютер. ОткрытьУправление дискамиинструмент,Вы, Воля, видите следующий скриншот:

[Внешняя ссылка: передача изображения не удалась,Исходный сайт может иметь механизм защиты от кражи.,Рекомендуется сохранить фильм Волякартина напрямую, загрузив(img-2fyq2EXq-1681873301192)(https://gitcode.net/apa checn/apachecn-cv-zh/-/raw/master/docs/raspi-cv-prog/img/B16208_Appendix_03.jpg)]

картина 13.3 – Окно инструмента «Управление дисками»

В этом списке перечислены все диски (съемные диски и несъемные диски), подключенные к системе. Среди них подвижные из (с 256 MB иззапускать Раздел)да microSD Карта. Как видно на скриншоте выше, я вставил его без расширения системы Raspbian OS microSD Карта (я имею в виду да, для которой я написал Raspbian OS,но нетиспользоватьэто Приходитьзапускать Raspberry Pi тарелка). Вот почему отображаются два выделенных раздела и один нераспределенный раздел. 如果тыиспользовать Должен Карта Приходитьзапускать Raspberry Pi доска, то она расширяет систему документов, а второй по величине раздел приходится на нераспределенную часть. 因этот,использовать Проходитьиз Raspbian OS microSD Карта показывает только два раздела. в любом случае,Мы можем щелкнуть правой кнопкой мыши, чтобы назначить раздел,ЗатемвыбиратьУдалить томПараметры。 Сделайте это как для выделений, так и для разделов:

[Внешняя ссылка: передача изображения не удалась,Исходный сайт может иметь механизм защиты от кражи.,Рекомендуется сохранить фильм Волякартина напрямую, загрузив(img-vexJU2OD-1681873301192)(https://gitcode.net/apa checn/apachecn-cv-zh/-/raw/master/docs/raspi-cv-prog/img/B16208_Appendix_04.jpg)]

картина 13.4 -удалить SD Картаиз Раздел

После удаления всех раздач из частей,диск Воля Как показано ниже:

[Внешняя ссылка: передача изображения не удалась,Исходный сайт может иметь механизм защиты от кражи.,Рекомендуется сохранить фильм Волякартина напрямую, загрузив(img-l0O1pLh9-1681873301192)(https://gitcode.net/apa checn/apachecn-cv-zh/-/raw/master/docs/raspi-cv-prog/img/B16208_Appendix_05.jpg)]

картина 13.5 –существовать SD Создать новый раздел на карте

Просто щелкните правой кнопкой мыши и microSD Карта相对отвечатьиздиск,затем нажмитеНовый простой ролл。 Это начнется. использовать Завершите работу мастера со всеми параметрами по умолчанию, и одним щелчком мыши вы получите новый диск для повторного использования. Вы можете переписать Raspbian OS илииспользовать он хранит ваше избранное из MP3 песня. Управление дискамиинструмент使нас Можетклучший контрольдискформати Разделизвсе аспекты。

Просматриватьraspi-configЗаказ行инструмент

Мы можем настроить Raspberry Pi одним из трех способов:

  • Raspbian OS Меню Raspberry Pi Инструмент настройки
  • проходить Изменять/boot/config.txtизсодержание
  • использоватьraspi-configЗаказ行инструмент

нас Волясуществовать本节середина详细介绍raspi-configинструментиз。 Открыть Raspberry Pi Оперативный заказ и проект

код Язык:javascript
копировать
sudo raspi-config

этот Волясуществовать Заказбыстрыйсередина Открыть Raspberry Pi Инструмент настройки,Как показано на скриншоте ниже:

[Внешняя ссылка: передача изображения не удалась,Исходный сайт может иметь механизм защиты от кражи.,Рекомендуется сохранить фильм Волякартина напрямую, загрузив(img-aFg9DqrN-1681873301192)(https://gitcode.net/apa checn/apachecn-cv-zh/-/raw/master/docs/raspi-cv-prog/img/B16208_Appendix_06.jpg)]

картина 13.6 – raspi-configинструментизхозяинменю

第один Параметрыиспользовать ВИзменятьpiиспользоватьсемьяизпароль。 хозяин Меню第二个ПараметрыПараметры сетиМожетк Изменять Raspberry Pi Плата подключается к сети следующим образом:

[Внешняя ссылка: передача изображения не удалась,Исходный сайт может иметь механизм защиты от кражи.,Рекомендуется сохранить фильм Волякартина напрямую, загрузив(img-fHcmcKYv-1681873301193)(https://gitcode.net/apa checn/apachecn-cv-zh/-/raw/master/docs/raspi-cv-prog/img/B16208_Appendix_07.jpg)]

картина 13.7 – Параметры сети

хозяин Меню第三个Параметры(параметры загрузки)подробно объяснилпараметры загрузки,Как показано ниже:

[Внешняя ссылка: передача изображения не удалась,Исходный сайт может иметь механизм защиты от кражи.,Рекомендуется сохранить фильм Волякартина напрямую, загрузив(img-EhWFgKmL-1681873301193)(https://gitcode.net/apa checn/apachecn-cv-zh/-/raw/master/docs/raspi-cv-prog/img/B16208_Appendix_08.jpg)]

картина 13.8 –Параметры загрузки

хозяин Меню第四个Параметры(Варианты локализации)使Ты можешьк如Вниз设置область设置,часовой пояс,Раскладка клавиатуры и страна/регион Wi-Fi:

[Внешняя ссылка: передача изображения не удалась,Исходный сайт может иметь механизм защиты от кражи.,Рекомендуется сохранить фильм Волякартина напрямую, загрузив(img-SWC50Oud-1681873301193)(https://gitcode.net/apa checn/apachecn-cv-zh/-/raw/master/docs/raspi-cv-prog/img/B16208_Appendix_09.jpg)]

картина 13.9 – Возможности локализации

хозяин Меню第五个ПараметрыдаОпции интерфейса,Отображается следующим образом:

[Внешняя ссылка: передача изображения не удалась,Исходный сайт может иметь механизм защиты от кражи.,Рекомендую сохранить и напрямую скачать фильм «Волякартинафильм» (img-rycy4ZRU-1681873301193) (https://gitcode.net/apachecn/apachecn-cv-zh/-/raw/master/docs/raspi-cv-prog/img/B16208_Appendix_10. jpg )]

картина 13.10 – Опции интерфейса

существует В предыдущем из вариантов мы уже включили его для демо-версии Камера P1,P2 SSH и P3 VNC

хозяин Меню第六个Параметрыиспользовать В对 Raspberry Pi 1 и Raspberry Pi 2 Разгон. Другие модели необходимо разгонять вручную.

хозяин Меню第七个ПараметрыдаРасширенные параметры,Как показано ниже:

[Внешняя ссылка: передача изображения не удалась,Исходный сайт может иметь механизм защиты от кражи.,Рекомендуется сохранить фильм Волякартина напрямую, загрузив(img-NlQ3HS1a-1681873301193)(https://gitcode.net/apa checn/apachecn-cv-zh/-/raw/master/docs/raspi-cv-prog/img/B16208_Appendix_11.jpg)]

картина 13.11 –Дополнительные параметры

существовать Переднийизскриншоткартинасередина,A1 Расширенная система документовРасширятьдокументсистемакубеждаться microSD Картасуществоватьсерединаиз所有空间均Можетиспользовать。 Раздел памяти A3использовать Вдлякартинавыделять память。

第八个Параметры更новыйraspi-configинструмент。 Если вы хотите посетить Raspberry Pi плата из Заказ подскажите, то это да конфигурация Raspberry Pi из Лучший способ.

Установка и настройка среды в Windows, Debian и Ubuntu

Мы можем найти ви Windows и Linux OS На витрине существуют другие настольные компьютеры, позволяющие учиться во всех областях. Поскольку материнские платы для настольных ПК обычно не имеют DSI порт, так что только и Raspberry Pi Компоненты, связанные с модулем камеры, нельзя использовать вместе с другими компьютерами. Мы тоже Можно найти вбегать Debian или Ubuntu из Примеры запускакода на других одноплатных компьютерах.

существовать Ubuntu,Debian На его производных процесс установки такой же. все современное Linux Дистрибутивы поставляются с Python3。мы только需要использоватьaptиpip3инструмент进行Установить。

для Windows ПК, нам нужно установить все с нуля. Давайте начнем с выполнения шагов, чтобы понять, как установить Python 3:

  1. доступ www.python.org и скачайте последнюю версию Python 3 Версия установочного документа: [Передача внешней ссылки на фильм не удалась. Исходный сайт может иметь механизм защиты от горячих ссылок. Рекомендуется сохранить фильм Волякартина напрямую, загрузив(img-pKJHillX-1681873301194)(https://g). itcode.net/apachecn/apachecn-cv-zh/-/raw/master/docs/raspi-cv-prog/img/B16208_Appendix_12.jpg)] картина 13.12 – Python Foundation Домашняя страница бегать Вниз载из Установитьдокумент。 Это Воля Откройте мастер установки, как показано ниже: [Передача внешней ссылки на фильм не удалась. Исходный сайт может иметь механизм защиты от кражи. Рекомендуется сохранить фильм Волякартина напрямую, загрузив(img-4NVR3HpS-1681873301194)(https://g). itcode.net/apachecn/apachecn-cv-zh/-/raw/master/docs/raspi-cv-prog/img/B16208_Appendix_13.jpg)] картина 13.13 – Python 3 Варианты установки Убедитесь, что выбрано «Воля». Python 3.8 добавить вPATH”флажок。
  2. Затем нажмите «Выборочная установка». Воля Появится следующее окно: [Передача внешней ссылки на фильм не удалась. Исходный сайт может иметь механизм защиты от горячих ссылок. Рекомендуется сохранить фильм «Волякартина» напрямую, загрузить(img-tDNw9wjE-1681873301194)(https://g). itcode.net/apachecn/apachecn-cv-zh/-/raw/master/docs/raspi-cv-prog/img/B16208_Appendix_14.jpg)] картина 13.14 – Установить дополнительные функции 选середина所有флажок,затем нажмитеСледующийкнопка。 существует Следующий окно, Воля все опции остаются прежними, и установка завершена.
  3. После завершения установки мы можем к через существование Windows 搜索栏середина搜索IDLEПриходить进行проверять。 кроме того,существоватьcmd(Windows из Заказбыстрый)середина,нас Можеткпроверятьpythonиpip3Заказда否только常бегать。

Python 3 Переводчик к Windows двоичный Можетосуществлятьдокументpython.exeдокументизформа出сейчас,Если во время установки мы отметили соответствующую опцию,Вы можете напрямую нажать на подсказку «Существующий Заказ» и настроить ее.,как упоминалось ранее。 нас Можеткпроходить Заказбыстрыйначальствоизpip3инструмент Установить本书Передний各章серединаиспользоватьиз Все пакеты。

Реализации Python и дистрибутивы Python

Python Реализовать даact как Python программирование языка интерпретатора из программы. эта страницапоставлятьизустный переводчики Linux С изда, называется CPython。 Другие популярные реализации включают (но не ограничиваются):

  • MicroPython
  • IronPython
  • Stackless Python
  • Jython
  • PyPy
  • CircuitPython

Мы можем найти вэта страницаоказаться替代извыполнить及Что项目 URL из списка.

Python Дистрибутивда Python Интерпретатор из реализован, и существует набор других пакетов, которые существуют вместе с из. Некоторый Python Сама реализация да Дистрибутив. 实际начальство,терминвыполнитьи分发между没有明确изразница。 Мы можем найти вэта страницаначальствооказаться有关Дистрибутивиз Подробнее.

boy illustration
Неразрушающее увеличение изображений одним щелчком мыши, чтобы сделать их более четкими артефактами искусственного интеллекта, включая руководства по установке и использованию.
boy illustration
Копикодер: этот инструмент отлично работает с Cursor, Bolt и V0! Предоставьте более качественные подсказки для разработки интерфейса (создание навигационного веб-сайта с использованием искусственного интеллекта).
boy illustration
Новый бесплатный RooCline превосходит Cline v3.1? ! Быстрее, умнее и лучше вилка Cline! (Независимое программирование AI, порог 0)
boy illustration
Разработав более 10 проектов с помощью Cursor, я собрал 10 примеров и 60 подсказок.
boy illustration
Я потратил 72 часа на изучение курсорных агентов, и вот неоспоримые факты, которыми я должен поделиться!
boy illustration
Идеальная интеграция Cursor и DeepSeek API
boy illustration
DeepSeek V3 снижает затраты на обучение больших моделей
boy illustration
Артефакт, увеличивающий количество очков: на основе улучшения характеристик препятствия малым целям Yolov8 (SEAM, MultiSEAM).
boy illustration
DeepSeek V3 раскручивался уже три дня. Сегодня я попробовал самопровозглашенную модель «ChatGPT».
boy illustration
Open Devin — инженер-программист искусственного интеллекта с открытым исходным кодом, который меньше программирует и больше создает.
boy illustration
Эксклюзивное оригинальное улучшение YOLOv8: собственная разработка SPPF | SPPF сочетается с воспринимаемой большой сверткой ядра UniRepLK, а свертка с большим ядром + без расширения улучшает восприимчивое поле
boy illustration
Популярное и подробное объяснение DeepSeek-V3: от его появления до преимуществ и сравнения с GPT-4o.
boy illustration
9 основных словесных инструкций по доработке академических работ с помощью ChatGPT, эффективных и практичных, которые стоит собрать
boy illustration
Вызовите deepseek в vscode для реализации программирования с помощью искусственного интеллекта.
boy illustration
Познакомьтесь с принципами сверточных нейронных сетей (CNN) в одной статье (суперподробно)
boy illustration
50,3 тыс. звезд! Immich: автономное решение для резервного копирования фотографий и видео, которое экономит деньги и избавляет от беспокойства.
boy illustration
Cloud Native|Практика: установка Dashbaord для K8s, графика неплохая
boy illustration
Краткий обзор статьи — использование синтетических данных при обучении больших моделей и оптимизации производительности
boy illustration
MiniPerplx: новая поисковая система искусственного интеллекта с открытым исходным кодом, спонсируемая xAI и Vercel.
boy illustration
Конструкция сервиса Synology Drive сочетает проникновение в интрасеть и синхронизацию папок заметок Obsidian в облаке.
boy illustration
Центр конфигурации————Накос
boy illustration
Начинаем с нуля при разработке в облаке Copilot: начать разработку с минимальным использованием кода стало проще
boy illustration
[Серия Docker] Docker создает мультиплатформенные образы: практика архитектуры Arm64
boy illustration
Обновление новых возможностей coze | Я использовал coze для создания апплета помощника по исправлению домашних заданий по математике
boy illustration
Советы по развертыванию Nginx: практическое создание статических веб-сайтов на облачных серверах
boy illustration
Feiniu fnos использует Docker для развертывания личного блокнота Notepad
boy illustration
Сверточная нейронная сеть VGG реализует классификацию изображений Cifar10 — практический опыт Pytorch
boy illustration
Начало работы с EdgeonePages — новым недорогим решением для хостинга веб-сайтов
boy illustration
[Зона легкого облачного игрового сервера] Управление игровыми архивами
boy illustration
Развертывание SpringCloud-проекта на базе Docker и Docker-Compose