हम साइटों की एकल रजिस्ट्री के कैप्चा को "डिजिटाइज़" करते हैं जो लोगों को जानकारी से बचाता है

हाल ही में, एकीकृत राज्य रजिस्टर ऑफ साइट्स का पोर्टल खोला गया था। सब कुछ के अलावा, मुझे एक बहुत कमजोर कैप्चा पसंद आया, और मैंने इसे दूर करने का फैसला किया।

मैं पहले ही ऐसी चीजों से निपट चुका हूं, हालांकि, इस तरह के पैमाने पर नहीं। यदि आप केवल GNU / बैश , इमेजमेगिक और टेसरेक्ट -क्रोक का उपयोग करके 57% की मान्यता दक्षता प्राप्त करने में रुचि रखते हैं, तो बिल्ली में आपका स्वागत है।

निम्नलिखित निर्देशों को आसानी से किसी भी अन्य समान कमजोर कैप्चा के लिए संशोधित किया जा सकता है।

प्रविष्टि


कैप्चा पिक्चर्स की मान्यता को स्वयं दो चरणों में विभाजित किया जा सकता है:


चित्र प्राप्त करना और परिणाम भेजना आसानी से कर्ल (या विग का उपयोग करके किया जाता है, लेकिन मैंने इससे दोस्ती नहीं की)।

छवि की तैयारी


विशेष प्रभाव बनाने के लिए ImageMagick में एक अंतर्निहित Fx भाषा है। चूँकि रजिस्ट्री कैप्चा पर अक्षर हमेशा काले होते हैं, लिपि का सबसे सरल संस्करण जो हर चीज को हटाता है वह काला नहीं होता है:

convert file.png -colorspace cmyk -fx 'k * (k >= 1.0)' file.ppm 


निष्पादन एक सेकंड का दसवां हिस्सा लेता है, जो स्वीकार्य है। लेकिन तस्वीर की गुणवत्ता नहीं है, इसलिए आपको इसके माध्यम से फिर से जाने की आवश्यकता है। आप इस तथ्य पर भरोसा कर सकते हैं कि यदि पत्र को एक लाइन से छुआ गया था, तो इस स्थान पर दो विपरीत पक्षों से एक बार में छायांकित पिक्सेल-पड़ोसी होना चाहिए:

 convert file.ppm -colorspace cmyk -fx 'k || (p[-1].k && p[+1].k) || (p[0,-1].k && p[0,+1].k)' out.ppm 


हम एक और आधे सेकंड के लिए क्या बलिदान कर रहे हैं। जैसा कि बाद में पता चला, इससे सफलता की दर 1% से 22% (100 नियंत्रण चित्रों में) बढ़ जाएगी।

चरित्र पहचान


यह अभी भी आसान है। हम तस्वीर पर जहर का विष डालते हैं, हम फ़ाइल से परिणाम लेते हैं। यदि वांछित है, तो आप इसे अलग भाषा के रूप में कैप्चा फ़ॉन्ट सिखा सकते हैं, लेकिन खेल मोमबत्ती के लायक नहीं है।

  tesseract out.ppm result -psm 8 nobatch digits 2>/dev/null res=$(cat result.txt | sed -e 's/[^0-9]//g') 

क्षेत्र परीक्षण


जैसा कि मैंने ऊपर कहा, इस संयोजन ने 100 परीक्षण छवियों में से 22 को सही उत्तर दिया। लेकिन परीक्षण दिलचस्प नहीं हैं, और मैंने वास्तविक परिस्थितियों में काम की गति की जांच करने का फैसला किया।

मुख्य लिपि
 #!/bin/bash c=$(curl -c cook.txt http://zapret-info.gov.ru/ | iconv -f cp1251 | grep capcha | sed -e 's/"/\n/g' | grep services) url="http://zapret-info.gov.ru$c" r=work01 #get curl -b cook.txt "$url" > "$r.png" #prepare convert $r.png -colorspace cmyk -fx 'k * (k >= 1.0)' $r.png convert $r.png -colorspace cmyk -fx 'k || (p[-1].k && p[+1].k) || (p[0,-1].k && p[0,+1].k)' $r.png #exterminate tesseract $r.png $r -psm 8 nobatch digits res=`cat $r.txt | sed -e 's/[^0-9]//g'` #check if [ "$(echo $res | wc -c)" -ne 9 ]; then echo fail && exit fi #send code=$(echo $c | sed -e 's/[^0-9]//g') fin=`curl -b cook.txt -d "act=search&secretcodeId=$code&searchstring=ya.ru&secretcodestatus=$res" 'http://zapret-info.gov.ru/'| iconv -f cp1251` if echo "$fin" | grep -q ' '; then echo succ else echo tesfail fi rm $r.png $r.txt cook.txt 
आवरण
 #!/bin/bash score=0 all=0 while [ "$score" -lt 41 ]; do r=`bash per.sh 2>/dev/null` [ "$r" = 'succ' ] && let score++ let all++ echo "$score/$all; $r" done 

लॉन्च लाइन
 time bash tt.sh | tee -a log.txt 


परिणाम, सांख्यिकी


स्क्रिप्ट का उपरोक्त सेट रजिस्ट्री में ya.ru की उपस्थिति के लिए 41 सफल जाँच करता है। इस पर कुछ आँकड़े:

  : 41  : 218  : 5  4  (5m4.178s) : 19%      ,     : 57%     : 33%     : 12% 


सुधार करने के तरीके

Source: https://habr.com/ru/post/In157145/


All Articles