hzt_asc 1.0.7 → 1.0.8
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/ask.cc +87 -115
- package/ask.h +7 -4
- package/package.json +1 -1
- package/sample/demo.js +1386 -4
package/ask.cc
CHANGED
|
@@ -92,7 +92,7 @@ ASK::ASK(const Napi::CallbackInfo& info) : Napi::ObjectWrap<ASK>(info) {
|
|
|
92
92
|
|
|
93
93
|
ASK::~ASK()
|
|
94
94
|
{
|
|
95
|
-
delete []mFeatureInfoList;
|
|
95
|
+
// delete []mFeatureInfoList;
|
|
96
96
|
ASFUninitEngine(this->handle);
|
|
97
97
|
printf("ASK end\n");
|
|
98
98
|
}
|
|
@@ -142,7 +142,6 @@ Napi::Value ASK::faceDetect(const Napi::CallbackInfo& info) {
|
|
|
142
142
|
return obj;
|
|
143
143
|
}
|
|
144
144
|
|
|
145
|
-
|
|
146
145
|
Napi::Value ASK::faceDetectUrl(const Napi::CallbackInfo& info) {
|
|
147
146
|
Napi::Env env = info.Env();
|
|
148
147
|
int length = info.Length();
|
|
@@ -176,8 +175,6 @@ Napi::Value ASK::faceDetectUrl(const Napi::CallbackInfo& info) {
|
|
|
176
175
|
return obj;
|
|
177
176
|
}
|
|
178
177
|
|
|
179
|
-
|
|
180
|
-
|
|
181
178
|
Napi::Value ASK::faceFeatureExtract(const Napi::CallbackInfo& info) {
|
|
182
179
|
Napi::Env env = info.Env();
|
|
183
180
|
int length = info.Length();
|
|
@@ -284,7 +281,6 @@ Napi::Value ASK::faceFeatureExtractUrl(const Napi::CallbackInfo& info) {
|
|
|
284
281
|
return obj;
|
|
285
282
|
}
|
|
286
283
|
|
|
287
|
-
|
|
288
284
|
Napi::Value ASK::faceFeatureInfo(const Napi::CallbackInfo& info) {
|
|
289
285
|
Napi::Env env = info.Env();
|
|
290
286
|
int length = info.Length();
|
|
@@ -335,7 +331,6 @@ void strToFeatureInfo(string& feature, ASF_FaceFeature& featureInfo) {
|
|
|
335
331
|
featureInfo.feature = reinterpret_cast<MByte*>(feature11);
|
|
336
332
|
}
|
|
337
333
|
|
|
338
|
-
|
|
339
334
|
Napi::Value ASK::faceFeatureCompare(const Napi::CallbackInfo& info) {
|
|
340
335
|
Napi::Env env = info.Env();
|
|
341
336
|
//printf("AcceptArrayBuffer from js %d \n", info.Length());
|
|
@@ -368,10 +363,10 @@ Napi::Value ASK::faceFeatureCompare(const Napi::CallbackInfo& info) {
|
|
|
368
363
|
|
|
369
364
|
}
|
|
370
365
|
|
|
371
|
-
|
|
372
|
-
|
|
373
|
-
|
|
374
|
-
return
|
|
366
|
+
bool compareScore(const MFaceSore& a, const MFaceSore& b){
|
|
367
|
+
// if (b.score > a.score) return false;
|
|
368
|
+
// return true;
|
|
369
|
+
return a.score > b.score;//
|
|
375
370
|
}
|
|
376
371
|
|
|
377
372
|
Napi::Value ASK::ImageFaceCompare(const Napi::CallbackInfo& info) {
|
|
@@ -422,7 +417,7 @@ Napi::Value ASK::ImageFaceCompare(const Napi::CallbackInfo& info) {
|
|
|
422
417
|
|
|
423
418
|
ASF_FaceFeatureInfo* info = new ASF_FaceFeatureInfo();
|
|
424
419
|
info->searchId = searchId;
|
|
425
|
-
info->tag = (*tag).c_str();
|
|
420
|
+
info->tag = *tag; //(*tag).c_str();
|
|
426
421
|
info->feature = featureInfo;
|
|
427
422
|
featureInfoList[i] = *info;
|
|
428
423
|
}
|
|
@@ -483,27 +478,80 @@ Napi::Value ASK::RegisterFaces(const Napi::CallbackInfo& info) {
|
|
|
483
478
|
return errorData(env, "array expected");
|
|
484
479
|
}
|
|
485
480
|
Napi::Array arr = info[0].As<Napi::Array>();
|
|
481
|
+
m_vecFeatureInfoList.clear();
|
|
482
|
+
|
|
486
483
|
MUInt32 len = arr.Length();
|
|
487
|
-
ASF_FaceFeatureInfo* featureInfoList = new ASF_FaceFeatureInfo[len];
|
|
484
|
+
//ASF_FaceFeatureInfo* featureInfoList = new ASF_FaceFeatureInfo[len];
|
|
488
485
|
for(int i = 0; i < len; ++i) {
|
|
489
486
|
Napi::Object obj = static_cast<Napi::Value>(arr[i]).As<Napi::Object>().ToObject();
|
|
490
487
|
MInt32 searchId = obj.Get(static_cast<napi_value>(Napi::String::New(info.Env(),"searchId"))).As<Napi::Number>().Uint32Value();
|
|
491
|
-
std::string* tag = new std::string();
|
|
492
|
-
*tag = obj.Get(static_cast<napi_value>(Napi::String::New(info.Env(),"tag"))).As<Napi::String>().ToString();
|
|
493
|
-
//Napi::ArrayBuffer buf = obj.Get(static_cast<napi_value>(Napi::String::New(info.Env(),"feature"))).As<Napi::ArrayBuffer>();
|
|
488
|
+
// std::string* tag = new std::string();
|
|
489
|
+
// *tag = obj.Get(static_cast<napi_value>(Napi::String::New(info.Env(),"tag"))).As<Napi::String>().ToString();
|
|
490
|
+
// //Napi::ArrayBuffer buf = obj.Get(static_cast<napi_value>(Napi::String::New(info.Env(),"feature"))).As<Napi::ArrayBuffer>();
|
|
494
491
|
ASF_FaceFeature* featureInfo = new ASF_FaceFeature();
|
|
495
|
-
std::string* feature = new std::string();
|
|
496
|
-
*feature = obj.Get(static_cast<napi_value>(Napi::String::New(info.Env(),"feature"))).As<Napi::String>().ToString();
|
|
497
|
-
|
|
498
|
-
|
|
499
|
-
featureInfoList[i].
|
|
500
|
-
featureInfoList[i].
|
|
501
|
-
|
|
502
|
-
|
|
503
|
-
|
|
492
|
+
// std::string* feature = new std::string();
|
|
493
|
+
// *feature = obj.Get(static_cast<napi_value>(Napi::String::New(info.Env(),"feature"))).As<Napi::String>().ToString();
|
|
494
|
+
std::string strFeature = obj.Get(static_cast<napi_value>(Napi::String::New(info.Env(),"feature"))).As<Napi::String>().ToString();
|
|
495
|
+
strToFeatureInfo(strFeature, *featureInfo);
|
|
496
|
+
// featureInfoList[i].searchId = searchId;
|
|
497
|
+
// featureInfoList[i].tag = *tag; //(*tag).c_str();
|
|
498
|
+
// featureInfoList[i].feature = featureInfo;
|
|
499
|
+
ASF_FaceFeatureInfo fInfo = {0};
|
|
500
|
+
fInfo.searchId = searchId;
|
|
501
|
+
fInfo.tag = obj.Get(static_cast<napi_value>(Napi::String::New(env,"tag"))).As<Napi::String>().ToString();
|
|
502
|
+
fInfo.feature = featureInfo;
|
|
503
|
+
m_vecFeatureInfoList.push_back(fInfo);
|
|
504
|
+
}
|
|
505
|
+
// mFeatureInfoList = featureInfoList;
|
|
506
|
+
// mFeatureLen = len;
|
|
504
507
|
return Napi::Number::New(env, 1);
|
|
505
508
|
}
|
|
506
509
|
|
|
510
|
+
Napi::Array ASK::faceReg(std::vector<ASF_FaceFeatureInfo>& vecFeatureInfoList, ASF_MultiFaceInfo& detectedFaces, Napi::Env& env, ASVLOFFSCREEN& offscreen) {
|
|
511
|
+
Napi::Array list = Napi::Array::New(env, detectedFaces.faceNum);
|
|
512
|
+
for(int i = 0; i < detectedFaces.faceNum; ++i) {
|
|
513
|
+
ASF_SingleFaceInfo sData;
|
|
514
|
+
getDetectFaceInfo(detectedFaces, sData, i);
|
|
515
|
+
ASF_FaceFeature feature = { 0 };
|
|
516
|
+
MRESULT res = ASFFaceFeatureExtractEx(handle, &offscreen, &sData, &feature);
|
|
517
|
+
vector<MFaceSore> vecfaceScores;
|
|
518
|
+
for(int j = 0; j < vecFeatureInfoList.size(); ++j) {
|
|
519
|
+
ASF_FaceFeatureInfo& fInfo = vecFeatureInfoList[j];
|
|
520
|
+
MFloat confidenceLevel;
|
|
521
|
+
MRESULT res1 = ASFFaceFeatureCompare(this->handle, &feature, fInfo.feature, &confidenceLevel);
|
|
522
|
+
//cout << " confidenceLevel: " << confidenceLevel;
|
|
523
|
+
MFaceSore sInfo;
|
|
524
|
+
sInfo.searchId = fInfo.searchId;
|
|
525
|
+
sInfo.score = confidenceLevel;
|
|
526
|
+
sInfo.name = fInfo.tag;
|
|
527
|
+
vecfaceScores.push_back(sInfo);
|
|
528
|
+
}
|
|
529
|
+
sort(vecfaceScores.begin(), vecfaceScores.end(), compareScore);
|
|
530
|
+
int ll = vecfaceScores.size() > 3? 3 : vecfaceScores.size();
|
|
531
|
+
Napi::Array mFaceScores = Napi::Array::New(env, ll);
|
|
532
|
+
//cout << " i=" << i << ", len=" << ll << ",mFeatureLen=" << vecFeatureInfoList.size() << endl;
|
|
533
|
+
for(int n = 0; n < ll; ++n) {
|
|
534
|
+
MFaceSore& sInfo = vecfaceScores[n];
|
|
535
|
+
Napi::Object faceScore = Napi::Object::New(env);
|
|
536
|
+
faceScore.Set(Napi::String::New(env, "searchId"), sInfo.searchId);
|
|
537
|
+
faceScore.Set(Napi::String::New(env, "score"), sInfo.score);
|
|
538
|
+
faceScore.Set(Napi::String::New(env, "name"), sInfo.name);
|
|
539
|
+
//cout << "name:" << sInfo.name << ",searchId:" << sInfo.searchId << ",score=" << sInfo.score << endl;
|
|
540
|
+
mFaceScores[n] = faceScore;
|
|
541
|
+
}
|
|
542
|
+
Napi::Object data = Napi::Object::New(env);
|
|
543
|
+
data.Set(Napi::String::New(env, "left"), sData.faceRect.left);
|
|
544
|
+
data.Set(Napi::String::New(env, "top"), sData.faceRect.top);
|
|
545
|
+
data.Set(Napi::String::New(env, "right"), sData.faceRect.right);
|
|
546
|
+
data.Set(Napi::String::New(env, "bottom"), sData.faceRect.bottom);
|
|
547
|
+
data.Set(Napi::String::New(env, "faceScores"), mFaceScores);
|
|
548
|
+
list[i] = data;
|
|
549
|
+
vecfaceScores.clear();
|
|
550
|
+
}
|
|
551
|
+
//obj.Set(Napi::String::New(env, "faceRects"), list);
|
|
552
|
+
return list;
|
|
553
|
+
}
|
|
554
|
+
|
|
507
555
|
Napi::Value ASK::ImageFaceCompareUrl2(const Napi::CallbackInfo& info) {
|
|
508
556
|
Napi::Env env = info.Env();
|
|
509
557
|
int length = info.Length();
|
|
@@ -519,53 +567,20 @@ Napi::Value ASK::ImageFaceCompareUrl2(const Napi::CallbackInfo& info) {
|
|
|
519
567
|
|
|
520
568
|
ASF_MultiFaceInfo detectedFaces = { 0 };
|
|
521
569
|
MRESULT res = ASFDetectFacesEx(this->handle, &offscreen, &detectedFaces);
|
|
522
|
-
//return Napi::Number::New(env, 1);
|
|
523
570
|
Napi::Object obj = Napi::Object::New(env);
|
|
524
571
|
obj.Set(Napi::String::New(env, "faceNum"), detectedFaces.faceNum);
|
|
525
572
|
if (0 == detectedFaces.faceNum) {
|
|
526
573
|
SafeFree(imageData);
|
|
527
574
|
return obj;
|
|
528
575
|
}
|
|
529
|
-
|
|
530
|
-
Napi::Array list = Napi::Array::New(env, detectedFaces.faceNum);
|
|
531
|
-
for(int i = 0; i < detectedFaces.faceNum; ++i) {
|
|
532
|
-
ASF_SingleFaceInfo sData;
|
|
533
|
-
getDetectFaceInfo(detectedFaces, sData, i);
|
|
534
|
-
ASF_FaceFeature feature = { 0 };
|
|
535
|
-
res = ASFFaceFeatureExtractEx(handle, &offscreen, &sData, &feature);
|
|
536
|
-
MFaceSore* faceScores = new MFaceSore[mFeatureLen];
|
|
537
|
-
for(int j = 0; j < mFeatureLen; ++j) {
|
|
538
|
-
MFloat confidenceLevel;
|
|
539
|
-
MRESULT res1 = ASFFaceFeatureCompare(this->handle, &feature, mFeatureInfoList[j].feature, &confidenceLevel);
|
|
540
|
-
faceScores[j].searchId = mFeatureInfoList[j].searchId;
|
|
541
|
-
faceScores[j].score = confidenceLevel;
|
|
542
|
-
faceScores[j].name = mFeatureInfoList[j].tag;
|
|
543
|
-
}
|
|
544
|
-
sort(faceScores, faceScores + mFeatureLen, compareScore);
|
|
545
|
-
int ll = mFeatureLen > 5? 5 : mFeatureLen;
|
|
546
|
-
Napi::Array mFaceScores = Napi::Array::New(env, ll);
|
|
547
|
-
for(int n = 0; n < ll; ++n) {
|
|
548
|
-
Napi::Object faceScore = Napi::Object::New(env);
|
|
549
|
-
faceScore.Set(Napi::String::New(env, "searchId"), faceScores[n].searchId);
|
|
550
|
-
faceScore.Set(Napi::String::New(env, "score"), faceScores[n].score);
|
|
551
|
-
faceScore.Set(Napi::String::New(env, "name"), faceScores[n].name);
|
|
552
|
-
mFaceScores[n] = faceScore;
|
|
553
|
-
}
|
|
554
|
-
Napi::Object data = Napi::Object::New(env);
|
|
555
|
-
data.Set(Napi::String::New(env, "left"), sData.faceRect.left);
|
|
556
|
-
data.Set(Napi::String::New(env, "top"), sData.faceRect.top);
|
|
557
|
-
data.Set(Napi::String::New(env, "right"), sData.faceRect.right);
|
|
558
|
-
data.Set(Napi::String::New(env, "bottom"), sData.faceRect.bottom);
|
|
559
|
-
data.Set(Napi::String::New(env, "faceScores"), mFaceScores);
|
|
560
|
-
list[i] = data;
|
|
561
|
-
delete []faceScores;
|
|
562
|
-
}
|
|
576
|
+
Napi::Array list = faceReg(this->m_vecFeatureInfoList, detectedFaces, env, offscreen);
|
|
563
577
|
obj.Set(Napi::String::New(env, "faceRects"), list);
|
|
564
578
|
SafeFree(imageData);
|
|
565
579
|
return obj;
|
|
566
580
|
}
|
|
567
581
|
|
|
568
582
|
|
|
583
|
+
|
|
569
584
|
Napi::Value ASK::ImageFaceCompareUrl(const Napi::CallbackInfo& info) {
|
|
570
585
|
Napi::Env env = info.Env();
|
|
571
586
|
int length = info.Length();
|
|
@@ -584,7 +599,7 @@ Napi::Value ASK::ImageFaceCompareUrl(const Napi::CallbackInfo& info) {
|
|
|
584
599
|
Napi::Object obj = Napi::Object::New(env);
|
|
585
600
|
obj.Set(Napi::String::New(env, "faceNum"), detectedFaces.faceNum);
|
|
586
601
|
if (0 == detectedFaces.faceNum) {
|
|
587
|
-
|
|
602
|
+
SafeFree(imageData);
|
|
588
603
|
return obj;
|
|
589
604
|
}
|
|
590
605
|
|
|
@@ -595,69 +610,26 @@ Napi::Value ASK::ImageFaceCompareUrl(const Napi::CallbackInfo& info) {
|
|
|
595
610
|
}
|
|
596
611
|
Napi::Array arr = info[1].As<Napi::Array>();
|
|
597
612
|
MUInt32 len = arr.Length();
|
|
598
|
-
|
|
613
|
+
|
|
614
|
+
std::vector<ASF_FaceFeatureInfo> vecFeatureInfoList;
|
|
599
615
|
for(int i = 0; i < len; ++i) {
|
|
600
616
|
Napi::Object obj = static_cast<Napi::Value>(arr[i]).As<Napi::Object>().ToObject();
|
|
601
617
|
MInt32 searchId = obj.Get(static_cast<napi_value>(Napi::String::New(info.Env(),"searchId"))).As<Napi::Number>().Uint32Value();
|
|
602
|
-
std::string
|
|
603
|
-
*tag = obj.Get(static_cast<napi_value>(Napi::String::New(info.Env(),"tag"))).As<Napi::String>().ToString();
|
|
604
|
-
//Napi::ArrayBuffer buf = obj.Get(static_cast<napi_value>(Napi::String::New(info.Env(),"feature"))).As<Napi::ArrayBuffer>();
|
|
618
|
+
std::string strFeature = obj.Get(static_cast<napi_value>(Napi::String::New(info.Env(),"feature"))).As<Napi::String>().ToString();
|
|
605
619
|
ASF_FaceFeature* featureInfo = new ASF_FaceFeature();
|
|
606
|
-
|
|
607
|
-
|
|
608
|
-
|
|
609
|
-
|
|
610
|
-
|
|
611
|
-
|
|
612
|
-
|
|
613
|
-
|
|
614
|
-
featureInfoList[i].feature = featureInfo;
|
|
615
|
-
//featureInfoList[i] = *info;
|
|
616
|
-
}
|
|
617
|
-
|
|
618
|
-
//compare
|
|
619
|
-
Napi::Array list = Napi::Array::New(env, detectedFaces.faceNum);
|
|
620
|
-
for(int i = 0; i < detectedFaces.faceNum; ++i) {
|
|
621
|
-
ASF_SingleFaceInfo sData;
|
|
622
|
-
getDetectFaceInfo(detectedFaces, sData, i);
|
|
623
|
-
ASF_FaceFeature feature = { 0 };
|
|
624
|
-
res = ASFFaceFeatureExtractEx(handle, &offscreen, &sData, &feature);
|
|
625
|
-
MFaceSore* faceScores = new MFaceSore[len];
|
|
626
|
-
for(int j = 0; j < len; ++j) {
|
|
627
|
-
MFloat confidenceLevel;
|
|
628
|
-
MRESULT res1 = ASFFaceFeatureCompare(this->handle, &feature, featureInfoList[j].feature, &confidenceLevel);
|
|
629
|
-
//cout << confidenceLevel <<endl;
|
|
630
|
-
//MFaceSore* pFace = new MFaceSore();
|
|
631
|
-
faceScores[j].searchId = featureInfoList[j].searchId;
|
|
632
|
-
faceScores[j].score = confidenceLevel;
|
|
633
|
-
faceScores[j].name = featureInfoList[j].tag;
|
|
634
|
-
// faceScores[j] = *pFace;
|
|
635
|
-
}
|
|
636
|
-
sort(faceScores, faceScores + len, compareScore);
|
|
637
|
-
int ll = len > 5? 5 : len;
|
|
638
|
-
Napi::Array mFaceScores = Napi::Array::New(env, ll);
|
|
639
|
-
for(int n = 0; n < ll; ++n) {
|
|
640
|
-
Napi::Object faceScore = Napi::Object::New(env);
|
|
641
|
-
faceScore.Set(Napi::String::New(env, "searchId"), faceScores[n].searchId);
|
|
642
|
-
faceScore.Set(Napi::String::New(env, "score"), faceScores[n].score);
|
|
643
|
-
faceScore.Set(Napi::String::New(env, "name"), faceScores[n].name);
|
|
644
|
-
mFaceScores[n] = faceScore;
|
|
645
|
-
}
|
|
646
|
-
Napi::Object data = Napi::Object::New(env);
|
|
647
|
-
data.Set(Napi::String::New(env, "left"), sData.faceRect.left);
|
|
648
|
-
data.Set(Napi::String::New(env, "top"), sData.faceRect.top);
|
|
649
|
-
data.Set(Napi::String::New(env, "right"), sData.faceRect.right);
|
|
650
|
-
data.Set(Napi::String::New(env, "bottom"), sData.faceRect.bottom);
|
|
651
|
-
data.Set(Napi::String::New(env, "faceScores"), mFaceScores);
|
|
652
|
-
list[i] = data;
|
|
653
|
-
delete []faceScores;
|
|
654
|
-
}
|
|
620
|
+
strToFeatureInfo(strFeature, *featureInfo);
|
|
621
|
+
ASF_FaceFeatureInfo fInfo = {0};
|
|
622
|
+
fInfo.searchId = searchId;
|
|
623
|
+
fInfo.tag = obj.Get(static_cast<napi_value>(Napi::String::New(env,"tag"))).As<Napi::String>().ToString();
|
|
624
|
+
fInfo.feature = featureInfo;
|
|
625
|
+
vecFeatureInfoList.push_back(fInfo);
|
|
626
|
+
}
|
|
627
|
+
Napi::Array list = faceReg(vecFeatureInfoList, detectedFaces, env, offscreen);
|
|
655
628
|
obj.Set(Napi::String::New(env, "faceRects"), list);
|
|
656
629
|
SafeFree(imageData);
|
|
657
630
|
for(int i = 0; i < len; ++i) {
|
|
658
|
-
delete
|
|
631
|
+
delete vecFeatureInfoList[i].feature;
|
|
659
632
|
}
|
|
660
|
-
delete []featureInfoList;
|
|
661
633
|
return obj;
|
|
662
634
|
}
|
|
663
635
|
|
package/ask.h
CHANGED
|
@@ -7,6 +7,7 @@
|
|
|
7
7
|
#include "asvloffscreen.h"
|
|
8
8
|
#include "merror.h"
|
|
9
9
|
#include <string>
|
|
10
|
+
#include <vector>
|
|
10
11
|
typedef struct __face_score
|
|
11
12
|
{
|
|
12
13
|
MInt32 searchId;
|
|
@@ -17,7 +18,8 @@ typedef struct __face_score
|
|
|
17
18
|
typedef struct{
|
|
18
19
|
MInt32 searchId; // 唯一标识符
|
|
19
20
|
LPASF_FaceFeature feature; // 人脸特征值
|
|
20
|
-
|
|
21
|
+
std::string tag;
|
|
22
|
+
//MPCChar tag; // 备注
|
|
21
23
|
}ASF_FaceFeatureInfo, *LPASF_FaceFeatureInfo;
|
|
22
24
|
|
|
23
25
|
class ASK : public Napi::ObjectWrap<ASK> {
|
|
@@ -35,7 +37,6 @@ class ASK : public Napi::ObjectWrap<ASK> {
|
|
|
35
37
|
// Napi::Value RegisterFaceFeature(const Napi::CallbackInfo& info);
|
|
36
38
|
// Napi::Value SearchFaceFeature(const Napi::CallbackInfo& info);
|
|
37
39
|
|
|
38
|
-
|
|
39
40
|
Napi::Value ImageFaceCompare(const Napi::CallbackInfo& info);
|
|
40
41
|
|
|
41
42
|
Napi::Value faceDetectUrl(const Napi::CallbackInfo& info);
|
|
@@ -52,13 +53,15 @@ class ASK : public Napi::ObjectWrap<ASK> {
|
|
|
52
53
|
MUInt8* processFile(const char* filePath, int& picWidth, int& picHeight);
|
|
53
54
|
//void processFileUrl(const char* filePath, MUInt8* imageData, ASVLOFFSCREEN& offscreen);
|
|
54
55
|
MUInt8* processFileUrl(const char* url, int& picWidth, int& picHeight);
|
|
56
|
+
Napi::Array faceReg(std::vector<ASF_FaceFeatureInfo>& vecFeatureInfoList, ASF_MultiFaceInfo& detectedFaces, Napi::Env& env, ASVLOFFSCREEN& offscreen);
|
|
55
57
|
|
|
56
58
|
// void mFaceDetect(ASVLOFFSCREEN& offscree, ASF_MultiFaceInfo* detectedFaces);
|
|
57
59
|
// void mFaceFeatureExtract(ASVLOFFSCREEN& offscree, ASF_MultiFaceInfo* detectedFaces);
|
|
58
60
|
|
|
59
61
|
MHandle handle;
|
|
60
|
-
ASF_FaceFeatureInfo* mFeatureInfoList;
|
|
61
|
-
MUInt32 mFeatureLen;
|
|
62
|
+
// ASF_FaceFeatureInfo* mFeatureInfoList;
|
|
63
|
+
// MUInt32 mFeatureLen;
|
|
64
|
+
std::vector<ASF_FaceFeatureInfo> m_vecFeatureInfoList;
|
|
62
65
|
};
|
|
63
66
|
|
|
64
67
|
#endif
|