医学影像系统性能优化与调试技术:深度剖析与实践指南
🧑 博主简介:CSDN博客专家、CSDN平台优质创作者,高级开发工程师,数学专业,10年以上C/C++, C#, Java等多种编程语言开发经验,拥有高级工程师证书;擅长C/C++、C#等开发语言,熟悉Java常用开发技术,能熟练应用常用数据库SQL server,Oracle,mysql,postgresql等进行开发应用,熟悉DICOM医学影像及DICOM协议,业余时间自学JavaScript,Vue,qt,python等,具备多种混合语言开发能力。撰写博客分享知识,致力于帮助编程爱好者共同进步。欢迎关注、交流及合作,提供技术支持与解决方案。
技术合作请加本人wx(注明来自csdn):xt20160813
医学影像系统性能优化与调试技术:深度剖析与实践指南
在医学影像领域,PACS(Picture Archiving and Communication System)系统和DICOM(Digital Imaging and Communications in Medicine)协议是影像数据传输、存储和管理的核心技术。随着医院数字化转型的加速,医学影像数据呈现爆发式增长,单次CT或MRI扫描可产生数百MB甚至GB级数据,高并发请求、存储压力以及系统稳定性成为开发者和运维人员面临的重大挑战。本文将围绕医学影像系统的性能优化与调试,深入探讨高并发处理、存储优化、错误排查及性能测试等关键技术,结合国产操作系统环境,提供详细的实践方法、代码示例和工具使用指南,旨在为开发者构建高效、稳定的医学影像系统提供全面参考。
一、引言:医学影像系统的挑战与优化需求
医学影像系统的核心任务是实现影像数据的快速传输、可靠存储和高效查询。典型的应用场景包括:
- 高并发传输:多家影像设备(如CT、MRI、DR)同时向PACS服务器上传数据。
- 海量存储:医院每年产生数十TB影像数据,需兼顾存储成本与访问速度。
- 复杂调试:DICOM协议的复杂性及跨厂商兼容性问题,导致错误排查困难。
- 国产化趋势:在国产操作系统(如麒麟、统信)和数据库(如达梦、OceanBase)环境下,需适配本地化工具和技术。
性能优化与调试不仅是技术问题,还直接影响医疗服务的效率和患者体验。例如,影像传输延迟可能导致诊断延误,而存储不足可能引发数据丢失。因此,开发者需要从系统架构、算法优化到工具应用等多个层面入手,构建高性能、高可靠的医学影像系统。
本文将从以下几个方面展开:
- 高并发处理:分析网络传输与服务器处理的瓶颈,提供异步I/O、负载均衡等优化方案。
- 存储优化:探讨压缩算法、分布式存储和数据清理策略,兼顾性能与成本。
- 错误排查:介绍日志分析、协议调试和国产系统工具的使用方法。
- 性能测试与监控:构建测试框架,集成国产化监控工具,确保系统持续优化。
- 国产化适配:结合麒麟、统信等国产操作系统,分享调试与优化经验。
二、高并发处理:应对海量影像传输
医学影像系统的高并发场景主要体现在DICOM协议的C-Store、C-Find和C-Move等操作中。例如,大型三甲医院可能有数十台影像设备同时向PACS服务器发送数据,每台设备每次传输数百个DICOM文件,数据量从几MB到数GB不等。如何在高负载下确保系统稳定运行,是性能优化的首要任务。
2.1 性能瓶颈分析
高并发场景下的性能瓶颈通常出现在以下环节:
- 网络传输:DICOM协议基于TCP/IP,网络带宽、延迟和丢包率直接影响传输效率。典型DICOM端口(如4242)可能因连接数过多而阻塞。
- 服务器处理能力:PACS服务器需解析DICOM文件、验证协议并存储数据,CPU和内存占用较高。
- 数据库操作:影像元数据的存储和查询(如患者ID、检查日期)可能因索引不当或锁竞争导致延迟。
- 磁盘I/O:高并发写入可能导致磁盘I/O瓶颈,尤其在机械硬盘环境中。
为量化瓶颈,开发者需进行性能测试。DCMTK工具集中的storescu
是模拟高并发的理想工具,可生成多个客户端并发发送DICOM文件。例如:
# 模拟20个并发客户端向PACS服务器(IP: 192.168.1.100,端口: 4242)发送DICOM文件
for i in {1..20}; dostorescu -v -aet CLIENT$i -aec SERVER 192.168.1.100 4242 image.dcm &
done
运行上述脚本后,可通过以下指标评估系统性能:
- 响应时间:每个C-Store请求的完成时间。
- 成功率:传输成功的文件比例。
- 资源占用:使用
htop
或top
监控CPU、内存和网络带宽。
在国产操作系统中,htop
是监控资源占用的首选工具,其直观界面显示每个进程的CPU和内存使用情况:
# 安装htop(以麒麟系统为例)
sudo apt-get install htop
# 启动htop
htop
此外,可用ss
检查DICOM服务端口的连接状态:
# 检查4242端口的监听状态和活跃连接
ss -tuln | grep 4242
ss -tunap | grep 4242
2.2 优化策略
针对上述瓶颈,可从以下几个方面优化高并发性能:
2.2.1 异步I/O模型
传统阻塞I/O模型在高并发场景下效率低下,因为每个DICOM连接占用一个线程,线程切换开销大。异步I/O模型(如libevent、epoll或io_uring)通过事件驱动机制显著提升性能。例如,使用C++和libevent开发DICOM服务器的伪代码如下:
#include <event2/event.h>
#include <event2/listener.h>
#include <iostream>void on_accept(evconnlistener *listener, evutil_socket_t fd, struct sockaddr *addr, int len, void *ctx) {std::cout << "New DICOM connection accepted" << std::endl;// 处理DICOM协议逻辑
}int main() {struct event_base *base = event_base_new();struct sockaddr_in sin = {0};sin.sin_family = AF_INET;sin.sin_port = htons(4242);sin.sin_addr.s_addr = INADDR_ANY;struct evconnlistener *listener = evconnlistener_new_bind(base, on_accept, nullptr, LEV_OPT_REUSEABLE | LEV_OPT_CLOSE_ON_FREE, -1,(struct sockaddr*)&sin, sizeof(sin));if (!listener) {std::cerr << "Failed to create listener" << std::endl;return 1;}event_base_dispatch(base);evconnlistener_free(listener);event_base_free(base);return 0;
}
此代码利用libevent监听DICOM端口(4242),异步处理客户端连接,适用于高并发场景。
在国产系统中,需确保libevent库的兼容性。麒麟和统信系统通常预装libevent,可通过以下命令检查:
# 检查libevent版本
dpkg -l | grep libevent
2.2.2 连接池管理
为避免服务器资源耗尽,需限制并发连接数。例如,可在PACS服务器配置文件中设置最大连接数为100:
# 示例:PACS服务器配置文件
[max_connections]
value = 100
当连接数超限时,服务器应返回DICOM协议的“Association Rejected”响应,提示客户端稍后重试。
2.2.3 负载均衡
在超大规模场景下,单台PACS服务器可能无法应对所有请求。推荐部署多台服务器,通过Nginx或HAProxy实现负载均衡。例如,配置Nginx分发DICOM请求:
upstream pacs_servers {server 192.168.1.101:4242;server 192.168.1.102:4242;server 192.168.1.103:4242;
}server {listen 4242;location / {proxy_pass http://pacs_servers;proxy_set_header Host $host;}
}
此配置将DICOM请求均匀分发到三台PACS服务器,提升系统吞吐量。
2.2.4 网络优化
- 增大TCP缓冲区:调整系统参数,增加TCP发送和接收缓冲区大小:
# 修改/etc/sysctl.conf
net.core.rmem_max = 16777216
net.core.wmem_max = 16777216
net.ipv4.tcp_rmem = 4096 87380 16777216
net.ipv4.tcp_wmem = 4096 65536 16777216
# 应用更改
sysctl -p
- 启用TCP Fast Open:减少连接建立时间:
# 启用TCP Fast Open
echo 3 > /proc/sys/net/ipv4/tcp_fastopen
- MTU优化:根据网络环境调整MTU大小,避免分片:
# 检查MTU
ip link show eth0
# 设置MTU为1500
ip link set eth0 mtu 1500
2.2.5 国产系统监控
在麒麟或统信系统中,除htop
外,还可使用nmon
进行全面性能监控:
# 安装nmon
sudo apt-get install nmon
# 启动nmon
nmon
nmon提供CPU、内存、网络和磁盘I/O的实时数据,适合高并发场景下的性能分析。
通过上述优化,医学影像系统可显著提升并发处理能力。例如,某三甲医院通过异步I/O和负载均衡,将C-Store请求的平均响应时间从500ms降低到100ms,成功率从95%提升到99.9%。
三、存储优化:高效管理影像数据
医学影像数据的存储需求呈现两大特点:数据量大和访问模式多样。例如,CT影像需快速访问以支持急诊诊断,而历史影像可能仅用于归档查询。存储优化需兼顾性能、成本和可靠性。
3.1 数据压缩
DIC Gage 2000和JPEG-LS。开发者应根据影像用途选择合适的压缩策略:
- 无损压缩:适用于诊断级影像,保留所有细节,压缩比通常为2:1至3:1。
- 有损压缩:适用于预览或归档影像,压缩比可达10:1以上,但需评估图像质量。
DCMTK提供了丰富的压缩工具。例如,使用dcmj2pnm
将DICOM文件转换为JPEG 2000格式:
# 无损压缩
dcmj2pnm --write-jpeg2000-lossless image.dcm output.jp2
# 有损压缩(质量因子50)
dcmj2pnm --write-jpeg2000 --quality 50 image.dcm output.jp2
为自动化压缩历史影像,可开发Python脚本结合pydicom库:
import os
from pydicom import dcmread
from subprocess import calldef compress_dicom(input_dir, output_dir, lossless=True):for root, _, files in os.walk(input_dir):for file in files:if file.endswith(".dcm"):input_path = os.path.join(root, file)output_path = os.path.join(output_dir, file.replace(".dcm", ".jp2"))cmd = ["dcmj2pnm","--write-jpeg2000-lossless" if lossless else "--write-jpeg2000",input_path,output_path]if not lossless:cmd.insert(2, "--quality")cmd.insert(3, "50")call(cmd)print(f"Compressed {file}")# 示例:压缩指定目录下的DICOM文件
compress_dicom("/data/dicom", "/data/compressed", lossless=True)
此脚本可批量处理影像,适合归档任务。
3.2 分布式存储
为应对数据增长,分布式存储是必然选择。常见的架构包括:
- 对象存储:如阿里云OSS、腾讯云COS或Ceph,适合存储冷数据(不常访问的影像)。Ceph支持POSIX接口,易于集成到PACS系统:
# 部署Ceph对象存储(简要步骤)
sudo apt-get install ceph
ceph-deploy new mon1
ceph-deploy mon create-initial
ceph-deploy osd create --data /dev/sdb mon1
- 分布式文件系统:如HDFS或GlusterFS,适合高吞吐场景。HDFS的配置示例:
<!-- hdfs-site.xml -->
<configuration><property><name>dfs.replication</name><value>3</value></property><property><name>dfs.namenode.name.dir</name><value>/data/hdfs/namenode</value></property>
</configuration>
- 数据库优化:影像元数据(如患者ID、检查时间)需存储在高性能数据库中。推荐使用PostgreSQL或MongoDB,并为常用字段(如StudyInstanceUID)创建索引:
-- PostgreSQL:创建索引
CREATE INDEX idx_study_uid ON dicom_studies (StudyInstanceUID);
在国产系统中,需验证存储设备的兼容性。例如,检查Ceph是否支持麒麟系统的内核版本:
# 检查内核版本
uname -r
# 检查Ceph版本
ceph --version
3.3 数据清理策略
为降低存储成本,需定期清理过期影像。医院通常遵循7年归档政策,可基于DICOM标签(如StudyDate)开发清理脚本:
import os
from pydicom import dcmread
from datetime import datetimedef clean_old_studies(folder, years=7):for root, _, files in os.walk(folder):for file in files:if file.endswith(".dcm"):ds = dcmread(os.path.join(root, file))study_date = ds.get("StudyDate")if study_date:study_year = int(study_date[:4])if datetime.now().year - study_year > years:os.remove(os.path.join(root, file))print(f"Deleted {file}")else:print(f"Skipping {file}: No StudyDate")# 示例:清理超过7年的影像
clean_old_studies("/data/dicom")
为避免误删,建议先备份数据并记录清理日志:
import logginglogging.basicConfig(filename="clean.log", level=logging.INFO)def clean_old_studies(folder, years=7):for root, _, files in os.walk(folder):for file in files:if file.endswith(".dcm"):ds = dcmread(os.path.join(root, file))study_date = ds.get("StudyDate")if study_date:study_year = int(study_date[:4])if datetime.now().year - study_year > years:os.remove(os.path.join(root, file))logging.info(f"Deleted {file}")else:logging.warning(f"Skipping {file}: No StudyDate")
3.4 存储性能监控
在国产系统中,可使用以下工具监控存储性能:
- df:检查磁盘使用率:
df -h
- iostat:监控磁盘I/O:
iostat -x 1
- iotop:实时查看进程的I/O占用:
sudo iotop
通过压缩、分布式存储和数据清理,某医院将影像存储成本降低30%,同时将查询延迟从500ms降至100ms。
四、错误排查:日志分析与协议调试
医学影像系统的复杂性使得错误排查成为开发和运维的重点。常见问题包括:
- 网络中断:导致C-Store失败。
- 协议不兼容:不同厂商的DICOM实现差异。
- 数据损坏:DICOM文件格式错误或存储故障。
4.1 日志配置与分析
DCMTK提供了灵活的日志系统,支持TRACE、DEBUG、INFO、WARN、ERROR和FATAL六个级别。开发者可通过环境变量或配置文件设置日志级别。例如:
# 设置DEBUG级别,输出详细协议信息
export DCMDICTPATH=/usr/share/dcmtk/dicom.dic
export DCM_LOG_LEVEL=DEBUG
storescu -v -aet CLIENT -aec SERVER 192.168.1.100 4242 image.dcm > debug.log 2>&1
生成的debug.log
包含DICOM协议的协商细节、错误码等信息。可用grep
提取关键错误:
# 提取协议错误
grep "ERROR" debug.log
# 提取特定错误码(如A-ASSOCIATE-RJ)
grep "A-ASSOCIATE-RJ" debug.log
在国产系统中,journalctl
是查看系统级日志的首选工具。例如,排查PACS服务异常:
# 查看PACS服务日志
journalctl -u pacs.service -b
# 实时跟踪日志
journalctl -u pacs.service -f
为便于分析,可将日志输出到ELK Stack(Elasticsearch、Logstash、Kibana)进行可视化:
# Logstash配置文件:logstash.conf
input {file {path => "/var/log/pacs/debug.log"start_position => "beginning"}
}
output {elasticsearch {hosts => ["localhost:9200"]index => "pacs_logs"}
}
在Kibana中,可创建仪表板展示错误分布和趋势。
4.2 协议调试
DICOM协议问题通常与以下因素相关:
- AE Title不匹配:客户端和服务端的AE Title配置错误。
- SOP Class不支持:服务器不支持客户端请求的SOP Class。
- Transfer Syntax不兼容:客户端和服务端协商失败。
可用tcpdump
捕获网络数据包,分析协议细节:
# 捕获4242端口的DICOM流量
tcpdump -i eth0 port 4242 -w dicom.pcap
随后,使用Wireshark打开dicom.pcap
,检查DICOM协议的PDU结构。例如,A-ASSOCIATE-RQ包包含AE Title和Transfer Syntax信息,A-ASSOCIATE-RJ包指示拒绝原因。
为简化调试,可使用DCMTK的echoscu
测试服务器连通性:
# 测试PACS服务器是否响应
echoscu -v -aet CLIENT -aec SERVER 192.168.1.100 4242
4.3 国产系统调试工具
在麒麟或统信系统中,以下工具对错误排查尤为有效:
- strace:跟踪系统调用,定位文件I/O或网络问题:
# 跟踪PACS服务进程(假设PID为1234)
strace -p 1234 -o strace.log
# 分析strace日志,查找错误
grep "errno" strace.log
- lsof:检查进程打开的文件和端口:
# 查看PACS服务(PID为1234)的端口占用
lsof -p 1234 -a -i
- perf:分析性能瓶颈:
# 采集PACS服务的性能数据
perf record -p 1234
# 生成报告
perf report
通过日志分析和协议调试,某医院成功定位了因Transfer Syntax不兼容导致的C-Store失败问题,将传输成功率提升至99.8%。
五、性能测试与监控
性能优化是一个持续迭代的过程。开发者需建立性能测试框架,定期评估系统表现,并通过监控工具实时跟踪关键指标。
5.1 性能测试方法
5.1.1 压力测试
使用storescu
模拟高并发,记录响应时间和成功率:
# 模拟50个并发客户端
for i in {1..50}; dostorescu -v -aet CLIENT$i -aec SERVER 192.168.1.100 4242 image.dcm &
done
可用Python脚本统计测试结果:
import re
from glob import globdef analyze_storescu_logs(log_dir):total_requests = 0successes = 0response_times = []for log_file in glob(f"{log_dir}/*.log"):with open(log_file) as f:content = f.read()total_requests += len(re.findall(r"C-Store RQ", content))successes += len(re.findall(r"C-Store RSP.*Status: Success", content))times = re.findall(r"Completed in (\d+\.\d+) seconds", content)response_times.extend(float(t) for t in times)success_rate = (successes / total_requests) * 100 if total_requests > 0 else 0avg_response_time = sum(response_times) / len(response_times) if response_times else 0print(f"Total Requests: {total_requests}")print(f"Success Rate: {success_rate:.2f}%")print(f"Average Response Time: {avg_response_time:.2f} seconds")# 示例:分析日志目录
analyze_storescu_logs("/var/log/storescu")
5.1.2 容量测试
逐步增加影像数据量,观察存储和查询性能。例如,批量上传10TB影像,记录数据库查询延迟:
-- PostgreSQL:测试查询性能
EXPLAIN ANALYZE SELECT * FROM dicom_studies WHERE StudyInstanceUID = '1.2.3.4';
5.1.3 故障测试
模拟网络中断或服务器宕机,验证系统恢复能力。例如,临时关闭PACS服务端口:
# 关闭4242端口
iptables -A INPUT -p tcp --dport 4242 -j DROP
# 恢复端口
iptables -D INPUT -p tcp --dport 4242 -j DROP
5.2 性能监控
关键性能指标包括:
- 传输速度:DICOM文件上传/下载的平均速度(MB/s)。
- 查询延迟:影像元数据的检索时间(ms)。
- 错误率:C-Store或C-Find请求的失败比例。
在国产系统中,可集成Prometheus和Grafana进行实时监控。Prometheus采集PACS服务的指标(如HTTP接口的响应时间),Grafana展示趋势图。配置示例:
# prometheus.yml
scrape_configs:- job_name: 'pacs'static_configs:- targets: ['192.168.1.100:9100']
在PACS服务中,需暴露Prometheus指标端点。例如,使用Python和prometheus_client库:
from prometheus_client import start_http_server, Summary
import time# 定义指标
REQUEST_TIME = Summary('pacs_request_processing_seconds', 'Time spent processing requests')@REQUEST_TIME.time()
def process_dicom_request():# 模拟DICOM请求处理time.sleep(0.1)if __name__ == '__main__':# 启动Prometheus HTTP服务器start_http_server(9100)while True:process_dicom_request()
5.3 国产化监控工具
在麒麟系统中,推荐使用ksar
分析系统性能:
# 安装ksar
sudo apt-get install ksar
# 采集sar数据
sar -A > sar_data.txt
# 使用ksar可视化
ksar -input sar_data.txt
通过性能测试和监控,某医院将系统可用性从99%提升到99.9%,显著降低了故障响应时间。
六、国产化适配:麒麟与统信环境下的优化
随着国产化政策的推进,医学影像系统需适配麒麟、统信等操作系统。这些系统在内核、库依赖和工具链方面与传统Linux发行版存在差异,开发者需特别注意以下方面:
6.1 兼容性验证
- DCMTK编译:确保DCMTK在国产系统上编译正常。麒麟系统可能缺少某些依赖,需手动安装:
# 安装依赖
sudo apt-get install build-essential libpng-dev libjpeg-dev libxml2-dev
# 编译DCMTK
cd dcmtk-3.6.7
./configure --prefix=/usr/local
make && sudo make install
- 数据库适配:验证PostgreSQL或达梦数据库的兼容性。例如,达梦数据库的安装:
# 安装达梦(以DM8为例)
tar -zxvf dm8_setup.tar.gz
cd dm8
./install.sh
6.2 性能调优
- 内核参数:调整文件描述符限制和网络参数:
# 修改/etc/sysctl.conf
fs.file-max = 2097152
net.core.somaxconn = 65535
# 应用更改
sysctl -p
- NUMA优化:在多核服务器上,启用NUMA(Non-Uniform Memory Access)优化:
# 检查NUMA状态
numactl --hardware
# 绑定PACS服务到特定NUMA节点
numactl --cpunodebind=0 --membind=0 /usr/local/bin/pacs
6.3 调试工具
除htop
和strace
外,麒麟系统支持gstack
和pmap
:
- gstack:查看进程的堆栈信息:
gstack 1234 > stack.txt
- pmap:分析进程的内存映射:
pmap -x 1234
通过适配国产系统,某医院成功将PACS系统迁移到麒麟环境,性能与CentOS环境相当,满足国产化合规要求。
七、未来展望:AI与国产化的融合
未来,医学影像系统的优化将与AI技术和国产化趋势深度融合:
- AI驱动的压缩:利用深度学习算法(如变分自编码器)实现更高压缩比,同时保持诊断质量。
- 智能错误检测:通过机器学习分析日志,自动定位协议或数据错误。
- 国产化生态:随着鲲鹏、飞腾等国产芯片的普及,需优化PACS系统在ARM架构上的性能。
例如,使用TensorFlow开发影像压缩模型:
import tensorflow as tf
from tensorflow.keras import layersdef build_autoencoder():model = tf.keras.Sequential([layers.Input(shape=(512, 512, 1)),layers.Conv2D(32, (3, 3), activation='relu', padding='same'),layers.MaxPooling2D((2, 2), padding='same'),layers.Conv2D(16, (3, 3), activation='relu', padding='same'),layers.MaxPooling2D((2, 2), padding='same'),layers.Conv2D(16, (3, 3), activation='relu', padding='same'),layers.UpSampling2D((2, 2)),layers.Conv2D(32, (3, 3), activation='relu', padding='same'),layers.UpSampling2D((2, 2)),layers.Conv2D(1, (3, 3), activation='sigmoid', padding='same')])return model# 训练模型
autoencoder = build_autoencoder()
autoencoder.compile(optimizer='adam', loss='mse')
# 假设image_data为DICOM影像数据
autoencoder.fit(image_data, image_data, epochs=50, batch_size=32)
八、总结
医学影像系统的性能优化与调试是一项复杂而系统的工程,涵盖高并发处理、存储优化、错误排查和性能测试等多个维度。通过合理使用DCMTK工具、日志分析和国产系统调试工具(如htop、strace),开发者可显著提升系统性能和稳定性。在国产化背景下,适配麒麟、统信等操作系统,结合Prometheus、Grafana等监控工具,构建高性能、高可靠的PACS系统,不仅满足医院需求,还符合政策要求。
未来,随着AI技术的深入应用和国产化生态的完善,医学影像系统将迎来更多创新机遇。开发者应持续关注新技术动态,结合实际场景,推动系统向智能化、自主化方向发展。
参考文献:
- DCMTK官方文档:https://dcmtk.org/
- DICOM标准:https://www.dicomstandard.org/
- Linux性能监控工具:https://man7.org/linux/man-pages/
- Ceph官方文档:https://docs.ceph.com/
- Prometheus官方文档:https://prometheus.io/
(注:本文仅供学习参考,技术交流,创作不易,希望能得到您的关注与支持。)
相关文章:
医学影像系统性能优化与调试技术:深度剖析与实践指南
🧑 博主简介:CSDN博客专家、CSDN平台优质创作者,高级开发工程师,数学专业,10年以上C/C, C#, Java等多种编程语言开发经验,拥有高级工程师证书;擅长C/C、C#等开发语言,熟悉Java常用开…...
【HTML5学习笔记1】html标签(上)
web标准(重点) w3c 构成:结构、表现、行为,结构样式行为相分离 结构:网页元素整理分类 html 表现:外观css 行为:交互 javascript html标签 1.html语法规范 1) 所有标签都在…...
SearchIndexablesProvider
实现的 provider 根据索引添加文档可知,该 provider 需要继承自 frameworks/base/core/java/android/provider/SearchIndexablesProvider.java 类,并且添加权限 android.permission.READ_SEARCH_INDEXABLES。过滤 Settings 代码,可以轻易找到…...
《k-means 散点图可视化》实验报告
一,实验目的 本次实验旨在通过Python编程实现k - means算法的散点图可视化。学习者将编写代码,深入理解聚类分析基本原理与k - means算法实现流程,掌握数据聚类及可视化方法,以直观展示聚类结果。 二,实验原理 k-mea…...
数学复习笔记 12
前言 现在做一下例题和练习题。矩阵的秩和线性相关。另外还要复盘前面高数的部分的内容。奥,之前矩阵的例题和练习题,也没有做完,行列式的例题和练习题也没有做完。累加起来了。以后还是得学一个知识点就做一个部分的内容,日拱一…...
Web-CSS入门
WEB前端,三部分:HTML部分、CSS部分、Javascript部分。 1.HTML部分:主要负责网页的结构层 2.CSS部分:主要负责网页的样式层 3.JS部分:主要负责网页的行为层 **基本概念** 层叠样式表,Cascading Style Sh…...
Qt/C++编写音视频实时通话程序/画中画/设备热插拔/支持本地摄像头和桌面
一、前言 近期有客户提需求,需要在嵌入式板子上和电脑之间音视频通话,要求用Qt开发,可以用第三方的编解码组件,能少用就尽量少用,以便后期移植起来方便。如果换成5年前的知识储备,估计会采用纯网络通信收发…...
Ubuntu快速安装Python3.11及多版本管理
之前文章和大家分享过,将会出一篇专栏(从电脑装ubuntu系统,到安装ubuntu的常用基础软件:jdk、python、node、nginx、maven、supervisor、minio、docker、git、mysql、redis、postgresql、mq、ollama等),目前…...
Qt功能区:Ribbon使用
Ribbon使用 1. Ribbon功能区介绍1.1 样式 2. 基本功能区设置2.1 安装动态库(推荐)2.2 在MainWindow中使用Ribbon2.3 在QWidget中使用SARibbonBar2.4 创建Category和Pannel2.5 ContextCategory 上下文标签创建 2.6 ApplicationButton2.7 QuickAccessBar和…...
【学习心得】Jupyter 如何在conda的base环境中其他虚拟环境内核
如果你在conda的base环境运行了jupyter lab打开了一个ipynb文本,此时选择的内核是base虚拟环境的Python内核,如果我想切换成其他conda虚拟环境来运行这个文件该怎么办?下面我们试着还原一下问题,并且解决问题。 【注】 这个问题出…...
在微创手术中使用Kinova轻型机械臂进行多视图图像采集和3D重建
在微创手术中,Kinova轻型机械臂通过其灵活的运动控制和高精度的操作能力,支持多视图图像采集和3D重建。这种技术通过机械臂搭载的光学系统实现精准的多角度扫描,为医疗团队提供清晰且详细的解剖结构模型。其核心在于结合先进的传感器配置与重…...
[Java][Leetcode middle] 238. 除自身以外数组的乘积
第一个想法是: 想求出所有元素乘积,然后除以i对应的元素本书;这个想法是完全错误的: nums[I] 可能有0题目要求了不能用除法 第二个想法是: 其实写之前就知道会超时,但是我什么都做不到啊! 双…...
【leetcode】144. 二叉树的前序遍历
给你二叉树的根节点 root ,返回它节点值的 前序 遍历。 示例 1: 输入:root [1,null,2,3] 输出:[1,2,3] 解释: 示例 2: 输入:root [1,2,3,4,5,null,8,null,null,6,7,9] 输出:…...
SpringBoot常用注解详解
文章目录 1. 前言2. 核心注解2.1 SpringBootApplication2.2 Configuration2.3 EnableAutoConfiguration2.4 ComponentScan2.5 Bean2.6 Autowired2.7 Qualifier2.8 Primary2.9 Value2.10 PropertySource2.11 ConfigurationProperties2.12 Profile 3. Web开发相关注解3.1 Control…...
中文分词与数据可视化02
jieba 库简介 jieba(结巴分词)是一个高效的中文分词工具,广泛用于中文自然语言处理(NLP)任务。它支持以下功能: 分词:将句子切分为独立的词语。 自定义词典:添加专业词汇或新词&am…...
SSH主机密钥验证失败:全面解决方案与技术手册
一、问题本质与安全机制解析 SSH(Secure Shell)的主机密钥验证是安全通信的核心机制,当出现"Host key verification failed"错误时,表明客户端检测到服务器身份异常。这种设计可有效防范中间人攻击(Man-in-the-Middle),其工作原理…...
buuctf Crypto-鸡藕椒盐味1
1.题目: 公司食堂最新出了一种小吃,叫鸡藕椒盐味汉堡,售价八块钱,为了促销,上面有一个验证码,输入后可以再换取一个汉堡。但是问题是每个验证码几乎都有错误,而且打印的时候倒了一下。小明买到了一个汉堡&a…...
真题卷001——算法备赛
蓝桥杯2024年C/CB组国赛卷 1.合法密码 问题描述 小蓝正在开发自己的OJ网站。他要求用户的密码必须符合一下条件: 长度大于等于8小于等于16必须包含至少一个数字字符和至少一个符号字符 请计算一下字符串,有多少个子串可以当作合法密码。字符串为&am…...
基于MCP的桥梁设计规范智能解析与校审系统构建实践
引言 在腾讯云开发者社区中,有多种MCP工具可以用于本系统的开发和优化中,以下是一些潜在的应用场景: PDF解析工具:如pdfplumber等,可以用于规范文件的预处理,提取文本和图像信息。自然语言处理工具…...
matlab与python问题解析
Python requests乱码的五种解决办法 Python requests乱码的五种解决办法_requests.get乱码-CSDN博客 requests库post请求参数data、json和files的使用 requests库post请求参数data、json和files的使用_requests post data-CSDN博客 如何在浏览器中查看POST请求提交的数据内…...
【分布式锁通关指南 10】源码剖析redisson之MultiLock的实现
引言 本期我们将把目光聚焦在 Redisson 中另一个颇具代表性的分布式锁实现——MultiLock。它的核心思想是:一次性对多个独立的 RLock 进行加锁或解锁操作,只有当多个锁都成功加锁时才算真正完成锁的获取,一旦有任何一个失败,整体操…...
MySQL 8.0 OCP 1Z0-908 131-140题
Q131.You have upgraded the MySQL binaries from 5.7.28 to 8.0.18 by using an in-place upgrade. Examine the message sequence generated during the first start of MySQL 8.0.18: 。。。[System]。。。/usx/sbin/mysqld (mysqld 8.0.18-commercial) starting as process…...
实战解析MCP-使用本地的Qwen-2.5模型-AI协议的未来?
文章目录 目录 文章目录 前言 一、MCP是什么? 1.1MCP定义 1.2工作原理 二、为什么要MCP? 2.1 打破碎片化的困局 2.2 实时双向通信,提升交互效率 2.3 提高安全性与数据隐私保护 三、MCP 与 LangChain 的区别 3.1 目标定位不同 3.…...
从零开始学习three.js(20):three.js实现天气与时间动态效果(白天,黑夜,下雨,下雪)
基于Three.js的天气与时间动态效果实现 本文将通过代码解析,介绍如何使用Three.js实现动态天气(下雨、下雪)和时间(白天、黑夜)切换效果。完整代码基于一个交互式天气模拟项目,支持粒子密度、速度和环境亮…...
sqli-labs靶场23-28a关(过滤)
目录 less23(--过滤) less24(二次注入) less25(or过滤) less25a(or过滤) less26(--和空格过滤报错) less26a(--空格过滤盲注) …...
Sigmoid与Softmax:从二分类到多分类的深度解析
Sigmoid与Softmax:从二分类到多分类的深度解析 联系 函数性质:二者都是非线性函数 ,也都是指数归一化函数,可将输入值映射为0到1之间的实数 ,都能把输出转化成概率分布的形式,在神经网络中常作为激活函数使用。Softmax是Sigmoid的推广:从功能角度看,Softmax函数可视为…...
uni-app x正式支持鸿蒙原生应用开发
DCloud发布的HBuilderX 4.64正式版,支持编译uni-app x项目到鸿蒙平台,实现跨平台开发鸿蒙原生应用。至此,uni-app x 已经完成Android、iOS、鸿蒙、Web、微信小程序等主流平台全覆盖。 uni-app x,是下一代 uni-app,是一…...
【软件推荐——pdf2docx】
pdf2docx Open source Python library for converting PDF to DOCX. https://github.com/ArtifexSoftware/pdf2docx Install pip install pdf2docx使用 from pdf2docx import Converterpdf_file D:\my\c4611_sample_explain.pdf docx_file D:\my\c4611_sample_explain.d…...
HarmonyOS开发组件基础
个人简介 👨💻个人主页: 魔术师 📖学习方向: 主攻前端方向,正逐渐往全栈发展 🚴个人状态: 研发工程师,现效力于政务服务网事业 🇨🇳人生格言&…...
JMeter 测试工具--组件--简单介绍
目录 编辑 一、测试计划(Test Plan) 二、线程组(Thread Group) 三、取样器(Sampler) 四、监听器(Listener) 五、逻辑控制器(Logic Controller) 六、断…...
ECPF 简介
ECPF(Embedded CPU Function,嵌入式CPU功能)是NVIDIA BlueField DPU特有的一种功能类型,和PF(Physical Function,物理功能)、VF(Virtual Function,虚拟功能)密…...
【Opencv】canny边缘检测提取中心坐标
采用opencv 对图像中的小球通过canny边缘检测的方式进行提取坐标 本文介绍了如何使用OpenCV对图像中的小球进行Canny边缘检测,并通过Zernike矩进行亚像素边缘检测,最终拟合椭圆以获取小球的精确坐标。首先,图像被转换为灰度图并进行高斯平滑…...
C#实现访问远程硬盘(附源码)
在现实场景中,我们经常用到远程桌面功能,而在某些场景下,我们需要使用类似的远程硬盘功能,这样能非常方便地操作对方电脑磁盘的目录、以及传送文件。那么,这样的远程硬盘功能要怎么实现了? 这次我们将给出…...
AI日报 · 2025年05月16日|Google DeepMind推出AlphaEvolve,能自主设计高级算法的编码代理
全球AI新闻日报 日期:2025年5月16日 目录 OpenAI与CoreWeave签署40亿美元新协议,GPT-4.1模型全面推出Google DeepMind推出AlphaEvolve,能自主设计高级算法的编码代理Anthropic律师因Claude模型虚构法律引用被迫道歉Meta推迟旗舰AI模型&quo…...
TCP/IP 知识体系
TCP/IP 知识体系 一、TCP/IP 定义 全称:Transmission Control Protocol/Internet Protocol(传输控制协议/网际协议)核心概念: 跨网络实现信息传输的协议簇(包含 TCP、IP、FTP、SMTP、UDP 等协议)因 TCP 和…...
记一次缓存填坑省市区级联获取的操作
先说缓存是什么? 缓存主要是解决高并发,大数据场景下,热点数据快速访问。缓存的原则首先保证数据的准确和最终数据一致,其次是距离用户越近越好,同步越及时越好。 再说我们遇到的场景: 接手项目后&#…...
【时空图神经网络 交通】相关模型2:STSGCN | 时空同步图卷积网络 | 空间相关性,时间相关性,空间-时间异质性
注:仅学习使用~ 前情提要: 【时空图神经网络 & 交通】相关模型1:STGCN | 完全卷积结构,高效的图卷积近似,瓶颈策略 | 时间门控卷积层:GLU(Gated Linear Unit),一种特殊的非线性门控单元目录 STSGCN-2020年1.1 背景1.2 模型1.2.1 问题背景:现有模型存在的问题1.2…...
uniapp实现在线pdf预览以及下载
uniapp实现在线pdf预览以及下载 在线预览 遇到的问题 后端返回一个url地址,我需要将在在页面中渲染出来。因为在浏览器栏上我输入url地址就可以直接预览pdf文件,因此直接的想法是通过web-view组件直接渲染。有什么问题呢?在h5端能够正常渲…...
【Rust闭包】rust语言闭包函数原理用法汇总与应用实战
✨✨ 欢迎大家来到景天科技苑✨✨ 🎈🎈 养成好习惯,先赞后看哦~🎈🎈 🏆 作者简介:景天科技苑 🏆《头衔》:大厂架构师,华为云开发者社区专家博主,…...
裸金属服务器和云服务器之间的差别
裸金属服务器能够直接在硬件上运行,不需要额外的虚化层,让每个应用程序或者是服务都能够在实际的硬件上运行,不需要和其他虚拟服务器来共享资源;而云服务器作为一种虚拟服务器,是通过虚拟化技术为企业提供一个独立的计…...
CentOS系统中升级Python 3.12.2版本
在CentOS系统中升级Python版本是一项常见的操作,尤其是在需要使用较新功能或满足某些软件依赖的情况下。以下是详细的步骤和注意事项,帮助您顺利完成Python版本的升级。 1. 升级Python版本前的准备 在开始升级之前,请确保以下几点࿱…...
win10-django项目与mysql的基本增删改查
以下都是在win10系统下,django项目的orm框架对本地mysql的表的操作 models.py----->即表对应的类所在的位置 在表里新增数据 1.引入表对应的在models.py中的类class 2.在views.py中使用函数:类名.objects.create(字段名值,字段名"值"。。。…...
图像处理:预览并绘制图像细节
前言 因为最近在搞毕业论文的事情,要做出一下图像细节对比图,所以我这里写了两个脚本,一个用于框选并同时预览图像放大细节,可显示并返回框选图像的坐标,另外一个是输入框选图像的坐标并将放大的细节放置在图像中&…...
针对面试-微服务篇
1.Spring Cloud 5大组件有哪些? 随着SpringCloudAlibba在国内兴起,我们项目中使用了一些阿里巴巴的组件 注册中心/配置中心 Nacos 负载均衡 Ribbon 服务调用 Feign 服务保护 sentinel 服务网关 Gateway 2. 我看你之前也用过nacos、你能说下nacos与eureka的区别?…...
SRS流媒体服务器(5)源码分析之RTMP握手
1.概述 学习 RTMP 握手逻辑前,需明确两个核心问题: rtmp协议连接流程阶段rtmp简单握手和复杂握手区别 具体可以学习往期博客: RTMP协议分析_rtmp与264的关系-CSDN博客 2.rtmp握手源码分析 2.1 握手入口 根据SRS流媒体服务器(4)可知&am…...
线程池(ThreadPoolExecutor)实现原理和源码细节是Java高并发面试和实战开发的重点
一、线程池核心流程图 ----------------- | 提交任务 | submit/execute -----------------|v ----------------- | 判断核心线程数 | < corePoolSize? -----------------|Yes |Nov v [创建新线程] -----------------| 队列是否满&a…...
C# DataGridView 选中所有复选框
问题描述 在程序中尝试选中所有复选框,但出现错误。如果单击顶部的完整选中/释放复选框,同时选中包含复选框的列,则选定区域不会改变。该如何解决? 上面的图片是点击完整版本之后的。 下面是本文的测试代码,函数 dat…...
linux 服务器安装jira-8.22.0和confluence-8.5.21
前提: 下载资源包 z_atlassian-agent-v1.3.1.zip z_atlassian-confluence-8.5.21-x64.zip z_atlassian-jira-software-8.22.0-x64.zip z_jdk-8u131-linux-x64.tar.gz z_postgresql-12.0.tar.gz 可通过作者本身资源库下载 一:服务器构建文件夹 mkdir /z …...
【计算机网络】HTTP/1.0,HTTP/1.1,HTTP/2,HTTP/3汇总讲解,清晰表格整理面试重点对比
表格汇总 对比维度HTTP/1.0HTTP/1.1HTTP/2HTTP/3传输协议TCPTCPTCP/TLS(默认加密)UDP(基于 QUIC 协议)连接方式短连接(每次请求/响应后断开)引入持久连接(Persistent Connection)&a…...
Go语言之路————并发
Go语言之路————并发 前言协程管道SelectsyncWaitGroup锁 前言 我是一名多年Java开发人员,因为工作需要现在要学习go语言,Go语言之路是一个系列,记录着我从0开始接触Go,到后面能正常完成工作上的业务开发的过程,如…...