fix notation

master
zen 3 years ago
parent 8431d9c300
commit af89067a80
  1. 16
      exemple/circul_detect.py
  2. 5
      exemple/find_filter.py
  3. 0
      exemple/mnist_trained_model.h5
  4. 19
      exemple/number_detect.py
  5. 46
      python/test_contur.py

@ -1,41 +1,53 @@
import cv2 import cv2
import numpy as np import numpy as np
# Подключаемся к камере
cam = cv2.VideoCapture(0) cam = cv2.VideoCapture(0)
while True: while True:
_, frame = cam.read() _, frame = cam.read()
# Перевод изображения в HSV
hsv = cv2.cvtColor(frame, cv2.COLOR_BGR2HSV) hsv = cv2.cvtColor(frame, cv2.COLOR_BGR2HSV)
# Немного размываем изображение
hsv = cv2.blur(hsv,(5,5)) hsv = cv2.blur(hsv,(5,5))
# Задаем параметр из прошлого примера
mask = cv2.inRange(hsv, (78,154,93),(86,224,255)) mask = cv2.inRange(hsv, (78,154,93),(86,224,255))
# С помощью специального алгоритма ищем контур обьекта
(contours, hierarchy) = cv2.findContours(mask, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE) (contours, hierarchy) = cv2.findContours(mask, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
# Отрисовывем найденый контур чтобы его было видно на экране
cv2.drawContours(frame, contours, -1, (255,0,0), 3, cv2.LINE_AA, hierarchy, 1 ) cv2.drawContours(frame, contours, -1, (255,0,0), 3, cv2.LINE_AA, hierarchy, 1 )
max_radius = 0 max_radius = 0
center = (0,0) center = (0,0)
# Находим контур с максимальным радиусом
for contour in contours: for contour in contours:
(x,y),radius = cv2.minEnclosingCircle(contour) (x,y),radius = cv2.minEnclosingCircle(contour)
if max_radius < int(radius): if max_radius < int(radius):
max_radius = int(radius) max_radius = int(radius)
center = (int(x),int(y)) center = (int(x),int(y))
# Описываем максимальный контур кругом
frame = cv2.circle(frame,center,max_radius,(0,255,0),2) frame = cv2.circle(frame,center,max_radius,(0,255,0),2)
S = 3.1415 * max_radius * max_radius S = 3.1415 * max_radius * max_radius
# Выводим на эран площадь круга
cv2.putText(frame, str(S), (30, 30),cv2.FONT_HERSHEY_SIMPLEX, 1, (255, 10, 10), 2) cv2.putText(frame, str(S), (30, 30),cv2.FONT_HERSHEY_SIMPLEX, 1, (255, 10, 10), 2)
# Выводим сообщение если круг слишком близко или далеко
if S > 100: if S > 100:
if S > 10000: if S > 10000:
cv2.putText(frame, "UP", (30, 60),cv2.FONT_HERSHEY_SIMPLEX, 1, (255, 10, 10), 2) cv2.putText(frame, "UP", (30, 60),cv2.FONT_HERSHEY_SIMPLEX, 1, (255, 10, 10), 2)
elif S < 5000: elif S < 5000:
cv2.putText(frame, "DOWN", (30, 60),cv2.FONT_HERSHEY_SIMPLEX, 1, (255, 10, 10), 2) cv2.putText(frame, "DOWN", (30, 60),cv2.FONT_HERSHEY_SIMPLEX, 1, (255, 10, 10), 2)
# Промежуточные изображения
#cv2.imshow("Image with opening", mask) #cv2.imshow("Image with opening", mask)
#cv2.imshow("Image with closing", hsv) #cv2.imshow("Image with closing", hsv)
# выводим то что получилось вместе с текстом и контуром
cv2.imshow("Image", frame) cv2.imshow("Image", frame)
k = cv2.waitKey(2) k = cv2.waitKey(2)

@ -27,7 +27,8 @@ crange = [0,0,0, 0,0,0]
while True: while True:
flag, img = cam.read() flag, img = cam.read()
hsv = cv2.cvtColor(img, cv2.COLOR_BGR2HSV ) # Перевод изображения в HSV
hsv = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)
# считываем значения бегунков # считываем значения бегунков
h1 = cv2.getTrackbarPos('h1', 'settings') h1 = cv2.getTrackbarPos('h1', 'settings')
@ -63,4 +64,4 @@ while True:
break break
cam.release() cam.release()
cv2.destroyAllWindows() cv2.destroyAllWindows()

@ -2,25 +2,12 @@ import cv2
import numpy as np import numpy as np
import keras import keras
'''
задачи
1) находить контур цифры
2) получать его координаты, вывести отдельным изображением
3) масштабировать его под нужный размер
4) загнать это на нейронную сеть https://habr.com/ru/post/466565/
5) вывести результат
очень сильно шумит изображение
'''
def find_number(frame): def find_number(frame):
# функция выполняет предобработку изображения # функция выполняет предобработку изображения
# находит область с цифрой по контурам # находит область с цифрой по контурам
# далее в цикле перебераем найденные контуры # далее в цикле перебераем найденные контуры применяя фильтры
# если контур найден, то меняем разрешение на 28*28 # если контур найден, то меняем разрешение на 28*28
# выполняем бинаризацию, делим на 255 и инвертируем вычитая 1 # выполняем бинаризацию, делим на 255 и инвертируем вычитая 1
# flag нужен, чтобы он не выводил единицу, если цифра не найдена
gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY) gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
blur = cv2.GaussianBlur(gray,(3,3), 0) blur = cv2.GaussianBlur(gray,(3,3), 0)
edges = cv2.Canny(blur, 50, 100) edges = cv2.Canny(blur, 50, 100)
@ -75,7 +62,7 @@ def find_number(frame):
if __name__ == '__main__': if __name__ == '__main__':
cam = cv2.VideoCapture(0) cam = cv2.VideoCapture(0)
model = keras.models.load_model('mnist_trained_model.h5') model = keras.models.load_model("mnist_trained_model.h5")
try: try:
while True: while True:
_, frame = cam.read() _, frame = cam.read()
@ -95,4 +82,4 @@ if __name__ == '__main__':
except Exception as e: except Exception as e:
cam.release() cam.release()
cv2.destroyAllWindows() cv2.destroyAllWindows()
print(e) print(e)

@ -1,46 +0,0 @@
import cv2
import numpy as np
# NOT WORCK !!!!
def find_contours_of_cards(image):
blurred = cv2.GaussianBlur(image, (3, 3), 0)
T, thresh_img = cv2.threshold(blurred, 215, 255,
cv2.THRESH_BINARY)
(cnts, _) = cv2.findContours(thresh_img,
cv2.RETR_EXTERNAL,
cv2.CHAIN_APPROX_SIMPLE)
return cnts
def find_coordinates_of_cards(cnts, image):
cards_coordinates = {}
for i in range(0, len(cnts)):
x, y, w, h = cv2.boundingRect(cnts[i])
if w > 20 and h > 30:
img_crop = image[y - 15:y + h + 15,
x - 15:x + w + 15]
cards_name = find_features(img_crop)
cards_coordinates[cards_name] = (x - 15,
y - 15, x + w + 15, y + h + 15)
return cards_coordinates
cam = cv2.VideoCapture(0)
while True:
_, frame = cam.read()
img = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
img = cv2.GaussianBlur(img, (3, 3), 0)
# Все больше 215 станет 255, все что меньше 0
T, thresh_img = cv2.threshold(img, 215, 255, cv2.THRESH_BINARY)
cv2.imshow("Image", img)
cv2.imshow("Image with opening", thresh_img)
#cv2.imshow("Image with closing", res)
k = cv2.waitKey(2)
if k == 27:
cv2.destroyAllWindows()
break
Loading…
Cancel
Save