package com.iailab.netsdk.demo.frame.TargetRecognition;
|
|
import java.awt.BorderLayout;
|
import java.awt.Dimension;
|
import java.awt.FlowLayout;
|
import java.awt.GridLayout;
|
import java.awt.event.ActionEvent;
|
import java.awt.event.ActionListener;
|
import java.awt.event.WindowAdapter;
|
import java.awt.event.WindowEvent;
|
import java.util.ArrayList;
|
import java.util.HashMap;
|
import java.util.Vector;
|
|
import javax.swing.JButton;
|
import javax.swing.JComboBox;
|
import javax.swing.JDialog;
|
import javax.swing.JLabel;
|
import javax.swing.JOptionPane;
|
import javax.swing.JPanel;
|
import javax.swing.JScrollPane;
|
import javax.swing.JTable;
|
import javax.swing.JTextField;
|
import javax.swing.table.DefaultTableCellRenderer;
|
import javax.swing.table.DefaultTableModel;
|
|
import com.iailab.netsdk.common.*;
|
import com.iailab.netsdk.demo.module.LoginModule;
|
import com.iailab.netsdk.demo.module.TargetRecognitionModule;
|
import com.iailab.netsdk.lib.ToolKits;
|
import com.iailab.netsdk.lib.NetSDKLib.NET_FACERECONGNITION_GROUP_INFO;
|
|
public class DispositionOperateDialog extends JDialog {
|
/**
|
*
|
*/
|
private static final long serialVersionUID = 1L;
|
|
// 通道列表
|
private Vector<String> chnlist = new Vector<String>();
|
|
// 通道个数
|
private int nChn = LoginModule.m_stDeviceInfo.byChanNum;
|
|
// 通道列表, 用于布控
|
private ArrayList< Integer> arrayList = new ArrayList<Integer>();
|
|
// key:通道 value:相似度, 用于撤控
|
private HashMap<Integer, Integer> hashMap = new HashMap<Integer, Integer>();
|
|
String groupId = "";
|
String groupName = "";
|
|
public DispositionOperateDialog(String groupId, String groupName) {
|
setTitle(Res.string().getDisposition() + "/" + Res.string().getDelDisposition());
|
setLayout(new BorderLayout());
|
setModal(true);
|
pack();
|
setSize(450, 400);
|
setResizable(false);
|
setLocationRelativeTo(null);
|
setDefaultCloseOperation(DISPOSE_ON_CLOSE); // 释放窗体
|
|
for(int i = 1; i < nChn + 1; i++) {
|
chnlist.add(Res.string().getChannel() + " " + String.valueOf(i));
|
}
|
|
this.groupId = groupId;
|
this.groupName = groupName;
|
|
DispositionListPanel dispositionListPanel = new DispositionListPanel();
|
DispositionInfoPanel dispositionInfoPanel = new DispositionInfoPanel();
|
|
add(dispositionListPanel, BorderLayout.CENTER);
|
add(dispositionInfoPanel, BorderLayout.NORTH);
|
|
findChnAndSimilary();
|
|
addWindowListener(new WindowAdapter() {
|
public void windowClosing(WindowEvent e) {
|
dispose();
|
}
|
});
|
}
|
|
/*
|
* 布控显示列表
|
*/
|
private class DispositionListPanel extends JPanel {
|
private static final long serialVersionUID = 1L;
|
public DispositionListPanel() {
|
BorderEx.set(this, "", 2);
|
setLayout(new BorderLayout());
|
|
JPanel panel = new JPanel();
|
JPanel panel2 = new JPanel();
|
JPanel panel3 = new JPanel();
|
|
Dimension dimension = new Dimension();
|
dimension.width = 145;
|
panel.setPreferredSize(dimension);
|
panel.setLayout(new BorderLayout());
|
panel.add(panel2, BorderLayout.NORTH);
|
panel.add(panel3, BorderLayout.SOUTH);
|
|
addBtn = new JButton(Res.string().getAdd());
|
refreshBtn = new JButton(Res.string().getFresh());
|
panel2.setLayout(new GridLayout(2, 1));
|
panel2.add(addBtn);
|
panel2.add(refreshBtn);
|
|
dispositionBtn = new JButton(Res.string().getDisposition());
|
delDispositionBtn = new JButton(Res.string().getDelDisposition());
|
panel3.setLayout(new GridLayout(2, 1));
|
panel3.add(dispositionBtn);
|
panel3.add(delDispositionBtn);
|
|
data = new Object[512][2];
|
defaultTableModel = new DefaultTableModel(data, Res.string().getDispositionTable());
|
table = new JTable(defaultTableModel){ // 列表不可编辑
|
private static final long serialVersionUID = 1L;
|
@Override
|
public boolean isCellEditable(int row, int column) {
|
return false;
|
}
|
};
|
|
DefaultTableCellRenderer dCellRenderer = new DefaultTableCellRenderer();
|
dCellRenderer.setHorizontalAlignment(JLabel.CENTER);
|
table.setDefaultRenderer(Object.class, dCellRenderer);
|
|
add(new JScrollPane(table), BorderLayout.CENTER);
|
add(panel, BorderLayout.EAST);
|
|
// 添加通道和相似度到列表
|
addBtn.addActionListener(new ActionListener() {
|
@Override
|
public void actionPerformed(ActionEvent arg0) {
|
boolean isExit = false;
|
|
String chn = String.valueOf(chnComboBox.getSelectedIndex() + 1);
|
String similary = similaryTextField.getText();
|
|
if(similaryTextField.getText().equals("")
|
|| Integer.parseInt(similaryTextField.getText()) > 100) {
|
JOptionPane.showMessageDialog(null, Res.string().getSimilarityRange(), Res.string().getErrorMessage(), JOptionPane.ERROR_MESSAGE);
|
return;
|
}
|
|
// 如果存在了通道号,列表修改相应的相似度
|
for(int i = 0; i < nChn; i++) {
|
if(chn.equals(String.valueOf(defaultTableModel.getValueAt(i, 0)).trim())) {
|
defaultTableModel.setValueAt(similary, i, 1);
|
isExit = true;
|
break;
|
}
|
}
|
|
if(isExit) {
|
return;
|
}
|
|
// 如果不存在通道号,按顺序添加人列表
|
for(int i = 0; i < nChn; i++) {
|
if(String.valueOf(defaultTableModel.getValueAt(i, 0)).trim().equals("")
|
|| defaultTableModel.getValueAt(i, 0) == null) {
|
defaultTableModel.setValueAt(chn, i, 0);
|
defaultTableModel.setValueAt(similary, i, 1);
|
break;
|
}
|
}
|
}
|
});
|
|
// 刷新已布控的通道和相似度信息
|
refreshBtn.addActionListener(new ActionListener() {
|
@Override
|
public void actionPerformed(ActionEvent arg0) {
|
findChnAndSimilary();
|
}
|
});
|
|
// 布控
|
dispositionBtn.addActionListener(new ActionListener() {
|
@Override
|
public void actionPerformed(ActionEvent arg0) {
|
hashMap.clear();
|
|
// 获取列表里的数据
|
for(int i = 0; i < nChn; i++) {
|
// 判断通道号是否为空
|
if(!String.valueOf(defaultTableModel.getValueAt(i, 0)).trim().equals("")
|
&& defaultTableModel.getValueAt(i, 0) != null) {
|
|
// 判断相似度是否为空
|
if(!String.valueOf(defaultTableModel.getValueAt(i, 1)).trim().equals("")
|
&& defaultTableModel.getValueAt(i, 1) != null) {
|
hashMap.put(Integer.parseInt(String.valueOf(defaultTableModel.getValueAt(i, 0)).trim()),
|
Integer.parseInt(String.valueOf(defaultTableModel.getValueAt(i, 1)).trim()));
|
} else {
|
hashMap.put(Integer.parseInt(String.valueOf(defaultTableModel.getValueAt(i, 0)).trim()), 0);
|
}
|
}
|
}
|
System.out.println("size:" + hashMap.size());
|
if(hashMap.size() == 0) {
|
JOptionPane.showMessageDialog(null, Res.string().getAddDispositionInfo(), Res.string().getErrorMessage(), JOptionPane.ERROR_MESSAGE);
|
return;
|
}
|
|
if(!TargetRecognitionModule.putDisposition(goroupIdTextField.getText(), hashMap)) {
|
JOptionPane.showMessageDialog(null, Res.string().getFailed() + "," + ToolKits.getErrorCodeShow(), Res.string().getErrorMessage(), JOptionPane.ERROR_MESSAGE);
|
} else {
|
JOptionPane.showMessageDialog(null, Res.string().getSucceed(), Res.string().getPromptMessage(), JOptionPane.INFORMATION_MESSAGE);
|
}
|
|
// 刷新列表
|
findChnAndSimilary();
|
}
|
});
|
|
delDispositionBtn.addActionListener(new ActionListener() {
|
@Override
|
public void actionPerformed(ActionEvent arg0) {
|
arrayList.clear();
|
|
// 获取所有选中行数
|
int[] rows = null;
|
rows = table.getSelectedRows();
|
|
if(rows == null) {
|
JOptionPane.showMessageDialog(null, Res.string().getSelectDelDispositionInfo(), Res.string().getErrorMessage(), JOptionPane.ERROR_MESSAGE);
|
return;
|
}
|
|
// 获取所有选中,非空的通道号
|
for(int i = 0; i < rows.length; i++) {
|
if(!String.valueOf(defaultTableModel.getValueAt(rows[i], 0)).trim().equals("")
|
&& defaultTableModel.getValueAt(rows[i], 0) != null) {
|
arrayList.add(Integer.parseInt(String.valueOf(defaultTableModel.getValueAt(rows[i], 0)).trim()));
|
}
|
}
|
|
if(arrayList.size() == 0) {
|
JOptionPane.showMessageDialog(null, Res.string().getSelectDelDispositionInfo(), Res.string().getErrorMessage(), JOptionPane.ERROR_MESSAGE);
|
return;
|
}
|
|
if(!TargetRecognitionModule.delDisposition(goroupIdTextField.getText(), arrayList)) {
|
JOptionPane.showMessageDialog(null, Res.string().getFailed() + "," + ToolKits.getErrorCodeShow(), Res.string().getErrorMessage(), JOptionPane.ERROR_MESSAGE);
|
} else {
|
JOptionPane.showMessageDialog(null, Res.string().getSucceed(), Res.string().getPromptMessage(), JOptionPane.INFORMATION_MESSAGE);
|
}
|
|
// 刷新列表
|
findChnAndSimilary();
|
}
|
});
|
}
|
}
|
|
/*
|
* 布控信息
|
*/
|
private class DispositionInfoPanel extends JPanel {
|
/**
|
*
|
*/
|
private static final long serialVersionUID = 1L;
|
public DispositionInfoPanel() {
|
BorderEx.set(this, "", 2);
|
setLayout(new FlowLayout());
|
|
Dimension dimension = new Dimension();
|
dimension.height = 80;
|
setPreferredSize(dimension);
|
|
JLabel goroupIdLabel = new JLabel(Res.string().getFaceGroupId(), JLabel.CENTER);
|
JLabel goroupNameLabel = new JLabel(Res.string().getFaceGroupName(), JLabel.CENTER);
|
JLabel chnLabel = new JLabel(Res.string().getChannel(), JLabel.CENTER);
|
JLabel similaryLabel = new JLabel(Res.string().getSimilarity(), JLabel.CENTER);
|
|
goroupIdTextField = new JTextField();
|
goroupNameTextField = new JTextField();
|
chnComboBox = new JComboBox(chnlist);
|
similaryTextField = new JTextField();
|
|
Dimension dimension1 = new Dimension();
|
dimension1.width = 80;
|
dimension1.height = 20;
|
goroupIdLabel.setPreferredSize(dimension1);
|
goroupNameLabel.setPreferredSize(dimension1);
|
chnLabel.setPreferredSize(dimension1);
|
similaryLabel.setPreferredSize(dimension1);
|
goroupIdTextField.setPreferredSize(new Dimension(120, 20));
|
goroupNameTextField.setPreferredSize(new Dimension(120, 20));
|
chnComboBox.setPreferredSize(new Dimension(120, 20));
|
similaryTextField.setPreferredSize(new Dimension(120, 20));
|
|
add(goroupIdLabel);
|
add(goroupIdTextField);
|
add(goroupNameLabel);
|
add(goroupNameTextField);
|
add(chnLabel);
|
add(chnComboBox);
|
add(similaryLabel);
|
add(similaryTextField);
|
|
ToolKits.limitTextFieldLength(similaryTextField, 3);
|
|
goroupIdTextField.setEditable(false);
|
goroupNameTextField.setEditable(false);
|
|
goroupIdTextField.setText(groupId);
|
goroupNameTextField.setText(groupName);
|
}
|
}
|
|
// 查找人脸库的布控通道以及对应的相似度
|
private void findChnAndSimilary() {
|
// 清空列表
|
defaultTableModel.setRowCount(0);
|
defaultTableModel.setRowCount(512);
|
|
// 查询布控信息
|
NET_FACERECONGNITION_GROUP_INFO[] groupInfos = TargetRecognitionModule.findGroupInfo(goroupIdTextField.getText());
|
|
if(groupInfos == null) {
|
return;
|
}
|
|
for(int i = 0; i < groupInfos[0].nRetChnCount; i++) {
|
defaultTableModel.setValueAt(String.valueOf(groupInfos[0].nChannel[i] + 1), i, 0);
|
defaultTableModel.setValueAt(String.valueOf(groupInfos[0].nSimilarity[i]), i, 1);
|
}
|
}
|
|
private Object[][] data;
|
private DefaultTableModel defaultTableModel;
|
private JTable table;
|
|
private JButton addBtn;
|
private JButton refreshBtn;
|
private JButton dispositionBtn;
|
private JButton delDispositionBtn;
|
private JTextField goroupIdTextField;
|
private JTextField goroupNameTextField;
|
private JComboBox chnComboBox;
|
private JTextField similaryTextField;
|
}
|