背景:
halcon,机器视觉领域神一样得存在,在windows上,应用得特别多, 但是arm环境下使用得很少。那如何在arm下使用halcon呢。按照官方说明,arm下只提供了运行时环境,并且需要使用价值一万多人民币的硬件加密狗才可以运行,但众所周知,我朝盗版软件横行,因此写下了这篇不道德但是实用的文章。
步骤:
1,
halcon的运行时环境,包括了所有的so库,但缺少头文件。要想在arm 下编译,头文件,库文件缺一不可,因此需要将 开发环境的头文件拷贝到运行时环境下。这里以版本 20.11.1.2 为例。
具备了头文件和so文件后,再将破解文件进行替换,就可以在arm 下使用halcon算法了。
2,
写了一个读二维码和条码的 demo ,cmake 配置如下
cmake_minimum_required(VERSION 3.0.0)
project(HalconDemo VERSION 0.1.0)
set(TARGET_NAME HalconDemo)
set(CMAKE_CXX_STANDARD 11)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CMAKE_CXX_EXTENSIONS OFF)
include_directories(${CMAKE_CURRENT_SOURCE_DIR}/../include)
link_directories(${CMAKE_CURRENT_SOURCE_DIR}/../lib/aarch64-linux)
aux_source_directory(. SRCS )
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -static-libstdc++ -fPIC -Wl,--copy-dt-needed-entries -Wno-error=deprecated-declarations -Wno-deprecated-declarations ")
add_executable(${TARGET_NAME} ${SRCS})
#include <iostream>
#include <halconcpp/HalconCpp.h>
using namespace HalconCpp;
using namespace std;
int main(int argc, char **argv)
{
// Local iconic variables
HObject ho_barImage, ho_SymbolRegions, ho_codeImage;
HObject ho_SymbolXLDs;
// Local control variables
HTuple hv_WindowHandle, hv_BarCodeHandle;
HTuple hv_DecodedDataStrings, hv_DataCodeHandle, hv_ResultHandles;
std::cout << "进入算法" << endl;
ReadImage(&ho_barImage, "./image/barCode.jpg");
std::cout << "完成读图1" << endl;
CreateBarCodeModel(HTuple(), HTuple(), &hv_BarCodeHandle);
SetBarCodeParam(hv_BarCodeHandle, "element_size_min", 1);
SetBarCodeParam(hv_BarCodeHandle, "meas_param_estimation", "true");
FindBarCode(ho_barImage, &ho_SymbolRegions, hv_BarCodeHandle, "auto", &hv_DecodedDataStrings);
ClearBarCodeModel(hv_BarCodeHandle);
for (int i = 0; i < hv_DecodedDataStrings.Length(); i++)
{
std::cout << "barcode" << i << ":" << hv_DecodedDataStrings[i].S() << endl;
}
ReadImage(&ho_codeImage, "./image/2DCode.bmp");
std::cout << "完成读图2" << endl;
CreateDataCode2dModel("QR Code", HTuple(), HTuple(), &hv_DataCodeHandle);
SetDataCode2dParam(hv_DataCodeHandle, "string_encoding", "utf8");
FindDataCode2d(ho_codeImage, &ho_SymbolXLDs, hv_DataCodeHandle, HTuple(), HTuple(),
&hv_ResultHandles, &hv_DecodedDataStrings);
ClearDataCode2dModel(hv_DataCodeHandle);
for (int i = 0; i < hv_DecodedDataStrings.Length(); i++)
{
std::cout << "2dcode" << i << ":" << hv_DecodedDataStrings[i].S() << endl;
}
return 0;
}
3.
执行的时候 只需要将 libhalcon.so.20.11.1 这个文件 拷贝到可执行目录下即可。