入门-利用Java免费使用百度人脸识别对妹纸进行打分
介绍
意外发现了学校某个系统的漏洞,可以不鉴权查看考生的照片。所以我通过一段java代码将这些照片给下载到电脑上。当我看到这些照片的时候,另一个想法便出现了,就是利用目前的人脸识别技术给这些照片来打个分。
操作流程
注册百度智能云账户
在:产品服务 / 人脸识别 里,建立一个自己的应用
打开官方文档,根据步骤操作,重要的是你需要把代码里的APP_ID
,API_KEY
,SECRET_KEY
替换成你自己的,这些是在你步骤2的时候创建成功就能看见。
完成上述三步,即可以开始测试了。通常测试的图片需要转成base64编码,所以此时可以利用Java的IO方法读取硬盘里的图片和Java自带方法BASE64Encoder
对图片进行编码.
程序运行流程
读取硬盘图片以及转换成base64编码的代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| public String getImgBase64(String filePath) { byte[] data = null; try { InputStream in = new FileInputStream(filePath); data = new byte[in.available()]; in.read(data); in.close(); } catch (IOException e) { e.printStackTrace(); } BASE64Encoder encoder = new BASE64Encoder();
return encoder.encode(data); }
|
人脸识别数据写入到txt内:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| public void appendJson(String str, String filePath) { BufferedWriter bw = null; try { bw = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(filePath, true))); bw.write(str + "\r\n"); } catch (Exception e) { e.printStackTrace(); } finally { try { bw.flush(); bw.close(); } catch (IOException e) { e.printStackTrace(); } } }
|
程序的主体:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67
| public static final String APP_ID = "你的 App ID"; public static final String API_KEY = "你的 Api Key"; public static final String SECRET_KEY = "你的 Secret Key";
public static void main(String[] args) { feceServerImpl faceServer = new feceServerImpl(); AipFace client = new AipFace(APP_ID, API_KEY, SECRET_KEY); Map<String, Object> msg = new HashMap<String, Object>();
client.setConnectionTimeoutInMillis(2000); client.setSocketTimeoutInMillis(60000);
String path = "E:\\downloadImg\\"; File file = new File(path); File[] files = file.listFiles(); for (File f : files) { if (!f.isDirectory()) { String image = faceServer.getImgBase64(f.toString()); String imageType = "BASE64"; HashMap<String, String> options = new HashMap<String, String>(); options.put("face_field", "age,beauty"); options.put("max_face_num", "1"); options.put("face_type", "CERT");
JSONObject res = client.detect(image, imageType, options);
Map<String, Object> stringObjectMap = res.toMap();
stringObjectMap.remove("log_id"); stringObjectMap.remove("error_msg"); stringObjectMap.remove("cached"); stringObjectMap.remove("error_code"); stringObjectMap.remove("timestamp");
stringObjectMap.put("照片", f.toString()); System.out.println(res.toString(1));
faceServer.appendJson(stringObjectMap.toString(), "e:\\imgJson.txt");
try { Thread.currentThread().sleep(500); } catch (Exception e) { e.printStackTrace(); } } } }
|
整理数据
将由代码保存的到硬盘txt文本数据,复制到Excel里借用排序工具进行整理,便可以知道哪张图片的颜值最高。最终整理的数据如下图: