import easyocr
import numpy as np
import cv2
def detect_circles(gray, img):
# cv2.imshow(“”,gray)
# circles = cv2.HoughCircles(gray, cv2.HOUGH_GRADIENT, 1, 100, param2=150, minRadius=160)
# 参数解析,灰度图片,method为检测方法,常用CV_HOUGH_GRADIENT,
circles = cv2.HoughCircles(gray, cv2.HOUGH_GRADIENT, 2,300, param2=80, minRadius=160)
# print(circles)
circles = np.uint16(np.around(circles)) # 把circles包含的圆心和半径的值变成整数
cir = img.copy()
#
for i in circles[0, :1]:
cv2.circle(cir, (i[0], i[1]), i[2], (0, 255, 0), 10, cv2.LINE_AA) # 画圆
cv2.circle(cir, (i[0], i[1]), 2, (0, 255, 0), 10, cv2.LINE_AA) # 画圆心
# cv2.imshow("circles", cir)
return cir, circles[0][0]
#计算距离
def dist_o_all(a_,b_):
cent = [int((a_[0] + a_[2]) / 2), int((a_[1] + a_[3]) / 2)] dis = np.linalg.norm(np.array(cent) - b_) return dis
box =np.array([[1047, 969, 1132, 1027, 0.40609],
[803, 224, 1994, 1237,0.29581]])
for i in range(4):
if i % 2 ==0:
box[0][i] =box[0][i] -box[1][0]
else:
box[0][i] = box[0][i] - box[1][1]
print(box)
img = cv2.imread(“./img/IMG_3938.JPG”)
h,w = img.shape[:2]
p1, p2 = (int(box[1][0]), int(box[1][1])), (int(box[1][2]), int(box[1][3]))
cv2.rectangle(img, p1, p2, (0,0,255), thickness=1, lineType=cv2.LINE_AA)
img_ocr = img[int(box[1][1]):int(box[1][3]),int(box[1][0]):int(box[1][2])]
img_ocr_gary = cv2.cvtColor(img_ocr,cv2.COLOR_BGR2GRAY)
cir, circles= detect_circles(img_ocr_gary,img_ocr)
print(circles)
cv2.imshow(“3”,cir)
reader = easyocr.Reader([“ch_sim”],model_storage_directory=“./weight”)
result_ocr = reader.readtext(img_ocr)
value_dict = {}
for res in result_ocr:
# print(res)
if res[2] >0.7:
try:
numerical_value = float(res[1])
except:
continue
res[0][0] = int(res[0][0][0]),int(res[0][0][1])
res[0][2] = int(res[0][2][0]), int(res[0][2][1])
# print(res)
cent = [int((res[0][0][0] + res[0][2][0])/2) , int((res[0][0][1] + res[0][2][1])/2)]
dis = np.linalg.norm(np.array(cent)-circles[:2])
if dis > int(circles[2] /2) :
value_dict[numerical_value] = np.array(cent)
cent_0 =np.array([int((box[0][0] + box[0][2]) / 2), int((box[0][1] + box[0][3]) / 2)])
value_sorted = sorted(value_dict.items())
value_0 = sorted(value_dict.items(),key=lambda a:dist_o_all(box[0][:4],a[1]))
first = value_sorted[0]
scend = value_sorted[1]
a = first[1] - circles[:2]
b = scend[1] - circles[:2]
cos_vale = np.dot(a,b)/(np.linalg.norm(a)*np.linalg.norm(b))
arcos = np.arccos(cos_vale)
a_0 =cent_0 - circles[:2]
b_0 = value_0[0][1] - circles[:2]
cos_0 = np.dot(a_0,b_0)/(np.linalg.norm(a_0)*np.linalg.norm(b_0))
arcos_0 = np.arccos(cos_0)
differential_value = scend[0]-first[0]
differential_value = differential_value/arcos
true_val = arcos_0*differential_value
print(value_0[0][0]-true_val)
cos_0 = print(cos_) 夹角sin值 cv2.imshow(“1”,img_ocr)cv2.waitKey(0)



