目的
解析 bplist 文件
背景
本人研究医学图像 AI 的,现在有个需求,就是把医生在 Osirix (一个医生看影像的软件)上圈出来的 ROI ( region of interest ,就是一个闭合的多边形,将目标区域,比如肿瘤,围起来)转出来存成 json/xml 等 readable 的格式。
由于 Osirix 批量导出的时候导出的是它自己的一个格式,里面存的是一堆 bytes ,类似于这种
b'bplist00\xd4 后面很长
说白了这东西里面存的就是 ROI 上的每个点的坐标,以及医生标注的 ROI 的名字(比如恶性肿瘤,良性肿瘤)。
大概问了下 chatGPT ,说这是 bplist 的格式(我的理解大概是 Google protobuf 类似的东西,不过是 apple 的)。
目前我们尝试了两种方案去解析 Osirix 导出的文件:
-
逆向工程。我们尝试了逆向工程,通过标注一些特定坐标的标注,然后观察 Osirix 导出的文件格式,大概写了个解析的代码。问题是这个逆向并不完美,总有些 case 会出现无法解析的问题。这个成功率大概有个 92%。
-
直接用 python 的 bplist 解析库。这个错误率更高,成功率大概只有 20%。很多 case 都无法解析。
然后我今天突然发现 Osirix 居然有个开源版本Horos,并且有 ROI 导出的相关功能。
如果有了怎么编码 ROI 的源码,按理说就能开发一个完美的工具来逆向了。问题是这个开源项目比较大,难以定位相关代码。我大概用 bplist/roi/NSKeyedArchiver 等关键词搜了下,没找到。
我的问题
有没有大哥比较熟悉 bplist 的,或者比较懂 MacOS 开发的,可以指点下如何快速定位源代码里相关代码的?
|