---
# System prepended metadata

title: 資料庫與影像辨識 (使用java)

---

# 資料庫與影像辨識 (使用java)
原代碼:https://github.com/chyhhwen/image-recognition-java
平常看到的都是python\
不如用java試試看吧~

## 主要

### 引入opencv
```
static
{
    System.loadLibrary("opencv_java310");
}
```
### 劃出GUI
```
private void  initialize()
{
    frame = new JFrame();
    frame.setBounds(100,100,850,650);
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.getContentPane().setLayout(null);
    label = new JLabel("");
    label.setBounds(50,50,640,480);
    frame.getContentPane().add(label);
}
```
### 資料庫引用
```
private static void sql(int put1)
{
    query query = new query();
    DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy/MM/dd HH:mm:ss");
    String date = dtf.format(LocalDateTime.now());
    String input = "INSERT INTO `focus` VALUES(NULL,";
    String put = input + "\"" + put1 + "\",";
    put = put + "\"" + date +"\");";
    query.query(3,put);
    System.out.println(put);
}
```
### 照片名稱取得
```
private static String picture()
{
    String path = "照片位置";
    String name = null;
    file file = new file();
    name = file.use(3,"");
    System.out.println(name);
    path += name;
    path += ".jpg";
    return path;
}
```
### 導入模型

```
String xmlFile = "模型位址";
CascadeClassifier cascadeClassifier = new CascadeClassifier(xmlFile);
```

### 判斷相機是否開機

```
VideoCapture camera = new VideoCapture(0);
camera.open(0);
if(!camera.isOpened())
{
    System.out.println("carma open error");
}
```
### 辨識並繪圖
```
Mat gray = new Mat(frame.rows(),frame.cols(),frame.type());
MatOfRect matOfRect = new MatOfRect();
Imgproc.cvtColor(frame,gray,Imgproc.COLOR_RGB2GRAY);
cascadeClassifier.detectMultiScale(gray,matOfRect);
Imgcodecs.imwrite( picture(),frame);
if(!matOfRect.empty())
{
    Rect[] rects = matOfRect.toArray();
    int people = 0;
    for(Rect r : rects)
    {
        Imgproc.rectangle(frame,new Point(r.x,r.y),new Point(r.x+r.width,r.y+r.height),
        new Scalar(0,255,0),3);
        people += 1;
    }
    label.setIcon(new ImageIcon(matImage.matToBufferedImage(frame)));
    sql(people);
}
```
## 資料庫設定
```
 public static Connection getConnection() throws SQLException
{
    String serverName = "localhost";
    String database = "recognition";
    String url = "jdbc:mysql://" + serverName + "/" + database;
    String user = "root";
    String password = "";
    return DriverManager.getConnection(url, user, password);
}
```

## 資料庫使用

### 判斷套件是否安裝
```
try
{
       Class.forName("com.mysql.cj.jdbc.Driver");
}
catch (ClassNotFoundException e)
{
    System.out.println("找不到驅動程式類別");
    e.printStackTrace();
}
```
### 資料輸入
```
Connection connection = sqlset.getConnection();
Statement statement = connection.createStatement();
try
{
    statement.executeUpdate(String.format(put));
}
catch (SQLException e)
{
    e.printStackTrace();
}
System.out.println("input yes");
connection.close();
```
### 資料查詢
```
Connection connection = sqlset.getConnection();
Statement statement = connection.createStatement();
ResultSet resultSet = statement.executeQuery(put);
while (resultSet.next())
{
    out = resultSet.getString("id");
    System.out.printf("%d ",resultSet.getInt(1));
    System.out.printf("%s",resultSet.getString(3));
}
connection.close();
```

### 資料庫每秒存取

```
Statement statement = connection.createStatement();
String put1 = "SELECT * FROM `focus`";
ResultSet resultSet = statement.executeQuery(put1);
String time = null;
String hour = null;
String minute = null;
String second = null;
String now_hour = null;
String now_minute = null;
String now_second = null;
while (resultSet.next()) 
{
    out = resultSet.getString("id");
    time = resultSet.getString(3);
}
/*資料庫時間*/
hour = time.substring(11,13);
minute = time.substring(14,16);
second = time.substring(17,19);
System.out.println(time);
System.out.println(hour);
System.out.println(minute);
System.out.println(second);
/*現在時間*/
DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy/MM/dd HH:mm:ss");
String date = dtf.format(LocalDateTime.now());
now_hour = date.substring(11,13);
now_minute = date.substring(14,16);
now_second = date.substring(17,19);
System.out.println(date);
System.out.println(now_hour);
System.out.println(now_minute);
System.out.println(now_second);
/*判斷不一樣*/
int yes = 0;
if(Integer.parseInt(now_hour) != Integer.parseInt(hour))
{
   yes = 1;
}
if(Integer.parseInt(now_minute) != Integer.parseInt(minute))
{
    yes = 1;
}
if(Integer.parseInt(now_second) != Integer.parseInt(second))
{
    yes = 1;
}
System.out.println(yes);
if(yes == 1)
{
    try
    {
        statement.executeUpdate(String.format(put));
    }
    catch (SQLException e)
    {
        e.printStackTrace();
    }
    System.out.println("input yes");
    yes = 0;
    connection.close();
}
else
{
    System.out.println("ERROR SQLPUT");
}
```
## 檔案處理

### 當下時間

```
String now_hour = null;
String now_minute = null;
String now_second = null;
String now_year = null;
String now_month = null;
String now_day = null;
String data_name = null;
DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy/MM/dd HH:mm:ss");
String date = dtf.format(LocalDateTime.now());
now_hour = date.substring(11,13);
now_minute = date.substring(14,16);
now_second = date.substring(17,19);
now_year = date.substring(0,4);
now_month = date.substring(5,7);
now_day = date.substring(8,10);
data_name = now_year + now_month + now_day + "-";
data_name += now_hour + now_minute + now_second;
return data_name;
```
### 資料清除
```
 try
{
    FileWriter fileWriter = new FileWriter(file_name);
    fileWriter.write("");
    fileWriter.flush();
    fileWriter.close();
}
catch (IOException e)
{
    e.printStackTrace();
}

```
### 資料寫入

```
BufferedWriter writer = null;
File file = new File(file_name);
try
{
    writer = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(file_name,true),"UTF-8"));
    writer.newLine();
    writer.append(date);
    writer.flush();
    writer.close();
}
catch (Exception e)
{
    throw new RuntimeException(e);
}
```
### 資料讀取
```
 BufferedReader reader = null;
String out = null;
try
{
    reader = new BufferedReader(new InputStreamReader(new FileInputStream(file_name), "UTF-8"));
    String put = null;
    while((put = reader.readLine()) != null)
    {
        out = put;
    }
    reader.close();
}
catch (FileNotFoundException e)
{
    e.printStackTrace();
}
catch (IOException e)
{
    e.printStackTrace();
}
return out;
```