Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
A
arcIntergration
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
马乐
arcIntergration
Commits
00e0b732
Commit
00e0b732
authored
Oct 27, 2023
by
马乐
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
1.修复虹软图片数据工具报错问题
parent
02d1a237
Show whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
54 additions
and
33 deletions
+54
-33
build.gradle
app/build.gradle
+8
-0
MainActivity.kt
app/src/main/java/com/intergration/test/MainActivity.kt
+27
-20
fr.kt
app/src/main/java/com/intergration/test/fr/fr.kt
+19
-13
libarcsoft_image_util.so
app/src/main/jniLibs/arm64-v8a/libarcsoft_image_util.so
+0
-0
No files found.
app/build.gradle
View file @
00e0b732
...
...
@@ -33,6 +33,14 @@ android {
}
}
sourceSets
{
main
{
jni
.
srcDirs
=
[]
jniLibs
.
srcDirs
=
[
'src/main/jniLibs'
]
}
}
buildTypes
{
release
{
minifyEnabled
false
...
...
app/src/main/java/com/intergration/test/MainActivity.kt
View file @
00e0b732
...
...
@@ -6,7 +6,6 @@ import android.content.pm.PackageManager
import
android.media.AudioManager
import
android.media.CamcorderProfile
import
android.os.Bundle
import
android.os.CountDownTimer
import
android.os.Environment
import
android.speech.tts.TextToSpeech
import
android.view.View
...
...
@@ -41,10 +40,9 @@ import com.intergration.test.fr.COROUTINE_FR
import
com.intergration.test.fr.FrCoroutineContext
import
com.intergration.test.fr.FrCoroutineScope
import
com.intergration.test.fr.compareFeatureWithScore
import
com.intergration.test.fr.extract
FeatureFromDir
import
com.intergration.test.fr.extractRecognizeFeature
FromByteArray
import
com.intergration.test.fr.extract
RegisterFeature
import
com.intergration.test.fr.extractRecognizeFeature
import
com.intergration.test.fr.featureList
import
com.intergration.test.fr.frCameraDevice
import
com.intergration.test.fr.initializeFr
import
com.intergration.test.fr.startFr
import
com.intergration.test.utils.DMS_PIC_HEIGHT
...
...
@@ -61,14 +59,13 @@ import com.mediatek.smartplatform.SpmCameraDevice.VideoCallback
import
com.mediatek.smartplatform.VideoInfoMap
import
kotlinx.coroutines.CoroutineScope
import
kotlinx.coroutines.Dispatchers
import
kotlinx.coroutines.FlowPreview
import
kotlinx.coroutines.Job
import
kotlinx.coroutines.NonCancellable
import
kotlinx.coroutines.cancel
import
kotlinx.coroutines.delay
import
kotlinx.coroutines.ensureActive
import
kotlinx.coroutines.flow.debounce
import
kotlinx.coroutines.flow.sample
import
kotlinx.coroutines.flow.takeWhile
import
kotlinx.coroutines.isActive
import
kotlinx.coroutines.launch
import
kotlinx.coroutines.withContext
...
...
@@ -118,6 +115,9 @@ class MainActivity : AppCompatActivity(),TextToSpeech.OnInitListener,VideoCallba
private
var
dmsCameraDevice
:
SpmCameraDevice
?
=
null
private
var
frCameraDevice
:
SpmCameraDevice
?
=
null
@OptIn
(
FlowPreview
::
class
)
override
fun
onCreate
(
savedInstanceState
:
Bundle
?)
{
super
.
onCreate
(
savedInstanceState
)
binding
=
ActivityMainBinding
.
inflate
(
layoutInflater
)
...
...
@@ -256,7 +256,15 @@ class MainActivity : AppCompatActivity(),TextToSpeech.OnInitListener,VideoCallba
binding
.
startFr
.
setOnClickListener
{
LogUtils
.
file
(
"点击开始人脸识别按钮"
)
if
(
frCoroutineScope
==
null
)
{
dmsCameraDevice
=
SmartPlatformManager
.
get
().
openCameraDevice
(
CAMERA_ID_DMS
)
frCameraDevice
=
SmartPlatformManager
.
get
().
openCameraDevice
(
CAMERA_ID_DMS
)
frCameraDevice
?.
setErrorCallback
{
i
,
s
,
spmCameraDevice
->
LogUtils
.
file
(
"error camera id:${spmCameraDevice.cameraId},event id:$i,content:$s"
)
LogUtils
.
e
(
"error camera id:${spmCameraDevice.cameraId},event id:$i,content:$s"
)
}
// frCameraDevice?.takePicture(File(
// Environment.getExternalStorageDirectory(),
// "fr/male.jpg"
// ).path,null,null)
frCoroutineScope
=
FrCoroutineScope
(
FrCoroutineContext
(
engine
=
dmsEngine
)
+
Dispatchers
.
Default
+
COROUTINE_FR
)
}
frJob
=
frCoroutineScope
?.
launch
{
...
...
@@ -273,27 +281,23 @@ class MainActivity : AppCompatActivity(),TextToSpeech.OnInitListener,VideoCallba
return
@launch
}
val
engine
=
coroutineContext
[
FrCoroutineContext
]
?.
engine
frCameraDevice
.
setPreviewSurface
(
binding
.
dmsPreview
.
holder
.
surface
,
frCameraDevice
?
.
setPreviewSurface
(
binding
.
dmsPreview
.
holder
.
surface
,
PreviewSource
.
GENERAL_CAMERA
)
frCameraDevice
.
startPreview
()
frCameraDevice
?.
startPreview
()
val
result
=
engine
?.
initializeFr
()
LogUtils
.
eTag
(
"fr"
,
"初始化结果:$result"
)
if
(
result
==
ArcErrorInfo
.
ARC_ERROR_OK
)
{
if
(
featureList
.
isNotEmpty
())
{
engine
.
extractFeatureFromDir
(
engine
.
extractRegisterFeature
(
File
(
Environment
.
getExternalStorageDirectory
(),
"fr/"
).
path
)
}
frCameraDevice
.
startFr
().
sample
(
5000
).
collect
{
frCameraDevice
?.
startFr
()
?.
sample
(
5000
)
?.
collect
{
data
->
LogUtils
.
d
(
"received data from camera"
)
ensureActive
()
val
liveExtractResult
=
engine
.
extractRecognizeFeatureFromByteArray
(
DMS_PIC_WIDTH
,
DMS_PIC_HEIGHT
,
it
)
val
liveExtractResult
=
engine
.
extractRecognizeFeature
(
DMS_PIC_WIDTH
,
DMS_PIC_HEIGHT
,
data
)
val
isRecognition
=
engine
.
compareFeatureWithScore
(
liveExtractResult
)
if
(
isRecognition
)
{
tts
.
speak
(
"人脸识别成功"
,
TextToSpeech
.
QUEUE_ADD
,
null
,
null
)
...
...
@@ -308,7 +312,9 @@ class MainActivity : AppCompatActivity(),TextToSpeech.OnInitListener,VideoCallba
}
}
catch
(
e
:
CancellationException
)
{
LogUtils
.
eTag
(
"fr"
,
"人脸识别error:${e.message}"
)
frCameraDevice
?.
stopPreview
()
frCameraDevice
?.
stopRecord
(
RecordSource
.
GENERAL_CAMERA
)
frCameraDevice
?.
let
{
smartPlatformManager
.
closeCameraDevice
(
it
)}
}
catch
(
e
:
Exception
)
{
e
.
printStackTrace
()
}
...
...
@@ -380,7 +386,8 @@ class MainActivity : AppCompatActivity(),TextToSpeech.OnInitListener,VideoCallba
override
fun
onDestroy
()
{
tts
.
stop
()
tts
.
shutdown
()
dmsJob
?.
cancel
(
CancellationException
(
"退出MainActivity"
))
dmsJob
?.
cancel
(
CancellationException
(
"DMS-退出MainActivity"
))
frJob
?.
cancel
(
CancellationException
(
"DMS-退出MainActivity"
))
super
.
onDestroy
()
}
...
...
app/src/main/java/com/intergration/test/fr/fr.kt
View file @
00e0b732
...
...
@@ -68,32 +68,37 @@ fun ArcVisDriveEngine.initializeFr():Int{
return
init
(
arcInfoParam
)
}
fun
ArcVisDriveEngine
.
extract
FeatureFromDir
(
featureDir
:
String
)
{
fun
ArcVisDriveEngine
.
extract
RegisterFeature
(
featureDir
:
String
)
{
if
(
FileUtils
.
isFileExists
(
featureDir
)
&&
FileUtils
.
isDir
(
featureDir
))
{
FileUtils
.
listFilesInDir
(
featureDir
).
forEach
{
LogUtils
.
d
(
"特征值:${it.path}"
)
val
bitmap
=
ImageUtils
.
getBitmap
(
it
)
val
nv21Data
=
ArcSoftImageUtil
.
createImageData
(
bitmap
.
width
,
bitmap
.
height
,
ArcSoftImageFormat
.
NV21
)
val
nv21Data
=
ArcSoftImageUtil
.
createImageData
(
bitmap
.
width
,
bitmap
.
height
,
ArcSoftImageFormat
.
NV21
)
ArcSoftImageUtil
.
bitmapToImageData
(
bitmap
,
nv21Data
,
ArcSoftImageFormat
.
NV21
)
ArcFRExtractResult
().
also
{
result
->
extractRegisterFeature
(
val
arcFRExtractResult
=
ArcFRExtractResult
()
val
result
=
extractRegisterFeature
(
bitmap
.
width
,
bitmap
.
height
,
ArcImageFormat
.
ARC_IMAGE_FORMAT_NV21
,
nv21Data
.
toByteBuffer
(),
result
)
LogUtils
.
dTag
(
"fr"
,
"extract nv21 data for face recognize with file ${it.absoluteFile}"
nv21Data
.
toByteBuffer
(),
arcFRExtractResult
)
featureList
.
add
(
result
)
}
LogUtils
.
d
(
"extractRegisterFeature result:$result,ArcFRExtractResult::${arcFRExtractResult.arcFaceInfo}"
)
featureList
.
add
(
arcFRExtractResult
)
bitmap
.
recycle
()
}
}
else
{
LogUtils
.
eTag
(
"fr"
,
"待注册特征值集为空"
)
}
}
fun
ArcVisDriveEngine
.
extractRecognizeFeature
FromByteArray
(
width
:
Int
,
Height
:
Int
,
data
:
ByteArray
):
ArcFRExtractResult
{
fun
ArcVisDriveEngine
.
extractRecognizeFeature
(
width
:
Int
,
Height
:
Int
,
data
:
ByteArray
):
ArcFRExtractResult
{
val
liveExtractResult
=
ArcFRExtractResult
()
extractRecognizeFeature
(
width
,
Height
,
val
result
=
extractRecognizeFeature
(
width
,
Height
,
ArcImageFormat
.
ARC_IMAGE_FORMAT_NV21
,
data
.
toByteBuffer
(),
liveExtractResult
)
LogUtils
.
d
(
"extractRecognizeFeature result:$result,ArcFRExtractResult:${liveExtractResult.arcFaceInfo}"
)
return
liveExtractResult
}
...
...
@@ -105,6 +110,7 @@ fun ArcVisDriveEngine.compareFeatureWithScore(liveExtractResult:ArcFRExtractResu
liveExtractResult
.
arcFRFeature
.
featureData
,
frSimilarity
)
LogUtils
.
d
(
"frSimilarity:${frSimilarity.score},compareFeature result:${result}"
)
result
==
ArcErrorInfo
.
ARC_ERROR_OK
&&
frSimilarity
.
score
>
75
}
}
...
...
app/src/main/jniLibs/arm64-v8a/libarcsoft_image_util.so
0 → 100644
View file @
00e0b732
File added
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment