該項目著重於創建顯示類似序數圖片的服務。
它的UI可在https://ordsimilarity.com/上獲得。 API (以下詳細信息)可在https://api.ordsimilarity.com上找到。
圖片使用average hash算法進行分類,該算法將它們轉換為0s和1s的位序列。然後,使用Hamming distance比較它們,該距離衡量了兩張圖片之間常見的數量。可以在此鏈接上找到詳細的描述。
所有序列的平均哈希都存儲在JSON文件中。示例數據可以在average_hash_example.json中看到。
注意:我們使用JSON文件而不是“正常DB”,因為我們需要始終循環瀏覽內部所有數據,事實證明,加載JSON文件的所有數據要比SQLite3(例如SQLite3)要快得多。
主要的處理功能是get_matches_from_data in get_matches.py中。此函數通過所有給定的平均哈希進行迭代,並將它們的相似性與從提供的數據計算得出的平均哈希 - 序數ID或自定義圖片內容。它返回以其相似性排序的大多數相似列表的列表。
get_matches.py還提供CLI訪問該功能。有關更多詳細信息,請參見python get_matches.py --help 。
API使用FastAPI框架在python中實現。在啟動時,它將JSON文件的平均哈希加載到內存中。然後,對於每個請求,它將此數據提供給上述get_matches_from_data函數並收集結果。在將JSON結果返回客戶端之前,它會以其他有用的屬性或鏈接豐富相似的列中數據。
注意:API實際上稱為Rust API,它提供了更好的性能。有關更多詳細信息,請參見Rust server部分。
API包含用於相似性搜索的多個端點,這些端點是在api.py中定義的:
GET /ord_id/{ord_id}?top_n=Ntop_n的最大值為20,並且是可選的。如果未指定,則默認為20。POST /file?top_n=Ncurl -X POST -H "Content-Type: multipart/form-data" -F "file=@images/1.jpg" http://localhost:8001/file?top_n=10top_n是無限的,並且是可選的。如果未指定,則默認為20。為了提高性能, get_matches功能也已在Rust中實現,以加快相似性搜索。
為此, similar_pictures包含一個Rust二進制和庫。
從python與Rust的連接建立在get_matches_rust.py中,該連接揭示了與get_matches.py相同的CLI接口。 Rust共享庫使此連接成為可能,該庫屬於similar_pictures/target/release/libsimilar_pictures.so 。
此外,在similar_pictures/target/release/similar_pictures下,獨立的Rust二進制用作CLI 。 CLI幫助可以通過運行./similar_pictures/target/release/similar_pictures --help 。它的用法類似於python版本。
Rust庫和二進製文件都從similar_pictures/src/get_matches.rs使用了Common get_matches函數,該功能執行與python版本相同的任務。要為您的操作系統構建生鏽的二進制庫和庫,請運行cargo build --release 。
在Rust中,在rust_http_server中也複製了將普通哈希加載到服務器啟動中以更快地服務請求的方法的方法。
它包含一台(非公共)服務器,其端點與python API相似 - 唯一的區別是它不接受文件對象,需要直接給出file_hash。
它不應直接使用,而應作為python API的後端。連接是在rust_server.py中建立的。