|
@@ -1,8 +1,7 @@
|
|
|
import cv2
|
|
|
import numpy as np
|
|
|
import zmq
|
|
|
-from skimage.measure import label
|
|
|
-import math
|
|
|
+from recognizer import recognize
|
|
|
|
|
|
def euclidian(x1, y1, x2, y2):
|
|
|
return ((x1 - x2)**2 + (y1 - y2)**2)**0.5
|
|
@@ -23,89 +22,7 @@ while True:
|
|
|
n += 1
|
|
|
arr = np.frombuffer(bts, np.uint8)
|
|
|
imagege = cv2.imdecode(arr, cv2.IMREAD_COLOR)
|
|
|
- key = cv2.waitKey(10)
|
|
|
-
|
|
|
- if key == ord("q"):
|
|
|
- break
|
|
|
-
|
|
|
- image = cv2.cvtColor(imagege.copy(), cv2.COLOR_BGR2HSV)
|
|
|
- image = image[:,:,1]
|
|
|
-
|
|
|
- img = image.copy()
|
|
|
- _, thras = cv2.threshold(img, 70, 255, cv2.THRESH_BINARY)
|
|
|
- image = cv2.threshold(image, 70, 255, cv2.THRESH_BINARY)[1]
|
|
|
- image = cv2.dilate(image, None, iterations=3)
|
|
|
-
|
|
|
- # sssssss
|
|
|
-
|
|
|
- # ssssssss
|
|
|
-
|
|
|
-
|
|
|
- labeled = label(image)
|
|
|
-
|
|
|
- cntrs = list(cv2.findContours(image, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)[0])
|
|
|
-
|
|
|
- circles = 0
|
|
|
- cubicCount = 0
|
|
|
-
|
|
|
- for c in cntrs:
|
|
|
- (curr_x, curr_y), r = cv2.minEnclosingCircle(c)
|
|
|
- area = cv2.contourArea(c)
|
|
|
- circleArea = math.pi * r ** 2
|
|
|
-
|
|
|
- if area <= 2000:
|
|
|
- continue
|
|
|
-
|
|
|
- if area / circleArea >= 0.9:
|
|
|
- circles += 1
|
|
|
- else:
|
|
|
- cubicCount += 1
|
|
|
-
|
|
|
- distance_map = cv2.distanceTransform(thras, cv2.DIST_L2, 5)
|
|
|
- ret ,dist_thres= cv2.threshold(distance_map, 0.6 * np.max(distance_map), 255, cv2.THRESH_BINARY)
|
|
|
- # ret, dist_thres = cv2.threshold(distance_map, 0.5, 25, cv2.THRESH_BINARY)
|
|
|
- # ret, markers = cv2.connectedComponents(dist_thres.astype('uint8'))
|
|
|
- # segments = cv2.wetershed(image, markers + 1)
|
|
|
- confuse = cv2.subtract(thras, dist_thres.astype('uint8'))
|
|
|
- ret, markers = cv2.connectedComponents(dist_thres.astype('uint8'))
|
|
|
- markers += 1
|
|
|
- markers[confuse == 255] = 0
|
|
|
- segments = cv2.watershed(imagege, markers)
|
|
|
- cnts, hierrache = cv2.findContours(segments, cv2.RETR_CCOMP, cv2.CHAIN_APPROX_SIMPLE)
|
|
|
-
|
|
|
- circlesA = 0
|
|
|
- cubicCountA = 0
|
|
|
-
|
|
|
- for i in range(len(cnts)):
|
|
|
- if hierrache[0][i][3] != -1: continue
|
|
|
- c = cnts[i]
|
|
|
- (curr_x, curr_y), r = cv2.minEnclosingCircle(c)
|
|
|
- area = cv2.contourArea(c)
|
|
|
- circleArea = math.pi * r ** 2
|
|
|
-
|
|
|
- if area <= 2000:
|
|
|
- continue
|
|
|
-
|
|
|
- if area / circleArea >= 0.9:
|
|
|
- circlesA += 1
|
|
|
- else:
|
|
|
- cubicCountA += 1
|
|
|
-
|
|
|
- for i in range(len(cnts)):
|
|
|
- if hierrache[0][i][3] == -1:
|
|
|
- cv2.drawContours(imagege, cnts, i, (0, 255, 0), 10)
|
|
|
-
|
|
|
- cv2.putText(image, f"Circles count = {circles}, quadro count = {cubicCount}", (10, 20), cv2.FONT_HERSHEY_SIMPLEX,
|
|
|
- 0.7, (127, 255, 255))
|
|
|
-
|
|
|
- cv2.putText(image, f"Image = {n}", (10, 60), cv2.FONT_HERSHEY_SIMPLEX,
|
|
|
- 0.7, (127, 255, 255))
|
|
|
|
|
|
- cv2.imshow("Image", image)
|
|
|
-
|
|
|
- cv2.putText(imagege, f"Circles count = {circlesA}, quadro count = {cubicCountA}", (10, 20), cv2.FONT_HERSHEY_SIMPLEX,
|
|
|
- 0.7, (127, 255, 255))
|
|
|
-
|
|
|
- cv2.imshow("Image2", imagege)
|
|
|
+ recognize(imagege, n, True)
|
|
|
|
|
|
cv2.destroyAllWindows()
|