目前市面上有相当多的素材管理软件,例如Bridge、Eagle等等,它们各有优劣。

知乎上讨论的关于Eagle对硬盘有所伤害的问题,并不能够确定,因为双方至始至终没有提供一个性能图表。

最新的同类软件是billfish,在发布伊始就受到了很大的关注,一开始就主打C++技术并以性能作为优先考虑;虽然性能对比图也并没有给出。

从发布的时候,我就下载了该软件,进行了技术上的评估。

1. 目前界面库种类繁多,billfish采用的是Qt,即界面和功能完全使用Qt/C++。

2. 众所周知的原因,C++开发速度慢,即使是经验丰富的开发人员,也不能保证完全没有crash的问题发生;而且为了更快的性能,使用了多线程技术。由于billfish诞生时间很短,崩溃问题在一段时间内将会频繁出现。

3. 对于本地数据库,billfish使用了sqlite。由于需要进行文本搜索,软件采用了腾讯某款名气不大的分词库,从技术上说,因为知名度低,使用的人少,所以踩坑很容易碰到无法解决的问题。

4. 对于主色调抽取,采用的是查找表技术。软件内部已经提前设置好了颜色种类。 

一、问题

 作为一个对图片有管理需求的用户来说,我比较关心如下几个问题:

  1. 存储的数据不能丢失。
  2. 丰富的检索功能。
  3. 多样化的存储支持。
  4. 多种类的格式支持。
  5. 好看而又易用的界面。

 从技术上来说,sqlite能够比较好的完上面的第1个功能。

对于4这个需求,billfis采用了插件方式读取,因此后续对各种格式的数据读入是很容易的,然而由于UI采用的是Qt,所以界面的可扩展性不高,即使开放C++的插件接口,界面也较难美观的定制化。

对于3这个需求,billfish提供了多种存储方式,并承诺后续会提供更多的存储方式。

至于2这个需求,个人认为是一个考验算法架构能力的一个部分。牵涉到数据存储和检索,billfish如果仅仅只依靠sqlite自身的功能是不够的,需要有能力去对数据库本身做修改。

billfish在推出之时,卖点之一是快速的批量加载。然而这个功能并不是经常使用,只在第一次才会用到。从技术角度来说,加载的性能并不需要很高,而且由于加载操作是IO操作,完全可以与图像分析操作分离(目前观察已经做了分离)。

 

二、解决方案

鉴于上述讨论的这些问题,我开发并开源了一个图像管理软件(预计三月左右发布第一个不带色彩检索的版本):

https://github.com/webbery/civet

 

iOS 开源图片处理库 开源图片管理软件_github

这款软件在设计初期兼顾了上述几个问题:

1. 一个好看的颜值是软件流行的一个重要因素之一,所以Electron是极佳的选择。

2. 因为Electron界面是js写的,因此设计良好的架构完全可以为插件开发者提供自定义界面功能,能够集中开源社区的力量,以支持各类格式

3. 对于磁盘读写的问题,快速而又高效的方式是使用共享内存技术。而lmdb数据库能够非常不错的满足需求。事实上,已经有不少做图像处理算法的人,已经在使用lmdb来保存图片了。

4. 由于lmdb源码非常简单且协议友好,因此可以在这基础上进行修改,扩展新的检索算法

5. 另外,可以支持成熟的中文分词算法,可以用来作为全文检索的分词器,而不是局限于sqlite中。

6. 最重要的一点是,所有已知的管理软件都是闭源的,而这款软件是基于MIT协议开源的,用户完全可以基于该软件进行再次开发,以满足自己的需求。而对于一家企业来说,只有带来足够的利润,才会开发相应的需求。

7. 跨平台的一致性(Mac、Win、Ubuntu)。由于支持Ubuntu平台,因此能够为做图像处理、深度学习、Slam的相关开发人员提供图片管理功能

 

最新研发进展可到github查看:https://github.com/webbery/civet