目前市面上有相當多的素材管理軟件,例如Bridge、Eagle等等,它們各有優劣。
知乎上討論的關於Eagle對硬盤有所傷害的問題,並不能夠確定,因為雙方至始至終沒有提供一個性能圖表。
最新的同類軟件是billfish,在發布伊始就受到了很大的關注,一開始就主打C++技術並以性能作為優先考慮;雖然性能對比圖也並沒有給出。
從發布的時候,我就下載了該軟件,進行了技術上的評估。
1. 目前界面庫種類繁多,billfish采用的是Qt,即界面和功能完全使用Qt/C++。
2. 眾所周知的原因,C++開發速度慢,即使是經驗豐富的開發人員,也不能保證完全沒有crash的問題發生;而且為了更快的性能,使用了多線程技術。由於billfish誕生時間很短,崩潰問題在一段時間內將會頻繁出現。
3. 對於本地數據庫,billfish使用了sqlite。由於需要進行文本搜索,軟件采用了騰訊某款名氣不大的分詞庫,從技術上說,因為知名度低,使用的人少,所以踩坑很容易碰到無法解決的問題。
4. 對於主色調抽取,采用的是查找表技術。軟件內部已經提前設置好了顏色種類。
一、問題
作為一個對圖片有管理需求的用戶來說,我比較關心如下幾個問題:
- 存儲的數據不能丟失。
- 豐富的檢索功能。
- 多樣化的存儲支持。
- 多種類的格式支持。
- 好看而又易用的界面。
從技術上來說,sqlite能夠比較好的完上面的第1個功能。
對於4這個需求,billfis采用了插件方式讀取,因此后續對各種格式的數據讀入是很容易的,然而由於UI采用的是Qt,所以界面的可擴展性不高,即使開放C++的插件接口,界面也較難美觀的定制化。
對於3這個需求,billfish提供了多種存儲方式,並承諾后續會提供更多的存儲方式。
至於2這個需求,個人認為是一個考驗算法架構能力的一個部分。牽涉到數據存儲和檢索,billfish如果僅僅只依靠sqlite自身的功能是不夠的,需要有能力去對數據庫本身做修改。
billfish在推出之時,賣點之一是快速的批量加載。然而這個功能並不是經常使用,只在第一次才會用到。從技術角度來說,加載的性能並不需要很高,而且由於加載操作是IO操作,完全可以與圖像分析操作分離(目前觀察已經做了分離)。
二、解決方案
鑒於上述討論的這些問題,我開發並開源了一個圖像管理軟件(預計三月左右發布第一個不帶色彩檢索的版本):
https://github.com/webbery/civet

這款軟件在設計初期兼顧了上述幾個問題:
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。
歡迎大家支持,謝謝
