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
76f1841e
Commit
76f1841e
authored
Nov 01, 2023
by
马乐
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
1.产品定义人脸使用场景
parent
0ecbfa90
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
62 additions
and
5 deletions
+62
-5
MainActivity.kt
app/src/main/java/com/intergration/test/MainActivity.kt
+32
-5
fr.kt
app/src/main/java/com/intergration/test/fr/fr.kt
+30
-0
No files found.
app/src/main/java/com/intergration/test/MainActivity.kt
View file @
76f1841e
...
@@ -15,8 +15,10 @@ import androidx.appcompat.app.AppCompatActivity
...
@@ -15,8 +15,10 @@ import androidx.appcompat.app.AppCompatActivity
import
androidx.core.content.ContextCompat
import
androidx.core.content.ContextCompat
import
com.arcsoft.visdrive.sdk.ArcErrorInfo
import
com.arcsoft.visdrive.sdk.ArcErrorInfo
import
com.arcsoft.visdrive.sdk.ArcVisDriveEngine
import
com.arcsoft.visdrive.sdk.ArcVisDriveEngine
import
com.arcsoft.visdrive.sdk.constant.common.ArcImageFormat
import
com.arcsoft.visdrive.sdk.constant.common.ArcModType
import
com.arcsoft.visdrive.sdk.constant.common.ArcModType
import
com.arcsoft.visdrive.sdk.model.common.ArcActiveEnvParam
import
com.arcsoft.visdrive.sdk.model.common.ArcActiveEnvParam
import
com.arcsoft.visdrive.sdk.model.fr.ArcFRExtractResult
import
com.blankj.utilcode.util.LogUtils
import
com.blankj.utilcode.util.LogUtils
import
com.blankj.utilcode.util.TimeUtils
import
com.blankj.utilcode.util.TimeUtils
import
com.intergration.test.databinding.ActivityMainBinding
import
com.intergration.test.databinding.ActivityMainBinding
...
@@ -39,18 +41,22 @@ import com.intergration.test.dms.startDms
...
@@ -39,18 +41,22 @@ import com.intergration.test.dms.startDms
import
com.intergration.test.fr.COROUTINE_FR
import
com.intergration.test.fr.COROUTINE_FR
import
com.intergration.test.fr.FrCoroutineContext
import
com.intergration.test.fr.FrCoroutineContext
import
com.intergration.test.fr.FrCoroutineScope
import
com.intergration.test.fr.FrCoroutineScope
import
com.intergration.test.fr.INTERVAL_COMPLETED
import
com.intergration.test.fr.INTERVAL_ERROR
import
com.intergration.test.fr.compareFeatureWithScore
import
com.intergration.test.fr.compareFeatureWithScore
import
com.intergration.test.fr.extractRegisterFeature
import
com.intergration.test.fr.extractRegisterFeature
import
com.intergration.test.fr.extractRecognizeFeature
import
com.intergration.test.fr.extractRecognizeFeature
import
com.intergration.test.fr.featureList
import
com.intergration.test.fr.featureList
import
com.intergration.test.fr.initializeFr
import
com.intergration.test.fr.initializeFr
import
com.intergration.test.fr.startFr
import
com.intergration.test.fr.startFr
import
com.intergration.test.fr.startFr1
import
com.intergration.test.utils.DMS_PIC_HEIGHT
import
com.intergration.test.utils.DMS_PIC_HEIGHT
import
com.intergration.test.utils.DMS_PIC_WIDTH
import
com.intergration.test.utils.DMS_PIC_WIDTH
import
com.intergration.test.utils.DOT_PREFACE_DURATION
import
com.intergration.test.utils.DOT_PREFACE_DURATION
import
com.intergration.test.utils.TTS_ENGINE
import
com.intergration.test.utils.TTS_ENGINE
import
com.intergration.test.utils.VIDEO_FOLDER
import
com.intergration.test.utils.VIDEO_FOLDER
import
com.intergration.test.utils.VIDEO_FOLDER_
import
com.intergration.test.utils.VIDEO_FOLDER_
import
com.intergration.test.utils.toByteBuffer
import
com.mediatek.smartplatform.PreviewSource
import
com.mediatek.smartplatform.PreviewSource
import
com.mediatek.smartplatform.RecordConfiguration
import
com.mediatek.smartplatform.RecordConfiguration
import
com.mediatek.smartplatform.RecordSource
import
com.mediatek.smartplatform.RecordSource
...
@@ -290,7 +296,7 @@ class MainActivity : AppCompatActivity(),TextToSpeech.OnInitListener,VideoCallba
...
@@ -290,7 +296,7 @@ class MainActivity : AppCompatActivity(),TextToSpeech.OnInitListener,VideoCallba
binding
.
startFr
.
setOnClickListener
{
binding
.
startFr
.
setOnClickListener
{
LogUtils
.
file
(
"点击开始人脸识别按钮"
)
LogUtils
.
file
(
"点击开始人脸识别按钮"
)
if
(
frCoroutineScope
==
null
)
{
if
(
frCoroutineScope
==
null
)
{
frCameraDevice
=
SmartPlatformManager
.
get
().
openCameraDevice
(
CAMERA_ID_DMS
)
frCameraDevice
=
SmartPlatformManager
.
get
().
openCameraDevice
(
CAMERA_ID_DMS
)
.
also
{
it
.
parameters
}
frCameraDevice
?.
setErrorCallback
{
i
,
s
,
spmCameraDevice
->
frCameraDevice
?.
setErrorCallback
{
i
,
s
,
spmCameraDevice
->
LogUtils
.
file
(
"error camera id:${spmCameraDevice.cameraId},event id:$i,content:$s"
)
LogUtils
.
file
(
"error camera id:${spmCameraDevice.cameraId},event id:$i,content:$s"
)
LogUtils
.
e
(
"error camera id:${spmCameraDevice.cameraId},event id:$i,content:$s"
)
LogUtils
.
e
(
"error camera id:${spmCameraDevice.cameraId},event id:$i,content:$s"
)
...
@@ -328,10 +334,30 @@ class MainActivity : AppCompatActivity(),TextToSpeech.OnInitListener,VideoCallba
...
@@ -328,10 +334,30 @@ class MainActivity : AppCompatActivity(),TextToSpeech.OnInitListener,VideoCallba
"fr/"
"fr/"
).
path
).
path
)
)
frCameraDevice
?.
startFr
()
?.
sample
(
5000
)
?.
collect
{
data
->
// frCameraDevice?.startFr()?.sample(5000)?.collect {data->
LogUtils
.
d
(
"received data from camera"
)
// LogUtils.d("received data from camera")
ensureActive
()
// ensureActive()
val
liveExtractResult
=
engine
.
extractRecognizeFeature
(
DMS_PIC_WIDTH
,
DMS_PIC_HEIGHT
,
data
)
// 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)
// binding.detectResult.text = "人脸识别成功"
// } else {
// tts.speak("人脸识别失败", TextToSpeech.QUEUE_ADD, null, null)
// binding.detectResult.text = "人脸识别失败"
// }
// }
while
(
isActive
)
{
val
data
=
frCameraDevice
?.
startFr1
()
val
liveExtractResult
=
ArcFRExtractResult
()
val
extractRecognizeResult
=
engine
.
extractRecognizeFeature
(
DMS_PIC_WIDTH
,
DMS_PIC_HEIGHT
,
ArcImageFormat
.
ARC_IMAGE_FORMAT_NV21
,
data
?.
toByteBuffer
(),
liveExtractResult
)
LogUtils
.
dTag
(
"fr"
,
"extractRecognizeResult result:$extractRecognizeResult"
)
if
(
extractRecognizeResult
!=
ArcErrorInfo
.
ARC_ERROR_OK
)
{
delay
(
INTERVAL_ERROR
)
continue
}
val
isRecognition
=
engine
.
compareFeatureWithScore
(
liveExtractResult
)
val
isRecognition
=
engine
.
compareFeatureWithScore
(
liveExtractResult
)
if
(
isRecognition
)
{
if
(
isRecognition
)
{
tts
.
speak
(
"人脸识别成功"
,
TextToSpeech
.
QUEUE_ADD
,
null
,
null
)
tts
.
speak
(
"人脸识别成功"
,
TextToSpeech
.
QUEUE_ADD
,
null
,
null
)
...
@@ -340,6 +366,7 @@ class MainActivity : AppCompatActivity(),TextToSpeech.OnInitListener,VideoCallba
...
@@ -340,6 +366,7 @@ class MainActivity : AppCompatActivity(),TextToSpeech.OnInitListener,VideoCallba
tts
.
speak
(
"人脸识别失败"
,
TextToSpeech
.
QUEUE_ADD
,
null
,
null
)
tts
.
speak
(
"人脸识别失败"
,
TextToSpeech
.
QUEUE_ADD
,
null
,
null
)
binding
.
detectResult
.
text
=
"人脸识别失败"
binding
.
detectResult
.
text
=
"人脸识别失败"
}
}
delay
(
INTERVAL_COMPLETED
)
}
}
}
else
{
}
else
{
LogUtils
.
eTag
(
"fr"
,
"人脸算法初始化失败"
)
LogUtils
.
eTag
(
"fr"
,
"人脸算法初始化失败"
)
...
...
app/src/main/java/com/intergration/test/fr/fr.kt
View file @
76f1841e
...
@@ -31,13 +31,19 @@ import kotlinx.coroutines.Job
...
@@ -31,13 +31,19 @@ import kotlinx.coroutines.Job
import
kotlinx.coroutines.cancel
import
kotlinx.coroutines.cancel
import
kotlinx.coroutines.channels.awaitClose
import
kotlinx.coroutines.channels.awaitClose
import
kotlinx.coroutines.flow.callbackFlow
import
kotlinx.coroutines.flow.callbackFlow
import
kotlinx.coroutines.suspendCancellableCoroutine
import
java.io.Closeable
import
java.io.Closeable
import
java.io.File
import
java.io.File
import
kotlin.coroutines.AbstractCoroutineContextElement
import
kotlin.coroutines.AbstractCoroutineContextElement
import
kotlin.coroutines.CoroutineContext
import
kotlin.coroutines.CoroutineContext
import
kotlin.coroutines.resume
val
COROUTINE_FR
=
CoroutineName
(
"fr"
)
val
COROUTINE_FR
=
CoroutineName
(
"fr"
)
val
INTERVAL_COMPLETED
=
60
*
1000L
*
5
val
INTERVAL_ERROR
=
2
*
1000L
val
frJob
=
Job
()
val
frJob
=
Job
()
val
featureList
by
lazy
{
val
featureList
by
lazy
{
...
@@ -138,6 +144,29 @@ fun SpmCameraDevice.startFr() = callbackFlow{
...
@@ -138,6 +144,29 @@ fun SpmCameraDevice.startFr() = callbackFlow{
}
}
}
}
suspend
fun
SpmCameraDevice
.
startFr1
()
=
suspendCancellableCoroutine
<
ByteArray
>{
continuation
->
val
frDir
=
File
(
Environment
.
getExternalStorageDirectory
(),
"fr/"
)
if
(!
FileUtils
.
isFileExists
(
frDir
))
{
FileUtils
.
createOrExistsDir
(
frDir
)
}
val
pictureName
=
File
(
frDir
,
"fr_tmp.jpg"
)
takePicture
(
pictureName
.
absolutePath
,
{
},
{
status
,
_
,
fileName
->
if
(
status
==
SpmCameraDevice
.
CamPictureCallback
.
PICTURE_TAKEN_SUCCESS
)
{
val
bitmap
=
ImageUtils
.
getBitmap
(
fileName
)
val
nv21Data
=
ArcSoftImageUtil
.
createImageData
(
bitmap
.
width
,
bitmap
.
height
,
ArcSoftImageFormat
.
NV21
)
ArcSoftImageUtil
.
bitmapToImageData
(
bitmap
,
nv21Data
,
ArcSoftImageFormat
.
NV21
)
continuation
.
resume
(
nv21Data
)
}
}
)
}
val
frCameraDevice
:
SpmCameraDevice
by
lazy
{
val
frCameraDevice
:
SpmCameraDevice
by
lazy
{
SmartPlatformManager
.
get
().
openCameraDevice
(
CAMERA_ID_DMS
)
SmartPlatformManager
.
get
().
openCameraDevice
(
CAMERA_ID_DMS
)
}
}
\ No newline at end of file
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