diff --git a/python/circul_detect.py b/exemple/circul_detect.py similarity index 57% rename from python/circul_detect.py rename to exemple/circul_detect.py index 60e956c..a9472ed 100644 --- a/python/circul_detect.py +++ b/exemple/circul_detect.py @@ -1,41 +1,53 @@ import cv2 import numpy as np +# Подключаемся к камере cam = cv2.VideoCapture(0) while True: _, frame = cam.read() + # Перевод изображения в HSV hsv = cv2.cvtColor(frame, cv2.COLOR_BGR2HSV) + # Немного размываем изображение hsv = cv2.blur(hsv,(5,5)) + # Задаем параметр из прошлого примера mask = cv2.inRange(hsv, (78,154,93),(86,224,255)) + # С помощью специального алгоритма ищем контур обьекта (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 ) max_radius = 0 center = (0,0) + # Находим контур с максимальным радиусом for contour in contours: (x,y),radius = cv2.minEnclosingCircle(contour) if max_radius < int(radius): max_radius = int(radius) center = (int(x),int(y)) - + + # Описываем максимальный контур кругом frame = cv2.circle(frame,center,max_radius,(0,255,0),2) S = 3.1415 * max_radius * max_radius + # Выводим на эран площадь круга cv2.putText(frame, str(S), (30, 30),cv2.FONT_HERSHEY_SIMPLEX, 1, (255, 10, 10), 2) + # Выводим сообщение если круг слишком близко или далеко if S > 100: if S > 10000: cv2.putText(frame, "UP", (30, 60),cv2.FONT_HERSHEY_SIMPLEX, 1, (255, 10, 10), 2) elif S < 5000: 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 closing", hsv) - + + # выводим то что получилось вместе с текстом и контуром cv2.imshow("Image", frame) k = cv2.waitKey(2) diff --git a/python/find_filter.py b/exemple/find_filter.py similarity index 93% rename from python/find_filter.py rename to exemple/find_filter.py index ccce1f2..d444fcb 100644 --- a/python/find_filter.py +++ b/exemple/find_filter.py @@ -27,7 +27,8 @@ crange = [0,0,0, 0,0,0] while True: flag, img = cam.read() - hsv = cv2.cvtColor(img, cv2.COLOR_BGR2HSV ) + # Перевод изображения в HSV + hsv = cv2.cvtColor(img, cv2.COLOR_BGR2HSV) # считываем значения бегунков h1 = cv2.getTrackbarPos('h1', 'settings') @@ -63,4 +64,4 @@ while True: break cam.release() -cv2.destroyAllWindows() \ No newline at end of file +cv2.destroyAllWindows() diff --git a/python/mnist_trained_model.h5 b/exemple/mnist_trained_model.h5 similarity index 100% rename from python/mnist_trained_model.h5 rename to exemple/mnist_trained_model.h5 diff --git a/python/number_detect.py b/exemple/number_detect.py similarity index 81% rename from python/number_detect.py rename to exemple/number_detect.py index dee6bb9..28767d8 100644 --- a/python/number_detect.py +++ b/exemple/number_detect.py @@ -2,25 +2,12 @@ import cv2 import numpy as np import keras -''' -задачи -1) находить контур цифры -2) получать его координаты, вывести отдельным изображением -3) масштабировать его под нужный размер -4) загнать это на нейронную сеть https://habr.com/ru/post/466565/ -5) вывести результат - -очень сильно шумит изображение -''' - - def find_number(frame): # функция выполняет предобработку изображения # находит область с цифрой по контурам - # далее в цикле перебераем найденные контуры + # далее в цикле перебераем найденные контуры применяя фильтры # если контур найден, то меняем разрешение на 28*28 # выполняем бинаризацию, делим на 255 и инвертируем вычитая 1 - # flag нужен, чтобы он не выводил единицу, если цифра не найдена gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY) blur = cv2.GaussianBlur(gray,(3,3), 0) edges = cv2.Canny(blur, 50, 100) @@ -75,7 +62,7 @@ def find_number(frame): if __name__ == '__main__': cam = cv2.VideoCapture(0) - model = keras.models.load_model('mnist_trained_model.h5') + model = keras.models.load_model("mnist_trained_model.h5") try: while True: _, frame = cam.read() @@ -95,4 +82,4 @@ if __name__ == '__main__': except Exception as e: cam.release() cv2.destroyAllWindows() - print(e) \ No newline at end of file + print(e) diff --git a/python/test_contur.py b/python/test_contur.py deleted file mode 100644 index 2a6752b..0000000 --- a/python/test_contur.py +++ /dev/null @@ -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 \ No newline at end of file