人脸识别算法嵌入式移植的一点经验

2019-07-12 23:46发布

本文涉及的内容可能是大家在移植算法的时候会出现的错误,不涉及特定公司的内容,希望老板不要介意。如今临时遇到了这些问题。解决的方法也许不是最好的。能给他人起到一点作用就算不错。 移植内容 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; 5 对齐方式申请内存 linux中  (SURFWeakClassifier*)_mm_malloc(sizeof(SURFWeakClassifier)*weakNum, 32); windows  stageClassifier->WeakClassifiers = (SURFWeakClassifier*)_aligned_malloc(sizeof(SURFWeakClassifier)*weakNum, 32);   6 释放内存 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];  8 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_之前括住,使变量成为局部变量.