我花了很长一段时间才找到一个适用于 Python 的静态数据流图生成器。
这是我的理想: 给定一个小Python脚本
example.py
(用Python3编写),返回数据流图的一些表示。
我能够使用 IBM 的 pyflowgraph 实现此结果,https://github.com/IBM/pyflowgraph,它以
graph.ml
格式输出数据,不幸的是这个包仅执行动态分析。
我想知道是否有人知道可以为 Python 进行此类静态数据流分析的 DFG 工具?
@startuml 开始 ' 程序开始 :导入必要的库; ' 导入 OpenCV 和 HandDetector
分区“初始化”{ :初始化摄像头(cv2.VideoCapture); ' 打开默认相机 :设置相机分辨率; ' 设置视频帧的宽度和高度 :初始化手部探测器; ' 初始化手部追踪模块; :定义虚拟键盘的按键; ' 指定键盘布局的键 :定义关键尺寸、外观等参数; ' 设置颜色、大小和透明度等属性 }
分区“辅助函数”{ :定义draw_keys(img,key_list,hovered_key); ' 绘制虚拟键盘的函数 :定义 get_hovered_key(lmList); ' 确定哪个键被悬停的函数 :定义去抖动(key); ' 防止重复检测同一按键的功能 :定义handle_backspace(); ' 处理退格功能的函数 }
分区“主循环”{ 而(真){ :从相机中捕获一帧; ' 从视频源中读取一帧 if (抓帧失败?) then (是) 停止; ' 如果无法捕获帧则退出循环 结束
:Detect hands using HandDetector; ' Detect hands and landmarks in the frame
if (Hands detected?) then (Yes)
:Get hand landmarks; ' Extract hand landmarks from detection
:Determine hovered key; ' Find out which key is being hovered by the fingertip
if (Hovered key detected and debounce successful?) then (Yes)
if (Hovered key == "Back") then (Yes)
:Call handle_backspace(); ' Remove the last character from the input
else (No)
:Append hovered key to pressed_keys; ' Add the detected key to the list of pressed keys
endif
:Print pressed key; ' Output the key that was pressed
endif
endif
:Draw keyboard with transparency; ' Overlay the keyboard on the video feed
:Display pressed keys on screen; ' Show recently pressed keys on the frame
:Show the image using cv2.imshow; ' Display the frame with the virtual keyboard
if (Key 'q' pressed?) then (Yes)
stop; ' Exit the loop if the 'q' key is pressed
endif
}
}
:释放相机并摧毁所有窗户; ' 清理资源并关闭窗口 结尾 @enduml
我刚刚发现这个开源项目专注于 Python 数据流分析。一探究竟! https://github.com/SMAT-Lab/Scalpel/
它也是用 Python 编写的;没用过,但是看起来很有趣!
这是他们论文的预印本: https://arxiv.org/pdf/2202.11840.pdf