【Pm4py第七讲】关于visualization
本节用于介绍pm4py中的可视化函数,包括可视化bpmn、petri、性能图谱、变迁系统等。

1.函数概述
本次主要介绍Pm4py中一些常见的可视化函数,总览如下表:
| 函数名 | 说明 |
| view_alignments(log, aligned_traces[, format]) | 可视化对齐方法 |
| view_bpmn(bpmn_graph[, format, bgcolor, rankdir]) | 查看BPMN图 |
| view_case_duration_graph(log[, format, ...]) | 可视化案例持续时间图 |
| view_dfg(dfg, start_activities, end_activities) | 查看(复合)DFG |
| view_dotted_chart(log[, format, attributes, ...]) | 显示虚线图表 |
| view_events_distribution_graph(log[, ...]) | 显示指定维度中事件的分布 |
| view_events_per_time_graph(log[, format, ...]) | 可视化每个时间的事件图 |
| view_footprints(footprints[, format]) | 可视化足迹矩阵 |
| view_heuristics_net(heu_net[, format, bgcolor]) | 查看启发式网络 |
| view_network_analysis(network_analysis[, ...]) | 可视化网络分析 |
| view_object_graph(ocel, graph[, format, ...]) | 在屏幕上可视化对象图形 |
| view_ocdfg(ocdfg[, annotation, act_metric, ...]) | 使用所提供的配置查看OC-DFG(以对象为中心的直接跟随图)。 |
| view_ocpn(ocpn[, format, bgcolor, rankdir]) | 在屏幕上可视化以对象为中心的Petri网 |
| view_performance_dfg(dfg, start_activities, ...) | 查看性能DFG |
| view_performance_spectrum(log, activities[, ...]) | 显示性能频谱 |
| view_petri_net(petri_net[, initial_marking, ...]) | 查看(复合) Petri网 |
| view_prefix_tree(trie[, format, bgcolor]) | 查看前缀树 |
| view_process_tree(tree[, format, bgcolor, ...]) | 查看流程树 |
| view_sna(sna_metric[, variant_str]) | 表示SNA度量(html) |
| view_transition_system(transition_system[, ...]) | 查看变迁系统 |
此外,还有保存可视化图形的方法,这里只需要将view_XXX()改为save_vis_XXX()方法即可,例如,可视化方法view_bpmn()改为可保存的可视化方法为save_vis_bpmn().
2.函数方法介绍
2.1 可视化Petri网
pm4py.vis.view_petri_net(petri_net: PetriNet, initial_marking: Marking | None = None, final_marking: Marking | None = None, format: str = 'png', bgcolor: str = 'white', decorations: Dict[Any, Any] | None = None, debug: bool = False, rankdir: str = 'LR')
说明:可视化Petri网输入参数:
petri_net(PetriNet)–petri网
initial_marking–初始标记
final_marking–最终标记
format(str)–输出图片的格式(如果提供了html,则使用GraphvizJS在html页面中呈 现可视化效果)
bgcolor(str)–可视化的背景色(默认值:白色)
装饰–与Petri网元素相关的装饰(颜色、标签)
debug(bool)–启用/禁用调试模式的布尔值(显示位置和转换的名称)
rankdir(str)–设置图形的方向(“LR”表示从左到右;“TB”表示从上到下)
示例代码:
import pm4pynet, im, fm = pm4py.discover_petri_net_inductive(dataframe, activity_key='concept:name', case_id_key='case:concept:name', timestamp_key='time:timestamp')
pm4py.view_petri_net(net, im, fm, format='svg')
2.2 可视化性能DFG
pm4py.vis.view_performance_dfg(dfg: dict, start_activities: dict, end_activities: dict, format: str = 'png', aggregation_measure='mean', bgcolor: str = 'white', rankdir: str = 'TB')
说明:可视化性能DFG输入参数:
dfg(dict)–dfg对象
start_activities(dict)–启动活动
end_activities(dict)–结束活动
format(str)–输出图片的格式(如果提供了html,则使用GraphvizJS在html页面中呈现可视化效果)
aggregation_measure(str)–聚合度量值(默认值:均值):均值、中值、最小值、最大值、总和、标准差
bgcolor(str)–可视化的背景色(默认值:白色)
rankdir(str)–设置图形的方向(“LR”表示从左到右;“TB”表示从上到下)
示例代码:
import pm4pyperformance_dfg, start_activities, end_activities = pm4py.discover_performance_dfg(dataframe, case_id_key='case:concept:name', activity_key='concept:name', timestamp_key='time:timestamp')
pm4py.view_performance_dfg(performance_dfg, start_activities, end_activities, format='svg')
2.3 可视化DFG
pm4py.vis.view_dfg(dfg: dict, start_activities: dict, end_activities: dict, format: str = 'png', bgcolor: str = 'white', max_num_edges: int = 9223372036854775807, rankdir: str = 'TB')
说明:可视化DFG输入参数:
dfg(dict)–dfg对象
start_activities(dict)–启动活动
end_activities(dict)–结束活动
format(str)–输出图片的格式(如果提供了html,则使用GraphvizJS在html页面中呈现可视化效果)
bgcolor(str)–可视化的背景色(默认值:白色)
max_num_edges(int)–要在图中表示的最大边数
rankdir(str)–设置图形的方向(“LR”表示从左到右;“TB”表示从上到下)
示例代码:
import pm4pydfg, start_activities, end_activities = pm4py.discover_dfg(dataframe, case_id_key='case:concept:name', activity_key='concept:name', timestamp_key='time:timestamp')
pm4py.view_dfg(dfg, start_activities, end_activities, format='svg')
2.4 可视化流程树
pm4py.vis.view_process_tree(tree: ProcessTree, format: str = 'png', bgcolor: str = 'white', rankdir: str = 'TB')
说明:可视化流程树输入参数:
tree(ProcessTree)–流程树
format(str)–可视化的格式(如果提供了html,则使用GraphvizJS在html页面中呈现可视化)
bgcolor(str)–可视化的背景色(默认值:白色)
rankdir(str)–设置图形的方向(“LR”表示从左到右;“TB”表示从上到下)
示例代码:
import pm4pyprocess_tree = pm4py.discover_process_tree_inductive(dataframe, activity_key='concept:name', case_id_key='case:concept:name', timestamp_key='time:timestamp')
pm4py.view_process_tree(process_tree, format='svg')
2.5 可视化BPMN
pm4py.vis.view_bpmn(bpmn_graph: BPMN, format: str = 'png', bgcolor: str = 'white', rankdir: str = 'LR')
说明:可视化BPMN输入参数:
bpmn_graph(bpmn)–bpmn图
format(str)–可视化的格式(如果提供了html,则使用GraphvizJS在html页面中呈现可视化)
bgcolor(str)–可视化的背景色(默认值:白色)
rankdir(str)–设置图形的方向(“LR”表示从左到右;“TB”表示从上到下)
示例代码:
import pm4pybpmn_graph = pm4py.discover_bpmn_inductive(dataframe, activity_key='concept:name', case_id_key='case:concept:name', timestamp_key='time:timestamp')
pm4py.view_bpmn(bpmn_graph)
2.6 可视化启发式网
pm4py.vis.view_heuristics_net(heu_net: HeuristicsNet, format: str = 'png', bgcolor: str = 'white')
说明:可视化启发式网输入参数:
heu_net(启发式网络)–启发式网络
format(str)–可视化的格式
bgcolor(str)–可视化的背景色(默认值:白色)
示例代码:
import pm4pyheu_net = pm4py.discover_heuristics_net(dataframe, activity_key='concept:name', case_id_key='case:concept:name', timestamp_key='time:timestamp')
pm4py.view_heuristics_net(heu_net, format='svg')
2.7 可视化点图
pm4py.vis.view_dotted_chart(log: EventLog | DataFrame, format: str = 'png', attributes=None, bgcolor: str = 'white', show_legend: bool = True)
说明:可视化点图。虚线是事件日志中不同维度的事件的经典可视化。事件日志中的每个事件都对应于一个点。尺寸投影在具有:-X轴的图形上:第一个尺寸的值在那里表示Y轴:第二个维度的值在那里表示。-颜色:对于虚线图的点,第三维度的值表示为不同的颜色。
这些值可以是字符串、数字或日期值,并由虚线进行相应的管理。虚线图表可以建立在不同的属性上。点图的一个方便选择是可视化案例和事件在一段时间内的分布,有以下选择:-XX:事件的时间戳。-Y轴:事件日志中事例的索引。-颜色:事件的活动。
上述选择允许识别视觉模式,例如:-批次。-箱子到达率的变化。-案例完成率的变化。输入参数:
log–事件日志
format(str)–图像格式
attributes–应该用于构造点图的属性。如果“无”,将显示默认的虚线图:x轴:时间y轴:事例(按事件日志中的发生顺序)颜色:活动。对于自定义属性,使用形式为[x轴属性、y轴属性、颜色属性]的属性列表,例如[“concept:name”、“org:resource”、“concept:name”])
bgcolor(str)–虚线图中使用的背景色
show_legend(bool)–boolean(启用/禁用显示图例)
示例代码:
import pm4pypm4py.view_dotted_chart(dataframe, format='svg')
pm4py.view_dotted_chart(dataframe, attributes=['time:timestamp', 'concept:name', 'org:resource'])
2.8 表示SNA度量
pm4py.vis.view_sna(sna_metric: SNA, variant_str: str | None = None)
说明:表示SNA度量(.html)
输入参数:
sna_metric(sna)–度量值
variant_str–要使用的变量(默认值:pyvis)
示例代码:
import pm4pymetric = pm4py.discover_subcontracting_network(dataframe, resource_key='org:resource', timestamp_key='time:timestamp', case_id_key='case:concept:name')
pm4py.view_sna(metric)
2.9 可视化案例持续时间图
pm4py.vis.view_case_duration_graph(log: EventLog | DataFrame, format: str = 'png', activity_key='concept:name', timestamp_key='time:timestamp', case_id_key='case:concept:name')
说明:可视化案例持续时间图
输入参数:
log–log对象
format(str)–可视化的格式(png、svg…)
activity_key(str)–要用作活动的属性
case_id_key(str)–要用作案例标识符的属性
timestamp_key(str)–要用作时间戳的属性
示例代码:
import pm4pypm4py.view_case_duration_graph(dataframe, format='svg', activity_key='concept:name', case_id_key='case:concept:name', timestamp_key='time:timestamp')
2.10 可视化每个时间的事件图
pm4py.vis.view_events_per_time_graph(log: EventLog | DataFrame, format: str = 'png', activity_key='concept:name', timestamp_key='time:timestamp', case_id_key='case:concept:name')
说明:可视化每个时间的事件图。
输入参数:
log–log对象
format(str)–可视化的格式(png、svg…)
activity_key(str)–要用作活动的属性
case_id_key(str)–要用作案例标识符的属性
timestamp_key(str)–要用作时间戳的属性
示例代码:
import pm4pypm4py.view_events_per_time_graph(dataframe, format='svg', activity_key='concept:name', case_id_key='case:concept:name', timestamp_key='time:timestamp')
2.11 性能图谱
pm4py.vis.view_performance_spectrum(log: EventLog | DataFrame, activities: List[str], format: str = 'png', activity_key: str = 'concept:name', timestamp_key: str = 'time:timestamp', case_id_key: str = 'case:concept:name', bgcolor: str = 'white')
说明:显示性能谱。性能谱是流程执行中不同活动之间经过的时间的流程性能的一种新颖可视化。性能谱最初描述于:
Denisov, Vadim, et al. “The Performance Spectrum Miner: Visual Analytics for Fine-Grained Performance Analysis of Processes.” BPM (Dissertation/Demos/Industry). 2018.
输入参数:
perf_spectrum–性能谱
format(str)–可视化的格式(png、svg…)
activity_key(str)–要用于活动的属性
timestamp_key(str)–用于时间戳的属性
case_id_key(str)–要用作案例标识符的属性
activity_key–要用作活动的属性
case_id_key–要用作案例标识符的属性
timestamp_key–要用作时间戳的属性
bgcolor(str)–可视化的背景色(默认值:白色)
示例代码:
import pm4pypm4py.view_performance_spectrum(dataframe, ['Act. A', 'Act. C', 'Act. D'], format='svg', activity_key='concept:name', case_id_key='case:concept:name', timestamp_key='time:timestamp')
2.12 显示指定维度中事件的分布
pm4py.vis.view_events_distribution_graph(log: EventLog | DataFrame, distr_type: str = 'days_week', format='png', activity_key='concept:name', timestamp_key='time:timestamp', case_id_key='case:concept:name')
说明:显示指定维度中事件的分布
观察事件随时间的分布,可以推断出有关工作班次、工作日和一年中或多或少繁忙的时期的有用信息输入参数:
log–事件日志
district_type(str)–分布类型(默认值:days_week):-days_month=>获取事件在一个月的天数(从1到31)中的分布-mounts=>获取事件的月份(从1个月到12个月)中的分配-mounts>>获取事件在事件日志的年份中的分布-hunts=>获得事件在一天的小时中的分布(从0到23)-days_week=>获取事件在一周中的天数(从周一到周日)-weeks=>获取事件在全年中的周中的分布(从0至52)
format(str)–可视化的格式(默认值:png)
activity_key(str)–要用作活动的属性
case_id_key(str)–要用作案例标识符的属性
timestamp_key(str)–要用作时间戳的属性
示例代码:
import pm4pypm4py.view_events_distribution_graph(dataframe, format='svg', distr_type='days_week', activity_key='concept:name', case_id_key='case:concept:name', timestamp_key='time:timestamp')
2.13 查看OC-DFG
pm4py.vis.view_ocdfg(ocdfg: Dict[str, Any], annotation: str = 'frequency', act_metric: str = 'events', edge_metric='event_couples', act_threshold: int = 0, edge_threshold: int = 0, performance_aggregation: str = 'mean', format: str = 'png', bgcolor: str = 'white', rankdir: str = 'LR')[source]
说明:使用提供的配置查看OC-DFG(以对象为中心的直接跟随图形)。
以对象为中心的直接跟随多重图是单个对象类型的直接跟随图的组合,考虑到以对象为核心的事件日志的实体(即事件、唯一对象、总对象),可以用不同的度量对其进行注释。输入参数:
ocdfg–以对象为中心的直接跟随图
annotation(str)–用于可视化的注释。值:-“频率”:频率注释-“性能”:性能注释
act_metric(str)–用于活动的度量。可用值:-“events”=>事件数(默认值)-“unique_objects”=>唯一对象数-“total_objects“=>总对象数
edge_metric(str)–用于边的度量。可用值:-“event_couples”=>事件对数(默认)-“unique_objects”=>唯一对象数-“total_objects“=>总对象数
act_threshold(int)–应用于活动频率的阈值(默认值:0)。只有频率>=的活动才会保留在图中。
edge_threshold(int)–要应用于边缘频率的阈值(默认为0)。只有频率>=的边才会保留在图形中。
performance_aggregation(str)–用于性能的聚合度量:平均值、中值、最小值、最大值、总和
format(str)–输出可视化的格式(如果提供了html,则GraphvizJS用于在html页面中呈现可视化)
bgcolor(str)–可视化的背景色(默认值:白色)
rankdir(str)–设置图形的方向(“LR”表示从左到右;“TB”表示从上到下)
示例代码:
import pm4pyocdfg = pm4py.discover_ocdfg(ocel)
pm4py.view_ocdfg(ocdfg, annotation='frequency', format='svg')
2.14 可视化以对象为中心的petri网
pm4py.vis.view_ocpn(ocpn: Dict[str, Any], format: str = 'png', bgcolor: str = 'white', rankdir: str = 'LR')
说明:可视化以对象为中心的petri网。
输入参数:
ocpn–以对象为中心的Petri网
format(str)–可视化的格式(如果提供了html,则使用GraphvizJS在html页面中呈现可视化)
bgcolor(str)–可视化的背景色(默认值:白色)
rankdir(str)–设置图形的方向(“LR”表示从左到右;“TB”表示从上到下)
示例代码:
import pm4pyocpn = pm4py.discover_oc_petri_net(ocel)
pm4py.view_ocpn(ocpn, format='svg')
2.15 查看OC-DFG
pm4py.vis.view_object_graph(ocel: OCEL, graph: Set[Tuple[str, str]], format: str = 'png', bgcolor: str = 'white', rankdir: str = 'LR')
说明:可视化对象图。
输入参数:
ocel(ocel)–以对象为中心的事件日志
graph–对象图
format(str)–可视化的格式(如果提供了html,则使用GraphvizJS在html页面中呈现可视化)
bgcolor(str)–可视化的背景色(默认值:白色)
rankdir(str)–设置图形的方向(“LR”表示从左到右;“TB”表示从上到下)
示例代码:
import pm4pyocel = pm4py.read_ocel('trial.ocel')
obj_graph = pm4py.ocel_discover_objects_graph(ocel, graph_type='object_interaction')
pm4py.view_object_graph(ocel, obj_graph, format='svg')
2.16 可视化网络分析
pm4py.vis.view_network_analysis(network_analysis: Dict[Tuple[str, str], Dict[str, Any]], variant: str = 'frequency', format: str = 'png', activity_threshold: int = 1, edge_threshold: int = 1, bgcolor: str = 'white')
说明:可视化网络分析
输入参数:
network_analysis–网络分析
variant(str)–可视化的变体:-频率(如果发现的网络分析包含交互的频率)-性能(如果找到的网络分析包括交互的性能)
format(str)–可视化的格式(如果提供了html,则使用GraphvizJS在html页面中呈现可视化)
activity_threshold(int)–要包含的活动的最小出现次数(默认值:1)
edge_threshold(int)–要包含的边的最小出现次数(默认值:1)
bgcolor(str)–可视化的背景色(默认值:白色)
示例代码:
import pm4pynet_ana = pm4py.discover_network_analysis(dataframe, out_column='case:concept:name', in_column='case:concept:name', node_column_source='org:resource', node_column_target='org:resource', edge_column='concept:name')
pm4py.view_network_analysis(net_ana, format='svg')
2.17 可视化变迁系统
pm4py.vis.view_transition_system(transition_system: TransitionSystem, format: str = 'png', bgcolor: str = 'white')
说明:可视化变迁系统
输入参数:
transition_system(TransitionSystem)–过渡系统
format(str)–可视化的格式(如果提供了html,则使用GraphvizJS在html页面中呈现可视化)
bgcolor(str)–可视化的背景色(默认值:白色)
示例代码:
import pm4pytransition_system = pm4py.discover_transition_system(dataframe, activity_key='concept:name', case_id_key='case:concept:name', timestamp_key='time:timestamp')
pm4py.view_transition_system(transition_system, format='svg')
2.18 可视化前缀树
pm4py.vis.view_prefix_tree(trie: Trie, format: str = 'png', bgcolor: str = 'white')
说明:可视化前缀树
输入参数:
prefix_tree–前缀树
format(str)–可视化的格式(如果提供了html,则使用GraphvizJS在html页面中呈现可视化)
bgcolor(str)–可视化的背景色(默认值:白色)
示例代码:
import pm4pyprefix_tree = pm4py.discover_prefix_tree(dataframe, activity_key='concept:name', case_id_key='case:concept:name', timestamp_key='time:timestamp')
pm4py.view_prefix_tree(prefix_tree, format='svg')
2.19 可视化对齐
pm4py.vis.view_alignments(log: EventLog | DataFrame, aligned_traces: List[Dict[str, Any]], format: str = 'png')
说明:可视化对齐
输入参数:
log–事件日志
aligned_traces–对齐的结果
format(str)–可视化的格式(默认值:png)
示例代码:
import pm4pylog = pm4py.read_xes('tests/input_data/running-example.xes')
net, im, fm = pm4py.discover_petri_net_inductive(log)
aligned_traces = pm4py.conformance_diagnostics_alignments(log, net, im, fm)
pm4py.view_alignments(log, aligned_traces, format='svg')
2.20 可视化足迹矩阵
pm4py.vis.view_footprints(footprints: Tuple[Dict[str, Any], Dict[str, Any]] | Dict[str, Any], format: str = 'png')
说明:可视化足迹矩阵
输入参数:
footprints–footprints
format(str)–
可视化的格式(默认值:png)
示例代码:
import pm4pylog = pm4py.read_xes('tests/input_data/running-example.xes')
fp_log = pm4py.discover_footprints(log)
pm4py.view_footprints(fp_log, format='svg')
如需了解更多,欢迎加入流程挖掘交流群QQ:671290481.
相关文章:
【Pm4py第七讲】关于visualization
本节用于介绍pm4py中的可视化函数,包括可视化bpmn、petri、性能图谱、变迁系统等。 1.函数概述 本次主要介绍Pm4py中一些常见的可视化函数,总览如下表: 函数名说明view_alignments(log, aligned_traces[, format])可视化对齐方法 view_bpmn(…...
通过 BigQuery 中的 11 个新链增强 Google Cloud 的区块链数据服务
2018 年初,Google Cloud 与社区合作,通过BigQuery 公共数据集实现区块链数据民主化;2019 年,又扩展了六个数据集;今天,我们在 BigQuery 公共数据集中添加了 11 个最受欢迎的区块链预览版。我们也在对该程序…...
C++笔记之文档术语——将可调用对象作为函数参数
C笔记之文档术语——将可调用对象作为函数参数 相关博文:C笔记之函数对象functors与可调用对象 文章目录 C笔记之文档术语——将可调用对象作为函数参数1.在函数参数中传递可调用对象2.‘在参数中传入可调用对象’和‘将可调用对象作为函数参数’哪个描述更加专业…...
【Android知识笔记】FrameWork中的设计模式
一、FrameWork中有哪些设计巧妙之处 例如: Binder调用,模糊进程边界: 屏蔽跨进程IPC通信的细节,让开发者把精力放在业务上面,无需关心进程之间的通信。Bitmap大图传输,高性能: 只传递Binder句柄,到目标进程后做内存映射,不用做大量数据拷贝,速度非常快。Zygote创建进…...
机器学习西瓜书+南瓜书吃瓜教程第三章学习笔记
本次学习为周老师的机器学习西瓜书谢老师南瓜书Datawhale视频 视频地址 下面为本人的学习笔记,最近很忙还没学多少,之后补!!! u1s1,边看视频边自己手推一遍真的清楚很多,强烈推荐自己手推虽然花…...
JUnit5单元测试提示“Not tests were found”错误
JUnit5单元测试提示“Not tests were found”错误,如下图所示: 或者 问题解析: 1)使用Test注解时,不能有返回值; 2)使用Test注解时,不能使用private关键字; 存在以上情…...
C++ -- IO流
目录 C语言的输入与输出 CIO流 C标准IO流 C文件IO流 文件常见的打开方式如下 以二进制的形式操作文件 以文本的形式操作文件 读写结构体 stringstream的简单介绍 C语言的输入与输出 C语言中我们用到的最频繁的输入输出方式就是scanf ()与printf()。 scanf(): 从标准输…...
uniapp:如何修改组件默认样式
日历组件默认样式如下图,但是我不想要右上角的红点,并且日期下面的数字要加红色背景,变成圆形,还是先用元素检查找到元素的类名,然后通过/deep/来覆盖样式,需要注意的是,lang要scss或者less&…...
Lombok @Accessors(chain = true) 导致 FastJson parsObject()对父类属性失效
我们在项目中经常会用到lombok工具对POJO类进行简化,但不可避免的存在父类和子类的设计,并且会对父类和子类进行序列化和反序列化,今天遇到了一个问题,序列化的json字符串转化为子类对象时无法获取到父类属性值,对象中所有父类属性均为空值或默认值,很是奇怪,代码如下: 父类:P…...
Aztec交易架构解析
1. 引言 前序博客有: Aztec的隐私抽象:在尊重EVM合约开发习惯的情况下实现智能合约隐私完全保密的以太坊交易:Aztec网络的隐私架构Aztec.nr:Aztec的隐私智能合约框架——用Noir扩展智能合约功能Account Abstraction账号抽象——…...
商品秒杀系统整理
1、使用redis缓存商品信息 2、互斥锁解决缓存击穿问题,用缓存空值解决缓存穿透问题。 3、CAS乐观锁解决秒杀超卖的问题 4、使用redission实现一人一单。(分布式锁lua)脚本。 5、使用lua脚本进行秒杀资格判断(将库存和用户下单…...
C语言实现八种功能的通讯录(添加、删除、查找、修改、显示、排序、退出、清空)
通讯录功能概要及前提说明 此通讯录利用C语言完成,可以实现八种功能的通讯录(添加、删除、查找、修改、显示、排序、退出、清空) 代码由三部分组成,为什么要写成三部分而不写成一部分可以参考我以前的博客,如下&…...
视频监控/视频汇聚/安防视频监控平台EasyCVR配置集群后有一台显示离线是什么原因?
开源EasyDarwin视频监控TSINGSEE青犀视频平台EasyCVR能在复杂的网络环境中,将分散的各类视频资源进行统一汇聚、整合、集中管理,在视频监控播放上,TSINGSEE青犀视频安防监控汇聚平台可支持1、4、9、16个画面窗口播放,可同时播放多…...
【RabbitMQ实战】02 生产者和消费者示例
在上一节中,我们使用docker部署了RabbitMQ,这一节我们将写一段生产者和消费者的代码。将用到rabbitmq的原生API来进行生产和发送消息。 一、准备工作 开始前,我们先在RabbitMQ控制台建相好关的数据 本机的RabbitMQ部署机器是192.168.56.201…...
Linux下ThinkPHP5实现定时器任务 - 结合crontab
实例一: 1.在/application/command创建要配置的PHP类文件,需要继承Command类,并重写configure和execute两个方法,例如: <?php namespace app\command; use think\console\Command; use think\console\Input; use think\cons…...
3dsmax模型烘焙光照贴图并导入unity流程详解
目录 前言 软件环境 前置知识储备 一、模型场景搭建 二、模型材质处理 三、vray渲染准备 四、烘焙至贴图 五、unity场景准备 六、贴图与材质 前言 该流程针对某些固定场景(模型发布、无法使用实时渲染引擎等)情况下的展示,本文记录烘…...
安卓生成公钥和md5签名
安卓公钥和md5证书签名 大家好,最近需要备案app,用到了公钥和md5,MD5签名我倒是知道,然而对于公钥却一下子不知道了, 现在我讲一下我的流程。 首先是md5证书签名的查看, 生成了apk和签名.jks后&…...
pwndbg安装(gdb插件)
pwndbg安装(gdb插件) 源地址:https://github.com/pwndbg/pwndbg 手动安装 git clone https://github.com/pwndbg/pwndbg cd pwndbg ./setup.sh 没啥问题运行gdb的话就可以看到明显的不同了 如果安装成功了,但没有生效 如果有问…...
SpringBoot 学习(二)配置
2. SpringBoot 配置 2.1 配置文件类型 配置文件用于修改 SpringBoot 的默认配置。 2.1.1 properties 文件 **properties ** 是属性文件后缀。 文件名:application.properties 只能保存键值对。 基础语法:keyvalue namewhy注入配置类 Component //…...
西门子828d授权密钥破解经验分享 I7I54833762
操作数组的方法 Array.prototype.toSorted(compareFn) //返回一个新数组,其中元素按升序排序,而不改变原始数组。 Array.prototype.toReversed() //返回一个新数组,该数组的元素顺序被反转,但不改变原始数组。 Array.prototype.to…...
C++_核心编程_多态案例二-制作饮品
#include <iostream> #include <string> using namespace std;/*制作饮品的大致流程为:煮水 - 冲泡 - 倒入杯中 - 加入辅料 利用多态技术实现本案例,提供抽象制作饮品基类,提供子类制作咖啡和茶叶*//*基类*/ class AbstractDr…...
突破不可导策略的训练难题:零阶优化与强化学习的深度嵌合
强化学习(Reinforcement Learning, RL)是工业领域智能控制的重要方法。它的基本原理是将最优控制问题建模为马尔可夫决策过程,然后使用强化学习的Actor-Critic机制(中文译作“知行互动”机制),逐步迭代求解…...
无法与IP建立连接,未能下载VSCode服务器
如题,在远程连接服务器的时候突然遇到了这个提示。 查阅了一圈,发现是VSCode版本自动更新惹的祸!!! 在VSCode的帮助->关于这里发现前几天VSCode自动更新了,我的版本号变成了1.100.3 才导致了远程连接出…...
智能在线客服平台:数字化时代企业连接用户的 AI 中枢
随着互联网技术的飞速发展,消费者期望能够随时随地与企业进行交流。在线客服平台作为连接企业与客户的重要桥梁,不仅优化了客户体验,还提升了企业的服务效率和市场竞争力。本文将探讨在线客服平台的重要性、技术进展、实际应用,并…...
微信小程序 - 手机震动
一、界面 <button type"primary" bindtap"shortVibrate">短震动</button> <button type"primary" bindtap"longVibrate">长震动</button> 二、js逻辑代码 注:文档 https://developers.weixin.qq…...
VTK如何让部分单位不可见
最近遇到一个需求,需要让一个vtkDataSet中的部分单元不可见,查阅了一些资料大概有以下几种方式 1.通过颜色映射表来进行,是最正规的做法 vtkNew<vtkLookupTable> lut; //值为0不显示,主要是最后一个参数,透明度…...
2025盘古石杯决赛【手机取证】
前言 第三届盘古石杯国际电子数据取证大赛决赛 最后一题没有解出来,实在找不到,希望有大佬教一下我。 还有就会议时间,我感觉不是图片时间,因为在电脑看到是其他时间用老会议系统开的会。 手机取证 1、分析鸿蒙手机检材&#x…...
【Go语言基础【13】】函数、闭包、方法
文章目录 零、概述一、函数基础1、函数基础概念2、参数传递机制3、返回值特性3.1. 多返回值3.2. 命名返回值3.3. 错误处理 二、函数类型与高阶函数1. 函数类型定义2. 高阶函数(函数作为参数、返回值) 三、匿名函数与闭包1. 匿名函数(Lambda函…...
如何更改默认 Crontab 编辑器 ?
在 Linux 领域中,crontab 是您可能经常遇到的一个术语。这个实用程序在类 unix 操作系统上可用,用于调度在预定义时间和间隔自动执行的任务。这对管理员和高级用户非常有益,允许他们自动执行各种系统任务。 编辑 Crontab 文件通常使用文本编…...
Go语言多线程问题
打印零与奇偶数(leetcode 1116) 方法1:使用互斥锁和条件变量 package mainimport ("fmt""sync" )type ZeroEvenOdd struct {n intzeroMutex sync.MutexevenMutex sync.MutexoddMutex sync.Mutexcurrent int…...
