Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
S
smart_gov_platform
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Analytics
Analytics
CI / CD
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
赵啸非
smart_gov_platform
Commits
19b65bc5
Commit
19b65bc5
authored
Mar 02, 2023
by
廖旭伟
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
基础平台人脸识别代码恢复
parent
abff60b6
Changes
6
Expand all
Show whitespace changes
Inline
Side-by-side
Showing
6 changed files
with
857 additions
and
857 deletions
+857
-857
base-manager/pom.xml
base-manager/pom.xml
+2
-2
base-manager/src/main/java/com/mortals/xhx/common/utils/FaceUtil.java
.../src/main/java/com/mortals/xhx/common/utils/FaceUtil.java
+110
-110
base-manager/src/main/java/com/mortals/xhx/face/ArcsoftFaceUtil.java
...r/src/main/java/com/mortals/xhx/face/ArcsoftFaceUtil.java
+236
-236
base-manager/src/main/java/com/mortals/xhx/face/factory/FaceEnginePoolFactory.java
...a/com/mortals/xhx/face/factory/FaceEnginePoolFactory.java
+121
-121
base-manager/src/main/java/com/mortals/xhx/module/identity/service/impl/SysFaceServiceImpl.java
.../xhx/module/identity/service/impl/SysFaceServiceImpl.java
+248
-248
base-manager/src/main/java/com/mortals/xhx/module/identity/web/SysFaceController.java
...om/mortals/xhx/module/identity/web/SysFaceController.java
+140
-140
No files found.
base-manager/pom.xml
View file @
19b65bc5
...
...
@@ -214,11 +214,11 @@
</dependency>
<!-- 虹软人脸解析 -->
<!--
<dependency>
<dependency>
<groupId>
com.arcsoft.face
</groupId>
<artifactId>
arcsoft-sdk-face
</artifactId>
<version>
3.0.0.0
</version>
</dependency>
-->
</dependency>
<dependency>
<groupId>
net.coobird
</groupId>
<artifactId>
thumbnailator
</artifactId>
...
...
base-manager/src/main/java/com/mortals/xhx/common/utils/FaceUtil.java
View file @
19b65bc5
//
package com.mortals.xhx.common.utils;
//
//
import com.arcsoft.face.*;
//
import com.arcsoft.face.enums.DetectMode;
//
import com.arcsoft.face.enums.DetectOrient;
//
import com.arcsoft.face.enums.ErrorInfo;
//
import com.arcsoft.face.toolkit.ImageInfo;
//
import com.mortals.framework.exception.AppException;
//
import lombok.extern.slf4j.Slf4j;
//
import org.springframework.stereotype.Component;
//
//
import java.util.ArrayList;
//
import java.util.List;
//
//
import static com.arcsoft.face.toolkit.ImageFactory.getRGBData;
//
//
@Slf4j
//
@Component
//
public class FaceUtil {
//
//
public FaceEngine initFace(String appId, String sdkKey) {
//
FaceEngine faceEngine = new FaceEngine(getClass().getResource(getOsName()).getPath());
//
//激活引擎
//
int errorCode = faceEngine.activeOnline(appId, sdkKey);
//
isTrue(!(errorCode != ErrorInfo.MOK.getValue() && errorCode != ErrorInfo.MERR_ASF_ALREADY_ACTIVATED.getValue()), "引擎激活失败");
//
ActiveFileInfo activeFileInfo = new ActiveFileInfo();
//
errorCode = faceEngine.getActiveFileInfo(activeFileInfo);
//
isTrue(!(errorCode != ErrorInfo.MOK.getValue() && errorCode != ErrorInfo.MERR_ASF_ALREADY_ACTIVATED.getValue()), "获取激活文件信息失败");
//
//引擎配置
//
EngineConfiguration engineConfiguration = new EngineConfiguration();
//
engineConfiguration.setDetectMode(DetectMode.ASF_DETECT_MODE_IMAGE);
//
engineConfiguration.setDetectFaceOrientPriority(DetectOrient.ASF_OP_ALL_OUT);
//
engineConfiguration.setDetectFaceMaxNum(10);
//
engineConfiguration.setDetectFaceScaleVal(16);
//
//功能配置
//
FunctionConfiguration functionConfiguration = new FunctionConfiguration();
//
functionConfiguration.setSupportAge(true);
//
functionConfiguration.setSupportFace3dAngle(true);
//
functionConfiguration.setSupportFaceDetect(true);
//
functionConfiguration.setSupportFaceRecognition(true);
//
functionConfiguration.setSupportGender(true);
//
functionConfiguration.setSupportLiveness(true);
//
functionConfiguration.setSupportIRLiveness(true);
//
engineConfiguration.setFunctionConfiguration(functionConfiguration);
//
//初始化引擎
//
errorCode = faceEngine.init(engineConfiguration);
//
isTrue(errorCode == ErrorInfo.MOK.getValue(), "初始化引擎失败");
//
return faceEngine;
//
}
//
//
//
/**
//
* 人脸检测、特征提取
//
*
//
* @param faceEngine
//
* @param bytes
//
* @return
//
*/
//
public byte[] featureData(FaceEngine faceEngine, byte[] bytes) {
//
//人脸检测
//
ImageInfo imageInfo = getRGBData(bytes);
//
List<FaceInfo> faceInfoList = new ArrayList<FaceInfo>();
//
faceEngine.detectFaces(imageInfo.getImageData(), imageInfo.getWidth(), imageInfo.getHeight(), imageInfo.getImageFormat(), faceInfoList);
//
//特征提取
//
FaceFeature faceFeature = new FaceFeature();
//
faceEngine.extractFaceFeature(imageInfo.getImageData(), imageInfo.getWidth(), imageInfo.getHeight(), imageInfo.getImageFormat(), faceInfoList.get(0), faceFeature);
//
return faceFeature.getFeatureData();
//
}
//
//
//
/**
//
* 特征比对
//
*
//
* @param targeFace
//
* @param sourceFace
//
* @return
//
*/
//
public boolean featureComparison(FaceEngine faceEngine, byte[] targeFace, byte[] sourceFace) {
//
//特征比对
//
FaceFeature targetFaceFeature = new FaceFeature();
//
targetFaceFeature.setFeatureData(targeFace);
//
FaceFeature sourceFaceFeature = new FaceFeature();
//
sourceFaceFeature.setFeatureData(sourceFace);
//
FaceSimilar faceSimilar = new FaceSimilar();
//
faceEngine.compareFaceFeature(targetFaceFeature, sourceFaceFeature, faceSimilar);
//
float score = faceSimilar.getScore();
//
if (score > 0.8) {
//
return true;
//
}
//
return false;
//
}
//
//
public void unInit(FaceEngine faceEngine) {
//
faceEngine.unInit();
//
}
//
//
public String getOsName() {
//
String os = System.getProperty("os.name");
//
String osName = os.toLowerCase().startsWith("win") ? "/face_lib/win64" : "/face_lib/linux";
//
return osName;
//
}
//
//
//
private void isTrue(boolean b, String errorMsg) {
//
if (!b) {
//
throw new AppException(errorMsg);
//
}
//
}
//
//
}
package
com.mortals.xhx.common.utils
;
import
com.arcsoft.face.*
;
import
com.arcsoft.face.enums.DetectMode
;
import
com.arcsoft.face.enums.DetectOrient
;
import
com.arcsoft.face.enums.ErrorInfo
;
import
com.arcsoft.face.toolkit.ImageInfo
;
import
com.mortals.framework.exception.AppException
;
import
lombok.extern.slf4j.Slf4j
;
import
org.springframework.stereotype.Component
;
import
java.util.ArrayList
;
import
java.util.List
;
import
static
com
.
arcsoft
.
face
.
toolkit
.
ImageFactory
.
getRGBData
;
@Slf4j
@Component
public
class
FaceUtil
{
public
FaceEngine
initFace
(
String
appId
,
String
sdkKey
)
{
FaceEngine
faceEngine
=
new
FaceEngine
(
getClass
().
getResource
(
getOsName
()).
getPath
());
//激活引擎
int
errorCode
=
faceEngine
.
activeOnline
(
appId
,
sdkKey
);
isTrue
(!(
errorCode
!=
ErrorInfo
.
MOK
.
getValue
()
&&
errorCode
!=
ErrorInfo
.
MERR_ASF_ALREADY_ACTIVATED
.
getValue
()),
"引擎激活失败"
);
ActiveFileInfo
activeFileInfo
=
new
ActiveFileInfo
();
errorCode
=
faceEngine
.
getActiveFileInfo
(
activeFileInfo
);
isTrue
(!(
errorCode
!=
ErrorInfo
.
MOK
.
getValue
()
&&
errorCode
!=
ErrorInfo
.
MERR_ASF_ALREADY_ACTIVATED
.
getValue
()),
"获取激活文件信息失败"
);
//引擎配置
EngineConfiguration
engineConfiguration
=
new
EngineConfiguration
();
engineConfiguration
.
setDetectMode
(
DetectMode
.
ASF_DETECT_MODE_IMAGE
);
engineConfiguration
.
setDetectFaceOrientPriority
(
DetectOrient
.
ASF_OP_ALL_OUT
);
engineConfiguration
.
setDetectFaceMaxNum
(
10
);
engineConfiguration
.
setDetectFaceScaleVal
(
16
);
//功能配置
FunctionConfiguration
functionConfiguration
=
new
FunctionConfiguration
();
functionConfiguration
.
setSupportAge
(
true
);
functionConfiguration
.
setSupportFace3dAngle
(
true
);
functionConfiguration
.
setSupportFaceDetect
(
true
);
functionConfiguration
.
setSupportFaceRecognition
(
true
);
functionConfiguration
.
setSupportGender
(
true
);
functionConfiguration
.
setSupportLiveness
(
true
);
functionConfiguration
.
setSupportIRLiveness
(
true
);
engineConfiguration
.
setFunctionConfiguration
(
functionConfiguration
);
//初始化引擎
errorCode
=
faceEngine
.
init
(
engineConfiguration
);
isTrue
(
errorCode
==
ErrorInfo
.
MOK
.
getValue
(),
"初始化引擎失败"
);
return
faceEngine
;
}
/**
* 人脸检测、特征提取
*
* @param faceEngine
* @param bytes
* @return
*/
public
byte
[]
featureData
(
FaceEngine
faceEngine
,
byte
[]
bytes
)
{
//人脸检测
ImageInfo
imageInfo
=
getRGBData
(
bytes
);
List
<
FaceInfo
>
faceInfoList
=
new
ArrayList
<
FaceInfo
>();
faceEngine
.
detectFaces
(
imageInfo
.
getImageData
(),
imageInfo
.
getWidth
(),
imageInfo
.
getHeight
(),
imageInfo
.
getImageFormat
(),
faceInfoList
);
//特征提取
FaceFeature
faceFeature
=
new
FaceFeature
();
faceEngine
.
extractFaceFeature
(
imageInfo
.
getImageData
(),
imageInfo
.
getWidth
(),
imageInfo
.
getHeight
(),
imageInfo
.
getImageFormat
(),
faceInfoList
.
get
(
0
),
faceFeature
);
return
faceFeature
.
getFeatureData
();
}
/**
* 特征比对
*
* @param targeFace
* @param sourceFace
* @return
*/
public
boolean
featureComparison
(
FaceEngine
faceEngine
,
byte
[]
targeFace
,
byte
[]
sourceFace
)
{
//特征比对
FaceFeature
targetFaceFeature
=
new
FaceFeature
();
targetFaceFeature
.
setFeatureData
(
targeFace
);
FaceFeature
sourceFaceFeature
=
new
FaceFeature
();
sourceFaceFeature
.
setFeatureData
(
sourceFace
);
FaceSimilar
faceSimilar
=
new
FaceSimilar
();
faceEngine
.
compareFaceFeature
(
targetFaceFeature
,
sourceFaceFeature
,
faceSimilar
);
float
score
=
faceSimilar
.
getScore
();
if
(
score
>
0.8
)
{
return
true
;
}
return
false
;
}
public
void
unInit
(
FaceEngine
faceEngine
)
{
faceEngine
.
unInit
();
}
public
String
getOsName
()
{
String
os
=
System
.
getProperty
(
"os.name"
);
String
osName
=
os
.
toLowerCase
().
startsWith
(
"win"
)
?
"/face_lib/win64"
:
"/face_lib/linux"
;
return
osName
;
}
private
void
isTrue
(
boolean
b
,
String
errorMsg
)
{
if
(!
b
)
{
throw
new
AppException
(
errorMsg
);
}
}
}
base-manager/src/main/java/com/mortals/xhx/face/ArcsoftFaceUtil.java
View file @
19b65bc5
This diff is collapsed.
Click to expand it.
base-manager/src/main/java/com/mortals/xhx/face/factory/FaceEnginePoolFactory.java
View file @
19b65bc5
//
package com.mortals.xhx.face.factory;
//
//
import com.arcsoft.face.ActiveFileInfo;
//
import com.arcsoft.face.EngineConfiguration;
//
import com.arcsoft.face.FaceEngine;
//
import com.arcsoft.face.FunctionConfiguration;
//
import com.arcsoft.face.enums.DetectMode;
//
import com.arcsoft.face.enums.DetectOrient;
//
import com.arcsoft.face.enums.ErrorInfo;
//
import lombok.extern.slf4j.Slf4j;
//
import org.apache.commons.pool2.BasePooledObjectFactory;
//
import org.apache.commons.pool2.PooledObject;
//
import org.apache.commons.pool2.impl.DefaultPooledObject;
//
//
@Slf4j
//
public class FaceEnginePoolFactory extends BasePooledObjectFactory<FaceEngine> {
//
//
private String appId;
//
private String sdkKey;
//
private String sdkLibPath;
//
//
public FaceEnginePoolFactory(String appId, String sdkKey, String sdkLibPath) {
//
this.appId = appId;
//
this.sdkKey = sdkKey;
//
this.sdkLibPath = sdkLibPath;
//
//this.sdkLibPath = "D:\\face\\win64";
//
}
//
//
/**
//
* 在对象池中创建对象
//
* @return
//
* @throws Exception
//
*/
//
@Override
//
public FaceEngine create() throws Exception {
//
FaceEngine faceEngine = new FaceEngine(sdkLibPath);
//
//激活引擎
//
int errorCode = faceEngine.activeOnline(appId, sdkKey);
//
if (errorCode != ErrorInfo.MOK.getValue() && errorCode != ErrorInfo.MERR_ASF_ALREADY_ACTIVATED.getValue()) {
//
log.warn("引擎激活失败");
//
}
//
ActiveFileInfo activeFileInfo=new ActiveFileInfo();
//
errorCode = faceEngine.getActiveFileInfo(activeFileInfo);
//
if (errorCode != ErrorInfo.MOK.getValue() && errorCode != ErrorInfo.MERR_ASF_ALREADY_ACTIVATED.getValue()) {
//
log.warn("获取激活文件信息失败");
//
}
//
//引擎配置
//
EngineConfiguration engineConfiguration = new EngineConfiguration();
//
engineConfiguration.setDetectMode(DetectMode.ASF_DETECT_MODE_IMAGE);
//
engineConfiguration.setDetectFaceOrientPriority(DetectOrient.ASF_OP_ALL_OUT);
//
engineConfiguration.setDetectFaceMaxNum(10);
//
engineConfiguration.setDetectFaceScaleVal(16);
//
//功能配置
//
FunctionConfiguration functionConfiguration = new FunctionConfiguration();
//
functionConfiguration.setSupportAge(true);
//
functionConfiguration.setSupportFace3dAngle(true);
//
functionConfiguration.setSupportFaceDetect(true);
//
functionConfiguration.setSupportFaceRecognition(true);
//
functionConfiguration.setSupportGender(true);
//
functionConfiguration.setSupportLiveness(true);
//
functionConfiguration.setSupportIRLiveness(true);
//
engineConfiguration.setFunctionConfiguration(functionConfiguration);
//
//初始化引擎
//
errorCode = faceEngine.init(engineConfiguration);
//
//
if (errorCode != ErrorInfo.MOK.getValue()) {
//
log.error("初始化引擎失败");
//
}
//
return faceEngine;
//
}
//
//
/**
//
* 包装对象
//
* @param faceEngine
//
* @return
//
*/
//
@Override
//
public PooledObject<FaceEngine> wrap(FaceEngine faceEngine) {
//
return new DefaultPooledObject<>(faceEngine);
//
}
//
/**
//
* 销毁对象
//
* @param faceEngine 对象池
//
* @throws Exception 异常
//
*/
//
@Override
//
public void destroyObject(PooledObject<FaceEngine> faceEngine) throws Exception {
//
super.destroyObject(faceEngine);
//
}
//
//
/**
//
* 校验对象是否可用
//
* @param faceEngine 对象池
//
* @return 对象是否可用结果,boolean
//
*/
//
@Override
//
public boolean validateObject(PooledObject<FaceEngine> faceEngine) {
//
return super.validateObject(faceEngine);
//
}
//
//
/**
//
* 激活钝化的对象系列操作
//
* @param faceEngine 对象池
//
* @throws Exception 异常信息
//
*/
//
@Override
//
public void activateObject(PooledObject<FaceEngine> faceEngine) throws Exception {
//
super.activateObject(faceEngine);
//
}
//
//
/**
//
* 钝化未使用的对象
//
* @param faceEngine 对象池
//
* @throws Exception 异常信息
//
*/
//
@Override
//
public void passivateObject(PooledObject<FaceEngine> faceEngine) throws Exception {
//
super.passivateObject(faceEngine);
//
}
//
//
}
package
com.mortals.xhx.face.factory
;
import
com.arcsoft.face.ActiveFileInfo
;
import
com.arcsoft.face.EngineConfiguration
;
import
com.arcsoft.face.FaceEngine
;
import
com.arcsoft.face.FunctionConfiguration
;
import
com.arcsoft.face.enums.DetectMode
;
import
com.arcsoft.face.enums.DetectOrient
;
import
com.arcsoft.face.enums.ErrorInfo
;
import
lombok.extern.slf4j.Slf4j
;
import
org.apache.commons.pool2.BasePooledObjectFactory
;
import
org.apache.commons.pool2.PooledObject
;
import
org.apache.commons.pool2.impl.DefaultPooledObject
;
@Slf4j
public
class
FaceEnginePoolFactory
extends
BasePooledObjectFactory
<
FaceEngine
>
{
private
String
appId
;
private
String
sdkKey
;
private
String
sdkLibPath
;
public
FaceEnginePoolFactory
(
String
appId
,
String
sdkKey
,
String
sdkLibPath
)
{
this
.
appId
=
appId
;
this
.
sdkKey
=
sdkKey
;
this
.
sdkLibPath
=
sdkLibPath
;
//this.sdkLibPath = "D:\\face\\win64";
}
/**
* 在对象池中创建对象
* @return
* @throws Exception
*/
@Override
public
FaceEngine
create
()
throws
Exception
{
FaceEngine
faceEngine
=
new
FaceEngine
(
sdkLibPath
);
//激活引擎
int
errorCode
=
faceEngine
.
activeOnline
(
appId
,
sdkKey
);
if
(
errorCode
!=
ErrorInfo
.
MOK
.
getValue
()
&&
errorCode
!=
ErrorInfo
.
MERR_ASF_ALREADY_ACTIVATED
.
getValue
())
{
log
.
warn
(
"引擎激活失败"
);
}
ActiveFileInfo
activeFileInfo
=
new
ActiveFileInfo
();
errorCode
=
faceEngine
.
getActiveFileInfo
(
activeFileInfo
);
if
(
errorCode
!=
ErrorInfo
.
MOK
.
getValue
()
&&
errorCode
!=
ErrorInfo
.
MERR_ASF_ALREADY_ACTIVATED
.
getValue
())
{
log
.
warn
(
"获取激活文件信息失败"
);
}
//引擎配置
EngineConfiguration
engineConfiguration
=
new
EngineConfiguration
();
engineConfiguration
.
setDetectMode
(
DetectMode
.
ASF_DETECT_MODE_IMAGE
);
engineConfiguration
.
setDetectFaceOrientPriority
(
DetectOrient
.
ASF_OP_ALL_OUT
);
engineConfiguration
.
setDetectFaceMaxNum
(
10
);
engineConfiguration
.
setDetectFaceScaleVal
(
16
);
//功能配置
FunctionConfiguration
functionConfiguration
=
new
FunctionConfiguration
();
functionConfiguration
.
setSupportAge
(
true
);
functionConfiguration
.
setSupportFace3dAngle
(
true
);
functionConfiguration
.
setSupportFaceDetect
(
true
);
functionConfiguration
.
setSupportFaceRecognition
(
true
);
functionConfiguration
.
setSupportGender
(
true
);
functionConfiguration
.
setSupportLiveness
(
true
);
functionConfiguration
.
setSupportIRLiveness
(
true
);
engineConfiguration
.
setFunctionConfiguration
(
functionConfiguration
);
//初始化引擎
errorCode
=
faceEngine
.
init
(
engineConfiguration
);
if
(
errorCode
!=
ErrorInfo
.
MOK
.
getValue
())
{
log
.
error
(
"初始化引擎失败"
);
}
return
faceEngine
;
}
/**
* 包装对象
* @param faceEngine
* @return
*/
@Override
public
PooledObject
<
FaceEngine
>
wrap
(
FaceEngine
faceEngine
)
{
return
new
DefaultPooledObject
<>(
faceEngine
);
}
/**
* 销毁对象
* @param faceEngine 对象池
* @throws Exception 异常
*/
@Override
public
void
destroyObject
(
PooledObject
<
FaceEngine
>
faceEngine
)
throws
Exception
{
super
.
destroyObject
(
faceEngine
);
}
/**
* 校验对象是否可用
* @param faceEngine 对象池
* @return 对象是否可用结果,boolean
*/
@Override
public
boolean
validateObject
(
PooledObject
<
FaceEngine
>
faceEngine
)
{
return
super
.
validateObject
(
faceEngine
);
}
/**
* 激活钝化的对象系列操作
* @param faceEngine 对象池
* @throws Exception 异常信息
*/
@Override
public
void
activateObject
(
PooledObject
<
FaceEngine
>
faceEngine
)
throws
Exception
{
super
.
activateObject
(
faceEngine
);
}
/**
* 钝化未使用的对象
* @param faceEngine 对象池
* @throws Exception 异常信息
*/
@Override
public
void
passivateObject
(
PooledObject
<
FaceEngine
>
faceEngine
)
throws
Exception
{
super
.
passivateObject
(
faceEngine
);
}
}
base-manager/src/main/java/com/mortals/xhx/module/identity/service/impl/SysFaceServiceImpl.java
View file @
19b65bc5
This diff is collapsed.
Click to expand it.
base-manager/src/main/java/com/mortals/xhx/module/identity/web/SysFaceController.java
View file @
19b65bc5
This diff is collapsed.
Click to expand it.
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