我们使用大模型训练的数据,最终需要转化成工业生产,本内容涉及机器人控制及工业软件显示
使用以太网通讯,注意将IP地址设置成本机地址:
import os import json import socket, threading, random import torch from PIL import Image from torchvision import transforms import matplotlib.pyplot as plt import time from vggtask import vgg import socket import tkinter as tk from tkinter import filedialog from PIL import Image, ImageTk def recv_data(new_socket): global teststr while True: new_socket.send(teststr.encode("utf-8")) time.sleep(0.5) # new_socket.close() def main(): global teststr socket_server = socket.socket(socket.AF_INET, socket.SOCK_STREAM) socket_server.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, True) socket_server.bind(('192.168.132.2', 2000)) socket_server.listen(128) while True: try: new_socket, ip_port = socket_server.accept() except: pass else: a, b = ip_port print(f"连线成功,客户端IP:{a} 端口:{b}") t = threading.Thread(target=recv_data, args=(new_socket,)) t.start() print(" main is running !") time.sleep(1) device = torch.device("cuda:0" if torch.cuda.is_available() else "cpu") data_transform = transforms.Compose( [transforms.Resize((224, 224)), transforms.ToTensor(), transforms.Normalize((0.5, 0.5, 0.5), (0.5, 0.5, 0.5))]) # load image #自动打开路径 file_path = filedialog.askopenfilename(filetypes=[("Image files", "*.jpg;*.png")]) img_path = file_path #绝对路径 # img_path = "D:\\OpenAI\\vggandAlexnet\\flower_data\\val\\roses\\160954292_6c2b4fda65_n.jpg" assert os.path.exists(img_path), "file: '{}' dose not exist.".format(img_path) img = Image.open(img_path) plt.imshow(img) # [N, C, H, W] img = data_transform(img) # expand batch dimension #扩充一个维度,因为读入的图片只有高度,宽度和深度三个维度 img = torch.unsqueeze(img, dim=0) # read class_indict json_path = './class_indices.json' assert os.path.exists(json_path), "file: '{}' dose not exist.".format(json_path) json_file = open(json_path, "r") # 读取索引对应的类别名称,并解码,解成需要使用的字典 class_indict = json.load(json_file) # create model model = vgg(num_classes=5).to(device)#初始化网络 # load model weights weights_path = r'D:\111\yolov5\AlexNet.pth' assert os.path.exists(weights_path), "file: '{}' dose not exist.".format(weights_path) #载入网络模型 model.load_state_dict(torch.load(weights_path)) model.eval()#关闭dropout模式 with torch.no_grad():#pytorch不去跟踪变量的损失梯度 # predict class #数据经过正向传播得到输出,然后将输出进行压缩,将batch维度压缩掉 output = torch.squeeze(model(img.to(device))).cpu() #经softmax处理后变成一个概率分布 predict = torch.softmax(output, dim=0) #通过torch.argmax方法,获取概率最大处所对应的索引值 predict_cla = torch.argmax(predict).numpy() teststr = str(predict_cla) #但因类别名称,以及他所对应的类别概率 print_res = "class: {} prob: {:.3}".format(class_indict[str(predict_cla)], predict[predict_cla].numpy()) plt.title(print_res) for i in range(len(predict)): print("class: {:10} prob: {:.3}".format(class_indict[str(i)], predict[i].numpy())) plt.show() flower_dict = { "daisy": 0, "dandelion": 1, "roses": 2, "sunflowers": 3, "tulips": 4 } if __name__ == '__main__': teststr = "" main()
import os import json import socket, threading, random import torch from PIL import Image from torchvision import transforms import matplotlib.pyplot as plt import time from vggtask import vgg import socket import tkinter as tk from tkinter import filedialog from PIL import Image, ImageTk def recv_data(new_socket): global teststr while True: new_socket.send(teststr.encode("utf-8")) time.sleep(0.5) # new_socket.close() def main(): global teststr socket_server = socket.socket(socket.AF_INET, socket.SOCK_STREAM) socket_server.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, True) socket_server.bind(('192.168.132.2', 2000)) socket_server.listen(128) while True: try: new_socket, ip_port = socket_server.accept() except: pass else: a, b = ip_port print(f"连线成功,客户端IP:{a} 端口:{b}") t = threading.Thread(target=recv_data, args=(new_socket,)) t.start() print(" main is running !") time.sleep(1) device = torch.device("cuda:0" if torch.cuda.is_available() else "cpu") data_transform = transforms.Compose( [transforms.Resize((224, 224)), transforms.ToTensor(), transforms.Normalize((0.5, 0.5, 0.5), (0.5, 0.5, 0.5))]) # load image #自动打开路径 file_path = filedialog.askopenfilename(filetypes=[("Image files", "*.jpg;*.png")]) img_path = file_path #绝对路径 # img_path = "D:\\OpenAI\\vggandAlexnet\\flower_data\\val\\roses\\160954292_6c2b4fda65_n.jpg" assert os.path.exists(img_path), "file: '{}' dose not exist.".format(img_path) img = Image.open(img_path) plt.imshow(img) # [N, C, H, W] img = data_transform(img) # expand batch dimension #扩充一个维度,因为读入的图片只有高度,宽度和深度三个维度 img = torch.unsqueeze(img, dim=0) # read class_indict json_path = './class_indices.json' assert os.path.exists(json_path), "file: '{}' dose not exist.".format(json_path) json_file = open(json_path, "r") # 读取索引对应的类别名称,并解码,解成需要使用的字典 class_indict = json.load(json_file) # create model model = vgg(num_classes=5).to(device)#初始化网络 # load model weights weights_path = r'D:\111\yolov5\AlexNet.pth' assert os.path.exists(weights_path), "file: '{}' dose not exist.".format(weights_path) #载入网络模型 model.load_state_dict(torch.load(weights_path)) model.eval()#关闭dropout模式 with torch.no_grad():#pytorch不去跟踪变量的损失梯度 # predict class #数据经过正向传播得到输出,然后将输出进行压缩,将batch维度压缩掉 output = torch.squeeze(model(img.to(device))).cpu() #经softmax处理后变成一个概率分布 predict = torch.softmax(output, dim=0) #通过torch.argmax方法,获取概率最大处所对应的索引值 predict_cla = torch.argmax(predict).numpy() teststr = str(predict_cla) #但因类别名称,以及他所对应的类别概率 print_res = "class: {} prob: {:.3}".format(class_indict[str(predict_cla)], predict[predict_cla].numpy()) plt.title(print_res) for i in range(len(predict)): print("class: {:10} prob: {:.3}".format(class_indict[str(i)], predict[i].numpy())) plt.show() flower_dict = { "daisy": 0, "dandelion": 1, "roses": 2, "sunflowers": 3, "tulips": 4 } if __name__ == '__main__': teststr = "" main()