1.  
  1. package com.example.buyishi;
  2.  
  3. import java.io.BufferedReader;
  4. import java.io.IOException;
  5. import java.io.InputStreamReader;
  6. import java.net.HttpURLConnection;
  7. import java.net.URL;
  8. import java.net.URLConnection;
  9.  
  10. public class HTTPRequest {
  11.  
  12. private final String url;
  13. private final int timeout;
  14. private final StringBuilder params;
  15.  
  16. public HTTPRequest(String url, int timeout) throws IOException {
  17. this.url = url;
  18. this.timeout = timeout;
  19. params = new StringBuilder();
  20. }
  21.  
  22. public HTTPRequest addParam(String name, String value) {
  23. params.append(name).append('=').append(value).append('&');
  24. return this;
  25. }
  26.  
  27. public HTTPRequest clearParams() {
  28. params.delete(0, params.length());
  29. return this;
  30. }
  31.  
  32. public String get() throws IOException {
  33. URLConnection connection = new URL(url + '?' + params).openConnection();
  34. return readFromURLConnection(connection);
  35. }
  36.  
  37. public String post() throws IOException {
  38. HttpURLConnection connection = (HttpURLConnection) new URL(url).openConnection();
  39. connection.setDoOutput(true);
  40. connection.getOutputStream().write(params.toString().getBytes("UTF-8"));
  41. return readFromURLConnection(connection);
  42. }
  43.  
  44. private String readFromURLConnection(URLConnection connection) throws IOException {
  45. connection.setConnectTimeout(timeout);
  46. BufferedReader br = new BufferedReader(new InputStreamReader(connection.getInputStream()));
  47. String line;
  48. StringBuilder response = new StringBuilder();
  49. while ((line = br.readLine()) != null) {
  50. response.append(line);
  51. }
  52. return response.toString();
  53. }
  54. }
  1. package com.example.buyishi;
  2.  
  3. import com.google.gson.JsonObject;
  4. import com.google.gson.JsonParser;
  5. import java.awt.BorderLayout;
  6. import java.awt.Color;
  7. import java.awt.Cursor;
  8. import java.awt.GridLayout;
  9. import java.awt.event.MouseAdapter;
  10. import java.awt.event.MouseEvent;
  11. import java.io.File;
  12. import java.io.FileInputStream;
  13. import java.io.IOException;
  14. import java.net.URLEncoder;
  15. import java.util.Base64;
  16. import java.util.logging.Level;
  17. import java.util.logging.Logger;
  18. import javax.swing.JButton;
  19. import javax.swing.JFrame;
  20. import javax.swing.JOptionPane;
  21. import javax.swing.JPanel;
  22. import javax.swing.JTextField;
  23.  
  24. public class MainFrame extends JFrame {
  25.  
  26. private TooltipImageLabel imgLabel1, imgLabel2;
  27. private JButton compareButton;
  28. private JTextField similarityTextField;
  29. private File picFile1, picFile2;
  30. private static final String APP_ID = "f89ae61fd63d4a63842277e9144a6bd2";
  31. private static final String APP_KEY = "af1cd33549c54b27ae24aeb041865da2";
  32.  
  33. public MainFrame() {
  34. super("EyeKey Demo");
  35. initFrame();
  36. }
  37.  
  38. private void initFrame() {
  39. setSize(850, 650);
  40. setLocationRelativeTo(null);
  41. setDefaultCloseOperation(EXIT_ON_CLOSE);
  42. setLayout(new BorderLayout(0, 20));
  43. imgLabel1 = new TooltipImageLabel("Picture1", TooltipImageLabel.CENTER);
  44. imgLabel1.setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR));
  45. imgLabel1.addMouseListener(new MouseAdapter() {
  46. @Override
  47. public void mouseClicked(MouseEvent e) {
  48. PicFileChooser fileChooser = new PicFileChooser();
  49. if (PicFileChooser.APPROVE_OPTION == fileChooser.showOpenDialog(MainFrame.this)) {
  50. picFile1 = fileChooser.getSelectedFile();
  51. imgLabel1.setImage(picFile1);
  52. similarityTextField.setText(null);
  53. }
  54. }
  55. });
  56. imgLabel2 = new TooltipImageLabel("Picture2", TooltipImageLabel.CENTER);
  57. imgLabel2.setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR));
  58. imgLabel2.addMouseListener(new MouseAdapter() {
  59. @Override
  60. public void mouseClicked(MouseEvent e) {
  61. PicFileChooser fileChooser = new PicFileChooser();
  62. if (PicFileChooser.APPROVE_OPTION == fileChooser.showOpenDialog(MainFrame.this)) {
  63. picFile2 = fileChooser.getSelectedFile();
  64. imgLabel2.setImage(picFile2);
  65. similarityTextField.setText(null);
  66. }
  67. }
  68. });
  69. JPanel labelPanel = new JPanel(new GridLayout(1, 2, 20, 0));
  70. labelPanel.add(imgLabel1);
  71. labelPanel.add(imgLabel2);
  72. add(labelPanel);
  73. compareButton = new JButton("Compare");
  74. compareButton.addMouseListener(new MouseAdapter() {
  75. @Override
  76. public void mouseClicked(MouseEvent e) {
  77. if (picFile1 == null || picFile2 == null) {
  78. JOptionPane.showMessageDialog(MainFrame.this, "Please choose pic files you want to compare!", "Tip", JOptionPane.INFORMATION_MESSAGE);
  79. } else {
  80. try (FileInputStream fis1 = new FileInputStream(picFile1); FileInputStream fis2 = new FileInputStream(picFile2)) {
  81. String picBase64 = getFileBase64(fis1);
  82. HTTPRequest httpRequest = new HTTPRequest("https://api.eyekey.com/face/Check/checking/", 1000);
  83. httpRequest.addParam("app_id", APP_ID).addParam("app_key", APP_KEY).addParam("img", URLEncoder.encode(picBase64, "UTF-8"));
  84. JsonParser jsonParser = new JsonParser();
  85. JsonObject jsonObject = jsonParser.parse(httpRequest.post()).getAsJsonObject();
  86. if (jsonObject.get("res_code").getAsString().equals("0000")) {
  87. String faceId1 = jsonObject.getAsJsonArray("face").get(0).getAsJsonObject().get("face_id").getAsString();
  88. picBase64 = getFileBase64(fis2);
  89. httpRequest.clearParams().addParam("app_id", APP_ID).addParam("app_key", APP_KEY).addParam("img", URLEncoder.encode(picBase64, "UTF-8"));
  90. jsonObject = jsonParser.parse(httpRequest.post()).getAsJsonObject();
  91. if (jsonObject.get("res_code").getAsString().equals("0000")) {
  92. String faceId2 = jsonObject.getAsJsonArray("face").get(0).getAsJsonObject().get("face_id").getAsString();
  93. httpRequest = new HTTPRequest("https://api.eyekey.com/face/Match/match_compare/", 1000);
  94. httpRequest.addParam("app_id", APP_ID).addParam("app_key", APP_KEY).addParam("face_id1", faceId1).addParam("face_id2", faceId2);
  95. jsonObject = jsonParser.parse(httpRequest.get()).getAsJsonObject();
  96. if (jsonObject.get("res_code").getAsString().equals("0000")) {
  97. similarityTextField.setText("Similarity: " + jsonObject.get("similarity").getAsFloat());
  98. } else
  99. JOptionPane.showMessageDialog(MainFrame.this, jsonObject.get("message"), "Error", JOptionPane.ERROR_MESSAGE);
  100. } else {
  101. JOptionPane.showMessageDialog(MainFrame.this, jsonObject.get("message"), "Error: Pic2", JOptionPane.ERROR_MESSAGE);
  102. }
  103. } else {
  104. JOptionPane.showMessageDialog(MainFrame.this, jsonObject.get("message"), "Error: Pic1", JOptionPane.ERROR_MESSAGE);
  105. }
  106. } catch (IOException ex) {
  107. Logger.getLogger(MainFrame.class.getName()).log(Level.SEVERE, null, ex);
  108. JOptionPane.showMessageDialog(MainFrame.this, "Error Information:\n" + ex, "Error", JOptionPane.ERROR_MESSAGE);
  109. }
  110. }
  111. }
  112. });
  113. JPanel southPanel = new JPanel(new GridLayout(2, 1, 0, 20));
  114. JPanel buttonPanel = new JPanel();
  115. buttonPanel.add(compareButton);
  116. southPanel.add(buttonPanel);
  117. similarityTextField = new JTextField();
  118. similarityTextField.setForeground(Color.RED);
  119. similarityTextField.setEditable(false);
  120. similarityTextField.setHorizontalAlignment(JTextField.CENTER);
  121. southPanel.add(similarityTextField);
  122. add(southPanel, "South");
  123. }
  124.  
  125. private String getFileBase64(FileInputStream fis) throws IOException {
  126. byte[] src = new byte[fis.available()];
  127. fis.read(src);
  128. return Base64.getEncoder().encodeToString(src);
  129. }
  130.  
  131. public static void main(String[] args) {
  132. new MainFrame().setVisible(true);
  133. }
  134. }
  1. package com.example.buyishi;
  2.  
  3. import javax.swing.JFileChooser;
  4. import javax.swing.filechooser.FileNameExtensionFilter;
  5.  
  6. public class PicFileChooser extends JFileChooser {
  7.  
  8. public PicFileChooser() {
  9. initFileFilter();
  10. }
  11.  
  12. private void initFileFilter() {
  13. FileNameExtensionFilter filter1 = new FileNameExtensionFilter("All Picture Files", "ico", "png", "tif", "tiff", "gif", "jpg", "jpeg", "jpe", "jfif", "bmp", "dib");
  14. FileNameExtensionFilter filter2 = new FileNameExtensionFilter("ICO (*.ico)", "ico");
  15. FileNameExtensionFilter filter3 = new FileNameExtensionFilter("PNG (*.png)", "png");
  16. FileNameExtensionFilter filter4 = new FileNameExtensionFilter("TIFF (*.tif;*.tiff)", "tif", "tiff");
  17. FileNameExtensionFilter filter5 = new FileNameExtensionFilter("GIF (*.gif)", "gif");
  18. FileNameExtensionFilter filter6 = new FileNameExtensionFilter("JPEG (*.jpg;*.jpeg;*.jpe;*.jfif)", "jpg", "jpeg", "jpe", "jfif");
  19. FileNameExtensionFilter filter7 = new FileNameExtensionFilter("Bitmap Files (*.bmp)", "bmp", "dib");
  20. setFileFilter(filter1);
  21. setFileFilter(filter2);
  22. setFileFilter(filter3);
  23. setFileFilter(filter4);
  24. setFileFilter(filter5);
  25. setFileFilter(filter6);
  26. setFileFilter(filter7);
  27. }
  28. }
  1. package com.example.buyishi;
  2.  
  3. import java.awt.Color;
  4. import java.awt.event.MouseAdapter;
  5. import java.awt.event.MouseEvent;
  6. import java.awt.event.MouseMotionAdapter;
  7. import java.awt.image.BufferedImage;
  8. import java.io.File;
  9. import java.io.IOException;
  10. import java.util.logging.Level;
  11. import java.util.logging.Logger;
  12. import javax.imageio.ImageIO;
  13. import javax.swing.ImageIcon;
  14. import javax.swing.JFrame;
  15. import javax.swing.JLabel;
  16. import javax.swing.JOptionPane;
  17.  
  18. public class TooltipImageLabel extends JLabel {
  19.  
  20. private JFrame tooltipFrame;
  21. private JLabel tooltipLabel;
  22. private boolean imageSetted;
  23. private int mouseX, mouseY;
  24.  
  25. public TooltipImageLabel(String text, int horizontalAlignment) {
  26. super(text, horizontalAlignment);
  27. initComponents();
  28. initListeners();
  29. }
  30.  
  31. public void setImage(File imgFile) {
  32. try {
  33. BufferedImage sourceImage = ImageIO.read(imgFile);
  34. int sourceWidth = sourceImage.getWidth(), sourceHeight = sourceImage.getHeight();
  35. int labelWidth = getWidth(), labelHeight = getHeight();
  36. setText(null);
  37. String tooltip = imgFile.getAbsolutePath();
  38. tooltipLabel.setText(tooltip);
  39. tooltipFrame.setSize(tooltip.length() * 8, 30);
  40. if (sourceWidth > labelWidth || sourceHeight > labelHeight) {
  41. float sourceScale = (float) sourceWidth / sourceHeight, labelScale = (float) labelWidth / labelHeight;
  42. int targetWidth, targetHeight;
  43. if (labelScale < sourceScale) {
  44. targetWidth = getWidth();
  45. targetHeight = (int) (targetWidth / sourceScale + 0.5);
  46. } else {
  47. targetHeight = getHeight();
  48. targetWidth = (int) (sourceScale * targetHeight);
  49. }
  50. setIcon(new ImageIcon(sourceImage.getScaledInstance(targetWidth, targetHeight, BufferedImage.SCALE_DEFAULT)));
  51. } else {
  52. setIcon(new ImageIcon(sourceImage));
  53. }
  54. imageSetted = true;
  55. } catch (IOException ex) {
  56. Logger.getLogger(TooltipImageLabel.class.getName()).log(Level.SEVERE, null, ex);
  57. JOptionPane.showMessageDialog(this, "Error Information:\n" + ex, "Error", JOptionPane.ERROR_MESSAGE);
  58. }
  59. }
  60.  
  61. private void initComponents() {
  62. setOpaque(true);
  63. setBackground(Color.WHITE);
  64. tooltipFrame = new JFrame();
  65. tooltipFrame.setUndecorated(true);
  66. tooltipFrame.getContentPane().setBackground(new Color(242, 246, 249));
  67. tooltipLabel = new JLabel();
  68. tooltipLabel.setForeground(new Color(127, 157, 203));
  69. tooltipFrame.add(tooltipLabel);
  70. }
  71.  
  72. private void initListeners() {
  73. addMouseMotionListener(new MouseMotionAdapter() {
  74. @Override
  75. public void mouseMoved(MouseEvent e) {
  76. if (imageSetted) {
  77. int currentX = e.getXOnScreen(), currentY = e.getYOnScreen();
  78. if (Math.abs(currentX - mouseX) > 10 || Math.abs(currentY - mouseY) > 10) {
  79. tooltipFrame.setLocation(currentX, currentY + 20);
  80. if (!tooltipFrame.isVisible())
  81. tooltipFrame.setVisible(true);
  82. mouseX = currentX;
  83. mouseY = currentY;
  84. }
  85. }
  86. }
  87. });
  88. addMouseListener(new MouseAdapter() {
  89. @Override
  90. public void mouseEntered(MouseEvent e) {
  91. if (imageSetted) {
  92. mouseX = e.getXOnScreen();
  93. mouseY = e.getYOnScreen();
  94. tooltipFrame.setLocation(mouseX, mouseY + 20);
  95. tooltipFrame.setVisible(true);
  96. }
  97. }
  98.  
  99. @Override
  100. public void mouseExited(MouseEvent e) {
  101. if (tooltipFrame.isVisible()) {
  102. tooltipFrame.dispose();
  103. }
  104. }
  105.  
  106. @Override
  107. public void mouseClicked(MouseEvent e) {
  108. if (tooltipFrame.isVisible()) {
  109. tooltipFrame.dispose();
  110. }
  111. }
  112. });
  113. }
  114. }

Java客户端:调用EyeKey HTTP接口进行人脸对比的更多相关文章

  1. Java与WCF交互(一):Java客户端调用WCF服务

    最近开始了解WCF,写了个最简单的Helloworld,想通过java客户端实现通信.没想到以我的基础,居然花了整整两天(当然是工作以外的时间,呵呵),整个过程大费周折,特写下此文,以供有需要的朋友参 ...

  2. java如何调用对方http接口(II)

    java如何调用接口 在实际开发过程中,我们经常需要调用对方提供的接口或测试自己写的接口是否合适,所以,问题来了,java如何调用接口?很多项目都会封装规定好本身项目的接口规范,所以大多数需要去调用对 ...

  3. Java与WCF交互(一):Java客户端调用WCF服务 【转】

    原文:http://www.cnblogs.com/downmoon/archive/2010/08/24/1807161.html 最近开始了解WCF,写了个最简单的Helloworld,想通过ja ...

  4. 转载——Java与WCF交互(一):Java客户端调用WCF服务

    最近开始了解WCF,写了个最简单的Helloworld,想通过java客户端实现通信.没想到以我的基础,居然花了整整两天(当然是工作以外的时间,呵呵),整个过程大费周折,特写下此文,以供有需要的朋友参 ...

  5. 使用java客户端调用redis

    Redis支持很多编程语言的客户端,有C.C#.C++.Clojure.Common Lisp.Erlang.Go.Lua.Objective-C.PHP.Ruby.Scala,甚至更时髦的Node. ...

  6. java客户端调用ftp上传下载文件

    1:java客户端上传,下载文件. package com.li.utils; import java.io.File; import java.io.FileInputStream; import ...

  7. Java 常调用的Webservice接口的方法

    WebService是基于Web的服务,WebService使用SOAP协议实现跨编程语言和跨操作系统平台,接收和响应外部系统的某种请求,从而实现远程调用.WebService采用HTTP协议传输数据 ...

  8. Java客户端调用.NET的WebService

    项目需要去调用.NET的WebSrevice,本身是Java,研究了半天,终于有些头绪,记下来. 1,新建.NET WebService.只在原方法上加上一个string类型的参数str [WebMe ...

  9. java客户端调用c#的webservice服务

    此处使用到了CXF框架,可以使用以下坐标从maven仓库中获取相关jar包: <dependency> <groupId>org.apache.cxf</groupId& ...

随机推荐

  1. PAT天梯赛练习题——L3-005. 垃圾箱分布(暴力SPFA)

    L3-005. 垃圾箱分布 时间限制 200 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 陈越 大家倒垃圾的时候,都希望垃圾箱距离自己比较近,但是谁 ...

  2. BZOJ 3282 Tree ——Link-Cut Tree

    [题目分析] 明显的LCT维护连通性的题目. access的操作是比较巧妙的,可以把结点到根变成偏爱路径,而且保证了该点是链上深度最深的点. 而且需边的思想也很巧妙,保证了复杂度. 但是只能用于修改路 ...

  3. 接口自动化测试框架--http请求的get、post方法的实现

    已知两种方法.一种是通过httpclient实现(貌似很简单,以后看一下),一种是以下方法: Client实现: package common; import com.alibaba.fastjson ...

  4. 连通 OR 不连通(NOJ 1044)

    比赛描述 给定一个无向图,一共n个点,请编写一个程序实现两种操作: D x y 从原图中删除连接x,y节点的边. Q x y 询问x,y节点是否连通 输入 第一行两个数n,m(5<=n<= ...

  5. ZOJ - 3816 Generalized Palindromic Number dfs

    Generalized Palindromic Number Time Limit: 2 Seconds                                     Memory Limi ...

  6. 使用FL2440之问题1

    随机送的usb转串口线(一头usb一头9针,蓝色),写明HL340,装上驱动后运行正常,但电脑设备管理器显示的却是CH340,以前还用过PL2303,百度总结一下他们的区别: CH340,PL2303 ...

  7. iOS7 毛玻璃效果

    转自:http://prolove10.blog.163.com/blog/static/138411843201391401054305/ 原图:  效果图:  实现:首先需要导入Accelerat ...

  8. C# 多线程小试牛刀

    前言 昨天在上班时浏览博问,发现了一个问题,虽然自己在 C# 多线程上没有怎么尝试过,看了几遍 CLR 中关于 线程的概念和讲解(后面三章).也想拿来实践实践.问题定义是这样的: 对于多线程不是很懂, ...

  9. java队列--queue详细分析

    ---恢复内容开始--- Queue:基本上一个队列就是一个先入先出(FIFO)的数据结构 Queue接口与List.Set同一级别,都是继承了Collection接口,LinkedList实现了Li ...

  10. HDU 2009 整除的尾数 题解

    Problem Description 一个整数,仅仅知道前几位,不知道末二位.被还有一个整数除尽了.那么该数的末二位该是什么呢?   Input 输入数据有若干组,每组数据包括二个整数a,b(0&l ...