基本思想:项目需求,需要对条形码区域进行识别。
一、文件结构
ubuntu@ubuntu:~/find_barcode$ tree -L 2
.
├── best.mnn
├── cmake-build-debug
│ ├── CMakeCache.txt
│ ├── CMakeFiles
│ ├── cmake_install.cmake
│ ├── find_barcode
│ ├── find_barcode.cbp
│ └── Makefile
├── CMakeLists.txt
├── DBNet.onnx
├── include
│ └── MNN
├── lib
│ └── libMNN.so
├── main.cpp
└── testimgs
├── 0.jpg
├── 1.jpg
├── 2.jpg
├── 3.jpg
└── 4.jpg
6 directories, 15 files
二、代码
1.1 cmakelist.txt
cmake_minimum_required(VERSION 3.16)
project(find_barcode)
set(CMAKE_CXX_STANDARD 14)
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fopenmp")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fopenmp")
include_directories(${CMAKE_SOURCE_DIR})
include_directories(${CMAKE_SOURCE_DIR}/include)
include_directories(${CMAKE_SOURCE_DIR}/include/MNN)
find_package(OpenCV REQUIRED)
#message(STATUS ${OpenCV_INCLUDE_DIRS})
#添加头文件
include_directories(${OpenCV_INCLUDE_DIRS})
#链接Opencv库
add_library(libmnn SHARED IMPORTED)
set_target_properties(libmnn PROPERTIES IMPORTED_LOCATION ${CMAKE_SOURCE_DIR}/lib/libMNN.so)
add_executable(find_barcode main.cpp)
target_link_libraries(find_barcode ${OpenCV_LIBS} libmnn)
1.2 main.cpp
这里将DBNet类写到一起,后续可以拆分出来。
#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
#include <opencv2/imgproc.hpp>
#include <opencv2/highgui.hpp>
#include <MNN/Interpreter.hpp>
#include <MNN/ImageProcess.hpp>
using namespace cv;
using namespace std;
class DBNet {
public:
DBNet(const float binaryThreshold = 0.5, const float polygonThreshold = 0.7, const float unclipRatio = 1.5,
const int maxCandidates = 1000);
void detect(Mat &srcimg);
private:
float binaryThreshold;
float polygonThreshold;
float unclipRatio;
int maxCandidates;
const int inpWidth = 736;
const int inpHeight = 736;
const float meanValues[3] = {0.485, 0.456, 0.406};
const float normValues[3] = {0.229, 0.224, 0.225};
float contourScore(const Mat &binary, const vector<Point> &conto

文章介绍了如何在Ubuntu环境下,利用MNN深度学习模型和OpenCV库进行条形码区域识别,包括CMake配置、代码实现和主函数调用,展示了从文件结构到代码执行的全过程。
最低0.47元/天 解锁文章
607

被折叠的 条评论
为什么被折叠?



