|
|
import numpy as np
|
|
|
|
|
|
import calc_way
|
|
|
from scipy import stats
|
|
|
import calc_slope_line
|
|
|
import matplotlib.pyplot as plt
|
|
|
# 车胎横向分界线
|
|
|
k = 0.62849534
|
|
|
b = 21.8122503
|
|
|
|
|
|
"""
|
|
|
读取yolo网络识别路沿的坐标数据,筛选出目标区域的数据点,并将路沿上下侧数据分离
|
|
|
参数:保存数据的txt文件路径
|
|
|
返回值:在目标区域内的下侧数据点坐标x_bot、y_bot,上侧数据点坐标x_top,y_top
|
|
|
"""
|
|
|
# def get_data(txt_name):
|
|
|
# with open(txt_name, 'r', encoding='utf-8') as f:
|
|
|
# lines = f.readlines()
|
|
|
# data = []
|
|
|
# for i, line in enumerate(lines, 1):
|
|
|
# data.append(line.split())
|
|
|
# # print(line.split())
|
|
|
# x_bot = []
|
|
|
# y_bot = []
|
|
|
# x_top = []
|
|
|
# y_top = []
|
|
|
# k_num = 0
|
|
|
# k_num2 = 0
|
|
|
# for i in range(len(data)):
|
|
|
# data[i][1] = 960 - int(data[i][1])
|
|
|
# for i in range(len(data)):
|
|
|
# if k * int(data[i][0]) + b - int(data[i][1]) < 0:
|
|
|
# k_num2 = i
|
|
|
# continue
|
|
|
# if i > 1:
|
|
|
# if (int(data[i][0]) - int(data[i-1][0]))*(int(data[i+2][0]) - int(data[i][0])) < 0:
|
|
|
# k_num = i
|
|
|
# # print(f"k_num:{k_num},data:")
|
|
|
# break
|
|
|
# for i in range(len(data)):
|
|
|
# if k * int(data[i][0]) + b - int(data[i][1]) < 0:
|
|
|
# continue
|
|
|
# if i < k_num:
|
|
|
# x_bot.append(int(data[i][0]))
|
|
|
# y_bot.append(int(data[i][1]))
|
|
|
# else:
|
|
|
# x_top.append(int(data[i][0]))
|
|
|
# y_top.append(int(data[i][1]))
|
|
|
# # print(x_bot, y_bot, x_top, y_top)
|
|
|
# return x_bot, y_bot, x_top, y_top, k_num2
|
|
|
|
|
|
|
|
|
def get_data(txt_name):
|
|
|
with open(txt_name, 'r', encoding='utf-8') as f:
|
|
|
lines = f.readlines()
|
|
|
data = []
|
|
|
if not data:
|
|
|
return None, None, None, None
|
|
|
for i, line in enumerate(lines, 1):
|
|
|
data.append(line.split())
|
|
|
x = []
|
|
|
y = []
|
|
|
for i in range(len(data)):
|
|
|
data[i][1] = 960 - int(data[i][1])
|
|
|
x.append(int(data[i][0]))
|
|
|
y.append(int(data[i][1]))
|
|
|
x = np.array(x)
|
|
|
y = np.array(y)
|
|
|
slope, intercept, r_2 = calc_slope_line.linear_regression(x, y)
|
|
|
# print(r_2)
|
|
|
x_bot = []
|
|
|
y_bot = []
|
|
|
x_top = []
|
|
|
y_top = []
|
|
|
for i in range(len(x)):
|
|
|
if x[i] * slope + intercept - y[i] > 0:
|
|
|
x_bot.append(x[i])
|
|
|
y_bot.append(y[i])
|
|
|
else:
|
|
|
x_top.append(x[i])
|
|
|
y_top.append(y[i])
|
|
|
x_bot = np.array(x_bot)
|
|
|
y_bot = np.array(y_bot)
|
|
|
x_top = np.array(x_top)
|
|
|
y_top = np.array(y_top)
|
|
|
slope_bot, intercept_bot, r2_bot = calc_slope_line.linear_regression(x_bot, y_bot)
|
|
|
slope_top, intercept_top, r2_top = calc_slope_line.linear_regression(x_top, y_top)
|
|
|
# print(f"r2_bot = {r2_bot},r2_top = {r2_top}")
|
|
|
if ((1-r2_bot) > 1e-2) or ((1-r2_bot) > 1e-2):
|
|
|
return None, None, None, None
|
|
|
|
|
|
delet = []
|
|
|
for i in range(len(x_bot)):
|
|
|
if abs(y_bot[i] - slope_bot * x_bot[i] - intercept_bot) > 10:
|
|
|
delet.append(i)
|
|
|
# print(f"len(x_bot): {len(x_bot)},delet: {delet})")
|
|
|
x_bot = np.delete(x_bot, delet)
|
|
|
y_bot = np.delete(y_bot, delet)
|
|
|
# y_pred = slope_bot * x_bot + intercept_bot
|
|
|
delet = []
|
|
|
for i in range(len(x_top)):
|
|
|
if abs(y_top[i] - slope_top * x_top[i] - intercept_top) > 10:
|
|
|
delet.append(i)
|
|
|
x_top = np.delete(x_top, delet)
|
|
|
y_top = np.delete(y_top, delet)
|
|
|
# y_pred = slope_top * x_top + intercept_top
|
|
|
return x_bot, y_bot, x_top, y_top
|
|
|
|
|
|
txt_name = "C:\\Users\\Administrator\\Desktop\\BYD\\20250520\\frame_7800_2.jpg_zuobiao.txt"
|
|
|
test_name = r'C:\Users\Administrator\Desktop\BYD\error\20250620\20250620\INPUT_MUST_NOT_BE_EMPTY.txt'
|
|
|
def test_get_data(txt_name):
|
|
|
with open(txt_name, 'r', encoding='utf-8') as f:
|
|
|
lines = f.readlines()
|
|
|
data = []
|
|
|
for i, line in enumerate(lines, 1):
|
|
|
data.append(line.split())
|
|
|
x = []
|
|
|
y = []
|
|
|
for i in range(len(data)):
|
|
|
data[i][1] = 960 - int(data[i][1])
|
|
|
# if k * int(data[i][0]) + b - int(data[i][1]) < 0:
|
|
|
# continue
|
|
|
x.append(int(data[i][0]))
|
|
|
y.append(int(data[i][1]))
|
|
|
x = np.array(x)
|
|
|
y = np.array(y)
|
|
|
slope,intercept,r_2 = calc_slope_line.linear_regression(x, y)
|
|
|
fig, axes = plt.subplots(nrows=2, ncols=2, figsize=(10, 8))
|
|
|
axes[0, 0].scatter(x,y, color='blue', label='orgin')
|
|
|
# 绘制拟合线
|
|
|
y_pred = slope * x + intercept
|
|
|
axes[0, 0].plot(x, y_pred, color='red', label='fix')
|
|
|
|
|
|
|
|
|
|
|
|
print(r_2)
|
|
|
|
|
|
x_bot = []
|
|
|
y_bot = []
|
|
|
x_top = []
|
|
|
y_top = []
|
|
|
for i in range(len(x)):
|
|
|
if x[i] * slope + intercept - y[i] > 0:
|
|
|
x_bot.append(x[i])
|
|
|
y_bot.append(y[i])
|
|
|
else:
|
|
|
x_top.append(x[i])
|
|
|
y_top.append(y[i])
|
|
|
x_bot = np.array(x_bot)
|
|
|
y_bot = np.array(y_bot)
|
|
|
x_top = np.array(x_top)
|
|
|
y_top = np.array(y_top)
|
|
|
slope_bot, intercept_bot, r2_bot = calc_slope_line.linear_regression(x_bot, y_bot)
|
|
|
slope_top, intercept_top, r2_top = calc_slope_line.linear_regression(x_top, y_top)
|
|
|
print(f"r2_bot = {r2_bot},r2_top = {r2_top}")
|
|
|
axes[1, 0].scatter(x_bot,y_bot, color='blue', label='orgin')
|
|
|
# 绘制拟合线
|
|
|
y_pred = slope_bot * x_bot + intercept_bot
|
|
|
axes[1, 0].plot(x_bot, y_pred, color='red', label='fix')
|
|
|
|
|
|
|
|
|
axes[1, 1].scatter(x_top,y_top, color='blue', label='orgin')
|
|
|
# 绘制拟合线
|
|
|
y_pred = slope_top * x_top + intercept_top
|
|
|
axes[1, 1].plot(x_top, y_pred, color='red', label='fix')
|
|
|
|
|
|
plt.show()
|
|
|
return x_bot, y_bot, x_top, y_top
|
|
|
|
|
|
|