package com.zyh.common.face; import com.baidu.aip.util.Base64Util; import java.io.ByteArrayOutputStream; import java.io.IOException; import java.io.InputStream; import java.net.URL; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; public class FaceMatchUtil { public static float matchImages(String imageUrl1, String imageUrl2) { try { byte[] bytes1 = readImageFromUrl(imageUrl1); byte[] bytes2 = readImageFromUrl(imageUrl2); List> images = new ArrayList<>(); Map map1 = createImageMap(Base64Util.encode(bytes1), "IDCARD"); Map map2 = createImageMap(Base64Util.encode(bytes2), "LIVE"); images.add(map1); images.add(map2); String param = GsonUtils.toJson(images); String accessToken = GetAccessToken.getAuth(); String result = HttpUtil.post("https://aip.baidubce.com/rest/2.0/face/v3/match", accessToken, "application/json", param); return parseScore(result); } catch (Exception e) { e.printStackTrace(); return 0.0f; } } private static byte[] readImageFromUrl(String imageUrl) throws IOException { URL url = new URL(imageUrl); try (InputStream inputStream = url.openStream(); ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream()) { byte[] buffer = new byte[1024]; int bytesRead; while ((bytesRead = inputStream.read(buffer)) != -1) { byteArrayOutputStream.write(buffer, 0, bytesRead); } return byteArrayOutputStream.toByteArray(); } } private static Map createImageMap(String image, String faceType) { Map map = new HashMap<>(); map.put("image", image); map.put("image_type", "BASE64"); map.put("face_type", faceType); map.put("quality_control", "LOW"); map.put("liveness_control", "NONE"); return map; } private static float parseScore(String result) { try { Map resultMap = GsonUtils.fromJson(result, Map.class); Map resultData = (Map) resultMap.get("result"); float score = Float.parseFloat(resultData.get("score").toString()); return score; } catch (Exception e) { e.printStackTrace(); return 0.0f; } } }