zoukankan      html  css  js  c++  java
  • 人脸识别算法嵌入式移植的一点经验

    本文涉及的内容可能是大家在移植算法的时候会出现的错误,不涉及特定公司的内容,希望老板不要介意。如今临时遇到了这些问题。解决的方法也许不是最好的。

    能给他人起到一点作用就算不错。

    移植内容

    1 windows上面的路径能够用“”,也能够用“/”。

    可是linux上面的路径仅仅能够用“”。

    所以应该全部路径都用“”。

    2 windows下使用寄存器指令集应包括“intrin.h”。对应的linux下的头文件是“x86intrin.h”。

    对于实数的最大值和最小值,不能直接定应minmax。能够定义成bst_min。这样使用起来不会和linux底层函数冲突,在windows也能够任意使用。

    结构体定义对齐例如以下

    在LINUX平台上对齐方式是这种

    #ifdef LINUX

    typedef struct _SURFWeakClassifier SURFWeakClassifier

    struct _SURFWeakClassifier

    {   union

        {

            float Projection[32];

            __m128 Projection_m128[8];

    #ifndef VC_2005

            __m256 Projection_m256[4];

    #endif

        }__attribute__((aligned(32)));  

        SURFBoxFeature Feature;

        float Bias;

    }__attribute__((aligned(32)));

    在WINDOWS平台上是这种

    typedef struct _SURFWeakClassifier

    {   __declspec(align(32)) union

        {

            float Projection[32];

            __m128 Projection_m128[8];

    #ifndef VC_2005

            __m256 Projection_m256[4];

    #endif

        };

        SURFBoxFeature Feature;

        float Bias;

    } SURFWeakClassifier;

    对齐方式申请内存

    linux中 

    (SURFWeakClassifier*)_mm_malloc(sizeof(SURFWeakClassifier)*weakNum, 32);

    windows 

    stageClassifier->WeakClassifiers = (SURFWeakClassifier*)_aligned_malloc(sizeof(SURFWeakClassifier)*weakNum, 32);

    释放内存

    linux中 

    _mm_free(stageClassifier->WeakClassifiers);

    WINDOWS

    _aligned_free(stageClassifier->WeakClassifiers);

    7 __m128 取值

    WINDOWS

    res0.m128_f32[3];

    LINUX

    float *q = (float*)&res0;

    return q[3]; 

    linux中内联函数的參数必须是const的。

    9 linux 读取视频

    首先安装软件开发工作站版本号的linux

    然后再安装yasm

    然后安装方法ffmpeg.

    安装x264.

    10 实现windows宿主机与linux虚拟机的文件共享

    在百度经验上搜索win7与虚拟机种linux共享文件的方法。或者查看本文件夹下保存的网页图片。

    11 安装opencv 

    能够查看本文件夹保存的网页图片。

    遇到asm编译的问题能够把宏定义部分凝视掉。f.have里面sse4.2之前所有设置成1。其它设置成0

    12 当使用CV_CALL之后会产生一个问题,跳过CvSIze size的初始化这类问题.

        这类问题产生的原因是CV_CALL出发的go exit跳过了变量的定义.这在嵌入式平台上是非法的.一个比較方便的解决的方法是使用{},将变量到_END_之前括住,使变量成为局部变量.

  • 相关阅读:
    selenium开发-C#/java/Python
    Web循环监控Java调用 / Java调用.net wcf接口
    网站循环加载监控-C#
    串口通信分析
    windows环境jar包部署到linux服务器,一键操作
    windows环境jar包部署到linux服务器,一键操作(帮助说明)
    Git+TortoiseGit使用帮助
    安装Docker
    MySQL报错信息:Warning: (1366, "Incorrect string value: '\xD6\xD0\xB9\xFA\xB1\xEA...' for column 'VARIABLE_VALUE' at row 489")
    txt文档中文乱码
  • 原文地址:https://www.cnblogs.com/clnchanpin/p/6764135.html
Copyright © 2011-2022 走看看