图像评价——项目记录

1.基于SpringBoot,MybatisPlus的图像数据库管理

SpringBoot整合SSMP案例学习
数据库存储图像

2.SpringBoot整合JavaFX的BS架构

JavaFx使用及问题记录

3.Socket通信建立

全网最全的Java Socket通讯例子
Java的Socket连接同时传输图片、文本等多种信息

这里选用的是:使用Java的对象流。自定义一个类用于传输数据

Serializable 序列化:

什么是Serializable接口:一个对象序列化的接口,一个类只有实现了Serializable接口,它的对象才能被序列化;
什么是序列化:序列化是将对象状态转换为可保持或传输的格式的过程。与序列化相对的是反序列化,它将流转换为对象。这两个过程结合起来,可以轻松地存储和传输数据;
为什么要序列化对象:把对象转换为字节序列的过程称为对象的序列化,把字节序列恢复为对象的过程称为对象的反序列化;
什么情况下需要序列化:当我们需要把对象的状态信息通过网络进行传输,或者需要将对象的状态信息持久化,以便将来使用时都需要把对象进行序列化。

package tsd.usl.controller.utils;

import java.io.*;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

public class DataFormatTsd implements Serializable {
    //数据类型标志位
    String data_flag = null; // images_quality,images_recognition,nums_accuracy,nums_score,
    //nums
    String nums = null; //拆分用","
    //images
    List<Picture> list_images = null;

    @Override
    public String toString() {
        return "DataDemo1{" +
                "data_flag='" + data_flag + '\'' +
                ", nums='" + nums + '\'' +
                ", list_images=" + list_images +
                '}';
    }

    public DataFormatTsd() {

    }

    public DataFormatTsd(String data_flag, String nums, List<Picture> list_images) {
        this.data_flag = data_flag;
        this.nums = nums;
        this.list_images = list_images;
    }

    public DataFormatTsd(String data_flag, List<Picture> list_images) {
        this.data_flag = data_flag;
        this.list_images = list_images;
    }

    public DataFormatTsd(String data_flag, String nums) {
        this.data_flag = data_flag;
        this.nums = nums;
    }

    public String getData_flag() {
        return data_flag;
    }

    public void setData_flag(String data_flag) {
        this.data_flag = data_flag;
    }

    public List<Picture> getList_images() {
        return list_images;
    }

    public void setList_images(List<Picture> list_images) {
        this.list_images = list_images;
    }

    public String getNums() {
        return nums;
    }

    public void setNums(String nums) {
        this.nums = nums;
    }



    //获取识别结果或者分数List<String>
    public List<String> getNumslist(){
        List<String> list = new ArrayList<>();
        String[] ss = nums.split(",");
        list = Arrays.asList(ss);
        return list;
    }

}

package tsd.usl.controller.utils;

import java.io.Serializable;
import java.util.Arrays;

public class Picture implements Serializable {
    private byte[] pic_data;

    public void setPic_data(byte[] pic_data) {
        this.pic_data = pic_data;
    }

    public Picture() {
    }

    public Picture(byte[] pic_data) {
        this.pic_data = pic_data;
    }

    @Override
    public String toString() {
        return "Picture{" +
                "pic_data=" + Arrays.toString(pic_data) +
                '}';
    }

    public byte[] getPic_data() {
        return pic_data;
    }
}
Socket长连接:
    //按钮(打开连接)
    public void connectbtnClicked(ActionEvent actionEvent) throws IOException {
        //创建服务器,与连接ACCEPT相对应的发送接收线程
        try {
            System.out.println("Server start running...");
            clientdetails.setText("客户端IP:" + "端口:");
            ServerSocket serverSocket = new ServerSocket(8888);

//            while(true){
            Socket socketAccept = serverSocket.accept();

            clientdetails.setText("客户端IP:" + socketAccept.getInetAddress() + "端口:" + socketAccept.getPort());

            System.out.println("connect success...start thread...");
            new Thread(new ServerListen(socketAccept)).start();//为每一个连接创建一个接收线程
            new Thread(new ServerSend(socketAccept)).start();//为每一个连接创建一个发送线程

//            }

        }catch (Exception e){
            e.printStackTrace();
        }

    }
//监听类   //为了创建线程,实现Runable,就要重写run()函数
    private class ServerListen implements Runnable{
        private Socket socketListen;

        public ServerListen(Socket socketListen) {
            this.socketListen = socketListen;
        }

        @Override
        public void run() {//1.接收质量图片,2.接收准确率文本,3.接收质量分数文本
            try {
                ObjectInputStream ois = new ObjectInputStream(socketListen.getInputStream());
                while(true){
                    //获取要检测质量的图片
                    Object obj = ois.readObject();
                    DataFormatTsd data = (DataFormatTsd) obj;
                }
            } catch (Exception e) {
                e.printStackTrace();
            } finally {
                try {
                    socketListen.close();
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        }
    }

    //发送类//
    private class ServerSend implements Runnable{
        private Socket socketSend;

        public ServerSend(Socket socketSend) {
            this.socketSend = socketSend;
        }
//    public ServerSend(Socket socketSend) {
//        this.socketSend = socketSend;
//    }

        @Override
        public void run() {
            try {
                ObjectOutputStream oos = new ObjectOutputStream(socketSend.getOutputStream());
//                Scanner scanner = new Scanner(System.in);

                while (true){
                    if(sendImagesflag.equals("imagesForDassess")){//发送用于识别的图片Listfile
                        System.out.println("send images for Dassess");
                        int[] nums = Utils.Randomnums(1,6,3);
                        System.out.println(nums.length+":"+nums[0]+nums[1]+nums[2]);

                        List<Picture> conP = new ArrayList<>();
                        for(int i = 0;i < nums.length;i++){
                            listdAddress.add("D:\\ImageDetectionCS\\demo1\\src\\main\\resources\\static\\" + balloonService.getById(nums[i]).getAddress());

                            listf_d.add(new File(listdAddress.get(i)));
                            list_dtype_right.add(balloonService.getById(nums[i]).getType());//balloon
                            Picture tp = new Picture();
                            tp.setPic_data(Utils.load_picture_from_file(listdAddress.get(i)));
                            conP.add(tp);
                        }
                        DataFormatTsd dafotImagesd = new DataFormatTsd("images_recognition",conP);

                        try {
                            oos.writeObject(dafotImagesd);
                            oos.flush();
                        } catch (Exception e) {
                            e.printStackTrace();
                        }
                        sendImagesflag = "imagesForNone";
                    }else if(sendImagesflag.equals("imagesForQassess")){//发送用于质量评价的图片Listfile


                        sendImagesflag = "imagesForNone";
                    }else if(sendImagesflag.equals("imagesForNone")){
                        Thread.sleep(5000);
                        System.out.println("wait for send command......");
                    }

                }
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值