2025年4月15日 星期二 乙巳(蛇)年 正月十六 设为首页 加入收藏
rss
您当前的位置:首页 > 计算机 > 编程开发 > Python

验证识别:数美的缺口识别 + 轨迹生成

时间:06-25来源:作者:点击数:24

数美的缺口识别 + 轨迹生成

  • import math
  • import random
  • import cv2
  • import numpy as np
  • import requests
  • def get_distance(fg, bg):
  • fg_image = np.asarray(
  • bytearray(requests.get(url=fg, verify=False).content), dtype="uint8"
  • )
  • fg_image = cv2.imdecode(fg_image, 1)
  • shape = fg_image.shape
  • x_points, y_points = [], []
  • for x_point in range(shape[0]):
  • for y_point in range(shape[1]):
  • if list(fg_image[x_point][y_point]) != [0, 0, 0]:
  • x_points.append(x_point)
  • y_points.append(y_point)
  • fg_cut_image = fg_image[
  • min(x_points) : max(x_points),
  • ]
  • bg_image = np.asarray(
  • bytearray(requests.get(url=bg, verify=False).content), dtype="uint8"
  • )
  • bg_image = cv2.imdecode(bg_image, 1)
  • bg_cut_image = bg_image[
  • min(x_points) : max(x_points),
  • ]
  • result = cv2.matchTemplate(bg_cut_image, fg_cut_image, cv2.TM_CCOEFF_NORMED)
  • min_val, max_val, min_loc, max_loc = cv2.minMaxLoc(result)
  • distance = max_loc[0]
  • return int(distance)
  • def get_track(distance: int):
  • """
  • 获取轨迹
  • Args:
  • distance: 距离
  • Returns:
  • """
  • x = [0, 0]
  • y = [0, 0, 0]
  • z = [0]
  • count = np.linspace(-math.pi / 2, math.pi / 2, random.randrange(20, 30))
  • func = list(map(math.sin, count))
  • nx = [i + 1 for i in func]
  • add = random.randrange(10, 15)
  • sadd = distance + add
  • x.extend(list(map(lambda x: x * (sadd / 2), nx)))
  • x.extend(np.linspace(sadd, distance, 3 if add > 12 else 2))
  • x = [math.floor(i) for i in x]
  • for i in range(len(x) - 2):
  • if y[-1] < 30:
  • y.append(y[-1] + random.choice([0, 0, 1, 1, 2, 2, 1, 2, 0, 0, 3, 3]))
  • else:
  • y.append(
  • y[-1] + random.choice([0, 0, -1, -1, -2, -2, -1, -2, 0, 0, -3, -3])
  • )
  • for i in range(len(x) - 1):
  • z.append(
  • (z[-1] // 100 * 100)
  • + 100
  • + random.choice([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2])
  • )
  • trace = list(map(list, zip(x, y, z)))
  • times = trace[-1][-1] + random.randint(1, 5)
  • return trace, times
  • fg = 'https://castatic.fengkongcloud.cn/crb/slide-atlas-default-without-logo-20230423/v4/c7db06c0414b3faa735cbc324bdfd7ff_fg.png'
  • bg = 'https://castatic.fengkongcloud.cn/crb/slide-atlas-default-without-logo-20230423/v4/c7db06c0414b3faa735cbc324bdfd7ff_bg.jpg'
  • print(get_distance(fg, bg))
  • print(get_track(get_distance(fg, bg)))

 

方便获取更多学习、工作、生活信息请关注本站微信公众号城东书院 微信服务号城东书院 微信订阅号
推荐内容
相关内容
栏目更新
栏目热门