背景:
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#include 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 这个文件 拷贝到可执行目录下即可。