- 博客(58)
- 资源 (8)
- 收藏
- 关注
原创 棋盘格角点检测顺序问题
棋盘格角点检测在相机拼接、机械臂手眼标定中等应用很广泛,通常也要求尽量各种角度摆放从而保证标定精度。然后就自然想到了这个问题:如果棋盘格任意角度摆放怎么能对应上角点的顺序?做实验确认opencv棋盘格检测对于7x6这种一奇一偶的棋盘格检测出的角点顺序不会发生变化,8x6这种不行。根据棋盘格起始格子颜色为libcbdetect打补丁,使其也能够固定角点检测顺序。
2025-04-24 14:32:27
416
原创 关于RK3588cpu多线程速度慢的问题
接到项目需求,需要将一个目标检测模型部署到RK3588上面执行,最对同时要跑4张图像,简单了解了下RK3588的CPU是有A76大核的,速度应该也挺快,于是尝试了CPU和NPU两种部署方式并进行耗时对比,然后问题就来了。
2025-04-18 16:10:10
296
原创 实现一个超轻量级实例分割网络的思路
在某些工业领域,由于成本问题算力有限,只能实时跑一些超轻量级网络,拿目标检测来说,例如yolo-fast,pp-picodet这些。如果要跑实例分割,目前好像没有什么超轻量级的网络。所以就有想法如何实现一个超轻量级实例分割网络。思考了一个超轻量级实例分割网络思路,将picodet与yolact结合。
2024-09-25 18:53:15
775
原创 Bottleneck、CSP、DP结构详细介绍
本篇文章详细介绍了三种神经网络中常见的结构,bottleneck、CSP、DP,并附上了代码加深理解。
2024-09-25 16:40:53
2467
原创 基于boost的共享内存通信demo
在一个系统比较复杂的时候,将模块独立成单独的进程有助于错误定位以及异常重启恢复,不至于某个模块发生崩溃导致整个系统崩溃。当通信数据量比较大时,例如图像数据,可以使用共享内存在进程间交互,比socket快很多。下面介绍一个利用Boost.interprocess和Boost.process模块进行进程间图像数据交互,以及子进程调用、卡死、崩溃检测的demo。
2024-09-10 14:52:12
1393
原创 一种license文件生成方案
有时,我们为了保护自己写的程序不被滥用(搞点钱),会想绑定硬件,还要设置使用期限。本文就实践了一种license方案,当然没有考虑逆向,这个方面也不在讨论的范畴,所以大家要保护自己的代码时请充分调研!!!首先我们要知道RSA加密是一种非对称加密,它的公钥和私钥是分开的。我们了解一下就可以知道,RSA的公钥是两个素数的乘积,它的私钥约等于需要知道这两个素数才可以得到,通过因数分解基本不可能得到私钥。所以RSA的安全性比较高。
2024-02-05 09:27:43
2330
1
原创 详解ATSS、SimOTA、taskAligned、o2f标签分配
标签分配也是影响目标检测AP的一个重要因素,仅是训练技巧,不会增加推理耗时。例如ATSS就采用自适应正负样本分配的方式带来2%的无痛涨点。最近也是好奇这些标签分配具体是怎么做的,故记录目前学习到的4种算法。
2023-08-16 17:15:06
3118
3
原创 cmake添加pcl库后导致程序变慢之编译参数-ffloat-store
gcc -ffloat-store参数影响浮点运算性能,cmake导入某些库时可能引入该编译参数引发整体性能下降
2022-12-14 15:41:27
734
原创 单例模式之模板与跨库(DLL、SO)
单例模式用模板实现的话比较优雅方便,基本不需要写额外的代码。但也有个问题,就是封装成库之后,比如windows下是封装成DLL,那么DLL内的单例和外部单例将会是2个不同的实例对象,可以做实验发现2个指针是不一样的地址。这篇文章就是总结一下用模板实现单例,并且可以跨库是怎么做到的。这个宏的作用是禁止外部使用构造函数声明对象,并且添加instance()接口。大家可能会觉得有点像脱裤子放屁,但这都是为了跨库使用,并且尽可能的优美,看到最后就明白了。如果不考虑跨库使用,上面的单例模板已经做到了,\ }(
2022-12-12 09:27:35
1848
原创 CMake库依赖关系传递
记录一次linux下调用openvino+opencv库的问题。主要是忽略了CMake的库依赖关系传递,即target_link_libraries时 PUBLIC、PRIVATE、INTERFACE这些字段没有使用,默认使用PUBLIC。如果你发现你编译的时候,报了一堆未引用错误,而且你还没调用这个库,那没跑了,就是依赖设置的问题。主要就是记录一下CMake中target_link_libraries更完整的用法,踩了个坑。
2022-11-05 14:37:46
2617
转载 OCR基于图像数据的信息抽取任务
关键信息抽取 (Key Information Extraction, KIE)指的是是从文本或者图像中,抽取出关键的信息。针对文档图像的关键信息抽取任务作为OCR的下游任务,存在非常多的实际应用场景,如表单识别、车票信息抽取、身份证信息抽取等。然而,使用人力从这些文档图像中提取或者收集关键信息耗时费力,怎样自动化融合图像中的视觉、布局、文字等特征并完成关键信息抽取是一个价值与挑战并存的问题。
2022-09-28 09:37:35
5452
6
原创 jetson-nano编译qt5.15.2带opengl,xcb
文章目录前言一、下载qt源码二、安装xcb依赖环境三、configuremake && install编译好的qt-5.15.2安装qt-creatorqt-creator 添加kit总结前言项目需求原因,需要编译高版本qt到jetson-nano板子,历经10天来回折腾,终于是成功了。期间历经交叉编译失败,然后转直接编译,然后尝试各种版本的坑,最后整理的方法异常简单,只需6小时左右即可流畅在板子上编译成功。文章最后有我编译好的qt-5.15.2版本链接。友情提醒:编译前,先保证你的
2022-05-09 13:31:07
2364
10
原创 gcc中文乱码解决——批量gbk转utf8
前言最近跨平台移植发现一个问题,就是windows下写的代码有中文的都是gbk编码,然后没中文的又是utf-8,还有一些抄来的代码是utf-8-BOM。然后网上说的加编译符号,让gcc帮你转换编码,我发现不行,因为不是gbk的文件会报错。然后还找了个脚本用iconv批量转。。。还好我是有备份的,非gbk的文件会丢失。算了,还是自己撸一个python脚本批量转码吧,不折腾了。python转换脚本非常简单,就是获取所有待转换文件,然后判断是不是GBK,是的话就转。建议你备份一下使用,这个脚本是原地覆盖的。
2022-04-25 15:48:00
1115
原创 EISeg标注多文件夹合并
提供一个脚本,专门合并百度的语义分割标注工具EISeg生成的文件夹。EISeg默认标注完之后会在你的文件夹下面生成一个label文件夹,里面会存放png格式的标注图像和一个annotations.json文件。该脚本的作用就是将dirpath路径下所有的标注图像的文件夹合并成一个,文件会被从重命名为序号为1开始的数字名字。import osimport codecsimport threadpoolimport jsonimport shutildirpath = r'xxx'dst_p
2022-03-29 19:26:27
3289
原创 OpenCV图像旋转、缩放、翻转、仿射变换的坐标变换计算
文章目录前言一、旋转+缩放+翻转二、仿射变换前言在工业领域进行目标检测的时候,可能会需要先对图像进行旋转校正、多幅图像拼接等操作。这就需要我们将检测到的目标坐标映射到处理后的图像上。下面说几种OpenCV下常用的坐标变换计算,旋转、缩放、翻转和仿射变换,完全同步对应OpenCV的图像处理操作。一、旋转+缩放+翻转代码展示的是主要逻辑,稍微改一改就可以用到项目里去。m_img是原图,m_src_corners是你需要转换的原图中的坐标集合。 Mat image = m_img; cv::Poi
2022-03-29 09:56:51
4703
转载 git设置代理
文章目录socks代理:http/https代理如果要取消代理:查看配置信息:socks代理:git config --global http.proxy ‘socks5://127.0.0.1:1080’git config --global https.proxy ‘socks5://127.0.0.1:1080’如果有问题,可以把单引号去掉试一下,并且将http和https代理都设置上试一下也可以直接修改~/.gitconfig文件。vi ~/.gitconfig新建或修改这两项配置[
2022-01-15 16:15:14
589
原创 cmake总结(边学边更新)
文章目录0.前言1. 常规设置设置版本号设置工程名称设置可执行文件输出目录、库输出目录设置工程包含当前目录设置子目录2.设置生成目标(编译可执行文件或库文件)添加源文件添加要生成的目标增加依赖项3.添加依赖项(库文件)当库提供了cmake引导文件,以opencv为例当没有cmake引导文件时,以添加Matlab库为例4.生成的库的一些设置去除循环依赖设置库文件名5.添加宏全局添加,所有目标都会加上局部添加,只给指定目标加(墙裂建议)6.添加Option选项7.if控制8.windows下 MD/MT报错
2021-12-12 14:08:33
3091
原创 用模板实现对任意函数计时功能
文章目录前言一、万能函数模板二、void返回值问题三、利用局部变量计时,解决void返回值接收问题完全版代码前言前面一篇文章利用了可变参宏去实现任意函数计时功能,总觉得有点挫,而且无法带返回值。突然想到可以用模板实现这个功能。下面讲一下实现思路和中间碰到的问题。一、万能函数模板先介绍一下万能函数模板,用下面两个函数模板,无论是全局函数,还是类成员函数,统统可以执行。原理就是万能函数指针加上可变参。省略号的位置自己体会一下。template<typename R, typenam.
2021-11-04 19:59:53
201
原创 在宏定义中使用可变参数实现任意函数计时打印
想实现的效果我想对任意一个函数可以实现计时打印,打印出:[函数名]:[耗时]。比如:void function(int a,int b,int c);void function2(float d);check_perf(function,a,b,c);check_perf(function2,d);有点像切片编程的意思,但是C++实现OOP还是蛮烦的,我暂时只想记个时,不想用牛刀。所以就使用了可变参的宏。主要就是涉及#、##、__VA_ARGS__三个东西。代码#include<ch
2021-11-04 11:14:28
751
原创 可变参函数使用方法
简单的函数定义可变参函数可以使用如下形式定义,就是多三个点void test_printf(char* format, ...);认识可变参指针首先,我们以调用vsprintf()为例来熟悉一下可变参指针:#include<stdarg.h>void test_printf(char* format,...){ va_list args; //可变参指针 va_start(args,format);//用最后一个参数告诉可变参指针的位置 vsprintf(format,ar
2021-11-04 09:44:28
247
原创 Cmake在VS下设置MT
问题项目里面用了静态链接库,一直报错,然后百度方法需要设置成MT而非MD模式。但是百度的那些在CMAKE里面替换MD成MT的方法都没用。然后找到了以下解决方案:解决方案TARGET_COMPILE_OPTIONS(${library_name} PRIVATE "/MT$<$<CONFIG:Release>:>")...
2021-11-03 17:21:10
811
转载 cmake设置target的宏
转自: https://zhuanlan.zhihu.com/p/299607413在编译工程时,常常有许多宏需要添加到VS中,如果采用adddefinitions的方式进行添加,会使得不同项目的宏混淆,因此,可以采用settarget_properties的方式,根据项目制定对应的宏set(BUILD_FLAGS "-DHZ_PLATFORM_WINDOWS -DWINDOWS -DHZ_BUILD_DLL" )set_target_properties(Hazel PROPERTIES COMPI
2021-11-03 00:05:17
922
原创 U版YOLOV3用NCNN部署时的问题记录
项目场景:现在将模型部署到嵌入式端,选择的是YOLOV3模型。训练代码使用的是U版的YOLOV3,由于各种原因,我选择直接由pytorch->onnx->ncnn进行部署。而不是直接darknet->ncnn。问题描述:onnx转ncnn时,先是报错,什么Unsqueerze不支持之类的。模型执行时,我惊讶的发现输出节点的维度不对。原因分析:对于问题1,很快就得到了答案,使用onnx-simplifer工具就可以搞定。原因是ncnn不支持一些冗余操作。对于问题2,我
2021-11-02 19:11:19
522
原创 C++可变参模板优雅的表示函数指针
目的我们的是将函数指针R(T::ptr*)(Args...)这种形式变成 Functor<Args...>(ptr) 这种形式在一个同名函数有多个重载方法的时候,这样的方式会比较优雅。Functor是一个结构体或者类RT,这里是从Qt的源码中学到的,防走丢,上代码代码template <typename... Args>struct QNonConstOverload{ template <typename R, typename T>
2021-06-23 15:29:37
1521
1
原创 C++前置声明之模板类
突然想起来前置声明的一个小知识点,防走丢。使用场景是要在类B里面套用模板使用类A,A是前置声明,比如下面这样//假如这个文件叫B.hclass A;class B{public: std::vector<A> vec_A;}直接这样是编译通过不了的,解决办法就是在CPP文件中实例化模板类//假如这个在A.cpp中template class std::vector<A>;...
2021-03-30 19:48:29
2928
原创 汇编实现std::bind类似功能
引言今天群友的一发提问让我想起了很久之前自己碰到的类似的问题。大概可以这么提问来描述这个问题的本质:怎么把类成员函数变成普通的函指调用?问题点类成员函数怎么变成普通的函数指针?隐藏的this指针怎么传递?C++标准库的解决方案自从C++11之后,这都不是事。使用std::function、std::bind即可解决,大概是这样的:#include <functional>#include <iostream>using namespace std;class
2021-03-29 19:28:36
218
原创 简易C++配置文件读取
今天分享一个简易的C++配置文件读取器。大概能读取的格式如下:[group1]arg1=1arg2=2.0arg3=D:/123#我是一行注释[group2]arg1=woshiniyeye大概说下几个点,不懂的自行百度(大佬当我放屁,没啥高级货):完全使用标准库实现(说的屁话)单例模式call once初始化参数可以给默认值,防止没读取到值中间不能有空格组名不能重复,每个组当中的节点名不能重复值不支持中文直接上代码,先来头文件#pragma once#inclu
2021-03-19 20:19:47
1002
原创 labelme转YOLO格式脚本
啥都不多说,直接上代码,多线程操作,转换很快。我的labelme是自己改过的,如果报 label_file.imageWidth错误,请自己读一下图片的宽高。用法:直接改一下dirpath,dstpath路径即可,dirpath里面可以有子文件夹,最后dstpath里面的标定内容是从0开始顺序编号的文件。import osimport iofrom io import BytesIOimport uuidimport PIL.Imageimport codecsimport threadpoo
2021-03-12 18:23:55
2953
11
原创 winograd卷积的实现——ncnn的x86版本的一点心得
winograd卷积?论文题目:Fast Algorithms for Convolutional Neural Networks链接传送:https://arxiv.org/abs/1509.09308v2 请读者看过论文再往下看,这论文真的不难懂。下面的内容假设读者已经阅读过论文。核心公式Y=AT[U⊙V]AY=A^T[U\odot V]AY=AT[U⊙V]A其中,U=GgGTU=...
2019-08-21 21:42:52
2467
2
原创 C++ shared_ptr与weak_ptr结合使用的例子
shared_ptr描述shared_ptr采用引用计数,指针之间共享内存,传递一次引用就加1,引用数为0时自动销毁内存weak_ptr描述weak_ptr为弱引用指针,主要用来辅助shared_ptr的使用,给它赋值不会增加引用计数,有时候不得不两者一起用,看下面一个例子。example假如我们有这样一个需求:用户需要几个API算法接口一起工作(比如处理多个视频,每个视频的...
2018-12-07 12:57:10
2261
原创 opencv选框操作
引言在实验阶段,有时我们需要简单的GUI交互,比如拉一个框。下面就奉上选框的Demo代码,原理很简单,就是获取鼠标事件然后进行一些简单的操作。如果你不熟悉GUI操作,不妨看看吧。代码#include <opencv2/highgui.hpp>#include <opencv2/core.hpp>#include <opencv2/videoio...
2018-05-10 11:08:32
1961
原创 OpenCV FileStorage读写操作
引言有时我们需要保存一些训练数据,或是相机标定结果,亦或是临时存储一些图片等等。这时,我们可以使用FileStorage加上FileNode来完成这些操作。FileStorage 和 FileNodeFileStorage这个类可以看成是纸+笔的功能,负责保存内容和写入内容;而FileNode可以看成是眼睛,读取纸上的内容。FileStorage拥有真正的内容,而FileNode仅拥有...
2018-05-09 21:08:54
16083
5
原创 C++逗号和移位运算符简化写入操作
常见的移位运算符写入操作我们应该对这种操作很熟悉:cout<<1<<2<<3<<endl;没错,这会输出1,2,3。 实际上这种效果得益于重载了移位运算符,函数原型应该类似于:ostream& operator << (ostream& out,int data);能简化一下吗?现在我...
2018-05-09 14:27:02
608
原创 Qt多线程编程示例--代码基于python
前言 本教程适合像我一样接触多线程不深的新手,也适合pyQt或qt新手,大神勿喷,主要用于自己学习总结。由于今天需要处理1000多个视频的相关工作,以往那种直接new很多个QThread的操作会直接卡死,所以模拟了一个线程池,同时只并行几个任务,余下的任务在队列等候,很像我们平时下载东西时那样子。下面这个示例是我编程的一个结构和思路,比较简单,大家不妨看看。当然,Qt也自带了线程池QThread...
2018-04-01 01:48:57
2016
原创 python-np.hstack()避坑
import timeimport numpy as npfeat1 = np.zeros([10000])time1 = time.time()feat = np.hstack((feat1,feat1))time2 = time.time()print(round(time2-time1,10))time1 = time.time()feat2 = np.hstack(feat1
2017-12-12 22:31:35
4840
原创 Qt for android手机屏幕当鼠标用
由于无线鼠标忘记带回家了,想躺在床上看电视(电视机屏幕当显示器)怎么办呢?HOHO,我们的手机屏幕本来就是个触摸板,嘿嘿,那就用手机屏幕当鼠标好了。
2017-02-09 14:42:27
1662
qt-5.15.2-jetson-nano
2022-05-09
opencv4.0+contrib_cuda9.1_cudnn7.1_vs2015带属性表配置
2019-01-22
Qt5.8 Opencv3.3 mingw编译版
2017-10-16
effectiveC++第三版中文版
2017-10-16
深度探索C++对象模型
2017-10-16
21天实战caffe带书签清晰度一般PDF
2017-10-16
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人