UC故事2011/11/27 - 2

YOLOv8自定义训练:车牌识别全流程(从标注到推理,附可视化代码) 车牌检测全流程实践指南 摘要:本文详细介绍了基于YOLOv8的车牌检测完整实现方案。针对车牌检测中的三大难点(小目标、多角度、光照变化),提供了从数据准备到模型部署的全流程解决方案。重点包括:1)数据采集与标注规范;2)针对小目标的YOLOv8模型优化配置;3)K-means锚框聚类方法;4)训练参数调优策略。通过实际验证,该方法可获得95%以上的检测准确率,并附有完整的代码实现和可视化工具,便于开发者快速复现应用。 (字数:149字) 阅读详情


1. 再次研究线程

* 线程种类

    typedef int TType;
    enum
    {
        TT_MAIN,
        TT_NETWORK,
        TT_DNS,                      // Q:for what ?
        TT_CURRENT,           // Q:for what?
        TT_TIMER,
        TT_UNKNOWN = -1,
        
        // This private thread type is used by applications.
        TT_USER_DEFINE_BASE = 1000
    };


2. CRTThreadManager::InitMainThread()

主线程(自己的调用?)


CRtReactorBase::Open() line 172

CRtReactorWin32Message::Open() line 172 + 8 bytes
CRtThreadReactor::Create(int 0, CRtThreadManager::TFlag TF_JOINABLE) line 40 + 19 bytes
CRtThreadManager::CreateReactorThread(int 0, IRtReactor * 0x020a7970, CRtThread * & 0x00000000) line 368 + 41 bytes
CRtThreadManager::InitMainThread(int 0, char * * 0x00000000) line 191 + 24 bytes
CRtThreadManager::Instance() line 132 + 15 bytes
RtCoInitialize() line 179 + 5 bytes
ILDebugStart(unsigned short 33201, void * 0x00000001) line 1482
WinMain(HINSTANCE__ * 0x00400000, HINSTANCE__ * 0x00000000, char * 0x00151f28, int 1) line 83 + 8 bytes
WinMainCRTStartup() line 330 + 54 bytes
KER

注:此在CRrReactorWin32Message::Open()中,将WSAAyncSelect的消息处理函数设置好。

                                                                                                ^ 非也,此处仅仅是注册event-queue-handler的事件通知消息,与WSAAsyncselect完全无关。 2011/12/07


* 主线程(生成子线程的调用)

NTDLL! 7c92e514()
KERNEL32! 7c802542()
CRtEventThread::Wait(CRtTimeValue * 0x00000000) line 354 + 18 bytes

                ^ 实际上提供lock机制,very BAD NAMING !   2011/12/07
CRtThread::Create(int 1, CRtThreadManager::TFlag TF_JOINABLE) line 99      
CRtThreadReactor::Create(int 1, CRtThreadManager::TFlag TF_JOINABLE) line 36 + 16 bytes
CRtThreadManager::CreateReactorThread(int 1, IRtReactor * 0x020a7ca0, CRtThread * & 0x00000000) line 368 + 41 bytes
CRtThreadManager::SpawnNetworkThread_i() line 298 + 21 bytes
CRtThreadManager::InitMainThread(int 0, char * * 0x00000000) line 213 + 8 bytes
CRtThreadManager::Instance() line 132 + 15 bytes                        

                   // 实际上在这个instance方法中完成了所有动作:主线程初化,子线程生成,感觉是很烂的设计,instance应该只是一个SingleTon,不应该做这么多事。
RtCoInitialize() line 179 + 5 bytes
ILDebugStart(unsigned short 33201, void * 0x00000001) line 1482
WinMain(HINSTANCE__ * 0x00400000, HINSTANCE__ * 0x00000000, char * 0x00151f28, int 1) line 83 + 8 bytes
WinMainCRTStartup() line 330 + 54 bytes
KERNEL32! 7c817077()

注1:在SpawnNetworkThread_i()中负责子线程的产生。
注2:CRtThread::Create中生成子线程,在主线程wait的时候,子线程工作。


* 子线程

RtResult CRtThread::Create(...

{

...

#ifdef RT_WIN32
        m_Handle = (HANDLE)::_beginthreadex(
            NULL,
            0,
            ThreadProc,
            this,
            0,
            (unsigned int *)(&m_Tid));
        if (m_Handle == 0) {
            RT_ERROR_TRACE("CRtThread::Create, _beginthreadex() failed! err=" << errno);
            return RT_ERROR_UNEXPECTED;
        }
#else // !RT_WIN32

...

}

注:CRtThread:;Create()中,根据是否主线程,是否Linux/Windows,有不同的线程处理方式;主线程本身是不用生成的。


* CRtThread::ThreadProc()

#ifdef RT_WIN32
unsigned WINAPI CRtThread::ThreadProc(void *aPara)
#else
void* CRtThread::ThreadProc(void *aPara)
#endif // RT_WIN32
{
    CRtThread *pThread = static_cast<CRtThread *>(aPara);            // Q: What's this ? 传的一个什么参数?   实际传的是CRtThread指针 this。 2011/12/07
    RT_INFO_TRACE("CRtThread::ThreadProc, begin this="<<pThread);
    RT_ASSERTE_RETURN(pThread, NULL);

    pThread->OnThreadInit();
    if (pThread->m_Type != CRtThreadManager::TT_MAIN) {
        RT_ASSERTE(pThread->m_pEvent4Start);
        if (pThread->m_pEvent4Start)
            pThread->m_pEvent4Start->Signal();
    }

    pThread->OnThreadRun();

    if (RT_BIT_DISABLED(pThread->m_Flag, CRtThreadManager::TF_JOINABLE) &&
        ++pThread->m_NeedDelete >= 2)
    {
        delete pThread;
    }

    RT_INFO_TRACE("CRtThread::ThreadProc, quit ... this="<<pThread);
    return NULL;
}


3. RtBase.cpp::RtCoInitizlize()

RtResult RtCoInitialize()
{
    RT_THREAD_ID threadID = CRtThreadManager::Instance()->GetThreadSelfId();            // 初始化主线程、网络子线程等等

    CRtMutexGuardT<CRtMutexThread> mutexGuard(g_mutexComInit);
    for (RtThreadComInitNumList::iterator it=g_threadComInitNums.begin(); it!=g_threadComInitNums.end(); ++it)
    {
        if (it->m_threadID == threadID)
        {
            RT_ASSERTE(it->m_comInitNum > 0);
            ++ (it->m_comInitNum);
            return RT_OK;
        }
    }

    HRESULT rv = ::CoInitialize(NULL);            // 初始化Com环境等等(WTL需要的东东)
    if (rv == S_OK)
    {
        g_threadComInitNums.push_back(RtThreadComInitNum(threadID, 1));
        return RT_OK;
    }

    RT_WARNING_TRACE("::RtCoInitialize, CoInitialize failed! rv="<<rv<<" threadID="<<threadID);
    return RT_ERROR_FAILURE;
}


Q:第三个一程什么时候产生的?


4. 第三个线程


CRtThread::Create(int 1001, CRtThreadManager::TFlag TF_DETACHED) line 39
CRtThreadManager::CreateUserTaskThread(CRtThread * & 0x00000000, CRtThreadManager::TFlag TF_DETACHED, int 0) line 335 + 31 bytes
CFileManager::Initialize(const CRtString & {0x00000000 ""}, unsigned short 0, int 0) line 170 + 26 bytes
CSDService::CSDService() line 27 + 40 bytes
CRtSingletonT<CSDService>::CRtSingletonT<CSDService>() line 39 + 76 bytes
CRtSingletonT<CSDService>::Instance() line 30 + 40 bytes
CSDService::Instance() line 21
ISDService::Instance() line 11
CConference::ChangeRoleService(unsigned long 3489660928) line 1718 + 5 bytes
CConference::JoinConference(const CConfDetailInfo & {...}, const CInfoRosterInfo & {...}, unsigned short 1, const CRtString * 0x020a94ec {0x020a9969 "tcp://192.168.1.101:443"}, int 0, unsigned long 2147483648) line 223
CConfManage::CreateConference() line 2617 + 103 bytes
CMainFrame::OnCreate(unsigned int 1, unsigned int 1, unsigned int 1, unsigned int 1) line 1879
CMainFrame::ProcessWindowMessage(HWND__ * 0x004a0b0a, unsigned int 1, unsigned int 0, long 1269856, long & -858993460, unsigned long 0) line 138 + 37 bytes
ATL::CWindowImplBaseT<ATL::CWindow,ATL::CWinTraits<114229248,262400> >::WindowProc(HWND__ * 0x020a88c0, unsigned int 1, unsigned int 0, long 1269856) line 2110 + 37 bytes
USER32! 77d18734()
USER32! 77d2bdf1()
USER32! 77d28ea0()
USER32! 77d2ce7c()
NTDLL! 7c92e473()
USER32! 77d2e442()
USER32! 77d2e4dc()
WTL::CFrameWindowImplBase<ATL::CWindow,ATL::CWinTraits<114229248,262400> >::Create(HWND__ * 0x00000000, ATL::_U_RECT {...}, const char * 0x001366e0, unsigned long 114229248, unsigned long 262400, ATL::_U_MENUorID {...}, unsigned short 50074, void * 0x00000000) line 456 + 91 bytes
WTL::CFrameWindowImpl<CMainFrame,ATL::CWindow,ATL::CWinTraits<114229248,262400> >::Create(HWND__ * 0x00000000, ATL::_U_RECT {...}, const char * 0x001366e0, unsigned long 114229248, unsigned long 262400, HMENU__ * 0x35970727, void * 0x00000000) line 1196
WTL::CFrameWindowImpl<CMainFrame,ATL::CWindow,ATL::CWinTraits<114229248,262400> >::CreateEx(HWND__ * 0x00000000, ATL::_U_RECT {...}, unsigned long 0, unsigned long 0, void * 0x00000000) line 1221 + 42 bytes
Run(char * 0x00151f28, int 1) line 195 + 35 bytes
LaunchConf(HINSTANCE__ * 0x00400000, char * 0x00151f28, int 1) line 318 + 13 bytes
WinMain(HINSTANCE__ * 0x00400000, HINSTANCE__ * 0x00000000, char * 0x00151f28, int 1) line 85 + 20 bytes
WinMainCRTStartup() line 330 + 54 bytes
KERNEL32! 7c817077()

注:似乎是一个和SD有关的功能,以后再看细节。

5. 再次理解ConfMain.cpp::WinMain()


WinMain() {

...

    if (hModule)
    {
        ConfClientRunProc pRunProc = (ConfClientRunProc)GetProcAddress(hModule, WT_CLIENT_RUN);
        if(pRunProc)
        {

            DebugRunOption pRunProc1 = (DebugRunOption)GetProcAddress(hModule1, WT_DEBUG_RUN);                          // 获取Debug相关函数指针
            DebugRunStart pRunProc2 = (DebugRunStart)GetProcAddress(hModule1, WT_DEBUG_START);
            DebugRunDestory pRunProc3 = (DebugRunDestory)GetProcAddress(hModule1, WT_DEBUG_DESTORY);

            // 此段为内部调试代码
            char strURL[] = "http://192.168.1.92:8080";
//            char strURL[] = "http://172.16.1.65:8088";
            pRunProc1(WebServiceURL,(void*)strURL);
            // 此段为内部调试代码            
// #if 0
#ifdef __RT_DIAGNOSE__
            // Start debug module
            pRunProc2();                 // start debug mode,同时,打开了一个网络子线程,如果非diagnose模式又如何?
            RT_TRY
            pRunProc(hInstance, lpCmdLine, nCmdShow);     // 启动会议客户端,执行初始化,创建conference及sessoin(其间与server交互数次),消息循环,
            RT_EXCEPT
            // Stop debug module
            pRunProc3();
#else
            pRunProc(hInstance, lpCmdLine, nCmdShow);    // 直接启动户端,但网络线程呢???
#endif
            
            Debug_Info("Davis, Free IWLDiagnose.dll, start\n");
            FreeLibrary(hModule1);
            Debug_Info("Davis, Free IWLDiagnose.dll, end\n");
        }

        Debug_Info("Davis, Free IWLConfClient.dll, start\n");
        FreeLibrary(hModule);
        Debug_Info("Davis, Free IWLConfClient.dll, end\n");
    }

...

}


Q:难道非Diagnose模式就不启动这个网络子线程?


【2026最新】3分钟Windows极速部署OpenClaw,完整可复制命令+全链路避坑指南 很多新手在Windows环境部署OpenClaw时,总会遇到各种玄学问题:WSL环境配置失败、Docker镜像拉取超时、容器启动后无法访问、权限报错、数据丢失……网上大量教程要么是Linux环境的,要么是早已过时的旧版本配置,照着操作不仅没法3分钟部署,反而要花几小时踩坑填坑。 阅读详情

相关推荐

Jetson Orin NX深度学习环境配置全攻略:从JetPack到PyTorch避坑指南

本文提供Jetson Orin NX深度学习环境配置的完整避坑指南。重点讲解如何正确利用JetPack SDK作为系统基石,使用Miniforge管理Python环境,并安装与CUDA版本严格匹配的PyTorch特供版本。通过详细的步骤和验证方法,帮助开发者在ARM架构的嵌入式平台上高效搭建稳定的AI开发工作站。

yolo5detector的博客 272

UC故事2011/12/01

1. Jiarong的例子 * Chat接收 # STACK TRACE CmdChat::OnReceiveData(const CRtString & {0x014c7e79 "h"}, const CRtString & {0x014c7ee1 "h"}, int 1) line 4 ChatComponent::OnReceiveData(const CInfoSID &

printf1998的专栏 434

【超简单】一文入门在Ubuntu系统使用GitHub

Github是基于git的代码仓库,对于开发项目的科研者或者工程师,代码仓库都是不可多得的版本控制与多端编程工具,今天这篇文章带你轻松Github入门,简单的项目本文的操作足矣。

a13337649640的博客 5236

UC故事 2011/11/21

### 研究client framework ### 1. Create Conference Q:在Create Conference的时候,会向Server发PDU吗?   ### 研究Chat module ###  1. Chat消息发送过程 * 相关类 CChatMainDlg CChatSession ISessionClient CConference CCo

printf1998的专栏 479

Java开发者必看:如何快速对接七大主流快递API(附完整代码示例)

本文为Java开发者提供了快速对接顺丰、京东、DHL等七大主流快递API的实战指南。文章深入剖析了不同API的认证、通信协议与参数差异,并提供了高可用的HTTP客户端配置、通用签名工具、SOAP请求处理以及可扩展的领域模型与适配层设计等完整代码示例,帮助开发者构建统一、健壮的物流集成框架,显著提升开发效率。

tech5的博客 727

单细胞转录组数据分析全流程:从原始数据到细胞注释

本文详细介绍了单细胞转录组数据分析的全流程,从原始数据读取、环境搭建、数据质控与标准化,到降维聚类、细胞类型注释,以及高级质控与多样本整合。重点阐述了如何利用Seurat等工具进行数据处理,并通过标志基因比对与自动注释方法完成细胞身份鉴定,为研究者提供了一套清晰、可操作的分析指南。

coffee的博客 552

UC故事 2011/11/20 - 2

1. server信息如何传递到client应用层? void CConference::OnReceiveData(CRtMessageBlock& data) { CRtAutoPtr decPdu; RtResult ret = CInfoSvrPduBase::DecodePdu(data, decPdu.ParaOut());         .... CInfoSvrPdu

printf1998的专栏 331

LaTeX小白必看:TeX Live+TeXstudio保姆级安装教程(附清华镜像加速)

本文为LaTeX新手提供了一份详尽的TeX Live和TeXstudio安装指南。通过清华大学镜像站实现高速下载,并详细讲解了从下载、定制化安装到配置优化的每一步,帮助用户快速搭建稳定高效的本地LaTeX写作环境,轻松处理学术文档排版。

weixin_29214559的博客 413

UC故事2011/11/27 - 1

1. 关于connection的定时器 #define TIME_CONF_CONNECT_TIME                (1000 * 30) 改成 #define TIME_CONF_CONNECT_TIME                (1000 * 5) 试试效果,看5秒的效果是什么。 注:结果没有什么感觉,恢复原值。 2. CRtReactorBase

printf1998的专栏 634

UART中断接收的实战陷阱:HAL库常见误区与性能调优指南

本文深入解析STM32 HAL库UART中断接收机制,揭示常见实战陷阱如数据溢出、中断优先级配置不当等,并提供性能调优方案。重点介绍如何使用空闲中断处理不定长数据、DMA与中断混合模式优化,以及工业级错误恢复与流量控制策略,帮助开发者构建稳定可靠的串口通信系统。

pea55的博客 747

(14-3)值分布式算法:QR-DQN (Quantile Regression DQN)算法

QR-DQN(Quantile Regression DQN)是一种强化学习算法,它是深度 Q-网络(Deep Q-Network,DQN)的一个变种,旨在更好地处理值函数的不确定性。QR-DQN的实现步骤与传统的DQN类似,但在目标分布计算和损失函数方面有一些不同之处,这使得它能够更好地处理值函数的不确定性。QR-DQN(Quantile Regression DQN)算法的核心思想是将值函数表示为一个分布,而不是传统的单一值估计。在下面的内容中,将讲解一个使用QR-DQN算法的例子。

码农三叔 2052

UC故事 2011/11/24

1. Chat Module接收信息,并演示到UI上面的全过程: STACK TRACE: CChatMainDlg::ReceiveMessage(unsigned long 19923456, WTL::CString & {...}, WTL::CString & {...}, int 1, _charformatw * 0x00119fa8) line 589 CChatMainDl

printf1998的专栏 998

gseapy python包GO、KEGG富集(注释)分析

文档案例参考:https://gseapy.readthedocs.io/en/latest/gseapy_example.html#Over-representation-analysis-by-Enrichr-web-services安装:建议安装最新版(这里安装的1.04):https://github.com/zqfang/GSEApy/releases。

weixin_42357472的博客 3610

UC故事2011/11/30

今日之事 * 文档完成 * Jiarong例子 * test的例子   1. CRtThreadManager * class definition class RT_API_EXPORT CRtThreadManager  {  ....  static CRtThreadManager* Instance();

printf1998的专栏 1014

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

UC故事 2011/11/15

1. WTL * STL, ATL, WTL STL系标准模板库,主要提供算法、容器(Vector, List)等基础类服务, HP支持,C++类库,已经标准化 ATL:Active Template Lib,微软支持,主要提供对COM对象的开发,但缺少UI方面的支持 WTL:Windows Template Lib,微软支持,基于ATL,提供UI(窗口)支持,并有类似于MFC一样的应用

printf1998的专栏 1623

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

UC故事2011/11/19

### 文档阅读 ### 1. ApplicationFrame.doc Q:一个Client上的每一个component都会发出一次enroll请求? Q:What is resource update exactly ? * 几个概念关系 ConferenceManage -> ComponentManage -> ComponentContainer -> Componen

printf1998的专栏 534

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

UC故事2011/11/22

1. Session模块研究 * CUpdateType typedef enum {  UPDATE_TYPE_ADD,  UPDATE_TYPE_REMOVE,  UPDATE_TYPE_MODIFY,  UPDATE_TYPE_SUB,  UPDATE_TYPE_UNSUB,  UPDATE_TYPE_UNKNOW = 100 }CUpdateType;   * CC

printf1998的专栏 479

UC故事2011/11/29

1. Reactor * CRtReactorBase::ScheduleTimer RtResult CRtReactorBase:: ScheduleTimer(IRtTimerHandler *aTh, LPVOID aArg,      const CRtTimeValue &aInterval, DWORD aCount) {  m_Est.EnsureSingleThre

printf1998的专栏 556

UC故事 2011/11/16

Build/run Box4.2.0.0.2 1. source code D:\study\uc-study-workspace\ER-InfoServer-box-4.2.0.2-110214-1459\ 2. workspace :: entry app client: ROOT/confapp/conf-client.dsw / confmain

printf1998的专栏 410

UC故事2011/11/17

### 搞定UCP4.5-0429开发环境(home) 1. info server * 直接F5 $20111117 18:57:53.828 2264/12320 ERROR: CRtAcceptorTcp::StartListen, bind() failed! addr=192.168.1.100 port=1224 err=10049:在其上下文中,该请求的地址无效。

printf1998的专栏 770

UC故事 2011/10/21

1. Session研究 * CInfoSid 结构有点复杂呢  //channel ID  //[0000 TTTT xxxx xxxx xxxx xxxx xxxx xxxx]  //NodeID  //[xxxx TTTT YYYY YYYY YYYY 0000 0000 0000]  //SessionID and user ID  //[xxxx TTTT YYYY Y

printf1998的专栏 796

UC故事2011/11/26

1. 开发环境恢复 * 处理Info/controller启动问题:Bind $20111126 17:24:29.062 16496/16684 ERROR: CRtAcceptorTcp::StartListen, bind() failed! addr=192.168.1.101 port=1224 err=10048:通常每个套接字地址(协议/网络地址/端口)只允许使用一次。

printf1998的专栏 877

UC故事 05/09/2011

Office   1. 修改IP后,启动Client/Server,均现“重新连接” 2. 重启动后,一个Client连接成功,另一个仍“重新连接”。 查看错误信息,有如下:   $20110509 14:39:09.296 2016/1616 info: CConfManage::OnJoinConferenceConfirm $20110509 14:39:09.296 201

printf1998的专栏 1091

UC故事2011/11/20 - 1

### 研究Chat实现 ### 1. 研究目标 *  Chat模块被load的全过程 * Chat消息发送过程 * Chat消息接收过程 2. WinMain() of ConfMain launch rtTracespy.exe(Q:Why not see 任务管理器?) load rtDiagnose.dll load rtConfClient.dll(主程序

printf1998的专栏 598

UC故事 05/08/2011 杂记

运行client/server,并使用wireshark观察之   1. client编译后运行出错:   Error: Unhanelded Exception in ConfMain.exe(KERNEL32.DLL), 0X000005, Access Violation.   Debug Window:   $20110508 14:22:06.953 4596/6032

printf1998的专栏 651

UC故事 2011/10/18

1. 杂问 Q:如何改变ActiveX下载时遇到的用户体验?如何直接下载exe文件但让用户能很容易加入会议? Q:支持RTP/RTCP本质上意味着什么?   2. Session文档阅读 Q: where is the repository ? * MessageBlock 参考ACE_Message_Block:http://www.cnblogs.com/TianFang/ar

printf1998的专栏 292
上一篇: UC故事2011/11/27 - 1
下一篇: UC故事2011/11/28
printf1998
博客等级 码龄16年 14粉丝 196原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值