Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
4f62081239 | ||
|
|
9f29667b73 | ||
|
|
0c7455650d | ||
|
|
00aabfc6d9 | ||
|
|
02a005f5b1 | ||
|
|
6495a27658 | ||
|
|
263a061d27 | ||
|
|
2555047190 | ||
|
|
dfbef7caf1 | ||
|
|
13357ab256 | ||
|
|
1dfc63543f | ||
|
|
10505c616f | ||
|
|
300340bb19 | ||
|
|
57b7c40835 | ||
|
|
b2da84f903 | ||
|
|
41a659bd6d | ||
|
|
afd02550a8 | ||
|
|
b73e94b7bf | ||
|
|
2876599568 | ||
|
|
f6dd3ab38e | ||
|
|
ce2444bd07 | ||
|
|
25fd6b4a32 | ||
|
|
bdcf466b73 | ||
|
|
8a1d39ee94 | ||
|
|
438d1c246d | ||
|
|
eb507c0529 |
@@ -1,6 +1,6 @@
|
||||
cmake_minimum_required(VERSION 3.22.1)
|
||||
|
||||
project("sample")
|
||||
project("face_sdk")
|
||||
|
||||
set(CMAKE_CXX_STANDARD 20)
|
||||
set(CMAKE_CXX_STANDARD_REQUIRED ON)
|
||||
@@ -23,7 +23,7 @@ if(CMAKE_SYSTEM_NAME STREQUAL "Android")
|
||||
third_party/vma/include
|
||||
)
|
||||
|
||||
add_library(sample SHARED
|
||||
add_library(face_sdk SHARED
|
||||
app/src/main/cpp/main.cpp
|
||||
app/src/main/cpp/AndroidOut.cpp
|
||||
vulkan/AppBase.h
|
||||
@@ -45,13 +45,13 @@ if(CMAKE_SYSTEM_NAME STREQUAL "Android")
|
||||
|
||||
find_package(Vulkan REQUIRED)
|
||||
|
||||
target_link_libraries(sample
|
||||
target_link_libraries(face_sdk
|
||||
game-activity::game-activity_static
|
||||
Vulkan::Vulkan
|
||||
android
|
||||
log)
|
||||
|
||||
target_compile_definitions(sample PRIVATE
|
||||
target_compile_definitions(face_sdk PRIVATE
|
||||
VMA_STATIC_VULKAN_FUNCTIONS=0
|
||||
VMA_DYNAMIC_VULKAN_FUNCTIONS=1
|
||||
)
|
||||
@@ -82,7 +82,7 @@ if(CMAKE_SYSTEM_NAME STREQUAL "Windows" OR WIN32)
|
||||
)
|
||||
|
||||
# 将源代码添加到此项目的可执行文件。
|
||||
add_executable (sample
|
||||
add_executable (face_sdk
|
||||
vulkan/AppBase.h
|
||||
vulkan/AppBase.cpp
|
||||
vulkan/Application.h
|
||||
@@ -97,7 +97,7 @@ if(CMAKE_SYSTEM_NAME STREQUAL "Windows" OR WIN32)
|
||||
endif()
|
||||
|
||||
|
||||
# target_compile_definitions(sample PRIVATE VK_NO_PROTOTYPES) 使用volk 动态加载的时候需要定义,不自动生成vulkan接口
|
||||
target_compile_definitions(sample PRIVATE GLM_ENABLE_EXPERIMENTAL)
|
||||
# target_compile_definitions(sample PRIVATE VULKAN_HPP_NO_STRUCT_CONSTRUCTORS) 解决vs 编译c++ 20 不支持新构造函数的特性
|
||||
# target_compile_definitions(face_sdk PRIVATE VK_NO_PROTOTYPES) 使用volk 动态加载的时候需要定义,不自动生成vulkan接口
|
||||
target_compile_definitions(face_sdk PRIVATE GLM_ENABLE_EXPERIMENTAL)
|
||||
# target_compile_definitions(face_sdk PRIVATE VULKAN_HPP_NO_STRUCT_CONSTRUCTORS) 解决vs 编译c++ 20 不支持新构造函数的特性
|
||||
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
plugins {
|
||||
alias(libs.plugins.android.application)
|
||||
//alias(libs.plugins.android.application)
|
||||
alias(libs.plugins.android.library)
|
||||
id 'org.jetbrains.kotlin.android'
|
||||
}
|
||||
|
||||
@@ -7,13 +8,12 @@ ext.vvl_version='1.4.321.0'
|
||||
apply from: "./download_vvl.gradle"
|
||||
|
||||
android {
|
||||
namespace 'com.hmwl.sample'
|
||||
compileSdk 35
|
||||
|
||||
namespace 'com.hmwl.face_sdk'
|
||||
compileSdk 36
|
||||
defaultConfig {
|
||||
applicationId "com.hmwl.sample"
|
||||
//applicationId "com.hmwl.face_sdk"
|
||||
minSdk 30
|
||||
targetSdk 35
|
||||
targetSdk 36
|
||||
versionCode 1
|
||||
versionName "1.0"
|
||||
|
||||
@@ -22,6 +22,8 @@ android {
|
||||
}
|
||||
|
||||
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
|
||||
|
||||
consumerProguardFiles "consumer-rules.pro"
|
||||
}
|
||||
|
||||
buildTypes {
|
||||
@@ -36,12 +38,41 @@ android {
|
||||
}
|
||||
}
|
||||
compileOptions {
|
||||
sourceCompatibility JavaVersion.VERSION_21
|
||||
targetCompatibility JavaVersion.VERSION_21
|
||||
sourceCompatibility JavaVersion.VERSION_17
|
||||
targetCompatibility JavaVersion.VERSION_17
|
||||
}
|
||||
|
||||
// 添加 Kotlin 编译选项
|
||||
kotlinOptions {
|
||||
jvmTarget = '17' // 与 Java 版本保持一致
|
||||
}
|
||||
|
||||
kotlin {
|
||||
jvmToolchain(21)
|
||||
}
|
||||
|
||||
buildFeatures {
|
||||
prefab true
|
||||
}
|
||||
|
||||
|
||||
sourceSets {
|
||||
main {
|
||||
jniLibs.srcDirs += [
|
||||
'libs/tasks-vision/jni',
|
||||
'libs/tasks-core/jni'
|
||||
]
|
||||
java.srcDirs += [
|
||||
'libs/tasks-vision/vision_classes',
|
||||
'libs/tasks-core/core_classes'
|
||||
]
|
||||
res.srcDirs += [
|
||||
'libs/tasks-vision/res',
|
||||
'libs/tasks-core/res'
|
||||
]
|
||||
}
|
||||
}
|
||||
|
||||
externalNativeBuild {
|
||||
cmake {
|
||||
path file('../CMakeLists.txt')
|
||||
@@ -58,10 +89,19 @@ dependencies {
|
||||
testImplementation libs.junit
|
||||
androidTestImplementation libs.ext.junit
|
||||
androidTestImplementation libs.espresso.core
|
||||
implementation 'com.google.mediapipe:tasks-vision:0.10.26'
|
||||
|
||||
|
||||
//implementation 'com.google.protobuf:protobuf-javalite:3.21.12'
|
||||
//implementation files('libs/tasks-vision.jar', 'libs/tasks-core.jar')
|
||||
|
||||
implementation fileTree(dir: 'libs/tasks-vision', include: ['*.jar'])
|
||||
implementation fileTree(dir: 'libs/tasks-core', include: ['*.jar'])
|
||||
|
||||
|
||||
def camerax_version = '1.4.2'
|
||||
implementation "androidx.camera:camera-core:$camerax_version"
|
||||
implementation "androidx.camera:camera-camera2:$camerax_version"
|
||||
implementation "androidx.camera:camera-lifecycle:$camerax_version"
|
||||
implementation "androidx.camera:camera-view:$camerax_version"
|
||||
|
||||
}
|
||||
@@ -1,4 +1,5 @@
|
||||
apply plugin: 'com.android.application'
|
||||
//apply plugin: 'com.android.application'
|
||||
apply plugin: 'com.android.library'
|
||||
|
||||
/*
|
||||
* Copyright (c) 2022-2024, The Android Open Source Project.
|
||||
|
||||
@@ -0,0 +1,9 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
package="com.google.mediapipe.tasks.core" >
|
||||
|
||||
<uses-sdk
|
||||
android:minSdkVersion="24"
|
||||
android:targetSdkVersion="34" />
|
||||
|
||||
</manifest>
|
||||
@@ -0,0 +1,255 @@
|
||||
int anim fragment_fast_out_extra_slow_in 0x00000000
|
||||
int animator fragment_close_enter 0x00000000
|
||||
int animator fragment_close_exit 0x00000000
|
||||
int animator fragment_fade_enter 0x00000000
|
||||
int animator fragment_fade_exit 0x00000000
|
||||
int animator fragment_open_enter 0x00000000
|
||||
int animator fragment_open_exit 0x00000000
|
||||
int attr alpha 0x00000000
|
||||
int attr coordinatorLayoutStyle 0x00000000
|
||||
int attr font 0x00000000
|
||||
int attr fontProviderAuthority 0x00000000
|
||||
int attr fontProviderCerts 0x00000000
|
||||
int attr fontProviderFetchStrategy 0x00000000
|
||||
int attr fontProviderFetchTimeout 0x00000000
|
||||
int attr fontProviderPackage 0x00000000
|
||||
int attr fontProviderQuery 0x00000000
|
||||
int attr fontStyle 0x00000000
|
||||
int attr fontVariationSettings 0x00000000
|
||||
int attr fontWeight 0x00000000
|
||||
int attr keylines 0x00000000
|
||||
int attr layout_anchor 0x00000000
|
||||
int attr layout_anchorGravity 0x00000000
|
||||
int attr layout_behavior 0x00000000
|
||||
int attr layout_dodgeInsetEdges 0x00000000
|
||||
int attr layout_insetEdge 0x00000000
|
||||
int attr layout_keyline 0x00000000
|
||||
int attr statusBarBackground 0x00000000
|
||||
int attr ttcIndex 0x00000000
|
||||
int color notification_action_color_filter 0x00000000
|
||||
int color notification_icon_bg_color 0x00000000
|
||||
int color notification_material_background_media_default_color 0x00000000
|
||||
int color primary_text_default_material_dark 0x00000000
|
||||
int color ripple_material_light 0x00000000
|
||||
int color secondary_text_default_material_dark 0x00000000
|
||||
int color secondary_text_default_material_light 0x00000000
|
||||
int dimen compat_button_inset_horizontal_material 0x00000000
|
||||
int dimen compat_button_inset_vertical_material 0x00000000
|
||||
int dimen compat_button_padding_horizontal_material 0x00000000
|
||||
int dimen compat_button_padding_vertical_material 0x00000000
|
||||
int dimen compat_control_corner_material 0x00000000
|
||||
int dimen compat_notification_large_icon_max_height 0x00000000
|
||||
int dimen compat_notification_large_icon_max_width 0x00000000
|
||||
int dimen notification_action_icon_size 0x00000000
|
||||
int dimen notification_action_text_size 0x00000000
|
||||
int dimen notification_big_circle_margin 0x00000000
|
||||
int dimen notification_content_margin_start 0x00000000
|
||||
int dimen notification_large_icon_height 0x00000000
|
||||
int dimen notification_large_icon_width 0x00000000
|
||||
int dimen notification_main_column_padding_top 0x00000000
|
||||
int dimen notification_media_narrow_margin 0x00000000
|
||||
int dimen notification_right_icon_size 0x00000000
|
||||
int dimen notification_right_side_padding_top 0x00000000
|
||||
int dimen notification_small_icon_background_padding 0x00000000
|
||||
int dimen notification_small_icon_size_as_large 0x00000000
|
||||
int dimen notification_subtext_size 0x00000000
|
||||
int dimen notification_top_pad 0x00000000
|
||||
int dimen notification_top_pad_large_text 0x00000000
|
||||
int dimen subtitle_corner_radius 0x00000000
|
||||
int dimen subtitle_outline_width 0x00000000
|
||||
int dimen subtitle_shadow_offset 0x00000000
|
||||
int dimen subtitle_shadow_radius 0x00000000
|
||||
int drawable notification_action_background 0x00000000
|
||||
int drawable notification_bg 0x00000000
|
||||
int drawable notification_bg_low 0x00000000
|
||||
int drawable notification_bg_low_normal 0x00000000
|
||||
int drawable notification_bg_low_pressed 0x00000000
|
||||
int drawable notification_bg_normal 0x00000000
|
||||
int drawable notification_bg_normal_pressed 0x00000000
|
||||
int drawable notification_icon_background 0x00000000
|
||||
int drawable notification_template_icon_bg 0x00000000
|
||||
int drawable notification_template_icon_low_bg 0x00000000
|
||||
int drawable notification_tile_bg 0x00000000
|
||||
int drawable notify_panel_notification_icon_bg 0x00000000
|
||||
int id accessibility_action_clickable_span 0x00000000
|
||||
int id accessibility_custom_action_0 0x00000000
|
||||
int id accessibility_custom_action_1 0x00000000
|
||||
int id accessibility_custom_action_10 0x00000000
|
||||
int id accessibility_custom_action_11 0x00000000
|
||||
int id accessibility_custom_action_12 0x00000000
|
||||
int id accessibility_custom_action_13 0x00000000
|
||||
int id accessibility_custom_action_14 0x00000000
|
||||
int id accessibility_custom_action_15 0x00000000
|
||||
int id accessibility_custom_action_16 0x00000000
|
||||
int id accessibility_custom_action_17 0x00000000
|
||||
int id accessibility_custom_action_18 0x00000000
|
||||
int id accessibility_custom_action_19 0x00000000
|
||||
int id accessibility_custom_action_2 0x00000000
|
||||
int id accessibility_custom_action_20 0x00000000
|
||||
int id accessibility_custom_action_21 0x00000000
|
||||
int id accessibility_custom_action_22 0x00000000
|
||||
int id accessibility_custom_action_23 0x00000000
|
||||
int id accessibility_custom_action_24 0x00000000
|
||||
int id accessibility_custom_action_25 0x00000000
|
||||
int id accessibility_custom_action_26 0x00000000
|
||||
int id accessibility_custom_action_27 0x00000000
|
||||
int id accessibility_custom_action_28 0x00000000
|
||||
int id accessibility_custom_action_29 0x00000000
|
||||
int id accessibility_custom_action_3 0x00000000
|
||||
int id accessibility_custom_action_30 0x00000000
|
||||
int id accessibility_custom_action_31 0x00000000
|
||||
int id accessibility_custom_action_4 0x00000000
|
||||
int id accessibility_custom_action_5 0x00000000
|
||||
int id accessibility_custom_action_6 0x00000000
|
||||
int id accessibility_custom_action_7 0x00000000
|
||||
int id accessibility_custom_action_8 0x00000000
|
||||
int id accessibility_custom_action_9 0x00000000
|
||||
int id action0 0x00000000
|
||||
int id action_container 0x00000000
|
||||
int id action_divider 0x00000000
|
||||
int id action_image 0x00000000
|
||||
int id action_text 0x00000000
|
||||
int id actions 0x00000000
|
||||
int id all 0x00000000
|
||||
int id async 0x00000000
|
||||
int id blocking 0x00000000
|
||||
int id bottom 0x00000000
|
||||
int id cancel_action 0x00000000
|
||||
int id center 0x00000000
|
||||
int id center_horizontal 0x00000000
|
||||
int id center_vertical 0x00000000
|
||||
int id chronometer 0x00000000
|
||||
int id clip_horizontal 0x00000000
|
||||
int id clip_vertical 0x00000000
|
||||
int id dialog_button 0x00000000
|
||||
int id end 0x00000000
|
||||
int id end_padder 0x00000000
|
||||
int id fill 0x00000000
|
||||
int id fill_horizontal 0x00000000
|
||||
int id fill_vertical 0x00000000
|
||||
int id forever 0x00000000
|
||||
int id fragment_container_view_tag 0x00000000
|
||||
int id icon 0x00000000
|
||||
int id icon_group 0x00000000
|
||||
int id info 0x00000000
|
||||
int id italic 0x00000000
|
||||
int id left 0x00000000
|
||||
int id line1 0x00000000
|
||||
int id line3 0x00000000
|
||||
int id media_actions 0x00000000
|
||||
int id none 0x00000000
|
||||
int id normal 0x00000000
|
||||
int id notification_background 0x00000000
|
||||
int id notification_main_column 0x00000000
|
||||
int id notification_main_column_container 0x00000000
|
||||
int id right 0x00000000
|
||||
int id right_icon 0x00000000
|
||||
int id right_side 0x00000000
|
||||
int id special_effects_controller_view_tag 0x00000000
|
||||
int id start 0x00000000
|
||||
int id status_bar_latest_event_content 0x00000000
|
||||
int id tag_accessibility_actions 0x00000000
|
||||
int id tag_accessibility_clickable_spans 0x00000000
|
||||
int id tag_accessibility_heading 0x00000000
|
||||
int id tag_accessibility_pane_title 0x00000000
|
||||
int id tag_screen_reader_focusable 0x00000000
|
||||
int id tag_transition_group 0x00000000
|
||||
int id tag_unhandled_key_event_manager 0x00000000
|
||||
int id tag_unhandled_key_listeners 0x00000000
|
||||
int id text 0x00000000
|
||||
int id text2 0x00000000
|
||||
int id time 0x00000000
|
||||
int id title 0x00000000
|
||||
int id top 0x00000000
|
||||
int id view_tree_lifecycle_owner 0x00000000
|
||||
int id view_tree_saved_state_registry_owner 0x00000000
|
||||
int id view_tree_view_model_store_owner 0x00000000
|
||||
int id visible_removing_fragment_view_tag 0x00000000
|
||||
int integer cancel_button_image_alpha 0x00000000
|
||||
int integer status_bar_notification_info_maxnum 0x00000000
|
||||
int layout custom_dialog 0x00000000
|
||||
int layout notification_action 0x00000000
|
||||
int layout notification_action_tombstone 0x00000000
|
||||
int layout notification_media_action 0x00000000
|
||||
int layout notification_media_cancel_action 0x00000000
|
||||
int layout notification_template_big_media 0x00000000
|
||||
int layout notification_template_big_media_custom 0x00000000
|
||||
int layout notification_template_big_media_narrow 0x00000000
|
||||
int layout notification_template_big_media_narrow_custom 0x00000000
|
||||
int layout notification_template_custom_big 0x00000000
|
||||
int layout notification_template_icon_group 0x00000000
|
||||
int layout notification_template_lines_media 0x00000000
|
||||
int layout notification_template_media 0x00000000
|
||||
int layout notification_template_media_custom 0x00000000
|
||||
int layout notification_template_part_chronometer 0x00000000
|
||||
int layout notification_template_part_time 0x00000000
|
||||
int string status_bar_notification_info_overflow 0x00000000
|
||||
int style TextAppearance_Compat_Notification 0x00000000
|
||||
int style TextAppearance_Compat_Notification_Info 0x00000000
|
||||
int style TextAppearance_Compat_Notification_Info_Media 0x00000000
|
||||
int style TextAppearance_Compat_Notification_Line2 0x00000000
|
||||
int style TextAppearance_Compat_Notification_Line2_Media 0x00000000
|
||||
int style TextAppearance_Compat_Notification_Media 0x00000000
|
||||
int style TextAppearance_Compat_Notification_Time 0x00000000
|
||||
int style TextAppearance_Compat_Notification_Time_Media 0x00000000
|
||||
int style TextAppearance_Compat_Notification_Title 0x00000000
|
||||
int style TextAppearance_Compat_Notification_Title_Media 0x00000000
|
||||
int style Widget_Compat_NotificationActionContainer 0x00000000
|
||||
int style Widget_Compat_NotificationActionText 0x00000000
|
||||
int style Widget_Support_CoordinatorLayout 0x00000000
|
||||
int[] styleable ColorStateListItem { 0x010101a5, 0x0101031f, 0x00000000 }
|
||||
int styleable ColorStateListItem_android_color 0
|
||||
int styleable ColorStateListItem_android_alpha 1
|
||||
int styleable ColorStateListItem_alpha 2
|
||||
int[] styleable CoordinatorLayout { 0x00000000, 0x00000000 }
|
||||
int styleable CoordinatorLayout_keylines 0
|
||||
int styleable CoordinatorLayout_statusBarBackground 1
|
||||
int[] styleable CoordinatorLayout_Layout { 0x010100b3, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000 }
|
||||
int styleable CoordinatorLayout_Layout_android_layout_gravity 0
|
||||
int styleable CoordinatorLayout_Layout_layout_anchor 1
|
||||
int styleable CoordinatorLayout_Layout_layout_anchorGravity 2
|
||||
int styleable CoordinatorLayout_Layout_layout_behavior 3
|
||||
int styleable CoordinatorLayout_Layout_layout_dodgeInsetEdges 4
|
||||
int styleable CoordinatorLayout_Layout_layout_insetEdge 5
|
||||
int styleable CoordinatorLayout_Layout_layout_keyline 6
|
||||
int[] styleable FontFamily { 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000 }
|
||||
int styleable FontFamily_fontProviderAuthority 0
|
||||
int styleable FontFamily_fontProviderCerts 1
|
||||
int styleable FontFamily_fontProviderFetchStrategy 2
|
||||
int styleable FontFamily_fontProviderFetchTimeout 3
|
||||
int styleable FontFamily_fontProviderPackage 4
|
||||
int styleable FontFamily_fontProviderQuery 5
|
||||
int[] styleable FontFamilyFont { 0x01010532, 0x01010533, 0x0101053f, 0x0101056f, 0x01010570, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000 }
|
||||
int styleable FontFamilyFont_android_font 0
|
||||
int styleable FontFamilyFont_android_fontWeight 1
|
||||
int styleable FontFamilyFont_android_fontStyle 2
|
||||
int styleable FontFamilyFont_android_ttcIndex 3
|
||||
int styleable FontFamilyFont_android_fontVariationSettings 4
|
||||
int styleable FontFamilyFont_font 5
|
||||
int styleable FontFamilyFont_fontStyle 6
|
||||
int styleable FontFamilyFont_fontVariationSettings 7
|
||||
int styleable FontFamilyFont_fontWeight 8
|
||||
int styleable FontFamilyFont_ttcIndex 9
|
||||
int[] styleable Fragment { 0x01010003, 0x010100d0, 0x010100d1 }
|
||||
int styleable Fragment_android_name 0
|
||||
int styleable Fragment_android_id 1
|
||||
int styleable Fragment_android_tag 2
|
||||
int[] styleable FragmentContainerView { 0x01010003, 0x010100d1 }
|
||||
int styleable FragmentContainerView_android_name 0
|
||||
int styleable FragmentContainerView_android_tag 1
|
||||
int[] styleable GradientColor { 0x0101019d, 0x0101019e, 0x010101a1, 0x010101a2, 0x010101a3, 0x010101a4, 0x01010201, 0x0101020b, 0x01010510, 0x01010511, 0x01010512, 0x01010513 }
|
||||
int styleable GradientColor_android_startColor 0
|
||||
int styleable GradientColor_android_endColor 1
|
||||
int styleable GradientColor_android_type 2
|
||||
int styleable GradientColor_android_centerX 3
|
||||
int styleable GradientColor_android_centerY 4
|
||||
int styleable GradientColor_android_gradientRadius 5
|
||||
int styleable GradientColor_android_tileMode 6
|
||||
int styleable GradientColor_android_centerColor 7
|
||||
int styleable GradientColor_android_startX 8
|
||||
int styleable GradientColor_android_startY 9
|
||||
int styleable GradientColor_android_endX 10
|
||||
int styleable GradientColor_android_endY 11
|
||||
int[] styleable GradientColorItem { 0x010101a5, 0x01010514 }
|
||||
int styleable GradientColorItem_android_color 0
|
||||
int styleable GradientColorItem_android_offset 1
|
||||
@@ -0,0 +1,9 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
package="com.google.mediapipe.tasks.vision" >
|
||||
|
||||
<uses-sdk
|
||||
android:minSdkVersion="24"
|
||||
android:targetSdkVersion="34" />
|
||||
|
||||
</manifest>
|
||||
@@ -0,0 +1,255 @@
|
||||
int anim fragment_fast_out_extra_slow_in 0x00000000
|
||||
int animator fragment_close_enter 0x00000000
|
||||
int animator fragment_close_exit 0x00000000
|
||||
int animator fragment_fade_enter 0x00000000
|
||||
int animator fragment_fade_exit 0x00000000
|
||||
int animator fragment_open_enter 0x00000000
|
||||
int animator fragment_open_exit 0x00000000
|
||||
int attr alpha 0x00000000
|
||||
int attr coordinatorLayoutStyle 0x00000000
|
||||
int attr font 0x00000000
|
||||
int attr fontProviderAuthority 0x00000000
|
||||
int attr fontProviderCerts 0x00000000
|
||||
int attr fontProviderFetchStrategy 0x00000000
|
||||
int attr fontProviderFetchTimeout 0x00000000
|
||||
int attr fontProviderPackage 0x00000000
|
||||
int attr fontProviderQuery 0x00000000
|
||||
int attr fontStyle 0x00000000
|
||||
int attr fontVariationSettings 0x00000000
|
||||
int attr fontWeight 0x00000000
|
||||
int attr keylines 0x00000000
|
||||
int attr layout_anchor 0x00000000
|
||||
int attr layout_anchorGravity 0x00000000
|
||||
int attr layout_behavior 0x00000000
|
||||
int attr layout_dodgeInsetEdges 0x00000000
|
||||
int attr layout_insetEdge 0x00000000
|
||||
int attr layout_keyline 0x00000000
|
||||
int attr statusBarBackground 0x00000000
|
||||
int attr ttcIndex 0x00000000
|
||||
int color notification_action_color_filter 0x00000000
|
||||
int color notification_icon_bg_color 0x00000000
|
||||
int color notification_material_background_media_default_color 0x00000000
|
||||
int color primary_text_default_material_dark 0x00000000
|
||||
int color ripple_material_light 0x00000000
|
||||
int color secondary_text_default_material_dark 0x00000000
|
||||
int color secondary_text_default_material_light 0x00000000
|
||||
int dimen compat_button_inset_horizontal_material 0x00000000
|
||||
int dimen compat_button_inset_vertical_material 0x00000000
|
||||
int dimen compat_button_padding_horizontal_material 0x00000000
|
||||
int dimen compat_button_padding_vertical_material 0x00000000
|
||||
int dimen compat_control_corner_material 0x00000000
|
||||
int dimen compat_notification_large_icon_max_height 0x00000000
|
||||
int dimen compat_notification_large_icon_max_width 0x00000000
|
||||
int dimen notification_action_icon_size 0x00000000
|
||||
int dimen notification_action_text_size 0x00000000
|
||||
int dimen notification_big_circle_margin 0x00000000
|
||||
int dimen notification_content_margin_start 0x00000000
|
||||
int dimen notification_large_icon_height 0x00000000
|
||||
int dimen notification_large_icon_width 0x00000000
|
||||
int dimen notification_main_column_padding_top 0x00000000
|
||||
int dimen notification_media_narrow_margin 0x00000000
|
||||
int dimen notification_right_icon_size 0x00000000
|
||||
int dimen notification_right_side_padding_top 0x00000000
|
||||
int dimen notification_small_icon_background_padding 0x00000000
|
||||
int dimen notification_small_icon_size_as_large 0x00000000
|
||||
int dimen notification_subtext_size 0x00000000
|
||||
int dimen notification_top_pad 0x00000000
|
||||
int dimen notification_top_pad_large_text 0x00000000
|
||||
int dimen subtitle_corner_radius 0x00000000
|
||||
int dimen subtitle_outline_width 0x00000000
|
||||
int dimen subtitle_shadow_offset 0x00000000
|
||||
int dimen subtitle_shadow_radius 0x00000000
|
||||
int drawable notification_action_background 0x00000000
|
||||
int drawable notification_bg 0x00000000
|
||||
int drawable notification_bg_low 0x00000000
|
||||
int drawable notification_bg_low_normal 0x00000000
|
||||
int drawable notification_bg_low_pressed 0x00000000
|
||||
int drawable notification_bg_normal 0x00000000
|
||||
int drawable notification_bg_normal_pressed 0x00000000
|
||||
int drawable notification_icon_background 0x00000000
|
||||
int drawable notification_template_icon_bg 0x00000000
|
||||
int drawable notification_template_icon_low_bg 0x00000000
|
||||
int drawable notification_tile_bg 0x00000000
|
||||
int drawable notify_panel_notification_icon_bg 0x00000000
|
||||
int id accessibility_action_clickable_span 0x00000000
|
||||
int id accessibility_custom_action_0 0x00000000
|
||||
int id accessibility_custom_action_1 0x00000000
|
||||
int id accessibility_custom_action_10 0x00000000
|
||||
int id accessibility_custom_action_11 0x00000000
|
||||
int id accessibility_custom_action_12 0x00000000
|
||||
int id accessibility_custom_action_13 0x00000000
|
||||
int id accessibility_custom_action_14 0x00000000
|
||||
int id accessibility_custom_action_15 0x00000000
|
||||
int id accessibility_custom_action_16 0x00000000
|
||||
int id accessibility_custom_action_17 0x00000000
|
||||
int id accessibility_custom_action_18 0x00000000
|
||||
int id accessibility_custom_action_19 0x00000000
|
||||
int id accessibility_custom_action_2 0x00000000
|
||||
int id accessibility_custom_action_20 0x00000000
|
||||
int id accessibility_custom_action_21 0x00000000
|
||||
int id accessibility_custom_action_22 0x00000000
|
||||
int id accessibility_custom_action_23 0x00000000
|
||||
int id accessibility_custom_action_24 0x00000000
|
||||
int id accessibility_custom_action_25 0x00000000
|
||||
int id accessibility_custom_action_26 0x00000000
|
||||
int id accessibility_custom_action_27 0x00000000
|
||||
int id accessibility_custom_action_28 0x00000000
|
||||
int id accessibility_custom_action_29 0x00000000
|
||||
int id accessibility_custom_action_3 0x00000000
|
||||
int id accessibility_custom_action_30 0x00000000
|
||||
int id accessibility_custom_action_31 0x00000000
|
||||
int id accessibility_custom_action_4 0x00000000
|
||||
int id accessibility_custom_action_5 0x00000000
|
||||
int id accessibility_custom_action_6 0x00000000
|
||||
int id accessibility_custom_action_7 0x00000000
|
||||
int id accessibility_custom_action_8 0x00000000
|
||||
int id accessibility_custom_action_9 0x00000000
|
||||
int id action0 0x00000000
|
||||
int id action_container 0x00000000
|
||||
int id action_divider 0x00000000
|
||||
int id action_image 0x00000000
|
||||
int id action_text 0x00000000
|
||||
int id actions 0x00000000
|
||||
int id all 0x00000000
|
||||
int id async 0x00000000
|
||||
int id blocking 0x00000000
|
||||
int id bottom 0x00000000
|
||||
int id cancel_action 0x00000000
|
||||
int id center 0x00000000
|
||||
int id center_horizontal 0x00000000
|
||||
int id center_vertical 0x00000000
|
||||
int id chronometer 0x00000000
|
||||
int id clip_horizontal 0x00000000
|
||||
int id clip_vertical 0x00000000
|
||||
int id dialog_button 0x00000000
|
||||
int id end 0x00000000
|
||||
int id end_padder 0x00000000
|
||||
int id fill 0x00000000
|
||||
int id fill_horizontal 0x00000000
|
||||
int id fill_vertical 0x00000000
|
||||
int id forever 0x00000000
|
||||
int id fragment_container_view_tag 0x00000000
|
||||
int id icon 0x00000000
|
||||
int id icon_group 0x00000000
|
||||
int id info 0x00000000
|
||||
int id italic 0x00000000
|
||||
int id left 0x00000000
|
||||
int id line1 0x00000000
|
||||
int id line3 0x00000000
|
||||
int id media_actions 0x00000000
|
||||
int id none 0x00000000
|
||||
int id normal 0x00000000
|
||||
int id notification_background 0x00000000
|
||||
int id notification_main_column 0x00000000
|
||||
int id notification_main_column_container 0x00000000
|
||||
int id right 0x00000000
|
||||
int id right_icon 0x00000000
|
||||
int id right_side 0x00000000
|
||||
int id special_effects_controller_view_tag 0x00000000
|
||||
int id start 0x00000000
|
||||
int id status_bar_latest_event_content 0x00000000
|
||||
int id tag_accessibility_actions 0x00000000
|
||||
int id tag_accessibility_clickable_spans 0x00000000
|
||||
int id tag_accessibility_heading 0x00000000
|
||||
int id tag_accessibility_pane_title 0x00000000
|
||||
int id tag_screen_reader_focusable 0x00000000
|
||||
int id tag_transition_group 0x00000000
|
||||
int id tag_unhandled_key_event_manager 0x00000000
|
||||
int id tag_unhandled_key_listeners 0x00000000
|
||||
int id text 0x00000000
|
||||
int id text2 0x00000000
|
||||
int id time 0x00000000
|
||||
int id title 0x00000000
|
||||
int id top 0x00000000
|
||||
int id view_tree_lifecycle_owner 0x00000000
|
||||
int id view_tree_saved_state_registry_owner 0x00000000
|
||||
int id view_tree_view_model_store_owner 0x00000000
|
||||
int id visible_removing_fragment_view_tag 0x00000000
|
||||
int integer cancel_button_image_alpha 0x00000000
|
||||
int integer status_bar_notification_info_maxnum 0x00000000
|
||||
int layout custom_dialog 0x00000000
|
||||
int layout notification_action 0x00000000
|
||||
int layout notification_action_tombstone 0x00000000
|
||||
int layout notification_media_action 0x00000000
|
||||
int layout notification_media_cancel_action 0x00000000
|
||||
int layout notification_template_big_media 0x00000000
|
||||
int layout notification_template_big_media_custom 0x00000000
|
||||
int layout notification_template_big_media_narrow 0x00000000
|
||||
int layout notification_template_big_media_narrow_custom 0x00000000
|
||||
int layout notification_template_custom_big 0x00000000
|
||||
int layout notification_template_icon_group 0x00000000
|
||||
int layout notification_template_lines_media 0x00000000
|
||||
int layout notification_template_media 0x00000000
|
||||
int layout notification_template_media_custom 0x00000000
|
||||
int layout notification_template_part_chronometer 0x00000000
|
||||
int layout notification_template_part_time 0x00000000
|
||||
int string status_bar_notification_info_overflow 0x00000000
|
||||
int style TextAppearance_Compat_Notification 0x00000000
|
||||
int style TextAppearance_Compat_Notification_Info 0x00000000
|
||||
int style TextAppearance_Compat_Notification_Info_Media 0x00000000
|
||||
int style TextAppearance_Compat_Notification_Line2 0x00000000
|
||||
int style TextAppearance_Compat_Notification_Line2_Media 0x00000000
|
||||
int style TextAppearance_Compat_Notification_Media 0x00000000
|
||||
int style TextAppearance_Compat_Notification_Time 0x00000000
|
||||
int style TextAppearance_Compat_Notification_Time_Media 0x00000000
|
||||
int style TextAppearance_Compat_Notification_Title 0x00000000
|
||||
int style TextAppearance_Compat_Notification_Title_Media 0x00000000
|
||||
int style Widget_Compat_NotificationActionContainer 0x00000000
|
||||
int style Widget_Compat_NotificationActionText 0x00000000
|
||||
int style Widget_Support_CoordinatorLayout 0x00000000
|
||||
int[] styleable ColorStateListItem { 0x010101a5, 0x0101031f, 0x00000000 }
|
||||
int styleable ColorStateListItem_android_color 0
|
||||
int styleable ColorStateListItem_android_alpha 1
|
||||
int styleable ColorStateListItem_alpha 2
|
||||
int[] styleable CoordinatorLayout { 0x00000000, 0x00000000 }
|
||||
int styleable CoordinatorLayout_keylines 0
|
||||
int styleable CoordinatorLayout_statusBarBackground 1
|
||||
int[] styleable CoordinatorLayout_Layout { 0x010100b3, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000 }
|
||||
int styleable CoordinatorLayout_Layout_android_layout_gravity 0
|
||||
int styleable CoordinatorLayout_Layout_layout_anchor 1
|
||||
int styleable CoordinatorLayout_Layout_layout_anchorGravity 2
|
||||
int styleable CoordinatorLayout_Layout_layout_behavior 3
|
||||
int styleable CoordinatorLayout_Layout_layout_dodgeInsetEdges 4
|
||||
int styleable CoordinatorLayout_Layout_layout_insetEdge 5
|
||||
int styleable CoordinatorLayout_Layout_layout_keyline 6
|
||||
int[] styleable FontFamily { 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000 }
|
||||
int styleable FontFamily_fontProviderAuthority 0
|
||||
int styleable FontFamily_fontProviderCerts 1
|
||||
int styleable FontFamily_fontProviderFetchStrategy 2
|
||||
int styleable FontFamily_fontProviderFetchTimeout 3
|
||||
int styleable FontFamily_fontProviderPackage 4
|
||||
int styleable FontFamily_fontProviderQuery 5
|
||||
int[] styleable FontFamilyFont { 0x01010532, 0x01010533, 0x0101053f, 0x0101056f, 0x01010570, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000 }
|
||||
int styleable FontFamilyFont_android_font 0
|
||||
int styleable FontFamilyFont_android_fontWeight 1
|
||||
int styleable FontFamilyFont_android_fontStyle 2
|
||||
int styleable FontFamilyFont_android_ttcIndex 3
|
||||
int styleable FontFamilyFont_android_fontVariationSettings 4
|
||||
int styleable FontFamilyFont_font 5
|
||||
int styleable FontFamilyFont_fontStyle 6
|
||||
int styleable FontFamilyFont_fontVariationSettings 7
|
||||
int styleable FontFamilyFont_fontWeight 8
|
||||
int styleable FontFamilyFont_ttcIndex 9
|
||||
int[] styleable Fragment { 0x01010003, 0x010100d0, 0x010100d1 }
|
||||
int styleable Fragment_android_name 0
|
||||
int styleable Fragment_android_id 1
|
||||
int styleable Fragment_android_tag 2
|
||||
int[] styleable FragmentContainerView { 0x01010003, 0x010100d1 }
|
||||
int styleable FragmentContainerView_android_name 0
|
||||
int styleable FragmentContainerView_android_tag 1
|
||||
int[] styleable GradientColor { 0x0101019d, 0x0101019e, 0x010101a1, 0x010101a2, 0x010101a3, 0x010101a4, 0x01010201, 0x0101020b, 0x01010510, 0x01010511, 0x01010512, 0x01010513 }
|
||||
int styleable GradientColor_android_startColor 0
|
||||
int styleable GradientColor_android_endColor 1
|
||||
int styleable GradientColor_android_type 2
|
||||
int styleable GradientColor_android_centerX 3
|
||||
int styleable GradientColor_android_centerY 4
|
||||
int styleable GradientColor_android_gradientRadius 5
|
||||
int styleable GradientColor_android_tileMode 6
|
||||
int styleable GradientColor_android_centerColor 7
|
||||
int styleable GradientColor_android_startX 8
|
||||
int styleable GradientColor_android_startY 9
|
||||
int styleable GradientColor_android_endX 10
|
||||
int styleable GradientColor_android_endY 11
|
||||
int[] styleable GradientColorItem { 0x010101a5, 0x01010514 }
|
||||
int styleable GradientColorItem_android_color 0
|
||||
int styleable GradientColorItem_android_offset 1
|
||||
@@ -1,26 +0,0 @@
|
||||
package com.hmwl.sample;
|
||||
|
||||
import android.content.Context;
|
||||
|
||||
import androidx.test.platform.app.InstrumentationRegistry;
|
||||
import androidx.test.ext.junit.runners.AndroidJUnit4;
|
||||
|
||||
import org.junit.Test;
|
||||
import org.junit.runner.RunWith;
|
||||
|
||||
import static org.junit.Assert.*;
|
||||
|
||||
/**
|
||||
* Instrumented test, which will execute on an Android device.
|
||||
*
|
||||
* @see <a href="http://d.android.com/tools/testing">Testing documentation</a>
|
||||
*/
|
||||
@RunWith(AndroidJUnit4.class)
|
||||
public class ExampleInstrumentedTest {
|
||||
@Test
|
||||
public void useAppContext() {
|
||||
// Context of the app under test.
|
||||
Context appContext = InstrumentationRegistry.getInstrumentation().getTargetContext();
|
||||
assertEquals("com.hmwl.sample", appContext.getPackageName());
|
||||
}
|
||||
}
|
||||
@@ -2,33 +2,28 @@
|
||||
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:tools="http://schemas.android.com/tools">
|
||||
|
||||
<!-- Declare features -->
|
||||
<uses-feature android:name="android.hardware.camera" />
|
||||
<!-- 声明摄像头硬件特性 -->
|
||||
<uses-feature
|
||||
android:name="android.hardware.camera"
|
||||
android:required="false" />
|
||||
|
||||
<!-- Declare permissions -->
|
||||
<!-- 声明摄像头权限 -->
|
||||
<uses-permission android:name="android.permission.CAMERA" />
|
||||
|
||||
<application
|
||||
android:allowBackup="true"
|
||||
android:dataExtractionRules="@xml/data_extraction_rules"
|
||||
android:fullBackupContent="@xml/backup_rules"
|
||||
android:icon="@mipmap/ic_launcher"
|
||||
android:label="@string/app_name"
|
||||
android:roundIcon="@mipmap/ic_launcher_round"
|
||||
android:supportsRtl="true"
|
||||
android:theme="@style/Theme.Sample">
|
||||
<application>
|
||||
<!-- 声明 MainActivity -->
|
||||
<!-- 作为库,exported 通常设为 false,除非明确需要外部应用启动 -->
|
||||
<activity
|
||||
android:name=".MainActivity"
|
||||
android:exported="true">
|
||||
<intent-filter>
|
||||
<action android:name="android.intent.action.MAIN" />
|
||||
android:name=".FaceActivity"
|
||||
android:exported="true"
|
||||
tools:ignore="MissingClass"> <!-- 如果IDE报类找不到,可以添加这个 -->
|
||||
|
||||
<category android:name="android.intent.category.LAUNCHER" />
|
||||
</intent-filter>
|
||||
<!-- 重要:移除 MAIN/LAUNCHER intent-filter -->
|
||||
<!-- 让使用库的应用来决定哪个是主Activity -->
|
||||
|
||||
<meta-data
|
||||
android:name="android.app.lib_name"
|
||||
android:value="sample" />
|
||||
android:value="face_sdk" />
|
||||
</activity>
|
||||
</application>
|
||||
|
||||
|
||||
|
After Width: | Height: | Size: 54 KiB |
|
After Width: | Height: | Size: 69 KiB |
|
Before Width: | Height: | Size: 47 KiB After Width: | Height: | Size: 20 KiB |
|
After Width: | Height: | Size: 24 KiB |
@@ -1,4 +1,4 @@
|
||||
#version 450
|
||||
#version 450
|
||||
|
||||
layout (binding = 1) uniform sampler2D samplerColor;
|
||||
|
||||
@@ -12,15 +12,6 @@ void main()
|
||||
{
|
||||
vec4 color = texture(samplerColor, inUV);
|
||||
|
||||
vec3 N = normalize(inNormal);
|
||||
outFragColor = color;
|
||||
|
||||
vec4 textureColor = color;
|
||||
if (textureColor.a < 0.1) {
|
||||
//textureColor = vec4(0.2, 0.2, 0.2, 0.5);
|
||||
discard;
|
||||
}
|
||||
|
||||
outFragColor = textureColor;
|
||||
|
||||
// outFragColor = vec4(1, 0, 0, 1);
|
||||
}
|
||||
@@ -0,0 +1,56 @@
|
||||
#version 450
|
||||
|
||||
layout (binding = 1) uniform sampler2D samplerColor;
|
||||
layout (binding = 2) uniform sampler2D samplerColor_ex;
|
||||
|
||||
layout (location = 0) in vec2 inUV;
|
||||
layout (location = 1) in vec3 inNormal;
|
||||
|
||||
|
||||
layout (location = 0) out vec4 outFragColor;
|
||||
|
||||
void main()
|
||||
{
|
||||
vec4 color = texture(samplerColor, inUV);
|
||||
vec4 color_ex = texture(samplerColor_ex, inUV);
|
||||
|
||||
vec3 N = normalize(inNormal);
|
||||
|
||||
// 计算与 (0,0,1) 的点乘
|
||||
float ndot = dot(N, vec3(0.0, 0.0, -1.0));
|
||||
|
||||
// 保证结果 >= 0
|
||||
ndot = max(ndot, 0.0);
|
||||
|
||||
// 重新映射ndot值,让中间2/3部分进行融合
|
||||
// 当ndot在[0.166, 0.833]范围内时进行混合,两端保持不变
|
||||
float blendFactor;
|
||||
if (ndot < 0.0) {
|
||||
blendFactor = 0.0; // 完全使用color_ex
|
||||
} else if (ndot > 0.1) {
|
||||
blendFactor = 1.0; // 完全使用color
|
||||
} else {
|
||||
// 在中间2/3部分进行平滑过渡
|
||||
blendFactor = (ndot - 0.0) / (1 - 0);
|
||||
}
|
||||
|
||||
// 使用smoothstep创建中间2/3的融合区域
|
||||
// 参数说明:smoothstep(edge0, edge1, x)
|
||||
// 当x < edge0时返回0,当x > edge1时返回1,在中间时平滑过渡
|
||||
//float blendFactor = smoothstep(0.166, 0.833, ndot);
|
||||
|
||||
|
||||
// vec4 blendedColor = mix(color_ex, color, ndot);
|
||||
|
||||
// outFragColor = blendedColor;
|
||||
|
||||
if (ndot < 0.3){
|
||||
outFragColor = color_ex;
|
||||
}
|
||||
else
|
||||
{
|
||||
outFragColor = color;
|
||||
}
|
||||
|
||||
// outFragColor = vec4(1, 0, 0, 1);
|
||||
}
|
||||
@@ -12,7 +12,7 @@ using namespace std;
|
||||
extern "C" {
|
||||
|
||||
android_app* g_android_app = nullptr;
|
||||
Application* g_Application = nullptr;
|
||||
FaceApp* g_Application = nullptr;
|
||||
AAssetManager* g_assetManager = nullptr;
|
||||
|
||||
void handle_cmd(android_app *pApp, int32_t cmd) {
|
||||
@@ -29,18 +29,22 @@ void handle_cmd(android_app *pApp, int32_t cmd) {
|
||||
}
|
||||
}
|
||||
|
||||
const int ArgLen = 128*1024;
|
||||
char g_InitArgString[ArgLen] = {0};
|
||||
|
||||
void android_main(struct android_app *pApp) {
|
||||
aout << "Welcome to android_main" << std::endl;
|
||||
g_android_app = pApp;
|
||||
g_assetManager = pApp->activity->assetManager;
|
||||
FaceApp application;
|
||||
g_Application = &application;
|
||||
application.SetInitArg(g_InitArgString);
|
||||
pApp->onAppCmd = handle_cmd;
|
||||
|
||||
long long last_update_time = 0;
|
||||
android_app_set_motion_event_filter(pApp, nullptr);
|
||||
|
||||
long long _lastDrawFrameTime = chrono::duration_cast<chrono::milliseconds>(chrono::system_clock::now().time_since_epoch()).count();
|
||||
do {
|
||||
auto ms = chrono::duration_cast<chrono::milliseconds>(chrono::system_clock::now().time_since_epoch()).count();
|
||||
auto start_time = chrono::duration_cast<chrono::milliseconds>(chrono::system_clock::now().time_since_epoch()).count();
|
||||
// Process all pending events before running game logic.
|
||||
bool done = false;
|
||||
while (!done) {
|
||||
@@ -68,10 +72,19 @@ void android_main(struct android_app *pApp) {
|
||||
}
|
||||
if(application.isInited())
|
||||
{
|
||||
application.drawFrame();
|
||||
auto frameTime = (start_time - _lastDrawFrameTime);
|
||||
_lastDrawFrameTime = chrono::duration_cast<chrono::milliseconds>(chrono::system_clock::now().time_since_epoch()).count();
|
||||
application.drawFrame(frameTime);
|
||||
}
|
||||
auto end_time = chrono::duration_cast<chrono::milliseconds>(chrono::system_clock::now().time_since_epoch()).count();
|
||||
auto frameTime = end_time - last_update_time;
|
||||
last_update_time = end_time;
|
||||
auto function_time = (end_time - start_time);
|
||||
aout << "function_time:" << function_time << " fps:" << (1000/frameTime) << std::endl;
|
||||
if(function_time < 35)
|
||||
{
|
||||
this_thread::sleep_for(chrono::milliseconds((35-function_time)));
|
||||
}
|
||||
auto end_ms = chrono::duration_cast<chrono::milliseconds>(chrono::system_clock::now().time_since_epoch()).count();
|
||||
this_thread::sleep_for(chrono::milliseconds((end_ms-ms)));
|
||||
} while (!pApp->destroyRequested);
|
||||
application.cleanup();
|
||||
}
|
||||
@@ -85,13 +98,15 @@ void processWithVulkan(uint8_t* data, int width, int height, int format,
|
||||
TextureLoadProcessWithVulkan(data, width, height, rowStride, dataSize);
|
||||
}
|
||||
|
||||
|
||||
|
||||
extern "C"
|
||||
JNIEXPORT void JNICALL
|
||||
Java_com_hmwl_sample_MainActivity_processImageNative(JNIEnv *env, jobject thiz, jobject buffer,
|
||||
jint width, jint height, jint format,
|
||||
jint row_stride, jint pixel_stride,
|
||||
jint rotation) {
|
||||
|
||||
Java_com_hmwl_face_1sdk_FaceActivity_processImageNative(JNIEnv *env, jobject thiz, jobject buffer,
|
||||
jint width, jint height, jint format,
|
||||
jint row_stride, jint pixel_stride,
|
||||
jint rotation) {
|
||||
// TODO: implement processImageNative()
|
||||
uint8_t* imageData = static_cast<uint8_t*>(env->GetDirectBufferAddress(buffer));
|
||||
jlong capacity = env->GetDirectBufferCapacity(buffer);
|
||||
|
||||
@@ -103,12 +118,11 @@ Java_com_hmwl_sample_MainActivity_processImageNative(JNIEnv *env, jobject thiz,
|
||||
// 创建 Vulkan 图像或更新现有图像
|
||||
processWithVulkan(imageData, width, height, format, row_stride, capacity);
|
||||
}
|
||||
|
||||
|
||||
extern "C"
|
||||
JNIEXPORT void JNICALL
|
||||
Java_com_hmwl_sample_MainActivity_passDataToNative(JNIEnv *env, jobject thiz, jobject buffer,
|
||||
jint point_count, jint width, jint height) {
|
||||
Java_com_hmwl_face_1sdk_FaceActivity_passDataToNative(JNIEnv *env, jobject thiz, jobject buffer,
|
||||
jint point_count, jint width, jint height) {
|
||||
// TODO: implement passDataToNative()
|
||||
float* pos = static_cast<float*>(env->GetDirectBufferAddress(buffer));
|
||||
|
||||
if (pos == nullptr) {
|
||||
@@ -119,3 +133,33 @@ Java_com_hmwl_sample_MainActivity_passDataToNative(JNIEnv *env, jobject thiz, jo
|
||||
// 或者直接将指针传递给Vulkan
|
||||
ReceiveFacePoint(pos, point_count, width, height);
|
||||
}
|
||||
|
||||
extern "C"
|
||||
JNIEXPORT void JNICALL
|
||||
Java_com_hmwl_face_1sdk_FaceActivity_SetCppInitArg(JNIEnv *env, jobject thiz, jstring json) {
|
||||
// TODO: implement SetCppInitArg()
|
||||
const char *nativeString = env->GetStringUTFChars(json, nullptr);
|
||||
jsize len = env->GetStringUTFLength(json);
|
||||
if(len > ArgLen)
|
||||
{
|
||||
aout << "ArgLen to long:" << len << std::endl;
|
||||
return;
|
||||
}
|
||||
memcpy(g_InitArgString, nativeString, len);
|
||||
}
|
||||
extern "C"
|
||||
JNIEXPORT void JNICALL
|
||||
Java_com_hmwl_face_1sdk_FaceActivity_ChangeStateCpp(JNIEnv *env, jobject thiz, jstring json) {
|
||||
// TODO: implement ChangeStateCpp()
|
||||
const char *nativeString = env->GetStringUTFChars(json, nullptr);
|
||||
jsize len = env->GetStringUTFLength(json);
|
||||
if(len > ArgLen)
|
||||
{
|
||||
aout << "ArgLen to long:" << len << std::endl;
|
||||
return;
|
||||
}
|
||||
if(g_Application->isInited())
|
||||
{
|
||||
g_Application->changeMotion(nativeString);
|
||||
}
|
||||
}
|
||||
@@ -1,4 +1,4 @@
|
||||
package com.hmwl.sample;
|
||||
package com.hmwl.face_sdk;
|
||||
|
||||
import android.Manifest;
|
||||
import android.content.pm.PackageManager;
|
||||
@@ -33,11 +33,11 @@ import java.util.concurrent.ExecutorService;
|
||||
import java.util.concurrent.Executors;
|
||||
import java.util.concurrent.TimeUnit;
|
||||
|
||||
public class MainActivity extends GameActivity implements FaceLandmarkerHelper.LandmarkerListener {
|
||||
private static final String TAG = "MainActivity";
|
||||
public class FaceActivity extends GameActivity implements FaceLandmarkerHelper.LandmarkerListener {
|
||||
private static final String TAG = "FaceActivity";
|
||||
|
||||
static {
|
||||
System.loadLibrary("sample");
|
||||
System.loadLibrary("face_sdk");
|
||||
}
|
||||
|
||||
private ProcessCameraProvider cameraProvider;
|
||||
@@ -70,38 +70,14 @@ public class MainActivity extends GameActivity implements FaceLandmarkerHelper.L
|
||||
|
||||
|
||||
imageAnalyzer.setAnalyzer(backgroundExecutor, new ImageAnalysis.Analyzer() {
|
||||
private long lastCaptureTime = 0;
|
||||
private int frameCount = 0;
|
||||
|
||||
@Override
|
||||
public void analyze(@NonNull ImageProxy image) {
|
||||
frameCount++;
|
||||
long currentTime = System.currentTimeMillis();
|
||||
try {
|
||||
long captureTimeNs = image.getImageInfo().getTimestamp();
|
||||
long analyzeTime = System.currentTimeMillis();
|
||||
|
||||
// 简单直接的计算方法
|
||||
long captureTimeMs = TimeUnit.NANOSECONDS.toMillis(captureTimeNs);
|
||||
long latency = analyzeTime - captureTimeMs;
|
||||
|
||||
// 帧率计算
|
||||
if (lastCaptureTime > 0) {
|
||||
long frameInterval = captureTimeMs - lastCaptureTime;
|
||||
double fps = 1000.0 / frameInterval;
|
||||
|
||||
if (frameCount % 10 == 0) { // 每30帧打印一次
|
||||
Log.i("TimeLatency", String.format(
|
||||
"Frame %d - Latency: %d ms, FPS: %.1f",
|
||||
frameCount, latency, fps
|
||||
));
|
||||
}
|
||||
}
|
||||
|
||||
lastCaptureTime = captureTimeMs;
|
||||
|
||||
processImageForVulkan(image);
|
||||
if(frameCount %2 == 0)
|
||||
if(frameCount %3 == 0)
|
||||
{
|
||||
detectFace(image);
|
||||
}
|
||||
@@ -186,41 +162,15 @@ public class MainActivity extends GameActivity implements FaceLandmarkerHelper.L
|
||||
0.5f,
|
||||
0.5f,
|
||||
1,
|
||||
0,
|
||||
RunningMode.LIVE_STREAM,
|
||||
MainActivity.this,
|
||||
MainActivity.this
|
||||
FaceActivity.this,
|
||||
FaceActivity.this
|
||||
);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
|
||||
@Override
|
||||
public boolean onTouchEvent(MotionEvent event) {
|
||||
int action = event.getActionMasked();
|
||||
float x = event.getX();
|
||||
float y = event.getY();
|
||||
|
||||
switch (action) {
|
||||
case MotionEvent.ACTION_DOWN:
|
||||
Log.d(TAG, "Java Layer: Touch DOWN at (" + x + ", " + y + ")");
|
||||
// ✅ 你可以在这里做些事,比如发消息给 C++,或 UI 反馈
|
||||
break;
|
||||
case MotionEvent.ACTION_MOVE:
|
||||
Log.d(TAG, "Java Layer: Touch MOVE");
|
||||
break;
|
||||
case MotionEvent.ACTION_UP:
|
||||
Log.d(TAG, "Java Layer: Touch UP");
|
||||
break;
|
||||
}
|
||||
|
||||
// ⚠️ 关键:返回 false 才能让事件继续传递给 Native 层(C++)
|
||||
// 如果返回 true,表示事件已被消费,C++ 层将收不到!
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onWindowFocusChanged(boolean hasFocus) {
|
||||
super.onWindowFocusChanged(hasFocus);
|
||||
@@ -308,4 +258,24 @@ public class MainActivity extends GameActivity implements FaceLandmarkerHelper.L
|
||||
}
|
||||
|
||||
public native void passDataToNative(ByteBuffer buffer, int pointCount, int width, int height);
|
||||
|
||||
protected native void SetCppInitArg(String json);
|
||||
|
||||
protected void SetInitArg(String json)
|
||||
{
|
||||
SetCppInitArg(json);
|
||||
}
|
||||
|
||||
protected native void ChangeStateCpp(String json);
|
||||
protected void ChangeState(String json){
|
||||
Log.i("FaceActivity", "ChangeState:" + json);
|
||||
ChangeStateCpp(json);
|
||||
}
|
||||
|
||||
// 添加这个缺失的方法
|
||||
@Override
|
||||
public void onEmpty() {
|
||||
// 当没有检测到人脸时的处理逻辑
|
||||
Log.d(TAG, "No face detected in the current frame");
|
||||
}
|
||||
}
|
||||
@@ -1,12 +1,8 @@
|
||||
|
||||
package com.hmwl.sample;
|
||||
package com.hmwl.face_sdk
|
||||
|
||||
import android.content.Context
|
||||
import android.graphics.Bitmap
|
||||
import android.graphics.BitmapFactory
|
||||
import android.graphics.Matrix
|
||||
import android.media.MediaMetadataRetriever
|
||||
import android.net.Uri
|
||||
import android.os.SystemClock
|
||||
import android.util.Log
|
||||
import androidx.annotation.VisibleForTesting
|
||||
@@ -24,8 +20,7 @@ class FaceLandmarkerHelper(
|
||||
var minFaceTrackingConfidence: Float = DEFAULT_FACE_TRACKING_CONFIDENCE,
|
||||
var minFacePresenceConfidence: Float = DEFAULT_FACE_PRESENCE_CONFIDENCE,
|
||||
var maxNumFaces: Int = DEFAULT_NUM_FACES,
|
||||
var currentDelegate: Int = DELEGATE_CPU,
|
||||
var runningMode: RunningMode = RunningMode.IMAGE,
|
||||
var runningMode: RunningMode = RunningMode.LIVE_STREAM,
|
||||
val context: Context,
|
||||
// this listener is only used when running in RunningMode.LIVE_STREAM
|
||||
val faceLandmarkerHelperListener: LandmarkerListener? = null
|
||||
@@ -54,14 +49,7 @@ class FaceLandmarkerHelper(
|
||||
val baseOptionBuilder = BaseOptions.builder()
|
||||
|
||||
// Use the specified hardware for running the model. Default to CPU
|
||||
when (currentDelegate) {
|
||||
DELEGATE_CPU -> {
|
||||
baseOptionBuilder.setDelegate(Delegate.CPU)
|
||||
}
|
||||
DELEGATE_GPU -> {
|
||||
baseOptionBuilder.setDelegate(Delegate.GPU)
|
||||
}
|
||||
}
|
||||
baseOptionBuilder.setDelegate(Delegate.GPU)
|
||||
|
||||
baseOptionBuilder.setModelAssetPath(MP_FACE_LANDMARKER_TASK)
|
||||
|
||||
@@ -0,0 +1,20 @@
|
||||
package com.hmwl.face_sdk;
|
||||
import org.json.JSONObject;
|
||||
|
||||
public class InitArg {
|
||||
public int action_fps;
|
||||
public float zoom;
|
||||
public Motion motion;
|
||||
public String toJson() {
|
||||
try {
|
||||
JSONObject jsonObject = new JSONObject();
|
||||
jsonObject.put("action_fps", action_fps);
|
||||
jsonObject.put("zoom", zoom);
|
||||
jsonObject.put("motion", motion.toJsonObject());
|
||||
return jsonObject.toString();
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
return null;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,36 @@
|
||||
package com.hmwl.face_sdk;
|
||||
import org.json.JSONArray;
|
||||
import org.json.JSONObject;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
public class Motion {
|
||||
public String type = "no";
|
||||
public List<String> png_names = new ArrayList<>();
|
||||
|
||||
public JSONObject toJsonObject() {
|
||||
try {
|
||||
JSONObject jsonObject = new JSONObject();
|
||||
jsonObject.put("type", type);
|
||||
JSONArray ja = new JSONArray();
|
||||
for(int i = 0; i < png_names.size(); ++i){
|
||||
ja.put(png_names.get(i));
|
||||
}
|
||||
jsonObject.put("png_names", ja);
|
||||
return jsonObject;
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
public String toJson() {
|
||||
try {
|
||||
return toJsonObject().toString();
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
return null;
|
||||
}
|
||||
}
|
||||
};
|
||||
|
After Width: | Height: | Size: 5.3 KiB |
|
After Width: | Height: | Size: 23 KiB |
|
After Width: | Height: | Size: 6.3 KiB |
|
After Width: | Height: | Size: 3.1 KiB |
|
After Width: | Height: | Size: 13 KiB |
|
After Width: | Height: | Size: 3.4 KiB |
|
After Width: | Height: | Size: 10 KiB |
|
After Width: | Height: | Size: 40 KiB |
|
After Width: | Height: | Size: 10 KiB |
|
After Width: | Height: | Size: 18 KiB |
|
After Width: | Height: | Size: 56 KiB |
|
After Width: | Height: | Size: 21 KiB |
|
After Width: | Height: | Size: 30 KiB |
|
After Width: | Height: | Size: 96 KiB |
|
After Width: | Height: | Size: 36 KiB |
@@ -1,5 +1,6 @@
|
||||
// Top-level build file where you can add configuration options common to all sub-projects/modules.
|
||||
plugins {
|
||||
alias(libs.plugins.android.application) apply false
|
||||
id 'org.jetbrains.kotlin.android' version '2.2.0' apply false
|
||||
alias(libs.plugins.android.application) apply false
|
||||
alias(libs.plugins.android.library) apply false // 添加这行
|
||||
id 'org.jetbrains.kotlin.android' version '1.9.0' apply false
|
||||
}
|
||||
@@ -0,0 +1,11 @@
|
||||
glslangValidator -V app/src/main/assets/shaders/bg.frag -o app/src/main/assets/shaders/bg.frag.spv
|
||||
glslangValidator -V app/src/main/assets/shaders/bg.vert -o app/src/main/assets/shaders/bg.vert.spv
|
||||
|
||||
glslangValidator -V app/src/main/assets/shaders/texture.frag -o app/src/main/assets/shaders/texture.frag.spv
|
||||
glslangValidator -V app/src/main/assets/shaders/texture.vert -o app/src/main/assets/shaders/texture.vert.spv
|
||||
|
||||
glslangValidator -V app/src/main/assets/shaders/texture_thick.frag -o app/src/main/assets/shaders/texture_thick.frag.spv
|
||||
glslangValidator -V app/src/main/assets/shaders/texture_thick.vert -o app/src/main/assets/shaders/texture_thick.vert.spv
|
||||
|
||||
glslangValidator -V app/src/main/assets/shaders/simple_shader.frag -o app/src/main/assets/shaders/simple_shader.frag.spv
|
||||
glslangValidator -V app/src/main/assets/shaders/simple_shader.vert -o app/src/main/assets/shaders/simple_shader.vert.spv
|
||||
@@ -0,0 +1 @@
|
||||
/build
|
||||
@@ -0,0 +1,56 @@
|
||||
plugins {
|
||||
alias(libs.plugins.android.application)
|
||||
}
|
||||
|
||||
android {
|
||||
namespace 'com.hmwl.example'
|
||||
compileSdk 36
|
||||
|
||||
defaultConfig {
|
||||
applicationId "com.hmwl.f20251110"
|
||||
minSdk 30
|
||||
targetSdk 36
|
||||
versionCode 1
|
||||
versionName "1.0"
|
||||
|
||||
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
|
||||
}
|
||||
|
||||
buildTypes {
|
||||
release {
|
||||
minifyEnabled false
|
||||
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
|
||||
}
|
||||
}
|
||||
compileOptions {
|
||||
sourceCompatibility JavaVersion.VERSION_17
|
||||
targetCompatibility JavaVersion.VERSION_17
|
||||
}
|
||||
}
|
||||
|
||||
dependencies {
|
||||
|
||||
implementation libs.appcompat
|
||||
implementation libs.material
|
||||
implementation libs.games.activity
|
||||
testImplementation libs.junit
|
||||
androidTestImplementation libs.ext.junit
|
||||
androidTestImplementation libs.espresso.core
|
||||
|
||||
implementation project(':app')
|
||||
|
||||
def camerax_version = '1.4.2'
|
||||
implementation "androidx.camera:camera-core:$camerax_version"
|
||||
implementation "androidx.camera:camera-camera2:$camerax_version"
|
||||
implementation "androidx.camera:camera-lifecycle:$camerax_version"
|
||||
implementation "androidx.camera:camera-view:$camerax_version"
|
||||
|
||||
implementation 'com.google.protobuf:protobuf-javalite:3.21.12'
|
||||
implementation 'com.google.android.datatransport:transport-runtime:3.1.9'
|
||||
implementation 'com.google.android.datatransport:transport-backend-cct:3.1.9'
|
||||
|
||||
implementation 'com.google.flogger:flogger:0.7.4'
|
||||
implementation 'com.google.flogger:flogger-system-backend:0.7.4'
|
||||
|
||||
implementation 'com.google.guava:guava:31.1-android'
|
||||
}
|
||||
@@ -0,0 +1,21 @@
|
||||
# Add project specific ProGuard rules here.
|
||||
# You can control the set of applied configuration files using the
|
||||
# proguardFiles setting in build.gradle.
|
||||
#
|
||||
# For more details, see
|
||||
# http://developer.android.com/guide/developing/tools/proguard.html
|
||||
|
||||
# If your project uses WebView with JS, uncomment the following
|
||||
# and specify the fully qualified class name to the JavaScript interface
|
||||
# class:
|
||||
#-keepclassmembers class fqcn.of.javascript.interface.for.webview {
|
||||
# public *;
|
||||
#}
|
||||
|
||||
# Uncomment this to preserve the line number information for
|
||||
# debugging stack traces.
|
||||
#-keepattributes SourceFile,LineNumberTable
|
||||
|
||||
# If you keep the line number information, uncomment this to
|
||||
# hide the original source file name.
|
||||
#-renamesourcefileattribute SourceFile
|
||||
@@ -0,0 +1,25 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<manifest xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
|
||||
<application
|
||||
android:allowBackup="true"
|
||||
android:icon="@mipmap/ic_launcher"
|
||||
android:label="@string/app_name"
|
||||
android:roundIcon="@mipmap/ic_launcher_round"
|
||||
android:supportsRtl="true"
|
||||
android:theme="@style/Theme.Sample" >
|
||||
<activity
|
||||
android:name=".MainActivity"
|
||||
android:exported="true">
|
||||
<intent-filter>
|
||||
<action android:name="android.intent.action.MAIN" />
|
||||
<category android:name="android.intent.category.LAUNCHER" />
|
||||
</intent-filter>
|
||||
|
||||
<meta-data
|
||||
android:name="android.app.lib_name"
|
||||
android:value="face_sdk" />
|
||||
</activity>
|
||||
</application>
|
||||
|
||||
</manifest>
|
||||
|
After Width: | Height: | Size: 3.9 KiB |
|
After Width: | Height: | Size: 3.9 KiB |
|
After Width: | Height: | Size: 4.3 KiB |
|
After Width: | Height: | Size: 4.3 KiB |
|
After Width: | Height: | Size: 4.3 KiB |
|
After Width: | Height: | Size: 4.3 KiB |
|
After Width: | Height: | Size: 1.9 KiB |
|
After Width: | Height: | Size: 1.9 KiB |
|
After Width: | Height: | Size: 4.0 KiB |
|
After Width: | Height: | Size: 4.0 KiB |
|
After Width: | Height: | Size: 3.2 KiB |
|
After Width: | Height: | Size: 3.2 KiB |
|
After Width: | Height: | Size: 5.6 KiB |
|
After Width: | Height: | Size: 5.6 KiB |
|
After Width: | Height: | Size: 7.3 KiB |
|
After Width: | Height: | Size: 7.3 KiB |
|
After Width: | Height: | Size: 1.9 KiB |
|
After Width: | Height: | Size: 1.9 KiB |
|
After Width: | Height: | Size: 2.8 KiB |
|
After Width: | Height: | Size: 2.8 KiB |
|
After Width: | Height: | Size: 5.1 KiB |
|
After Width: | Height: | Size: 5.1 KiB |
|
After Width: | Height: | Size: 15 KiB |
|
After Width: | Height: | Size: 15 KiB |
|
After Width: | Height: | Size: 5.1 KiB |
|
After Width: | Height: | Size: 5.1 KiB |
|
After Width: | Height: | Size: 8.1 KiB |
|
After Width: | Height: | Size: 8.1 KiB |
|
After Width: | Height: | Size: 1.6 KiB |
|
After Width: | Height: | Size: 1.6 KiB |
|
After Width: | Height: | Size: 8.5 KiB |
|
After Width: | Height: | Size: 8.5 KiB |
|
After Width: | Height: | Size: 8.2 KiB |
|
After Width: | Height: | Size: 8.2 KiB |
|
After Width: | Height: | Size: 4.2 KiB |
|
After Width: | Height: | Size: 4.2 KiB |
|
After Width: | Height: | Size: 4.2 KiB |
|
After Width: | Height: | Size: 4.2 KiB |
|
After Width: | Height: | Size: 3.7 KiB |
|
After Width: | Height: | Size: 3.7 KiB |
|
After Width: | Height: | Size: 4.4 KiB |
|
After Width: | Height: | Size: 4.4 KiB |
|
After Width: | Height: | Size: 4.9 KiB |
|
After Width: | Height: | Size: 4.9 KiB |