人臉識別算法嵌入式移植的一點經驗


本文涉及的內容可能是大家在移植算法的時候會出現的錯誤,不涉及特定公司的內容,希望老板不要介意。如今臨時遇到了這些問題。解決的方法也許不是最好的。

能給他人起到一點作用就算不錯。

移植內容

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_之前括住,使變量成為局部變量.


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM