云计算百科
云计算领域专业知识百科平台

基于YOLO的船舶识别系统的设计与实现(源码+文档)

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */
#content_views .toc,
/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */
#content_views.markdown_views > p:empty:has(+ .toc),
#content_views.markdown_views > .toc + p:empty,
/* 富文本旧版目录标记 */
#content_views.htmledit_views #main-toc,
#content_views.htmledit_views #hr-toc,
#content_views.htmledit_views p[id*=\”-toc\”] {
display: none !important;
}
/* 目录去掉后,紧跟的首个标题不再多出一块上边距 */
#content_views.markdown_views > .toc + h1,
#content_views.markdown_views > .toc + h2,
#content_views.markdown_views > .toc + h3,
#content_views.markdown_views > .toc + h4,
#content_views.markdown_views > .toc + p:empty + h1,
#content_views.markdown_views > .toc + p:empty + h2,
#content_views.markdown_views > .toc + p:empty + h3,
#content_views.markdown_views > .toc + p:empty + h4 {
margin-top: 0 !important;
}

温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台官方提供的学长联系方式的名片!

课题介绍

内河、港口水域环境复杂,船舶种类繁多,依靠人工瞭望和监控查看船舶信息,容易出现漏检、识别不及时的问题,难以满足水域智能化监管需求。本文设计实现基于YOLO的船舶识别系统,采用Python语言+Flask框架开发,搭配Web前端,MySQL作为数据库,使用YOLO目标检测算法对河道、港口监控视频画面进行识别,自动检测船舶目标。系统包含巡查人员、管理员两类角色,支持RTSP视频流接入、实时船舶检测、违规抓拍保存、识别记录入库、历史记录查询、监控点位管理等功能。经过需求分析、系统设计、编码开发与测试,系统可以全天候自动识别画面中的船舶,降低人工巡查成本,助力水域智能监管。

技术栈

Python、Flask、YOLO、OpenCV、MySQL、PyMySQL、Vue3、Element Plus、RTSP视频流解析

项目实现

在这里插入图片描述 在这里插入图片描述 在这里插入图片描述 在这里插入图片描述 在这里插入图片描述 在这里插入图片描述 在这里插入图片描述 在这里插入图片描述 在这里插入图片描述 在这里插入图片描述 在这里插入图片描述 在这里插入图片描述 在这里插入图片描述 在这里插入图片描述

文档截图

在这里插入图片描述

## 核心代码
```python
# YOLO + Flask 船舶识别核心代码
from ultralytics import YOLO
import cv2
from flask import Flask, request, jsonify
import pymysql
import time

app = Flask(__name__)
model = YOLO("yolov11n_ship.pt")
# 船舶类别:ship船舶
class_names = ["ship"]

# 数据库连接
def get_db_conn():
conn = pymysql.connect(host="127.0.0.1", user="root", password="123456", database="ship_monitor", charset="utf8mb4")
return conn

# 船舶检测函数
def detect_ship(frame):
results = model(frame, conf=0.5)
detect_list = []
for res in results:
boxes = res.boxes
for box in boxes:
cls_id = int(box.cls[0])
cls_name = class_names[cls_id]
detect_list.append(cls_name)
x1, y1, x2, y2 = map(int, box.xyxy[0])
cv2.rectangle(frame, (x1, y1), (x2, y2), (0, 255, 0), 2)
cv2.putText(frame, cls_name, (x1, y1 – 10), cv2.FONT_HERSHEY_SIMPLEX, 0.6, (0, 255, 0), 2)
return frame, detect_list

# 识别记录入库
def save_record(target_type, device_id):
conn = get_db_conn()
cur = conn.cursor()
sql = "insert into detect_record(target_type,device_id,create_time,status) values (%s,%s,%s,%s)"
cur.execute(sql, (target_type, device_id, time.strftime("%Y-%m-%d %H:%M:%S"), "已识别"))
conn.commit()
cur.close()
conn.close()

@app.route("/start_detect", methods=["POST"])
def start_detect():
data = request.get_json()
rtsp_url = data.get("rtsp_url")
device_id = data.get("device_id")
cap = cv2.VideoCapture(rtsp_url)
if not cap.isOpened():
return jsonify({"code":500, "msg":"视频流打开失败"})
while cap.isOpened():
ret, frame = cap.read()
if not ret:
break
frame, targets = detect_ship(frame)
if targets:
for item in targets:
save_record(item, device_id)
cv2.imshow("ship-monitor", frame)
if cv2.waitKey(1) & 0xFF == ord('q'):
break
cap.release()
cv2.destroyAllWindows()
return jsonify({"code":200, "msg":"检测结束"})

@app.route("/record_list", methods=["GET"])
def record_list():
conn = get_db_conn()
cur = conn.cursor(pymysql.cursors.DictCursor)
cur.execute("select * from detect_record order by create_time desc")
rows = cur.fetchall()
cur.close()
conn.close()
return jsonify({"code":200, "data":rows})

if __name__ == "__main__":
app.run(host="0.0.0.0", port=5000, debug=True)

系统测试

系统以黑盒测试为主,围绕巡查人员、管理员两个角色的业务流程设计测试用例。重点测试 RTSP 视频流接入、YOLO 船舶目标检测、目标框选标注、识别记录存储、历史记录查询、监控点位管理等核心功能,校验输入参数,拦截无效视频地址、空点位名称等异常数据。测试记录状态流转,区分已识别、已查看。测试页面适配,实时监控画面、标注效果、识别记录列表展示正常。模拟多路水域摄像头同时推流,验证算法推理稳定,在水面反光、轻微雾气场景下不会出现严重漏检。针对非法接口请求进行测试,捕获异常并给出友好提示。测试过程中发现缺陷及时修复并回归验证,保障船舶识别业务稳定运行。

结论

本文设计并实现了基于 YOLO 的船舶识别系统,采用 Python+Flask 框架开发,针对港口、河道人工监控船舶识别效率低、容易漏检的痛点,结合 YOLO 目标检测算法实现水域船舶自动识别。系统实现实时视频监测、船舶目标检测标注、识别记录存储、监控点位管理等功能,满足巡查人员查看识别记录、管理员统一管控的需求。经过测试,系统功能完整、运行稳定,识别速度快,适用于内河、港口水域监控场景。后续可以增加船舶细分类型识别、抓拍图片保存、越界告警、检测区域划定、数据导出等功能,进一步完善系统服务能力。

赞(0)
未经允许不得转载:网硕互联帮助中心 » 基于YOLO的船舶识别系统的设计与实现(源码+文档)
分享到: 更多 (0)

评论 抢沙发

评论前必须登录!