def detect_match_chunks(self, max_error=.06):
percent = cv2.imread("assets/pct.png")
corr_series = []
for (time, scene) in self.sample_frames(interval=self.polling_interval):
cv2.imwrite("scene.png", scene)
scene = cv2.imread("scene.png")
scaled_percent = cv2.resize(
percent, (0, 0), fx=self.scale, fy=self.scale)
scaled_percent = cv2.Canny(scaled_percent, 50, 200)
percent_corrs = []
for port_number, roi in enumerate(self.ports):
if roi is not None:
scene_roi = scene[roi.top:(roi.top + roi.height), roi.left:(roi.left + roi.width)]
scene_roi = cv2.Canny(scene_roi, 50, 200)
corr_map = cv2.matchTemplate(scene_roi, scaled_percent, cv2.TM_CCOEFF_NORMED)
_, max_corr, _, max_loc = cv2.minMaxLoc(corr_map)
percent_corrs.append(max_corr)
point = [time, max(percent_corrs)]
corr_series.append(point)
corr_series = np.array(corr_series)
medians = pd.rolling_median(corr_series[:, 1], self.min_gap //
self.polling_interval, center=True)[2:-2]
clusters = DBSCAN(eps=0.03, min_samples=10).fit(medians.reshape(-1, 1))
dataframe = list(zip(corr_series[:, 0][2:-2], medians, clusters.labels_))
labels = list(set(x[2] for x in dataframe))
cluster_means = [sum(cluster) / len(cluster) for cluster in [[x[1] for x in dataframe if x[2] == label] for label in labels]]
cluster_means = list(zip(labels, cluster_means))
game_label = max(cluster_means, key=lambda x: x[1])[0]
game_groups = [(k, list(v)) for k, v in groupby(dataframe, lambda pt: pt[2])]
games = [[v[0][0], v[-1][0]] for k, v in game_groups if k == game_label]
return games
评论列表
文章目录