开启辅助访问 切换到宽版

精易论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

用微信号发送消息登录论坛

新人指南 邀请好友注册 - 我关注人的新帖 教你赚取精币 - 每日签到


求职/招聘- 论坛接单- 开发者大厅

论坛版规 总版规 - 建议/投诉 - 应聘版主 - 精华帖总集 积分说明 - 禁言标准 - 有奖举报

查看: 255|回复: 5
收起左侧

[易语言] 大漠yolo如何不绑定窗口调用

[复制链接]
结帖率:50% (3/6)
发表于 2025-2-17 18:24:19 | 显示全部楼层 |阅读模式   云南省昆明市
100精币
我想识别我提供的图片,我看大漠的yolo没办法直接提供图片识别,必须要绑定窗口后才可以
我想多线程识别实现这个功能
识别成功吧标识数据在保存到大漠yolo综合工具的目录下,后期直接训练就可以了


回答提醒:如果本帖被关闭无法回复,您有更好的答案帮助楼主解决,请发表至 源码区 可获得加分喔。
友情提醒:本版被采纳的主题可在 申请荣誉值 页面申请荣誉值,获得 1点 荣誉值,荣誉值可兑换荣誉会员、终身vip用户组。
快捷通道:申请荣誉值无答案申请取消悬赏投诉有答案未采纳为最佳

结帖率:100% (8/8)

签到天数: 14 天

发表于 2025-2-17 19:25:53 | 显示全部楼层   安徽省六安市
并不支持多线程  大漠的yolo是一个公共的对象  所有线程都是调用的同一个对象  即使是多线程调用  也只是按顺序一个一个识别
回复

使用道具 举报

签到天数: 2 天

发表于 2025-2-17 21:33:26 | 显示全部楼层   江苏省徐州市

并不支持多线程  大漠的yolo是一个公共的对象  所有线程都是调用的同一个对象  即使是多线程调用  也只是按顺序一个一个识别
回复

使用道具 举报

结帖率:50% (3/6)

签到天数: 1 天

 楼主| 发表于 2025-2-19 15:52:15 | 显示全部楼层   云南省昆明市
花间一壶酒 发表于 2025-2-17 19:25
并不支持多线程  大漠的yolo是一个公共的对象  所有线程都是调用的同一个对象  即使是多线程调用  也只是按 ...

那我要怎么才可以不绑定窗口直接调用yolo的识别功能
回复

使用道具 举报

结帖率:100% (8/8)

签到天数: 14 天

发表于 2025-2-19 19:03:47 | 显示全部楼层   安徽省六安市
h5ed5y 发表于 2025-2-19 15:52
那我要怎么才可以不绑定窗口直接调用yolo的识别功能

绑定桌面呗

补充内容 (2025-2-19 19:05):
用前台模式  绑定桌面的句柄
回复

使用道具 举报

结帖率:50% (3/6)

签到天数: 1 天

 楼主| 发表于 2025-4-1 16:00:01 | 显示全部楼层   云南省昆明市
我自己已经解决了,我调用PYTHON代码可以不需要注册大漠就实现识别并且把标识数据保存到大漠官方的文档里面
[Python] 纯文本查看 复制代码
# detect_custom.py
import sys
import argparse
import cv2
import numpy as np
import onnxruntime as ort
import torch
from pathlib import Path

# ====== 极速配置 ======
sys.path.insert(0, r"C:\Users\x2719\Desktop\易\大漠yolo\yolo\yolov5-7.0")
from utils.general import non_max_suppression, scale_boxes

# 硬件加速初始化
cv2.setUseOptimized(True)  # 启用OpenCV优化
cv2.setNumThreads(4)       # 限制OpenCV线程数

def load_model(onnx_path):
    """极速模型加载 (4线程+内存预分配)"""
    options = ort.SessionOptions()
    options.intra_op_num_threads = 4    # 并行计算线程
    options.enable_cpu_mem_arena = True # 预分配内存池
    return ort.InferenceSession(onnx_path, providers=['CPUExecutionProvider'], sess_options=options)

def detect(img_path, model_path, conf=0.4, iou=0.4):
    """全流程硬件加速"""
    # 极速图像加载 (避免文件锁)
    img0 = cv2.imdecode(np.fromfile(img_path, dtype=np.uint8, count=-1, offset=0), cv2.IMREAD_UNCHANGED)
    if img0 is None:
        raise ValueError("图像读取失败: 可能路径含中文或特殊字符")
    
    # 快速预处理 (固定640x640)
    h, w = img0.shape[:2]
    scale = 640 / max(h, w)
    img = cv2.resize(img0, (int(w*scale), int(h*scale)), interpolation=cv2.INTER_LINEAR)
    img = np.ascontiguousarray(cv2.copyMakeBorder(img, 0, 640-img.shape[0], 0, 640-img.shape[1], 
                                                 cv2.BORDER_CONSTANT, value=(114,114,114)))
    blob = img.transpose(2,0,1)[None].astype(np.float32) / 255.0  # 归一化 (0~1)

    # 推理 (内存复用)
    session = load_model(model_path)
    outputs = session.run(None, {session.get_inputs()[0].name: blob})
    
    # 零拷贝后处理
    with torch.no_grad():  # 禁用梯度计算
        pred = torch.tensor(outputs[0], device='cpu')
        pred = non_max_suppression(pred, conf, iou, classes=None)[0]
    
    if pred is not None and len(pred):
        pred[:, :4] = scale_boxes((640,640), pred[:, :4], img0.shape[:2]).round()
    
    return pred.numpy() if pred is not None else np.array([]), img0.shape

def save_results(detections, output_path, img_shape):
    """二进制写入加速"""
    h, w = img_shape[:2]
    buffer = []
    for det in detections:
        x1, y1, x2, y2, conf, cls = det
        xc = ((x1 + x2) / 2) / w
        yc = ((y1 + y2) / 2) / h
        nw = (x2 - x1) / w
        nh = (y2 - y1) / h
        buffer.append(f"{int(cls)} {xc:.6f} {yc:.6f} {nw:.6f} {nh:.6f} {conf:.6f}\n")
    with open(output_path, 'w', buffering=8192) as f:  # 8KB缓冲
        f.writelines(buffer)

if __name__ == "__main__":
    # 极简参数解析
    parser = argparse.ArgumentParser()
    parser.add_argument('--model', required=True)
    parser.add_argument('--img', required=True)
    parser.add_argument('--output', required=True)
    parser.add_argument('--conf', type=float, default=0.4)
    parser.add_argument('--iou', type=float, default=0.4)
    args = parser.parse_args()

    # 无异常包装 (减少try开销)
    detections, img_shape = detect(args.img, args.model, args.conf, args.iou)
    if detections.size:
        save_results(detections, args.output, img_shape)
        print(f"检测完成: {len(detections)}个目标")
    else:
        Path(args.output).touch(exist_ok=True)
        print("未检测到目标")
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则 致发广告者

发布主题 收藏帖子 返回列表

sitemap| 易语言源码| 易语言教程| 易语言论坛| 易语言模块| 手机版| 广告投放| 精易论坛
拒绝任何人以任何形式在本论坛发表与中华人民共和国法律相抵触的言论,本站内容均为会员发表,并不代表精易立场!
论坛帖子内容仅用于技术交流学习和研究的目的,严禁用于非法目的,否则造成一切后果自负!如帖子内容侵害到你的权益,请联系我们!
防范网络诈骗,远离网络犯罪 违法和不良信息举报电话0663-3422125,QQ: 793400750,邮箱:wp@125.la
网站简介:精易论坛成立于2009年,是一个程序设计学习交流技术论坛,隶属于揭阳市揭东区精易科技有限公司所有。
Powered by Discuz! X3.4 揭阳市揭东区精易科技有限公司 ( 粤ICP备12094385号-1) 粤公网安备 44522102000125 增值电信业务经营许可证 粤B2-20192173

快速回复 返回顶部 返回列表