Vision_Robot
import time
import tkinter as tk
from tkinter import messagebox
from PIL import Image, ImageTk
import socket
import threading
from datetime import datetime
import logging
import subprocess # 确保导入 subprocess 库
import os
import pyautogui
from HslCommunication import MelsecMcNet
import json
Response=0
#定义文件夹路径
folder_path = r'c:\Log' #C:\v5\Public_Release
# 检查文件夹是否存在,如果不存在则创建
if not os.path.exists(folder_path):
os.makedirs(folder_path)
# 设置日志配置
logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(levelname)s - %(message)s')
class TextHandler(logging.Handler):
def __init__(self, widget):
super().__init__()
self.widget = widget
def emit(self, record):
msg = self.format(record)
self.widget.insert(tk.END, msg + '\n')
self.widget.yview_moveto(1)
class MyClass(tk.Frame):
def __init__(self, root, parent):
super().__init__(parent) # 初始化父类
self.root = root
self.parent = parent
class TCPClientApp:
# 类属性定义配置文件路径
CONFIG_PATH = r'c:\Log\offset_config.json' # 配置文件路径
# 工业风格配色方案
INDUSTRIAL_COLORS = {
'bg_main': '#333333', # 主背景-深灰
'bg_panel': '#404040', # 面板背景-中灰
'accent1': '#FFA500', # 强调色-橙色
'accent2': '#00B0F0', # 强调色-科技蓝
'text_primary': '#FFFFFF', # 主要文字-白
'text_secondary': '#CCCCCC', # 次要文字-浅灰
'status_ok': '#00FF00', # 状态指示-绿
'status_ng': '#FF0000' # 状态指示-红
}
def __init__(self, root, parent=None):
self.root = root
self.vision_client_socket = None
self.robot_client_socket = None
self.connected_to_vision = False
self.connected_to_robot = False
self.vision_ip = "127.0.0.1"
self.vision_port = 8888
self.robot_ip = "192.168.0.109" #192.168.0.1
self.robot_port = 2009 #2004
self.setup_ui()
self.setup_logging()
self.app3_process = None # 用于存储子进程的引用
self.parent = parent or root # 自动降级处理
self.plc = None
self.last_y79_state = False # 新增状态缓存
self.setup_plc()
self.start_plc_monitoring()
self.init_plc_connection() # 启动程序,不用任何的按钮,直接运行
###开启程序后自动启动项目
self.connect_to_vision()
self.connect_to_robot()
###开启程序后自动加载offset
self.load_settings()
# 修改窗口关闭事件处理
self.root.protocol("WM_DELETE_WINDOW", self.on_exit)
def setup_ui(self):
# 在主窗口设置统一背景
self.root.configure(bg='#FAFAD2') # 淡金色背景
self.root.title("Design by Tim")
self.root.geometry("1024x768")
# Grid weights for resizing behavior
self.root.grid_columnconfigure(0, weight=1)
self.root.grid_columnconfigure(1, weight=2)
self.root.grid_columnconfigure(2, weight=1)
self.root.grid_rowconfigure(0, weight=1)
self.root.grid_rowconfigure(1, weight=1)
# Left Frame
left_frame = tk.Frame(self.root)
left_frame.grid(row=0, column=0, padx=5, pady=5, sticky="nsew")
self.create_left_panel(left_frame)
# Middle Frame
middle_frame = tk.Frame(self.root)
middle_frame.grid(row=0, column=1, padx=5, pady=5, sticky="nsew")
self.create_middle_panel(middle_frame)
# Right Frame
right_frame = tk.Frame(self.root)
right_frame.grid(row=0, column=2, padx=5, pady=5, sticky="nsew")
self.create_right_panel(right_frame)
# Bottom Frame
bottom_frame = tk.Frame(self.root, bg='lightgray')
bottom_frame.grid(row=1, column=0, columnspan=3, padx=5, pady=5, sticky="nsew")
self.create_bottom_panel(bottom_frame)
def create_left_panel(self, parent):
self.plc = MelsecMcNet("192.168.0.11", 1028) #PLC Setting
conn = self.plc.ConnectServer()
if conn.IsSuccess:
#status_bar = tk.Label(parent, text="PLC Connected...", fg="gray",bg='green')
status_bar = tk.Label(parent, text="PLC Connected...", fg="green")
status_bar.pack(side=tk.BOTTOM, fill=tk.X)
logging.info(f"[{datetime.now().strftime('%H:%M:%S')}],Connect PLC,There is not Command")
else:
#status_bar = tk.Label(parent, text="PLC is not connect...", fg="gray",bg='red')
status_bar = tk.Label(parent, text="PLC is not connect...", fg="gray")
status_bar.pack(side=tk.BOTTOM, fill=tk.X)
logging.info(f"[{datetime.now().strftime('%H:%M:%S')}] PLC is not Connect... Can not Recive PLC Start Command")
PLC_button = tk.Button(parent, text="PLC Port (Backup)",command=self.start_PLC_command,
bg="#CDCDCD",
fg="gray",
font=("Segoe UI", 12))
PLC_button.pack(side=tk.BOTTOM, fill=tk.X)
Falco_button = tk.Button(parent, text="Falco Port (Backup)",command=self.start_Falco_command,
bg="#CDCDCD",
fg="gray",
font=("Segoe UI", 12))
Falco_button.pack(side=tk.BOTTOM, fill=tk.X)
Robot_button = tk.Button(parent, text="Robot Port (Backup)",command=self.start_Robot_command,
bg="#CDCDCD",
fg="gray",
font=("Segoe UI", 12))
Robot_button.pack(side=tk.BOTTOM, fill=tk.X)
#status_indicator6 = tk.Frame(parent, width=20, height=20, bg='#CDCDCD')
#setattr(self, f"_status_indicator6", status_indicator6) # Store as attribute
#status_indicator6.pack(side=tk.TOP, anchor='center', padx=(0, 5))
#status_indicator6.pack(side=tk.TOP, anchor='sw', padx=(0, 5))
# 设置左面板背景
left_frame = tk.Frame(self.root, bg='#FAFAD2')
# MAIN标题
main_title = tk.Label(parent,
text="Main", #Top 文字显示
font=("Arial", 38, "bold"),
fg="black",
bg="#FAFAD2",
anchor='center') # 新增居中属性
main_title.pack(side=tk.TOP, pady=(15, 30), fill=tk.X) # 增加填充
## main_label = tk.Label(parent, text="", font=("Helvetica", 5)) #Modify Font Size to POS Y
## main_label.pack(pady=(10, 1))
## main_label = tk.Label(parent, text="Main", font=("Helvetica", 26))
## main_label.pack(pady=(10, 50))
launch_button = tk.Button(parent, text="Launch Alignment Vision", command=self.launch_application)
launch_button.pack(pady=(10,10))
start_button = tk.Button(parent, text="Start",command=self.start_auto_command,
bg="#32CD32",
fg="white",
font=("Segoe UI", 12))
start_button.pack(pady=(0, 10))
vision_control_and_label_frame = tk.Frame(parent)
vision_control_and_label_frame.pack(anchor='center', pady=(10, 0), expand=True)
self.create_connection_buttons(vision_control_and_label_frame, "Vision", self.connect_to_vision, self.disconnect_from_vision)
robot_control_and_label_frame = tk.Frame(parent)
robot_control_and_label_frame.pack(anchor='center', pady=(10, 0), expand=True)
self.create_connection_buttons(robot_control_and_label_frame, "Robot", self.connect_to_robot, self.disconnect_from_robot)
def create_connection_buttons(self, parent, label_text, connect_cmd, disconnect_cmd):
connect_button = tk.Button(parent, text=f"Con. {label_text}", command=connect_cmd, width=14, height=1)
connect_button.pack(side=tk.LEFT, anchor='center', padx=5)
status_indicator = tk.Frame(parent, width=20, height=20, bg='red')
setattr(self, f"{label_text.lower()}_status_indicator", status_indicator) # Store as attribute
status_indicator.pack(side=tk.LEFT, anchor='center', padx=(0, 5))
disconnect_button = tk.Button(parent, text=f"Dis. {label_text}", command=disconnect_cmd, width=14, height=1)
disconnect_button.pack(side=tk.LEFT, anchor='center', padx=5)
def create_middle_panel(self, parent):
# 中间主框架
middle_frame = tk.Frame(parent, bg='#CCCCCC')
middle_frame.pack(fill=tk.BOTH, expand=True)
# Vision 数据区
vision_frame = tk.Frame(middle_frame,
bg='#CCCCCC',
relief=tk.FLAT,
borderwidth=0)
vision_frame.pack(side=tk.LEFT,
fill=tk.BOTH,
expand=True,
padx=5,
pady=5)
# Vision 标题 (优化样式)
vision_title = tk.Label(vision_frame,
text="Vision Data",
font=("Arial", 38, "bold"),
fg="black",
bg="#FAFAD2",
anchor='center') # 左对齐 w
vision_title.pack(pady=(15, 30), fill=tk.X, padx=10)
# Vision 数据显示区
self.vision_data_text = tk.Text(vision_frame,
wrap=tk.WORD,
height=8,
width=35,
font=("Helvetica", 12),
fg="purple",
bg="white",
borderwidth=2,
relief=tk.SUNKEN)
self.vision_data_text.pack(padx=10, pady=5, fill=tk.BOTH, expand=True)
self.vision_char_text = tk.Text(vision_frame,
wrap=tk.WORD,
height=8,
width=35,
font=("Helvetica", 12),
fg="orange",
bg="#F0F0F0",
borderwidth=1,
relief=tk.GROOVE)
self.vision_char_text.pack(padx=10, pady=5, fill=tk.BOTH, expand=True)
# Robot 数据区
robot_frame = tk.Frame(middle_frame,
bg='#CCCCCC',
relief=tk.FLAT,
borderwidth=0)
robot_frame.pack(side=tk.RIGHT,
fill=tk.BOTH,
expand=True,
padx=5,
pady=5)
# Robot 标题 (优化样式)
robot_title = tk.Label(robot_frame,
text="Robot Data",
font=("Arial", 38, "bold"),
fg="black",
bg="#FAFAD2",
anchor='center') # 右对齐 e
robot_title.pack(pady=(15, 30), fill=tk.X, padx=10)
# Robot 数据显示区
self.robot_data_text = tk.Text(robot_frame,
wrap=tk.WORD,
height=8,
width=35,
font=("Helvetica", 12),
fg="purple",
bg="white",
borderwidth=2,
relief=tk.SUNKEN)
self.robot_data_text.pack(padx=10, pady=5, fill=tk.BOTH, expand=True)
self.robot_char_text = tk.Text(robot_frame,
wrap=tk.WORD,
height=8,
width=35,
font=("Helvetica", 12),
fg="orange",
bg="#F0F0F0",
borderwidth=1,
relief=tk.GROOVE)
self.robot_char_text.pack(padx=10, pady=5, fill=tk.BOTH, expand=True)
def create_right_panel(self, parent):
# 设置右面板背景
right_frame = tk.Frame(self.root, bg='#FAFAD2')
# Log标题(优化版)
log_title = tk.Label(parent,
text="Log",
font=("Arial", 38, "bold"),
fg="black",
bg="#FAFAD2",
anchor='center') # 居中
log_title.pack(pady=(15, 30), fill=tk.X)
self.log_text = tk.Text(parent, wrap=tk.WORD, height=25, width=60)
self.log_text.pack(padx=10, pady=10)
def create_bottom_panel(self, parent):
# 单行布局框架
offset_frame = tk.Frame(parent, bg='lightgray')
offset_frame.pack(fill=tk.X, pady=5, padx=5)
# 列配置(0:X 1:输 2:S1 | 3:Y 4:输 5:S2 | 6:U 7:输 8:S3)
for col in [0,3,6]:
offset_frame.grid_columnconfigure(col, minsize=40) # 标签列
for col in [2,5,8]:
offset_frame.grid_columnconfigure(col, minsize=50) # 按钮列
# X Offset
tk.Label(offset_frame, text="X:", bg='lightgray', font=("Helvetica", 12)).grid(
row=0, column=0, sticky='e')
self.custom_command_entry5 = tk.Entry(offset_frame, width=8, font=("Helvetica", 12))
self.custom_command_entry5.grid(row=0, column=1, padx=2, sticky='ew')
tk.Button(offset_frame, text="S1", command=self.send_x_offset, width=4).grid(
row=0, column=2, padx=(0,10))
# Y Offset
tk.Label(offset_frame, text="Y:", bg='lightgray', font=("Helvetica", 12)).grid(
row=0, column=3, sticky='e')
self.custom_command_entry6 = tk.Entry(offset_frame, width=8, font=("Helvetica", 12))
self.custom_command_entry6.grid(row=0, column=4, padx=2, sticky='ew')
tk.Button(offset_frame, text="S2", command=self.send_y_offset, width=4).grid(
row=0, column=5, padx=(0,10))
# U Offset
tk.Label(offset_frame, text="U:", bg='lightgray', font=("Helvetica", 12)).grid(
row=0, column=6, sticky='e')
self.custom_command_entry7 = tk.Entry(offset_frame, width=8, font=("Helvetica", 12))
self.custom_command_entry7.grid(row=0, column=7, padx=2, sticky='ew')
tk.Button(offset_frame, text="S3", command=self.send_u_offset, width=4).grid(
row=0, column=8)
custom_command_frame = tk.Frame(parent)
custom_command_frame.pack(side=tk.TOP, pady=5, fill=tk.X, expand=True)
custom_command_label = tk.Label(custom_command_frame, text="Enter Vision Command:", font=("Helvetica", 14))
custom_command_label.pack(side=tk.LEFT, padx=5)
self.custom_command_entry1 = tk.Entry(custom_command_frame, font=("Helvetica", 20), fg="purple")
self.custom_command_entry1.pack(side=tk.LEFT, fill=tk.X, expand=True, padx=5)
send_command_button = tk.Button(custom_command_frame, text="Send", command=self.send_custom_command1, font=("Helvetica", 14))
send_command_button.pack(side=tk.LEFT, padx=5)
custom_command_frame2 = tk.Frame(parent)
custom_command_frame2.pack(side=tk.TOP, pady=5, fill=tk.X, expand=True)
custom_command_label = tk.Label(custom_command_frame2, text="Enter Robot Command:", font=("Helvetica", 14))
custom_command_label.pack(side=tk.LEFT, padx=5)
self.custom_command_entry2 = tk.Entry(custom_command_frame2, font=("Helvetica", 20), fg="purple")
self.custom_command_entry2.pack(side=tk.LEFT, fill=tk.X, expand=True, padx=5)
send_command_button2 = tk.Button(custom_command_frame2, text="Send", command=self.send_custom_command2, font=("Helvetica", 14))
send_command_button2.pack(side=tk.LEFT, padx=5)
custom_command_frame3= tk.Frame(parent)
custom_command_frame3.pack(side=tk.TOP, pady=5, fill=tk.X, expand=True)
custom_command_label = tk.Label(custom_command_frame3, text="Enter Send To Vision Command:", font=("Helvetica", 14))
custom_command_label.pack(side=tk.LEFT, padx=5)
self.custom_command_entry3 = tk.Entry(custom_command_frame3, font=("Helvetica", 20), fg="purple")
self.custom_command_entry3.pack(side=tk.LEFT, fill=tk.X, expand=True, padx=5)
send_command_button3 = tk.Button(custom_command_frame3, text="Send", command=self.send_custom_command3, font=("Helvetica", 14))
send_command_button3.pack(side=tk.LEFT, padx=5)
# 移除发送按钮并绑定 Enter 键事件到输入框
self.custom_command_entry3.bind('<Return>', lambda event: self.send_custom_command3())
def _validate_number(self, value):
"""数值输入验证"""
if value == "" or value == "-":
return True
try:
float(value)
return True
except ValueError:
return False
def setup_logging(self):
text_handler = TextHandler(self.log_text)
logger = logging.getLogger()
logger.addHandler(text_handler)
def connect_to_vision(self):
try:
self.vision_client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
self.vision_client_socket.settimeout(65536)
self.vision_client_socket.connect((self.vision_ip, self.vision_port))
self.connected_to_vision = True
self.update_status_indicator(self.vision_status_indicator, 'green', "Connected to Vision")
logging.info(f"Connected to Vision at {self.vision_ip}:{self.vision_port}")
threading.Thread(target=self.receive_data, args=(self.vision_client_socket, 'vision'), daemon=True).start()
except Exception as e:
self.connected_to_vision = False
self.update_status_indicator(self.vision_status_indicator, 'red', f"Failed to connect to Vision: {e}")
logging.error(f"Failed to connect to Vision: {e}")
if self.vision_client_socket:
self.vision_client_socket.close()
def disconnect_from_vision(self):
if self.connected_to_vision:
self.vision_client_socket.close()
self.connected_to_vision = False
self.update_status_indicator(self.vision_status_indicator, 'red', "Disconnected from Vision")
logging.info("Disconnected from Vision")
##OutofRang
def Out_Of_Range_from_vision(self):
self.update_status_indicator2(self.vision_status_indicator, 'red', "Out_Of_Range_±10°")
logging.info("Out_Of_Range_from_vision_±10°")
def Out_Of_Range_from_vision2(self):
self.update_status_indicator2(self.vision_status_indicator, 'red', "Out_Of_Range_±90°")
logging.info("Out_Of_Range_from_vision_±90°")
##OutofRang
##Robot at Home
def Home_POS(self):
self.update_status_indicator2(self.vision_status_indicator, 'red', "Not Match,Pls Check and Put it Again,\n Then Connect Vision Again ")
logging.info("Not Match,Pls Check and Put it Again ...")
##Robot at Home
def connect_to_robot(self):
try:
self.robot_client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
self.robot_client_socket.settimeout(65536)
self.robot_client_socket.connect((self.robot_ip, self.robot_port))
self.connected_to_robot = True
self.update_status_indicator(self.robot_status_indicator, 'green', "Connected to Robot")
logging.info(f
相关文章:
Vision_Robot
import time import tkinter as tk from tkinter import messagebox from PIL import Image, ImageTk import socket import threading from datetime import datetime import logging import subprocess # 确保导入 subprocess 库 import os import pyautogu…...
爬虫练习案例
案例1: 爬取菜鸟教程左侧导航栏的分类内容: 在pycharm中书写代码。 先倒入相关模块。 import requests from bs4 import BeautifulSoup import lxml.etree as le这个案例写两种写法。 第一种: urlhttps://www.runoob.com/html/html-tuto…...
大数据时代的隐私保护:区块链技术的创新应用
一、引言 在当今数字化时代,大数据已经成为推动社会发展的关键力量。从商业决策到社会治理,从医疗健康到金融服务,数据的价值日益凸显。然而,随着数据的大量收集和广泛使用,隐私保护问题也日益突出。如何在充分利用大…...
力扣刷题-热题100题-第31题(c++、python)
25. K 个一组翻转链表 - 力扣(LeetCode)https://leetcode.cn/problems/reverse-nodes-in-k-group/?envTypestudy-plan-v2&envIdtop-100-liked 常规模拟 根据翻转的长度找到头和尾,进入函数进行翻转 主程序里有循环不断找到头和尾并拼…...
(四)数据检索与增强生成——让对话系统更智能、更高效
上一篇:(三)链式工作流构建——打造智能对话的强大引擎 在前三个阶段,我们已经搭建了一个基础的智能对话,并深入探讨了输入输出处理和链式工作流构建的细节。今天,我们将进入智能对话系统的高级阶段——数…...
Turtle图形化编程知识点汇总:让编程更有趣
友情提示:本文内容由银河易创AI(https://ai.eaigx.com)创作平台gpt-4-turbo模型生成,仅供参考! 在学习编程的过程中,许多初学者会接触到Python的turtle图形库,它是一种图形化编程工具,通过简单的…...
Social GAN(CVPR2018)
文章目录 AbstractIntroductionRelated WorkHuman-Human InteractionRNNs for Sequence PredictionGenerative Modeling MethodProblem DefinitionGenerative Adversarial NetworksSocially-Aware GANPooling ModuleEncouraging Diverse Sample Generation Conclusion paper Ab…...
0201线性回归-机器学习-人工智能
文章目录 1 程序目标2 代码实现3 关键步骤解释4 示例输出5 注意事项结语 以下是一个使用 scikit-learn、pandas和 matplotlib 实现线性回归的完整程序示例。程序包含数据加载、模型训练、预测和可视化。 1 程序目标 加载数据(使用 pandas)数据预处理&am…...
2-Visual Studio 2022 NET开发Windows桌面软件并连接SQL Server数据库
引言 今天尝试Visual Studio 2022 NET开发一个NET桌面软件,并尝试连接SQL Server的数据库,此文章为开发笔记。 --------------------------------------------------------------------------------------------------------------------------------- …...
OpenGL学习笔记(简介、三角形、着色器、纹理、坐标系统、摄像机)
目录 简介核心模式与立即渲染模式状态机对象GLFW和GLAD Hello OpenGLTriangle 三角形顶点缓冲对象 VBO顶点数组对象 VAO元素缓冲对象 EBO/ 索引缓冲对象 IEO 着色器GLSL数据类型输入输出Uniform 纹理纹理过滤Mipmap 多级渐远纹理实际使用方式纹理单元 坐标系统裁剪空间 摄像机自…...
第二十九章:Python-mahotas库:图像处理的高效工具
一、mahotas库简介 mahotas是一个功能强大的Python图像处理库,提供了丰富的图像处理算法和工具,包括图像分割、特征提取、滤波、形态学操作等。它以简洁的API和高效的性能著称,特别适合处理大型图像。资源绑定附上完整资料供读者参考学习&…...
【网络安全】 防火墙技术
防火墙是网络安全防御的重要组成部分,它的主要任务是阻止或限制不安全的网络通信。在这篇文章中,我们将详细介绍防火墙的工作原理,类型以及如何配置和使用防火墙。我们将尽可能使用简单的语言和实例,以便于初学者理解。 一、什么…...
关于Linux系统安装和优化的教程
书籍教程 《Linux 就该这么学》:涵盖多种 Linux 发行版的安装知识,从安装前硬件检测(如硬盘容量需至少 10GB、内存至少 2GB )、软件源选择,到安装步骤(如镜像烧录、启动设置、分区操作 )都有详…...
还是主题混合程序设计
以下是针对您现有代码的完整主题化改造方案,实现跨QML/Qt Widgets的阴影主题系统: 一、主题管理系统核心 // thememanager.h #pragma once #include <QObject> #include <QColor> #include <QMap> #include <QQmlEngine>class…...
【FPGA开发】利用状态机思想点亮流水灯/初学hdlbitsFPGA教程网站
一、状态机思想介绍 状态机是一种用于描述系统行为的形式化模型,它将系统抽象为有限的状态,并通过状态转移来响应外部输入或事件。其核心思想是:系统在任何时刻只处于一个确定的状态,且在不同状态之间按规则切换。状态机是处理明…...
洛谷 P3214 [HNOI2011] 卡农
题目传送门 前言 再次败在 d p dp dp 手下,但是数据范围这么小应该是可以看出是 d p dp dp 的(毕竟对于其他组合数的问题数据范围都是 1 0 9 10^9 109 起步)。 思路 题意简化 现有 1 , 2 , 3 , . . . , n − 1 , n 1, 2, 3, ... , n -…...
智能体和RPA都需要程序思维,如何使用影刀的变量?
欢迎来到涛涛聊AI, 不管AI还是RPA,都需要用到编程思想才能完成批量工作。今天研究了下影刀的变量。 变量类型 根据变量值选择相应的类型,可选择任意一种影刀所支持的数据类型 变量值 指定变量中保存的值,会根据不同的类型设置…...
使用OpenFeign实现服务远程调用
在微服务架构中,由于业务功能的分工不同,我们把项目拆分为多个独立的服务,并常常将其部署在不同的服务器上,这个时候如果服务A的某个功能需要借助服务B来实现,那么这个时候如何去调用就成了问题,目前有一种…...
【移动计算】:AndroidStudio安装和项目搭建【2019:版本3.5.2】
文章目录 1. 下载安装包2. 安装包安装2.1 运行完exe进行安装选择Cancel: Unable SdkInstall Type选择Custom可以选择更新最新版本:这里不选择点击Next勾选 Android Sdk Platform API 虚拟设备选项显示已安装否则也需要勾选设置自定义安装地址:…...
泡棉压缩对显示模组漏光的定位分析及论述
■背景 液晶LCD受到外力或者挤压后,比较容易出现漏光现象即显示mura。一般从结构设计的角度会做如下措施进行整改 1>控制背光和上铁框平整度 ; 2>合理设计液晶模组的厚度和边框大小 ; 3>承载液晶面板的泡棉选取 ; 4>FPC单双层区的设计 ; 5>合理…...
当AI助理接管云计算-走向智能运维的新时代
目录 时代背景 AI在云计算运维上的帮助 新时代产物:WatchAlert 新时代思考 时代背景 代理人工智能:自主决策的未来--Gartner2025十大顶级科技预测第一名 Gartner将代理人工智能列为2025年的顶级技术趋势。该技术通过快速分析用于药物发现的海量数据…...
Day2:前端项目uniapp壁纸实战
先来做一个轮番图。 效果如下: common-style.css view,swiper,swiper-item{box-sizing: border-box; } index.vue <template><view class"homeLayout"><view class"banner"><swiper circular indicator-dots autoplay…...
使用人工智能大模型DeepSeek,如何进行论文润色和去重?
今天我们学习人工智能,如何协助我们进行论文润色和去重。手把手的学习视频地址请访问https://edu.csdn.net/learn/40402/666422 第一步在腾讯元宝对话框中输入如何协助老师做论文润色,通过提问,我们了解了老师写论文润色的步骤和建议。润色的…...
为招聘推荐系统进行相应修改的 Python 实现方案(含协同过滤推荐算法)
下面是为招聘推荐系统进行相应修改的 Python 实现方案。首先是创建数据分析看板,这里借助 Streamlit 库来实现可视化;其次是将协同过滤推荐算法和其他算法(这里采用基于内容的推荐算法)结合,以此提升推荐效果。 impor…...
Spring Boot中自定义注解的创建与使用
🌟 前言 欢迎来到我的技术小宇宙!🌌 这里不仅是我记录技术点滴的后花园,也是我分享学习心得和项目经验的乐园。📚 无论你是技术小白还是资深大牛,这里总有一些内容能触动你的好奇心。🔍 &#x…...
算法思想之双指针(二)
欢迎拜访:雾里看山-CSDN博客 本篇主题:算法思想之双指针二) 发布时间:2025.4.5 隶属专栏:算法 目录 双指针算法介绍对撞指针:快慢指针: 例题有效三角形的个数题目链接题目描述算法思路代码实现 查找总价格为…...
MySQL基础 [一] - 数据库基础
目录 什么是数据库 站在服务器角度理解 站在用户角度理解 为什么不直接使用文件存储呢? 主流数据库 MySQL的基本使用 数据库的使用样例 服务器管理 服务器数据库表之间的关系 MySQL的架构 MySQL语句分类 存储引擎 查看存储引擎 存储引擎对比 什么…...
智能合约的法律挑战与解决之道:技术与法律的交融
智能合约的法律挑战与解决之道:技术与法律的交融 智能合约的诞生,为区块链技术的应用打开了新的大门。从简单的自动化交易到复杂的去中心化自治组织(DAO),智能合约正在推动全球经济迈向去信任化的新时代。然而&#x…...
MySQL基础 [一] - Ubuntu版本安装
目录 预安装 先查看自己操作系统的版本 添加MySQL APT下载源 下载 安装 正式安装 查看MySQL状态 打开MySQL 预安装 先查看自己操作系统的版本 lsb_release -a 添加MySQL APT下载源 下载 下载发布包 下载地址 : https://dev.mysql.com/downloads/repo/apt/ 这里下…...
cursor机器码重置
1、下载vscode插件 cursor-fake-machine-0.0.2 2、将插件拖入拓展 3、彻底将cursor账号退出 setting -> Manage -> 退出账号 4、打开cursor,ctrlshiftp ,输入fake,点击确定...
深度学习的疑问--综合【2】:像CNN,GNN,transformer等这些模型都是用于提取特征,然后经过全连接层实现分类的吗?
总结: CNN,GNN,transformer等这些模型都是用于提取特征;FC、MLP等用于实现分类,MLP即是多个FC组成的。 是的,从高层次来看,CNN(卷积神经网络)、GNN(图神经网络…...
基于编程的运输设备管理系统设计(vue+springboot+ssm+mysql8.x)
基于编程的运输设备管理系统设计(vuespringbootssmmysql8.x) 运输设备信息管理系统是一个全面的设备管理平台,旨在优化设备管理流程,提高运输效率。系统提供登录入口,确保只有授权用户可以访问。个人中心让用户可以查…...
SpringBoot整合MyBatis
一、SpringBoot整合MyBatis 步骤1:创建新模块,选择Spring初始化,并配置模块相关基础信息 步骤2:选择当前模块需要使用的技术集(MyBatis、MySQL) 步骤3:设置数据源参数 spring:datasource:dr…...
kali——masscan
目录 前言 使用方法 前言 Masscan 是一款快速的端口扫描工具,在 Kali Linux 系统中常被用于网络安全评估和渗透测试。 使用方法 对单个IP进行端口扫描: masscan -p11-65535 192.168.238.131 扫描指定端口: masscan -p80,22 192.168.238.131…...
数字化转型中的开源AI智能客服与S2B2C商城小程序的融合创新
摘要 数字经济时代,企业需通过技术重构用户交互与供应链体系。本文以“开源AI智能客服”“AI智能名片”及“S2B2C商城小程序”为核心,研究三者如何通过技术协同与场景化应用实现企业营销、客户服务与供应链管理的智能化升级。通过案例分析、技术架构设…...
2-Docker常用命令
1. Docker 帮助启动类命令 1.1 启动 docker: systemctl start docker [rootlocalhost ~]# systemctl start docker1.2 停止 docker: systemctl stop docker [rootlocalhost ~]# systemctl stop docke1.3 重启 docker: systemctl restart d…...
理解OSPF 特殊区域NSSA和各类LSA特点
本文基于上文 理解OSPF Stub区域和各类LSA特点 在理解了Stub区域之后,我们再来理解一下NSSA区域,NSSA区域用于需要引入少量外部路由,同时又需要保持Stub区域特性的情况 一、 网络总拓扑图 我们在R1上配置黑洞路由,来模拟NSSA区域…...
Chapter01_绪论
文章目录 数字图像处理导论⭐图像的分类数字图像处理的概念(狭义)⭐数字图像处理的基本特征图像分析 ⭐数字图像处理的组成⭐数字图像处理研究的基本内容 数字图像处理导论 ⭐图像的分类 模拟图像:二维空间和亮度值都是连续(值&a…...
SDL显示YUV视频
文章目录 1. **宏定义和初始化**2. **全局变量**3. **refresh_video_timer 函数**4. **WinMain 函数**主要功能及工作流程:总结: 1. 宏定义和初始化 #define REFRESH_EVENT (SDL_USEREVENT 1) // 请求画面刷新事件 #define QUIT_EVENT (SDL…...
频域滤波函数 To 空域冲激响应函数
从频域滤波函数 H ( u , v ) H(u, v) H(u,v)到空域冲激响应函数 h ( x , y ) h(x, y) h(x,y)的变换。 不是冈萨雷斯这么简单的IDFT,有两次移位。这么费劲是因为DFT定义在第一象限。而且要求滤波器的尺寸为奇数,零的个数没有影响。 逆中心移位变换&…...
【C++】C++11<包装器没写>
文章目录 一、初始化列表的统一1.列表初始化2.initializer_list 二、声明1.auto2.decltype3.nullptr 三、范围for四、智能指针五、STL中的变化1.新容器arrayforward_list 2.接口 六、右值引用1.左值引用和右值引用2.右值引用的使用场景和意义3.左值引用和右值引用的价值和场景4…...
《如何避免虚无》速读笔记
文章目录 书籍信息概览躺派(出世)卷派(入世)虚无篇:直面虚无自我篇:认识自我孤独篇:应对孤独幸福篇:追寻幸福超越篇:超越自我 书籍信息 书名:《如何避免虚无…...
【微机及接口技术】- 第四章 内部存储器及其接口(中)
文章目录 第三节 半导体存储器与CPU的连接一、存储芯片与CPU连接中应关注的问题二、存储器扩展1. 位扩展:2. 字扩展3. 字位扩展 三、实现片选控制的方法1. 全译码法2. 部分译码法3. 线选法 第三节 半导体存储器与CPU的连接 一、存储芯片与CPU连接中应关注的问题 C…...
Mysql 数据库下载安装
安装准备 步骤1:输入WindowsMysql下载地址:https://dev.mysql.com/downloads/,选择MySQL Installer for Windows。 步骤2:下载MySQL安装文件 mysql-install-community-8.0.22.0.msi 步骤3:登录MySQL, 如…...
蓝桥杯刷题笔记
奇怪的捐赠 #include <cstdio> #include <iostream> #include <cmath> using namespace std; int main(){// 初始化变量num为1000000,代表总金额为100万元int num 1000000;// 初始化变量cnt为0,用于记录最终划分的份数int cnt 0;//…...
数仓开发团队日常1
第一章:数据的召唤 2005年7月18日,星期一,上午8:30 城市商业银行总行大楼 盛夏的阳光透过高耸的银行大楼玻璃幕墙,在大理石地面上投下斑驳的光影。李明远站在城市商业银行总行大厦前,抬头望着这座在城市金融区并不算高的建筑,却感到一种莫名的压迫感。他整了整领带,深…...
Pgvector的安装
Pgvector的安装 向量化数据的存储,可以为 PostgreSQL 安装 vector 扩展来存储向量化数据 注意:在安装vector扩展之前,请先安装Postgres数据库 vector 扩展的步骤 1、下载vs_BuildTools 下载地址: https://visualstudio.microso…...
学习笔记—C++—入门基础()
目录 C介绍 参考文档 C第一个程序 命名空间namespace namespace的价值 namespace的定义 namespace使用 指定命名空间访问 using将命名空间中某个成员展开 展开命名空间中全部成员 输入和输出 缺省参数 函数重载 引用 引用的概念 应用 const引用 指针和引用的关…...
Pytorch实现之利用深度残差GAN做运动图像的去模糊
简介 简介:采用类似U-Net的解码编码的结构,结合10层的残差连接结构作为生成器,改进PatchGAN得到更大的感受野来作为鉴别器。生成器的损失为内容损失,鉴别器的损失为WGAN-GP损失。大家可以尝试这个模型来解决运动图像的去模糊化。 论文题目:基于深度残差生成对抗网络的运…...
[Windows] XHS-Downloader V2.4 | 小红书无水印下载工具 支持多平台批量采集
[Windows] XHS-Downloader 链接:https://pan.xunlei.com/s/VON4ygFN1JcyzLJJIOqIpqodA1?pwdsinu# XHS-Downloader 是一款开源免费的小红书内容下载工具,支持无水印视频 / 图文提取、多链接批量处理及账号作品采集。其核心优势包括: 全平台…...