人工智能应用实例-自动驾驶

devtools/2025/2/12 20:11:59/

自动驾驶是一个极其复杂的系统工程,包含环境感知、决策规划、控制执行等多个环节,很难用一个完整的代码示例来呈现整个自动驾驶系统。不过,我们可以通过 Python 结合一些开源库,模拟实现自动驾驶中的部分关键逻辑,比如简单的目标检测与路径规划。

1. 环境准备

在运行代码前,需要安装以下库:

pip install numpy opencv-python scikit-learn

2. 简单目标检测(模拟)

目标检测是自动驾驶中感知环境的重要步骤,下面代码模拟了使用 OpenCV 对图像中的目标进行检测。

import cv2
import numpy as npdef detect_objects(image_path):# 读取图像image = cv2.imread(image_path)if image is None:print("无法读取图像")return# 转换为灰度图像gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)# 简单的边缘检测(模拟目标检测)edges = cv2.Canny(gray, 50, 150)# 查找轮廓contours, _ = cv2.findContours(edges.copy(), cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)# 绘制检测到的目标for contour in contours:if cv2.contourArea(contour) > 100:  # 过滤小的轮廓x, y, w, h = cv2.boundingRect(contour)cv2.rectangle(image, (x, y), (x + w, y + h), (0, 255, 0), 2)# 显示结果cv2.imshow('Detected Objects', image)cv2.waitKey(0)cv2.destroyAllWindows()# 使用示例
image_path = 'test_image.jpg'
detect_objects(image_path)

3. 简单路径规划(模拟)

路径规划是根据感知到的环境信息,为车辆规划一条安全、高效的行驶路径。以下代码使用 A* 算法模拟简单的路径规划。

import heapq
import numpy as np# 定义地图
grid = np.array([[0, 0, 0, 0],[0, 1, 0, 0],[0, 0, 0, 0],[0, 0, 0, 0]
])# 定义节点类
class Node:def __init__(self, x, y, g=float('inf'), h=float('inf'), parent=None):self.x = xself.y = yself.g = g  # 从起点到当前节点的实际代价self.h = h  # 从当前节点到目标节点的估计代价self.f = g + h  # 总代价self.parent = parentdef __lt__(self, other):return self.f < other.f# 定义 A* 算法
def astar(grid, start, goal):rows, cols = grid.shapeopen_list = []closed_set = set()start_node = Node(start[0], start[1], g=0, h=abs(start[0] - goal[0]) + abs(start[1] - goal[1]))heapq.heappush(open_list, start_node)while open_list:current_node = heapq.heappop(open_list)if (current_node.x, current_node.y) == goal:path = []while current_node:path.append((current_node.x, current_node.y))current_node = current_node.parentreturn path[::-1]closed_set.add((current_node.x, current_node.y))# 定义相邻节点的偏移量neighbors = [(0, 1), (0, -1), (1, 0), (-1, 0)]for dx, dy in neighbors:new_x, new_y = current_node.x + dx, current_node.y + dyif 0 <= new_x < rows and 0 <= new_y < cols and grid[new_x, new_y] == 0 and (new_x, new_y) not in closed_set:new_g = current_node.g + 1new_h = abs(new_x - goal[0]) + abs(new_y - goal[1])new_node = Node(new_x, new_y, g=new_g, h=new_h, parent=current_node)# 检查是否已经在开放列表中found = Falsefor i, node in enumerate(open_list):if node.x == new_x and node.y == new_y:if new_g < node.g:open_list[i] = new_nodeheapq.heapify(open_list)found = Truebreakif not found:heapq.heappush(open_list, new_node)return None# 使用示例
start = (0, 0)
goal = (3, 3)
path = astar(grid, start, goal)
print("规划路径:", path)

代码解释

  • 目标检测

    • 使用 OpenCV 读取图像并将其转换为灰度图像。
    • 通过 Canny 边缘检测算法检测图像中的边缘。
    • 查找边缘的轮廓,并过滤掉面积较小的轮廓。
    • 在原始图像上绘制检测到的目标的边界框。
  • 路径规划

    • 定义了一个简单的二维地图,其中 0 表示可通行区域,1 表示障碍物。
    • 实现了 A* 算法,用于在地图上寻找从起点到目标点的最短路径。
    • 使用优先队列(堆)来管理开放列表,以提高搜索效率。

这些代码只是自动驾驶系统的简化模拟,实际的自动驾驶系统需要更复杂的传感器数据处理、精确的目标检测算法和更高级的路径规划策略。


http://www.ppmy.cn/devtools/158303.html

相关文章

SQL Server 逻辑查询处理阶段及其处理顺序

在 SQL Server 中&#xff0c;查询的执行并不是按照我们编写的 SQL 语句的顺序进行的。相反&#xff0c;SQL Server 有自己的一套逻辑处理顺序&#xff0c;这个顺序决定了查询的执行方式和结果集的生成。了解这些处理阶段和顺序对于优化查询性能和调试复杂查询非常重要。 SQL …

字节跳动后端一面

&#x1f4cd;1. Gzip压缩技术详解 Gzip是一种流行的无损数据压缩格式&#xff0c;它使用DEFLATE算法来减少文件大小&#xff0c;广泛应用于网络传输和文件存储中以提高效率。 &#x1f680; 使用场景&#xff1a; • 网站优化&#xff1a;通过压缩HTML、CSS、JavaScript文件来…

使用PyCharm进行Django项目开发环境搭建

如果在PyCharm中创建Django项目 1. 打开PyCharm&#xff0c;选择新建项目 2.左侧选择Django&#xff0c;并设置项目名称 3.查看项目解释器初始配置 4.新建应用程序 执行以下操作之一&#xff1a; 转到工具| 运行manage.py任务或按CtrlAltR 在打开的manage.pystartapp控制台…

【场景题】架构优化 - 解耦Redis缓存与业务逻辑

1. 需求分析 某公司需要将原有的Redis缓存抽离出来&#xff0c;并且还要要实现&#xff1a; 可配置热拔插高可用高通用 请问你会如何实现&#xff1f; 2. 思路 话不多说直接上思路&#xff1a; 自定义缓存注解&#xff0c;当容器扫描到该注解自动调用AOP想应的增强方法为…

electron.vite 项目创建以及better-sqlite3数据库使用

1.安装electron.vite npm create quick-start/electronlatest中文官网&#xff1a;https://cn.electron-vite.org/ 2. 安装项目依赖 npm i3.修改 electron-builder 配置文件 appId: com.electron.app productName: text33 directories:buildResources: build files:- !**/.v…

在ArcGIS JS API中使用WebGL实现波纹扩散特效

在现代WebGIS开发中&#xff0c;ArcGIS JS API 是一个非常强大的工具&#xff0c;它允许开发者创建丰富的地理信息应用。结合WebGL技术&#xff0c;我们可以实现更加复杂和炫酷的可视化效果。本文将介绍如何使用ArcGIS JS API结合WebGL实现一个波纹扩散特效。 波纹扩散效果 1 概…

Rust 文件读取:实现我们的 “迷你 grep”

1. 准备示例文件 首先&#xff0c;在项目根目录&#xff08;与 Cargo.toml 同级&#xff09;下新建一个名为 poem.txt 的文件。示例内容可参考 Emily Dickinson 的诗&#xff1a; Im nobody! Who are you? Are you nobody, too? Then theres a pair of us — dont tell! Th…

请解释 JavaScript 中的函数式编程,优缺点是什么?

一、对JavaScript函数式编程的理解 函数式编程&#xff08;Functional Programming&#xff0c;FP&#xff09;是一种编程范式&#xff0c;它将计算视为数学函数的求值&#xff0c;并避免改变状态和可变数据。 在JavaScript中&#xff0c;函数式编程具有以下几个关键特性&…