بىزدە بىر پارچە رەسىم بار بولسا، ئەگەر تور دۇنياسىدىكى شۇنىڭغا ئوخشىشىپ كېتىدىغان، شۇنىڭ تېخىمۇ سۈزۈك بولغان ئەسلى نۇسخىسىنى تاپماقچى بولساق قانداق قىلىمىز؟ ئەلۋەتتە رەسىم ئىسمى بويىچە ئىزدەشكە بولىدۇ، لېكىن ئوخشاش رەسىمگە ھەرخىل ئىسىملار قويۇلىشى، ھەتتا رەسىمگە مۇناسىۋەتلىك ئىسىم قويۇلماي، ئىختىيارى ھەرپ زەنجىرلىرىدىن ھاسىللانغان ئىسىم بويىچە ئېنتىرنېت دۇنياسىغا يوللانغان بولۇشى مۇمكىن(بولۇپمۇ بىزنىڭ تىلىمىزدا شۇنداق). نۆۋەتتە گۇگۇل قاتارلىق چوڭ ئىزدەش ماتورىلىرىغا، ئىزدىمەكچى بولغان ئەسلى رەسىم ياكى ئادرىسىغا ئاساسەن، تور دۇنياسىدىكى شۇنىڭغا ئوخشىشىپ كېتىدىغان رەسىملەرنى تىز ئىزدەش ئىقتىدارى سەپلەنگەن. خۇددى تۆۋەندىكى رەسىمدە كۆرسىتىلگەندەك، پەقەت گۇگۇل ئىزدەش رامكىسى ئىچىدىكى ئاپپارات بەلگىسىنى باسساقلا:
تۆۋەندىكىدەك دىئالوگ رامكىسى كۆرۈنىدۇ:
يەنى بۇ يەرگە ئوخشاشلىرىنى تاپماقچى بولغان رەسىم ئادرىسىنى كىرگۈزسەكمۇ ياكى بىۋاستە يەرلىكتىن يۈكلىسەكمۇ بولىدۇ.
مىسال ئۈچۈن، ئامېئىركا داڭلىق ئايال ئارتىسى Alyson Hannigan نىڭ خالىغان بىر رەسىمىنىڭ ئادرىسىنى چاپلاپ ئىزدەپ باقايلى!
نەتىجىدە،مەن ھېچقانداق خەت يازمىغان ئەھۋال ئاستىدا، گۇگۇل مەن چاپلىغان رەسىم ئادرىسىدىكى Alyson Hanniganدېگەن رەسىم نامىنى تۇتۇپ ئالغان، ئاندىن ئوخشاش رەسىمنىڭ ئوخشىمىغان چوڭلۇقىدىكى نۇسخىلىرىنى تەكشۈرگەن، ئاخىرىدا شۇنىڭغا ئوخشىشىپ كېتىدىغان رەسىملەرنى تېپىپ بەرگەن:
بۇ تېخنىكا قارىماققا ئىنتايىن مۇرەككەپ كۆرۈنىدۇ، لېكىن ماھايىتىنى چۈشىنىۋالساق تولىمۇ ئاددى بىر ئىش ئېكەنلىكىنى بىلىپ قالىمىز.
دوكتۇر Neal Krawetz (موشۇ ئىسىم بويىچە ئىزدەپ تونۇۋىلىڭ)نىڭ ئىيتىپ بېرىشىچە: بۇ تېخنىكىنىڭ ماھيىتى تولىمۇ ئاددىي بولۇپ، بىز پەقەت بىر كىچىككىنە بىر ئالگورىفما (算法) ئارقىلىق كۆزلىگەن مەخسەتكە يىتەلەيدىكەنمىز. بۇنىڭ ھالقىلىق تېخنكىسى "سەزگۈر ھاشى ئالگورىفماسى" (Perceptual hash algorithm) بولۇپ،ئۇنىڭ رولى بولسا، ئاۋۋال ھەربىر رەسىمگە ئايرىم "بارماق ئىزى" (fingerprint) ھەرىپ زەنجىرى ھاسىللاپ، ئاندىن بارماق ئىز قىممەتلىرىنى سىلىشتۇرۇشتىن ئىبارەت. دېمەك، بارماق ئىز قىممەتلىرىنىڭ ئوخشاشلىقى قانچە يۇقىرى بولسا رەسىملەر شۇنچە ئوخشاشلىققا ئىگە بولىدۇ دېگەن گەپ.
تۆۋەندە بۇ تېخنكىنى ئەمەلگە ئاشۇرۇشنىڭ ئاددى قەدەم باسقۇچلىرى:
بىرىنچى قەدەم: رەسىم ئۆلچىمىنى كىچىكلىتىش
رەسىمنى كىچىكلىتىپ 8x8 ئۆلچىمىگە، يەنى جەمئىي 64 پېكىسىللىق قىممەتكە ئەكىلىش. بۇ قەدەمنىڭ رولى بولسا، رەسىمنىڭ باشقا ئۇچۇرلىرىدىن ۋاز كېچىپ، ئاساسلىق قۇرۇلمىسى، سۈزۈكلىكى قاتارلىق مۇھىم ئۇچۇرلىرىنىلا ساقلاپ قىلىپ، ئوخشاش رەسىمنىڭ ئوخشىمىغان ئۆلچەملرىدىكى پەرقنى يوقىتىش.
ئىككىنچى قەدەم: رەڭ ئۈنۈملىرىنى ئاددىيلاشتۇرۇش
كىچىكلىتىلگەندىن كېيىنكى رەسىمنى 64 دەرىجىلىك تۇتۇقلۇققا (灰度)ئايلاندۇرۇش. يەنى،رەسىمدىكى بارلىق پېكىسىل نوقتىلىرىنى جەملىگەندە پەقەت 64 خىل رەڭ بار دېگەن گەپ.
ئۈچىنچى قەدەم: ئوتتۇرىچە قىممەتلىرىنى ھىسابلاش
ھەربىر رەسىمگە قارىتا، 64 پېكىسىل نوقتىسىنىڭ ئوتتۇرىچە تۇتۇقلۇق دەرىجىسىنى ھىسابلاش.
تۆتىنچى قەدەم: پېكىسىل نوقتىلىرىنىڭ تۇتۇقلۇق دەرىجىسىنى سىلىشتۇرۇش
بارلىق پېكىسىل نوقتىلىرىنىڭ تۇتۇقلۇق دەرىجىسىنى يۇقىرىدا تېپىپ چىققان ئوتتۇرىچە تۇتۇقلۇق دەرىجىسى بىلەن سىلىشتۇرۇش. ئوخشاش بولسا نەتىجىدە 1 قايتۇرۇش، يېقىن كەلمىسە نەتىجىدە 0 نى قايتۇرۇش.
بەشىنچى قەدەم: يۇقىرىدىكى سىلىشتۇرۇش نەتىجىسىنى بىرىكتۈرگەندە 64 خانىلىق پۈتۈن سان ھاسىل بولىدۇ. مانا بۇ مەزكۇر رەسىمنىڭ "بارماق ئىزى" ھېسابلىنىدۇ. ئەمەلىيەتتە سىلىشتۇرۇش نەتىجىسىنى بىرىكتۈرۈش تەرتىپى مۇھىم ئەمەس، پەقەت بارلىق رەسىملەرگە ئوخشاش تەرتىپ قوللىنىلسىلا بولىدۇ.
بارماق ئىزىغا ئىرىشكەندىن كېيىن، ئوخشىمىغان رەسىملەرنىڭ 64 خانىلىق بۇ خاسلىقىنىڭ قانچە خانىسى ئوخشاش ئېكەنلىكىنى سىلىشتۇرساقلا بولىدۇ. نەزەرىيە جەھەتتە بۇ ھاممىڭ ئارىلىقىنى (Hamming distance)ھېسابلاشتىن ئىبارەت. ئەگەر 64 خانىسىدىكى ئوخشىمايدىغان سانلار 5 تىن ئىشىپ كەتمىسە، بۇ رەسىمنىڭ ئىزدىمەكچى بولغان رەسىم بىلەن ئوخشاشلىقى بار بولىدۇ. ئەگەر 10 دىن چوڭ بولسا، بۇ رەسىملەر قىلچە ئوخشاشمايدىغان ھېسابلىنىدۇ.
يۇقىرىقىلارنىڭ كود ئارقىلىق تەپسىلىي ئەمەلگە ئاشۇرۇشتا Wote نىڭ Python بىلەن يازغان مونۇ ئالگورىفماسىغا قاراپ باقساق بولىدۇ: بۇ يەر. پەقەت 53 قۇر كودلا خالاس. ئىشلەتكەن ۋاقىتتا بىرىنچى پارامىتىر بولسا ئىزدىمەكچى بولغان ئاساسى رەسىم، ئىككىنچى پارامىتىر بولسا سىلىشتۇرۇپ تاپماقچى بولغان باشقا رەسىملەرنىڭ ئادرىسلىرى. قايتۇرىدىغان نەتىجە بولسا، ئىككى رەسىم ئارلىقىدىكى بارماق ئىز خانىلىرىنىڭ ئوخشىماس خانىلىرىنىڭ سانى.
بۇ ئالگورىفمانىڭ ئالاھىدىلىكى: ئاددىي ھەم تىز. كەمچىلىكى: رەسىمنىڭ مەزمۇنى ئۆزگەرتىلسە ئىزدىيەلمەيدۇ. ئەگەر ئوخشاش رەسىم ئۈستىگە ئوخشىمىغان خەت چۈشۈرۈلگەن بولسا، بۇ ئالگورىفما پەرق ئېتەلمەيدۇ. شۇڭا بۇنىڭ ئەڭ مۇۋاپىق جايى يەنىلا كچىكلەتمە رەسىمگە ئاساسەن ئەسلى رەسىمنى تېپىشتىن ئىبارەت.
ئەمەلىي قوللىنىشتا تېخىمۇ ئىلغار بولغا ۋە ئالگورىفمالىرىنى ئىشلىتىمىز. بۇلار شەكلىگە ئۆزگەرتىش كىرگۈزۈلگەن رەسىملەرنىمۇ تونۇيالايدۇ. پەقەت ئۆزگىرىشى نىسبىتى 25 پىرسەنتتىن ئېشىپ كەتمىسىلا، ئەسلى رەسىمنى تېپىپ چىقالايدۇ. بۇ ئالگورىفمالار گەرچە بىر ئاز مۇرەككەپ بولسىمۇ، بىراق ماھىيەت جەھەتتە يۇقىرىدا تىلغا ئالغان ئالگورىفما بىلەن ئوخشاش. يەنى ئاۋۋال رەسىمنى ھاشى قىممەتتىكى (Hash) ھەرپ زەنجىرىگە ئايلاندۇرۇپ، ئاندىن سىلىشتۇرۇشتىن ئىبارەت
مەزكۇر ماقالە چۈشىنىشلىك ھەم ياخشى يېزىلغانلىقى ئۈچۈن، قىزىققۇچىلارنىڭ پايدىلىنىشىغا ئەسلى مەنبە ئاساسىدا ئۆزلەشتۈرۈلۈپ تەرجىمە قىلىندى.
ئەسلى مەنبە: http://www.ruanyifeng.com/blog/2011/07/principle_of_similar_image_search.html
بۇ تىخنىكىنىڭمۇ ماھىيتىنى بىلىۋالدۇق مانا……
ماھىيىتىنى بىلگەندىكىن C Sharp تا يېزىپ چىقساق بولغىدەك جۇمۇ، شۇنداقراق ئويلاپ قالدىم ئۈزەمچە
ئەمەلىيەتتە ئاۋۇ Python بىلەن يېزىلغان ئالگورىفمانى C# قا ئۆزگەرتىش تامامەن مۇمكىنغۇ دەيمەن!
بۇ يازمىنى ئۆزۈمنىڭ قىلىۋاي. بەك ئېسىل يازما ئىكەن.