YOLO模型实现了快速目标识别的功能。 本文将介绍一下OpencvSharp 调用YOLO V5 模型的方法。
一.训练模型
模型训练使用github上的方法 https://github.com/ultralytics/yolov5 。相关项目里有着详细的介绍和使用方法说明
YOLO模型实现了快速目标识别的功能。 本文将介绍一下OpencvSharp 调用YOLO V5 模型的方法。
一.训练模型
模型训练使用github上的方法 https://github.com/ultralytics/yolov5 。相关项目里有着详细的介绍和使用方法说明
TorchSharp 是对 Torch c++的封装,基本继承了c++的全部接口。但使用中会有一些小问题,需要特别注意一些。
训练的代码可以参考github里的官方代码 https://github.com/pytorch/vision/tree/main/references/segmentation
2.模型输出
官方代码的模型 默认输出是list 虽然可以强制输出script文件,但TorchSharp 调用后会报错”Expected Tensor but got GenericDict”.因此需要修改网络
子像素的边缘检测算法很多,但使用CUDA进行的不是很多。github上可以找到一个带CUDA的子像素边缘检测算法,但经过运行发现有些小bug,其cpu版本正常,但gpu版本找轮廓时会偶发轮廓被切断的问题。一下就对其进行一些修正。当然也许还有其他bug~~
一.源项目位置
源项目位置https://github.com/CsCsongor/subPixelEdgeDetect 。算法基于论文https://www.ipol.im/pub/art/2017/216/
二.代码分析
解方程是一个比较常见的功能,matlab,python都有简单方法实现。C++也有不少实现方法,下面就介绍一下GSL解方程的方法,代码参考了GSL源码中的demo。
GSL解方程的功能相对matlab要简单一些,目前看只支持实数解,并且只有一个解。当然对于大部分实际应用 已经足够了
假设需要解的方程组是如下2元非线性方程(方程右边不为0,移项一下就好了)
opencv只有cpu接口的Inpaint函数,对于需要使用CUDA进行图片处理时,反复内存显存迁移数据会影响计算速度。在不考虑填充效果十分好的情况下,可以使用如下CUDA算法,简单的进行填充。
算法来源
算法主要参考了https://github.com/Po-Ting-lin/HairRemoval.git 中的填充代码。该项目主要是去除皮肤上的毛发。对于其如何寻找需要填充的区域就不讨论了,直接使用其分析出的mask图进行填充。
c# 编译生成的exe 与 dll 如果不进行混淆,可以方便的反编译出源代码。虽然软件开源是趋势,但这种非自愿,非正式的公开还是给人不爽的感觉。c#混淆工具很多,收费的也很多,下面介绍一个开源混淆工具obfuscar,简单混淆一下的使用场景足够了。使用方法参考了https://www.qiufengblog.com/articles/csharp-code-encryption.html.obfuscar源码放在github上https://github.com/obfuscar/obfuscar
一. 安装obfuscar
obfuscar可以通过Nuget工具方便的安装。在Nuget安装界面搜索obfuscar后点击安装即可
opencv中有cpu 和 gpu版本的DFT函数,及傅里叶变换的函数,可以实现dft滤波。但opencv中没有DWT,及小波变换。下面将介绍一下实现的方法。
傅里叶变换与小波变换都能实现滤波,不好说那个更好。但傅里叶变换有个缺点,对于图像处理来说,其在处理图像锐利边缘时,很容易出现边缘抖动的情况。原因如下图:
树莓派可以通过加入 参数 “bayer=True” ,来获取CSI相机的raw图片,raw数据会紧跟在jpg图片的末尾,具体提取的方法不在累述,可以方便的google到。而Nvidia的 Jetson nano要获取raw图片的方法网上比较零散,故整理了一下。
最新的树莓派4B最大支持8G内存,相对于树莓派派3的2G内存,已经足够gitlab的运行。安装搭建gitlab的环境可以使用源码编译,或参考官网上的安装步骤。但最方便的还是使用docker进行安装。官方的docker镜像没有ARM64的镜像,但提供了一个非官方的链接,使用其提供的镜像可以方便的安装gitlab。
安装方法
gRPC是google开发的RPC框架。使用gRPC可以方便的在程序间传递protobuf序列化后的数据,而不必考虑数据量大小,断开重连等比较难处理的问题。C++下的使用方法可以参考https://grpc.io/docs/languages/cpp/。下面记录下一些gRPC设置的小技巧
gRPC默认传输的大小限制为4M,如果要传输更大的,需要进行设置。