首页 > 其他分享 >Lazarus使用YoloV4

Lazarus使用YoloV4

时间:2024-03-15 22:44:49浏览次数:21  
标签:Canvas YoloV4 Get dll Lazarus jsonpost Pjson 使用 Image1

YoloV4可以用opencv4.0以上加载和使用。但是Lazarus只能支持到opencv2.4.13。所以不能直接使用yolov4,后来只好用VC写了一个dll,调用Opencv4.81再调用YoloV4。

在Lazarus下调用这个dll就可以用yolov4了,方法如下

一、声明dll库

//初始化Yolo库
function YoloInit(cfgfile:pchar;wfile:pchar):Integer; stdcall; external 'LazarusYoloV4dll.dll';

//识别数据 imageFile:要识别的文件名;Yolosize:识别大小320 416 512 608等;FZ:阀值(0-1的小数);JsonStr:输出的字符串
function YoloImageFile(imageFile:PChar;Yolosize:Integer;FZ:Double;JsonStr:PChar):Integer; stdcall; external 'LazarusYoloV4dll.dll';

 

二、初始化

if YoloInit('E:/VC/opencv4.81/ConsoleApplication1/x64/Debug/yolov4-tiny.cfg','E:/VC/opencv4.81/ConsoleApplication1/x64/Debug/yolov4-tiny.weights')<0 then
begin
ShowMessage('初始化出错');
end;

三、定义类型

classIDName:array[0..79] of String=('人','自行车','车','摩托车','飞机','公共汽车','火车','车','船',
'红绿灯','消防栓','停车标志','停车计时器','长凳','鸟','猫','狗','马','羊',
'牛','大象','熊','斑马','长颈鹿','背包','雨伞','手提包','领带','手提箱','飞盘',
'滑雪板','滑雪板','运动球','风筝','棒球棒','棒球手套','滑板','冲浪板',
'网球拍','瓶子','酒杯','杯子','叉子','刀','勺子','碗','香蕉','苹果','三明治',
'橙子','西兰花','胡萝卜','热狗','披萨','甜甜圈','蛋糕','椅子','沙发','盆栽','床','餐桌',
'马桶','电视','笔记本电脑','鼠标','遥控器','键盘','手机','微波炉','烤箱','烤面包机','水槽','冰箱',
'书','钟','花瓶','剪刀','泰迪熊','吹风机','牙刷');

四、识别

procedure TForm1.Button3Click(Sender: TObject);
var
Pjson:PChar;
rs,i,top1,left1,height1,width1:Integer;
ObjSt:String;
jsonst,jsonpost:TJSONObject;
jsonposts:TJSONArray;
begin
Pjson:=StrAlloc(1024*1024);
rs:=YoloImageFile('./test2.jpg' ,320,0.6,Pjson); 
if rs=0 then
begin
Memo1.Text:=Pjson;
jsonst:=TJSONObject(GetJSON(pjson));
rs:=jsonst.Get('DataSize',0);
jsonposts:=jsonst.Arrays['data'];

Image1.Canvas.Brush.Style := bsClear;
Image1.Canvas.Pen.Color:=clBlue;
Image1.Canvas.Pen.Width:=1;
Image1.Canvas.Font.Size:=16;
Image1.Canvas.Font.Color:=clRed;

for i:=0 to rs-1 do
begin
jsonpost:=TJSONObject(jsonposts[i]);
top1:=jsonpost.Get('top',0) ;
left1:=jsonpost.Get('left',0);
width1:=jsonpost.Get('width',0);
height1:=jsonpost.Get('height',0);
Image1.Canvas.Frame(left1,top1,left1+width1,top1+height1); //画框
ObjSt:=Format('%s:%.2f',[ classIDname[jsonpost.Get('classId')],jsonpost.Get('confidence',0.0)]);
Image1.Canvas.TextOut(left1,top1-18,ObjSt);
end;

jsonst.Free;
end;

StrDispose(Pjson

 

);
end;

ok完成

当前DLL是64位的,还要下载opencv_world481.dll才能使用。DLL文件不知道怎么上传。有需要的可以发给你们。

 

标签:Canvas,YoloV4,Get,dll,Lazarus,jsonpost,Pjson,使用,Image1
From: https://www.cnblogs.com/jwjss/p/18076417

相关文章

  • 使用定时器中断进行延时,可能会遇到的一个小bug
    之前分享过一篇“使用定时器中断进行延时,取代delay”的文章:(https://blog.csdn.net/qq_44139306/article/details/136481381?spm=1001.2014.3001.5501)在后续的使用过程中,发现了一个bug:即:定时器标志不要在刚使用完一次时就清零,可以在下一次赋值计数值前把它清零。特别是......
  • 在YAPI中使用mock.js语法编写接口
    1.问题编写完json数据后,尝试过导入json和json-schema,YAPI总是无法将mock语法转化相应数据1.1导入json的方式不支持mock语法1.2导入json-schema的方式识别不了我写的mock语法json2.解决先在设置中开启json5,再关闭如图所示的按钮显示如下图所示即成功......
  • 【备忘录】启用电脑的串口,使用串口连接linux系统
    前言串口:rs232-DB9;串口介绍:一、市场标准的rs232DB9串口插头,针脚介绍。 二、市面常见全交叉线缆接线图,至于两头是公头还是母头不重要,只要知道是DB9全交叉串口线缆即可,需要什么插头就搞什么插头。     正文(下述线缆、接口,全部依照上述的标准)第一种情况:本地计算机......
  • 非托管内存简单使用
    非托管内存将变量的值放到非托管内存通常用于优化性能和与外部非托管代码进行交互。非托管内存是直接由操作系统管理的内存,不受.NET运行时(CLR)的管理。性能优化:非托管内存访问速度更快,因为它不受.NET运行时的垃圾回收和类型检查等开销的影响。对于需要频繁访问大量数据的场景,......
  • spring boot使用MongoRepository简单的CRUD
    简单的CRUD首先,定义一个实体类,例如User:@DocumentpublicclassUser{@IdprivateStringid;privateStringname;privateintage;//构造函数、getter和setter省略...}接下来,定义一个继承自MongoRepository的接口,例如UserRepository:publicint......
  • spring boot使用MongoRepository更新单个字段
    在SpringDataMongoDB中,MongoRepository接口提供了基本的CRUD操作。如果你想要通过MongoRepository更新单个字段,你可以自定义一个更新方法或者使用内置的save()方法。这里是一个示例:假设你有一个名为User的实体类,并且有一个继承自MongoRepository的UserRepository接口://定义Us......
  • Profinet转CC-Link网关使用指南
    本文为您提供CCLINK转Profinet网关(XD-PNCR20)使用指南,教您如何快速配置和集成网关,实现CCLINK与Profinet的互联。CCLINK转Profinet网关(XD-PNCR20)是一个经过自主研发的先进设备,CCLINK转Profinet网关设备的研发旨在实现CCLINK总线和Profinet网络之间的完美连接,从而实现各种总线系统的......
  • pytorch使用pytorch_wavelets包错误:ValueError: step must be greater than zero 错误
    错误描述在使用pytorch_wavelets包的DWT1DInverse时,发现报错信息如下:Traceback(mostrecentcalllast):File"/work/GDN/test/test_DWT.py",line24,inx_=idwt((YL,YH))File"/opt/conda/lib/python3.6/site-packages/torch/nn/modules/module.py",line550......
  • 图片去水印软件 Inpaint使用教程
      Inpaint中文版是一款功能强大,实用方便的图片快速去水印软件,Inpaint中文版操作简单易上手,可以帮助你达到一键美化图片的效果。图片水印现在已经非常流行,能够借助一款不错的图片水印去除工具可以让图片处理工作简单便捷。本文讲介绍Inpaint特色,和软件如何使用,  请注意,......
  • 【Android】使用Android Studio打包APK文件
    文章目录1.新建项目2.打包生成APK3.安装APK 1.新建项目打包APK之前,首先需要新建项目,有基础的可以跳过。无基础的可以参考:使用AndroidStudio运行HelloWorld项目2.打包生成APK1.找到Build->GenerateSignedBundleorAPK->勾选APK  2.首次需要创建......