虹软人脸识别--微信小程序

开发工具:idea+mysql+jdk1.8+wechat

1.在官网进行了认证之后,获得相对应的SDK-----算法库,jar包,导入到pom文件

java.sql.SQLException: The server time zone value 'Öйú±ê׼ʱ¼ä' is unrecognized or represents more than one time
zone. You must configure either the server or JDBC driver (via the serverTimezone configuration property) to use a
more specifc time zone value if you want to utilize time zone support.

      TIP1:(DLL路径问题)除了要有jar之外还有吧其中想对应的算法库打包进去,检测系统在进行人脸算法检查的时候需要调用到算法库,在IDEA中设置(-Djava.library.path=****)-------是没有效果的!!

 

   解决办法:

       将dll库文件放入到项目运行的libaray目下面:(java.library.path)-------》可食用代码:

System.out.println(System.getProperty("java.library.path"));

          将相关的路径输出,再将文件拷贝进去再运行

 

TIP2:对springboot中连接数据库过程中报错:(https://www.cnblogs.com/smiler/p/9983146.html)

后来查阅资料发现这都是因为安装mysql的时候时区设置的不正确 mysql默认的是美国的时区,而我们中国大陆要比他们迟8小时,采用+8:00格式

     使用的数据库是MySQL,从上面图看出SpringBoot2.1在你没有指定MySQL驱动版本的情况下它自动依赖的驱动是8.0.12很高的版本,这是由于数据库和系统时区差异所造成的,在jdbc连接的url后面加上serverTimezone=GMT即可解决问题,如果需要使用gmt+8时区,需要写成GMT%2B8,否则会被解析为空。再一个解决办法就是使用低版本的MySQL jdbc驱动,5.1.28不会存在时区的问题。 

 

2.抄上几个类的通用代码----都是一些初始化  FaceEngine  相关组件的代码功能。

源码(https://github.com/itboyst/ArcSoftFaceDemo

其中核心的检测逻辑如下:

oid addFaceToCache(Integer groupId, FaceUserInfo userFaceInfo) throws ExecutionException;

    List<FaceInfo> detectFaces(ImageInfo imageInfo);
    List<ProcessInfo> process(ImageInfo imageInfo);
    /**
     * 人脸特征
     * @param imageInfo
     * @return
     */
    byte[] extractFaceFeature(ImageInfo imageInfo) throws InterruptedException;
    /**
     * 人脸比对
     * @param groupId
     * @param faceFeature
     * @return
     */
    List<FaceUserInfo> compareFaceFeature(byte[] faceFeature, Integer groupId) throws InterruptedException, ExecutionException;

人脸检测的流程入库所示:

 

3.最终效果展示:

其中的pojo类中封装了用户的姓名,性别,年龄,相似度。

 

### 人脸比对功能在Spring Boot中的集成 为了实现的人脸比对功能,在Spring Boot项目中需要完成几个主要部分的工作。这包括初始化环境、加载必要的库文件以及编写用于处理图像并执行面部识别的核心逻辑。 #### 初始化开发环境 首先,需前往官方网站注册账户,并获取适用于Windows平台(取决于服务器操作系统)的离线SDK包[^2]。安装过程中,请注意保存好授权密钥,因为后续会用到它来激活API接口。 对于依赖管理方面,假设使用Maven构建工具,则应在`pom.xml`里加入如下配置项以便引入所需JAR包: ```xml <dependency> <groupId>com.arcsoft</groupId> <artifactId>arcface-lite-java</artifactId> <version>${latest.version}</version> <!-- 替换成实际版本号 --> </dependency> ``` 请注意`${latest.version}`应替换为最新稳定版的具体数值;如果官方并未提供通过Maven仓库分发的形式,则可能要手动将本地下载好的jar添加至工程目录下并通过IDE设置纳入编译路径。 #### 加载动态链接库 由于ArcFace Lite SDK是以C++为核心实现的跨语言支持组件集合,因此除了上述提到的Java封装层外还需要额外准备一些原生二进制文件。这些DLL/SO通常位于解压后的根目录下的特定子文件夹内(如`lib/windows/x64`)。确保它们能够被正确找到的一种方法是在启动应用程序之前将其所在位置追加到系统的PATH变量中,或者直接指定绝对路径作为参数传递给JNI函数调用时使用。 另外一种更为推荐的做法是利用操作系统的特性自动定位所需的共享对象——即把所有必需的.so/.dll拷贝到项目的resources/static或其他合适的地方,再借助于静态代码块提前加载进来: ```java static { System.loadLibrary("arcsoft_face"); } ``` 这段声明应当放置在一个公共类定义内部最前面的位置上,从而保证每次运行程序之初就能顺利完成资源映射工作而不至于影响正常业务流程。 #### 编写核心业务逻辑 下面给出一段简单的示例代码片段展示怎样接收来自前端传输过来的数据流并对其中携带的画面进行分析处理: ```java @RestController @RequestMapping("/api/v1/facerecog") public class FaceRecognitionController { private final Logger logger = LoggerFactory.getLogger(this.getClass()); @PostMapping(value = "/compare", consumes = MediaType.APPLICATION_JSON_VALUE, produces = MediaType.APPLICATION_JSON_UTF8_VALUE) public ResponseEntity<Map<String,Object>> compareFaces(@RequestBody Map<String,String> payload){ String imgBase64StrA=payload.getOrDefault("imageDataA",""); String imgBase64StrB=payload.getOrDefault("imageDataB",""); try{ byte[] decodedBytesImgA= Base64.getMimeDecoder().decode(imgBase64StrA); BufferedImage bufferedImageA = ImageIO.read(new ByteArrayInputStream(decodedBytesImgA)); byte[] decodedBytesImgB= Base64.getMimeDecoder().decode(imgBase64StrB); BufferedImage bufferedImageB = ImageIO.read(new ByteArrayInputStream(decodedBytesImgB)); // 进一步转换BufferedImage为适合输入给人脸检测模型使用的格式... // 此处省略具体细节... float similarityScore = ArcFace.compare(bufferedImageA ,bufferedImageB); HashMap<String, Object> resultMap=new HashMap<>(); resultMap.put("similarity_score",similarityScore); return new ResponseEntity<>(resultMap,HttpStatus.OK); }catch(Exception e){ logger.error(e.getMessage(),e); throw new ResponseStatusException(HttpStatus.INTERNAL_SERVER_ERROR,"Error occurred while processing images."); } } } ``` 此段落描述了一个RESTful API端点的设计思路,允许客户端上传两张待比较的照片(以Base64字符串形式),之后交由后台服务解析成标准图片格式供下一步骤运算之用。最后计算得到相似度得分并反馈回去告知匹配程度如何。 需要注意的是这里仅展示了简化版伪代码结构框架,真实场景下还需考虑更多边界情况比如异常捕获机制优化、性能瓶颈排查等等因素的影响。
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

陶人超有料

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值