使用MatConvNet生成一个字符识别的动态链接库(下)

用MCC生成动态链接库

虽然标题是说用mcc,但是因为有三个文件,懒得打那么多命令,在matlab命令行下使用deploytool调出工具包,选择编译共享库

添加之前写的三个函数DUCO_LoadNet、DUCO_LoadImgAve、DUCO_OCRNum
点击package开始编译
这里写图片描述

在一段时间的等待后(编译的真慢),会在当前目录下生成一个新的文件夹,在里面找到生成的DLL、LIB和h文件
这里写图片描述

再次封装

再封装是为了方便别人,如果直接使用上面生成的DLL的话,需要调用者也要会使用c++matlab混编用的一些类型还有项目配置,所以我们再打包一次。
参照这个链接http://www.ithao123.cn/content-10197080.html配置一个VS项目(网上资料太多不重复写了)。

新的封装接口

//DUCO_OCR.h
#pragma once 

#include <windows.h>

//初始化库
extern "C" __declspec(dllexport) bool Init(void);
//加载CNN参数
extern "C" __declspec(dllexport) void LoadNet(const char* netPath,const char* imgavePath); 
//识别数字
extern "C" __declspec(dllexport) int GetNum(BYTE *img,int width,int height); 
//结束调用库
extern "C" __declspec(dllexport) void Release(void);

接口实现

//DUCO_OCR.cpp
#include "mclmcrrt.h"
#include "DUCO_OCRNum.h" //用MCC生成的头文件
#include "DUCO_OCR.h"

#pragma comment(lib, "mclmcrrt")
#pragma comment(lib, "mclmcr")
#pragma comment(lib, "DUCO_OCRNum")



//初始化库
bool Init(void){
    return DUCO_OCRNumInitialize();
}

//加载神经网络数据
void LoadNet(const char* netPath,const char* imgavePath){
    mwArray mxNetPath(netPath);
    mwArray mxImgPath(imgavePath);
    DUCO_LoadNet(mxNetPath);
    DUCO_LoadImgAve(mxImgPath);
}

//识别数字
int GetNum(BYTE *img,int width,int height){
    mwArray mxRes(1,1,mxINT32_CLASS);
    mxRes=-1;
    mwArray mxImg(width, height, mxUINT8_CLASS);//跟原始图像长宽颠倒
    int capcity = height * width;
    mxImg.SetData(img, capcity);
    DUCO_OCRNum(1,mxRes,mxImg);
    return (int)mxRes;
}

//释放库
void Release(void){
    DUCO_OCRNumTerminate();
    return ;
}

然后就可以直接调用使用了,使用时有几个注意的地方。
Init函数不要频繁调用,其会加载MCR,是个非常耗时间的操作(十几秒)。另外第一次调用函数时也很慢,之后恢复正常速度。基本和matlab下识别一张图片的时间等价(不到20ms)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值