diff --git a/FaceAlignment/examples/android/jni/Android.mk b/FaceAlignment/examples/android/jni/Android.mk new file mode 100755 index 000000000..b0458b1a5 --- /dev/null +++ b/FaceAlignment/examples/android/jni/Android.mk @@ -0,0 +1,24 @@ +LOCAL_PATH := $(call my-dir) +include $(CLEAR_VARS) + +LOCAL_MODULE_TAGS := optional +LOCAL_MODULE := FaceAlignment + +DIRS = FaceAlignment/src \ + FaceAlignment/src/classifier \ + FaceAlignment/src/feat \ + FaceAlignment/src/io \ + FaceAlignment/src/util \ + FaceAlignment/include + +INC = $(foreach dir,$(DIRS),$(LOCAL_PATH)/$(dir)) +SRC = $(foreach dir,$(DIRS),$(wildcard $(LOCAL_PATH)/$(dir)/*.c)) +SRC += $(foreach dir,$(DIRS),$(wildcard $(LOCAL_PATH)/$(dir)/*.cpp)) + +LOCAL_SRC_FILES := $(SRC:$(LOCAL_PATH)/%=%) + +LOCAL_C_INCLUDES := $(INC) + +LOCAL_CFLAGS := -Wall + +include $(BUILD_STATIC_LIBRARY) diff --git a/FaceAlignment/examples/android/jni/Application.mk b/FaceAlignment/examples/android/jni/Application.mk new file mode 100755 index 000000000..9f8cd1af3 --- /dev/null +++ b/FaceAlignment/examples/android/jni/Application.mk @@ -0,0 +1,5 @@ +APP_MODULES := FaceAlignment +APP_PLATFORM := android-9 +APP_ABI := armeabi +APP_STL := gnustl_static +APP_CPPFLAGS := -frtti -fexceptions -std=c++11 -O2 diff --git a/FaceAlignment/examples/android/jni/FaceAlignment b/FaceAlignment/examples/android/jni/FaceAlignment new file mode 120000 index 000000000..1b20c9fb8 --- /dev/null +++ b/FaceAlignment/examples/android/jni/FaceAlignment @@ -0,0 +1 @@ +../../../ \ No newline at end of file diff --git a/FaceAlignment/src/cfan.cpp b/FaceAlignment/src/cfan.cpp index 47f09aee9..e8228c07c 100644 --- a/FaceAlignment/src/cfan.cpp +++ b/FaceAlignment/src/cfan.cpp @@ -106,7 +106,7 @@ CCFAN::~CCFAN(void) void CCFAN::InitModel(const char *model_path) { /*Open the model file*/ - FILE *fp = fopen(model_path, "rb+"); + FILE *fp = fopen(model_path, "rb"); mean_shape_ = new float[pts_num_ * 2]; fread(mean_shape_, sizeof(float), pts_num_ * 2, fp); diff --git a/FaceDetection/examples/android/jni/Android.mk b/FaceDetection/examples/android/jni/Android.mk new file mode 100755 index 000000000..afecf8ccb --- /dev/null +++ b/FaceDetection/examples/android/jni/Android.mk @@ -0,0 +1,27 @@ +LOCAL_PATH := $(call my-dir) +include $(CLEAR_VARS) + +LOCAL_MODULE_TAGS := optional +LOCAL_MODULE := FaceDetection + +DIRS = FaceDetection/src \ + FaceDetection/src/classifier \ + FaceDetection/src/feat \ + FaceDetection/src/io \ + FaceDetection/src/util \ + FaceDetection/include + +INC = $(foreach dir,$(DIRS),$(LOCAL_PATH)/$(dir)) +SRC = $(foreach dir,$(DIRS),$(wildcard $(LOCAL_PATH)/$(dir)/*.c)) +SRC += $(foreach dir,$(DIRS),$(wildcard $(LOCAL_PATH)/$(dir)/*.cpp)) + +LOCAL_SRC_FILES := $(SRC:$(LOCAL_PATH)/%=%) + +LOCAL_C_INCLUDES := $(INC) $(LOCAL_PATH)/include + +LOCAL_CFLAGS := -mfloat-abi=softfp -mfpu=neon-vfpv4 -march=armv7-a +LOCAL_ARM_NEON := true +TARGET_ARCH_ABI := armeabi-v7a +LOCAL_ARM_MODE := arm + +include $(BUILD_STATIC_LIBRARY) diff --git a/FaceDetection/examples/android/jni/Application.mk b/FaceDetection/examples/android/jni/Application.mk new file mode 100755 index 000000000..787458f36 --- /dev/null +++ b/FaceDetection/examples/android/jni/Application.mk @@ -0,0 +1,5 @@ +APP_MODULES := FaceDetection +APP_PLATFORM := android-9 +APP_ABI := armeabi-v7a +APP_STL := gnustl_static +APP_CPPFLAGS := -frtti -fexceptions -std=c++11 -O2 diff --git a/FaceDetection/examples/android/jni/FaceDetection b/FaceDetection/examples/android/jni/FaceDetection new file mode 120000 index 000000000..1b20c9fb8 --- /dev/null +++ b/FaceDetection/examples/android/jni/FaceDetection @@ -0,0 +1 @@ +../../../ \ No newline at end of file diff --git a/FaceIdentification/examples/android/jni/Android.mk b/FaceIdentification/examples/android/jni/Android.mk new file mode 100755 index 000000000..a8861d630 --- /dev/null +++ b/FaceIdentification/examples/android/jni/Android.mk @@ -0,0 +1,35 @@ +LOCAL_PATH := $(call my-dir) +include $(CLEAR_VARS) + +LOCAL_MODULE_TAGS := optional +LOCAL_MODULE := FaceIdentification + +DIRS = src tools + +LOCAL_SRC_FILES := FaceIdentification/src/blob.cpp \ + FaceIdentification/src/common_net.cpp \ + FaceIdentification/src/bias_adder_net.cpp \ + FaceIdentification/src/bn_net.cpp \ + FaceIdentification/src/conv_net.cpp \ + FaceIdentification/src/eltwise_net.cpp \ + FaceIdentification/src/inner_product_net.cpp \ + FaceIdentification/src/max_pooling_net.cpp \ + FaceIdentification/src/pad_net.cpp \ + FaceIdentification/src/spatial_transform_net.cpp \ + FaceIdentification/src/tform_maker_net.cpp \ + FaceIdentification/src/net.cpp \ + FaceIdentification/src/math_functions.cpp \ + FaceIdentification/src/log.cpp \ + FaceIdentification/tools/aligner.cpp \ + FaceIdentification/tools/face_identification.cpp + +LOCAL_C_INCLUDES := $(LOCAL_PATH)/FaceIdentification/include \ + $(LOCAL_PATH)/FaceIdentification/src \ + $(LOCAL_PATH)/FaceIdentification/tools + +LOCAL_CFLAGS := -mfloat-abi=softfp -mfpu=neon-vfpv4 -march=armv7-a +LOCAL_ARM_NEON := true +TARGET_ARCH_ABI := armeabi-v7a +LOCAL_ARM_MODE := arm + +include $(BUILD_STATIC_LIBRARY) diff --git a/FaceIdentification/examples/android/jni/Application.mk b/FaceIdentification/examples/android/jni/Application.mk new file mode 100755 index 000000000..bbc0854fe --- /dev/null +++ b/FaceIdentification/examples/android/jni/Application.mk @@ -0,0 +1,7 @@ +APP_MODULES := FaceIdentification +APP_PLATFORM := android-9 +APP_STL := gnustl_static +APP_CPPFLAGS := -frtti -fexceptions -std=c++11 -O2 +APP_ABI := armeabi-v7a + +#APP_CPPFLAGS += -D__VIPL_LOG__ diff --git a/FaceIdentification/examples/android/jni/FaceIdentification b/FaceIdentification/examples/android/jni/FaceIdentification new file mode 120000 index 000000000..1b20c9fb8 --- /dev/null +++ b/FaceIdentification/examples/android/jni/FaceIdentification @@ -0,0 +1 @@ +../../../ \ No newline at end of file diff --git a/FaceIdentification/src/math_functions.cpp b/FaceIdentification/src/math_functions.cpp index ec1396258..d65f297ea 100644 --- a/FaceIdentification/src/math_functions.cpp +++ b/FaceIdentification/src/math_functions.cpp @@ -33,11 +33,51 @@ #include #include +#ifdef __ARM_EABI__ +#include "arm_neon.h" +#else #ifdef _WIN32 #include #else #include #endif +#endif + +#ifdef __ARM_EABI__ + +#ifdef __ARM_NEON__ + +float simd_dot(const float* src1, const float* src2, const long& count) { + long i = 0; + + float32x4_t sum_vec = vdupq_n_f32(0); + float32x4_t data_a, data_b; + for (; i