YOLOv8股市实时状态走势检测分析模型

YOLOv8股市实时形态检测模型卡(基于屏幕捕捉)

模型概述

YOLOv8s股市形态检测模型是基于YOLO(You Only Look Once)框架的目标检测模型,专为实时检测屏幕捕捉的股市交易图表中的各类技术形态而设计。该模型通过自动化图表形态分析,为交易者和投资者提供及时洞察,辅助决策制定。模型经过多样化数据集微调,在实时交易场景中能高精度检测和分类股市形态。
在这里插入图片描述

模型详情

功能描述

本模型可实时检测股市屏幕截图中关键图表形态。随着市场快速变化,模型能提供及时洞察,帮助用户快速准确地做出决策。

模型适用于股市交易图表的屏幕捕捉,可检测以下形态:

  • 头肩底
  • 头肩顶
  • M头
  • 趋势线
  • 三角形
  • W底

在这里插入图片描述

开发方:FODUU AI
模型类型:目标检测
任务类型:屏幕捕捉的股市形态检测

支持标签

[‘头肩底’, ‘头肩顶’, ‘M头’, ‘趋势线’, ‘三角形’, ‘W底’]

应用场景

直接应用

  • 实时检测股市图表形态
  • 记录检测到的形态
  • 标注检测图像
  • 将结果保存至Excel文件
  • 生成形态检测过程视频
    在这里插入图片描述

衍生应用

  • 自动化交易策略
  • 特定形态预警
  • 提升整体交易表现

训练数据

使用包含9000张训练图像和800张验证图像的自定义数据集进行训练。

非适用场景

本模型不适用于与股市屏幕捕捉形态检测无关的其他目标检测任务。

偏差、风险与局限

  • 图表样式、屏幕分辨率和市场条件变化可能影响性能
  • 市场剧烈波动和交易噪声可能降低准确性
  • 训练数据未充分覆盖的市场特定形态可能检测困难

建议

用户应充分了解模型局限性和潜在偏差,建议在实盘部署前使用历史数据和实时市场条件进行测试验证。

快速开始

安装必要库:

pip install mss==10.0.0 opencv-python==4.11.0.86 numpy ultralytics==8.3.94 openpyxl==3.1.5

屏幕捕捉与形态检测实现代码:

import os
import mss # type: ignore
import cv2
import numpy as np
import time
import glob
from ultralytics import YOLO
from openpyxl import Workbook

# 获取用户主目录
home_dir = os.path.expanduser("~")

# 定义动态路径
save_path = os.path.join(home_dir, "yolo_detection")
screenshots_path = os.path.join(save_path, "screenshots")
detect_path = os.path.join(save_path, "runs", "detect")

# 确保目录存在
os.makedirs(screenshots_path, exist_ok=True)
os.makedirs(detect_path, exist_ok=True)

# 定义形态类别
classes = ['头肩底', '头肩顶', 'M头', '趋势线', '三角形', 'W底']

# 加载YOLOv8模型
model_path = "model.pt"
if not os.path.exists(model_path):
    raise FileNotFoundError(f"未找到模型文件: {model_path}")
model = YOLO(model_path)

# 定义屏幕捕捉区域
monitor = {"top": 0, "left": 683, "width": 683, "height": 768}

# 创建Excel文件
excel_file = os.path.join(save_path, "classification_results.xlsx")
wb = Workbook()
ws = wb.active
ws.append(["时间戳", "预测图像路径", "标签"])  # 表头

# 初始化视频写入器
video_path = os.path.join(save_path, "annotated_video.mp4")
fourcc = cv2.VideoWriter_fourcc(*"mp4v")
fps = 0.5  # 可调整帧率
video_writer = None

with mss.mss() as sct:
    start_time = time.time()
    last_capture_time = start_time  # 记录上次捕获时间
    frame_count = 0
    
    while True:
        # 持续捕捉屏幕
        sct_img = sct.grab(monitor)
        img = np.array(sct_img)
        img = cv2.cvtColor(img, cv2.COLOR_BGRA2BGR)

        # 每60秒执行一次YOLO预测
        current_time = time.time()
        if current_time - last_capture_time >= 60:
            # 截图用于预测
            timestamp = time.strftime("%Y-%m-%d %H:%M:%S")
            image_name = f"predicted_images_{timestamp}_{frame_count}.png"
            image_path = os.path.join(screenshots_path, image_name)
            cv2.imwrite(image_path, img)

            # 运行YOLO模型
            results = model(image_path, save=True)
            predict_path = results[0].save_dir if results else None

            # 获取最新标注图像
            if predict_path and os.path.exists(predict_path):
                annotated_images = sorted(glob.glob(os.path.join(predict_path, "*.jpg")), key=os.path.getmtime, reverse=True)
                final_image_path = annotated_images[0] if annotated_images else image_path
            else:
                final_image_path = image_path  # 回退到原始图像

            # 确定预测标签
            if results and results[0].boxes:
                class_indices = results[0].boxes.cls.tolist()
                predicted_label = classes[int(class_indices[0])]
            else:
                predicted_label = "未检测到形态"

            # 写入Excel(存储路径而非图像)
            ws.append([timestamp, final_image_path, predicted_label])

            # 读取图像用于视频处理
            annotated_img = cv2.imread(final_image_path)
            if annotated_img is not None:
                # 添加时间戳和标签文本
                font = cv2.FONT_HERSHEY_SIMPLEX
                cv2.putText(annotated_img, f"{timestamp}", (10, 30), font, 0.7, (0, 255, 0), 2, cv2.LINE_AA)
                cv2.putText(annotated_img, f"{predicted_label}", (10, 60), font, 0.7, (0, 255, 255), 2, cv2.LINE_AA)
                
                # 初始化视频写入器
                if video_writer is None:
                    height, width, layers = annotated_img.shape
                    video_writer = cv2.VideoWriter(video_path, fourcc, fps, (width, height))
                
                video_writer.write(annotated_img)

            print(f"帧 {frame_count}: {final_image_path} -> {predicted_label}")
            frame_count += 1

            # 更新最后捕获时间
            last_capture_time = current_time

        # 定期保存Excel文件
        wb.save(excel_file)

        # 实时显示屏幕捕捉(可选)
        cv2.imshow("屏幕捕捉", img)

        # 按Q键退出循环
        if cv2.waitKey(1) & 0xFF == ord('q'):
            break

# 释放视频写入器
if video_writer is not None:
    video_writer.release()
    print(f"视频已保存至 {video_path}")

# 清理截图目录
for file in os.scandir(screenshots_path):
    os.remove(file.path)
os.rmdir(screenshots_path)

print(f"结果已保存至 {excel_file}")

# 关闭OpenCV窗口
cv2.destroyAllWindows()
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值