Gambaran Umum
Yupoo Picture Manager melayani puluhan juta pengguna dan mengelola puluhan miliar gambar. Karena galeri penggunanya semakin besar, Yupoo memiliki kebutuhan bisnis yang mendesak akan solusi yang dapat menemukan gambar dengan cepat. Dengan kata lain, ketika pengguna memasukkan gambar, sistem harus menemukan gambar aslinya dan gambar serupa di galeri. Pengembangan layanan pencarian berdasarkan gambar memberikan pendekatan yang efektif untuk masalah ini.
Pencarian berdasarkan layanan gambar telah mengalami dua kali evolusi:
- Memulai penyelidikan teknis pertama pada awal 2019 dan meluncurkan sistem generasi pertama pada bulan Maret dan April 2019;
- Memulai penyelidikan rencana peningkatan pada awal tahun 2020 dan memulai peningkatan keseluruhan ke sistem generasi kedua pada bulan April 2020.
Artikel ini menjelaskan pemilihan teknologi dan prinsip-prinsip dasar di balik dua generasi sistem pencarian berdasarkan gambar berdasarkan pengalaman saya sendiri dalam proyek ini.
Gambaran Umum
Apa yang dimaksud dengan gambar?
Kita harus tahu apa itu gambar sebelum berurusan dengan gambar.
Jawabannya adalah gambar adalah kumpulan piksel.
Sebagai contoh, bagian dalam kotak merah pada gambar ini sebenarnya adalah serangkaian piksel.
1-apakah-gambar itu.png
Misalkan bagian dalam kotak merah adalah sebuah gambar, maka setiap kotak kecil yang terpisah dalam gambar adalah piksel, unit informasi dasar. Maka, ukuran gambar tersebut adalah 11 x 11 px.
2-apakah-sebuah-gambar itu.png
Representasi matematis dari gambar
Setiap gambar dapat diwakili oleh sebuah matriks. Setiap piksel pada gambar berhubungan dengan sebuah elemen dalam matriks.
Gambar biner
Piksel gambar biner adalah hitam atau putih, sehingga setiap piksel dapat diwakili oleh 0 atau 1. Misalnya, representasi matriks dari gambar biner 4 * 4 adalah:
0 1 0 1
1 0 0 0
1 1 1 0
0 0 1 0
Gambar RGB
Tiga warna primer (merah, hijau, dan biru) dapat dicampur untuk menghasilkan warna apa pun. Untuk gambar RGB, setiap piksel memiliki informasi dasar dari tiga saluran RGB. Demikian pula, jika setiap saluran menggunakan angka 8-bit (dalam 256 level) untuk merepresentasikan skala abu-abu, maka representasi matematis piksel adalah:
([0 .. 255], [0 .. 255], [0 .. 255])
Mengambil gambar 4 * 4 RGB sebagai contoh:
3-4-x-4-rgb-image.png
Inti dari pemrosesan gambar adalah memproses matriks piksel ini.
Masalah teknis pencarian berdasarkan gambar
Jika Anda mencari gambar asli, yaitu gambar dengan piksel yang sama persis, maka Anda dapat langsung membandingkan nilai MD5-nya. Namun, gambar yang diunggah ke Internet sering kali dikompresi atau diberi tanda air. Bahkan perubahan kecil pada gambar bisa menciptakan hasil MD5 yang berbeda. Selama ada ketidakkonsistenan dalam piksel, tidak mungkin menemukan gambar aslinya.
Untuk sistem pencarian berdasarkan gambar, kita ingin mencari gambar dengan konten yang serupa. Maka, kita perlu menyelesaikan dua masalah dasar:
- Merepresentasikan atau mengabstraksikan gambar sebagai format data yang dapat diproses oleh komputer.
- Data harus sebanding untuk perhitungan.
Secara lebih spesifik, kita membutuhkan fitur-fitur berikut:
- Ekstraksi fitur gambar.
- Perhitungan fitur (perhitungan kemiripan).
Sistem pencarian berdasarkan gambar generasi pertama
Ekstraksi fitur - abstraksi gambar
Sistem pencarian berdasarkan gambar generasi pertama menggunakan algoritma hash perseptual atau pHash untuk ekstraksi fitur. Apa saja dasar-dasar algoritme ini?
4-pencarian-gambar-generasi-pertama.png
Seperti yang ditunjukkan pada gambar di atas, algoritma pHash melakukan serangkaian transformasi pada gambar untuk mendapatkan nilai hash. Selama proses transformasi, algoritme ini secara terus menerus mengabstraksikan gambar, sehingga mendorong hasil gambar yang mirip menjadi lebih dekat satu sama lain.
Perhitungan fitur - perhitungan kemiripan
Bagaimana cara menghitung kemiripan antara nilai hash dari dua gambar? Jawabannya adalah dengan menggunakan jarak Hamming. Semakin kecil jarak Hamming, semakin mirip konten gambarnya.
Apa yang dimaksud dengan jarak Hamming? Ini adalah jumlah bit yang berbeda.
Sebagai contoh,
Value 1: 0 1 0 1 0
Value 2: 0 0 0 1 1
Ada dua bit yang berbeda dalam dua nilai di atas, jadi jarak Hamming di antara keduanya adalah 2.
Sekarang kita sudah mengetahui prinsip perhitungan kemiripan. Pertanyaan selanjutnya adalah, bagaimana cara menghitung jarak Hamming dari data berskala 100 juta dari gambar berskala 100 juta? Singkatnya, bagaimana cara mencari gambar yang mirip?
Pada tahap awal proyek ini, saya tidak menemukan alat yang memuaskan (atau mesin komputasi) yang dapat dengan cepat menghitung jarak Hamming. Jadi, saya mengubah rencana saya.
Ide saya adalah jika jarak Hamming dari dua nilai pHash kecil, maka saya dapat memotong nilai pHash dan bagian-bagian kecil yang sesuai kemungkinan besar akan sama.
Sebagai contoh:
Value 1: 8 a 0 3 0 3 f 6
Value 2: 8 a 0 3 0 3 d 8
Kami membagi dua nilai di atas menjadi delapan segmen dan nilai dari enam segmen persis sama. Dapat disimpulkan bahwa jarak Hamming mereka dekat dan dengan demikian kedua gambar ini mirip.
Setelah transformasi, Anda dapat menemukan bahwa masalah penghitungan jarak Hamming telah menjadi masalah pencocokan kesepadanan. Jika saya membagi setiap nilai pHash menjadi delapan segmen, selama ada lebih dari lima segmen yang memiliki nilai yang sama persis, maka kedua nilai pHash tersebut serupa.
Dengan demikian, sangat mudah untuk menyelesaikan pencocokan kesetaraan. Kita bisa menggunakan pemfilteran klasik dari sistem basis data tradisional.
Tentu saja, saya menggunakan pencocokan multi-term dan menentukan tingkat pencocokan menggunakan minimum_should_match di ElasticSearch (artikel ini tidak memperkenalkan prinsip ES, Anda dapat mempelajarinya sendiri).
Mengapa kami memilih ElasticSearch? Pertama, ia menyediakan fungsi pencarian yang disebutkan di atas. Kedua, proyek image manager itu sendiri menggunakan ES untuk menyediakan fungsi pencarian teks lengkap dan sangat ekonomis untuk menggunakan sumber daya yang ada.
Ringkasan sistem generasi pertama
Sistem pencarian berdasarkan gambar generasi pertama memilih solusi pHash + ElasticSearch, yang memiliki fitur-fitur berikut:
- Algoritme pHash mudah digunakan dan dapat menahan tingkat kompresi, tanda air, dan derau tertentu.
- ElasticSearch menggunakan sumber daya yang ada pada proyek tanpa menambahkan biaya tambahan untuk pencarian.
- Tetapi keterbatasan sistem ini sudah jelas: Algoritma pHash adalah representasi abstrak dari keseluruhan gambar. Setelah kita menghancurkan integritas gambar, seperti menambahkan batas hitam pada gambar asli, hampir tidak mungkin untuk menilai kemiripan antara gambar asli dan gambar lainnya.
Untuk menerobos keterbatasan tersebut, sistem pencarian gambar generasi kedua dengan teknologi yang sama sekali berbeda, muncul.
Artikel ini ditulis oleh rifewang, pengguna Milvus dan insinyur perangkat lunak UPYUN. Jika Anda menyukai artikel ini, selamat datang untuk menyapa! https://github.com/rifewang
- Masalah teknis pencarian berdasarkan gambar
- Sistem pencarian berdasarkan gambar generasi pertama
- Ringkasan sistem generasi pertama
On This Page
Try Managed Milvus for Free
Zilliz Cloud is hassle-free, powered by Milvus and 10x faster.
Get StartedLike the article? Spread the word