Forum bloga technologicznego JDtech.pl i użytkowników bezpłatnego dostępu do internetu Aero2

Pełna wersja: OpenCV i dekapcie
Aktualnie przeglądasz uproszczoną wersję forum. Kliknij tutaj, by zobaczyć wersję z pełnym formatowaniem.
Czy ktos próbował napisac program do rozwiązywania kapci?
Tu znalazłem https://github.com/aero2a/kape-
jakies przykłady
To tylko spis kilku kapci zapisany na githubie dla innych do analizy.
Generator samych kodów też kiedyś też znaleźliśmy.
Ale kapeć jest niezłej jakości i nie bardzo da się go tanio rozwiązać, a na pewno nie przez analizę ID i kodów. (to są liczby losowe).
A czy ktoś próbował?
OpenCV ma rozpoznawanie twarzy. Dzieli obraz na maleńkie kawałki (idealne tu właśnie bo to wyjdą zakończenia liter)
Z tego co wiem jest gotowy skrypt do szukania obiektów.
Nauczyć program tych kilkudziesięciu znaków i po problemie. Odczytanie nawet na routerze by poszło. Niestety nauka to chyba duże wyzwanie. Może ktoś ma lepszy komp.

Jeśli jest znany algorytm generowania tych kapci to czy nie dało by się zrobić wyrównanie tego obrazu?
teraz jest porozciągany a nie da się go porozciągac odwrotnie by wyszedł zwykły obraz?
Poczytaj trochę o CAPTCHA - ekipa z Aero2 wybrała całkiem dobry generator. To nie jest trywialna praca. wyprostowanie i segmentacja w takich warunkach często jest bardzo trudne.
alez poczytałem, wyprostowanie nie powinno byc trudne.
jeden obrazek jest wygięty dwoma funkcjami, które są znane. to sinus i cosinus z jakąś wartością.

sumujemy punkty pionowo i poziomo. jesli uzyskamy najwiekszy pik poziomo (kreska) i w miarę odzielone litery (grzebien) pionowo powinno dac się to odczytać. Można nawet metoda prób i błedów. Tylko trzeba napisać to w C . Próbowałem to pisac w skryptowych językach i jest to strasznie długo. Stąd prośba o pomoc w opencv lub innej bibliotece by to wyprostować.

Co więcej. Można by było zapuścić głębokie uczenie i wtedy algorytm sam się znajdzie. Niestety aby to zrobić trzeba mieć duży sprzet. Na prawde duży klaster rzędu kilkunastu komputerów przez tydzień.

P.S. Mam wrażenie , że zamiast zachecac dołujesz by nie napisac jakoś inaczej
Ja po prostu mam doświadczenie programistyczne z obróbki obrazu (praca magisterska), interesowałem się historią CAPTCHA jeszcze przed Aero2. Nie jestem specem od łamania tego, ale rozumiem jak to działa.
Jak dobrze poszukasz, znajdziesz generator używany przez Aero2 (szukałem w 2014 jak to wprowadzili i znalazłem, potem ponownie szukałem i nie udało mi się Smile ale nie miałem tyle czasu.
Sam algorytm przeanalizowałem, a do tego biorę pod uwagę:
- skalę zainteresowania
- potencjalny efekt (zmiana algorytmu)
- ramy czasowe (grudzień 2016)
I słabo to widzę. Choć nie zmienia to faktu, że jak czujesz żyłkę badacza algorytmów CAPTCHA, to chętnie potestuję, może w wolnej chwili (na ile dziecko mi pozwoli) pomogę.

Podpowiem, że problemy są dwa:
- Prostowanie (de facto nie jest to największy problem)
- Segmentacja (czarna linia pociągnięta przez napis ma to uniemożliwiać)

Zabawa w algorytm genetyczny nie bardzo ma sens bez głębszej wiedzy (nie mówię o kosztach wynajęcia klastra, załóżmy, że te kilkaset dolarów mamy i umiemy to użyć):
- Minimalna zmiana w parametrach generowania CAPTCHA i algorytm w ten sposób uzyskany może być do wymiany.
- Nie ma pewności, że w ogóle coś ci się uda stworzyć sensownego w ten sposób.

To co ma większe szanse powodzenia to użycie Captcha Brotherhood lub podobnego systemu. I to działa, sam testowałem.
Jeśli znasz się na obrazach to powiedz mi jak to wyprostować.

jeszcze raz powtarzam, to jest wygiecie o sinus i cosinus razy x,y
jak chcesz znajde jeszcze raz algotyrm w php

Myslisz, ze usluga sie skonczy w 2016?
Może i tak, ale w dwóch wymiarach, co trochę komplikuje sprawę. Jak bym poszukał generatora (jak mówiłem kiedyś go już znalazłem, teraz nie daję rady) i spróbował wykombinować parametry, jakie mu zostały podane.

Nie wiem, ale na razie oficjalnie tak.
Jak to zwykle bywa moje zapiski trzeba bylo odtwarzac z backupu ;-( ale to tak zawsze jak coś się zmienia.
Kod jest w php i jest znany.

http://code.google.com/p/cool-php-captcha
font jest znany bo bardzo stara czcionka. Antykwa http://jmn.pl/en/antykwa-poltawskiego/ w katalogu fonts jest

można zatem wygenerować sobie mnóstwo przykładów pojedyńczych liter.

główny kod to:

protected function WaveImage() {
// X-axis wave generation
$xp = $this->scale*$this->Xperiod*rand(1,3);
$k = rand(0, 100);
for ($i = 0; $i < ($this->width*$this->scale); $i++) {
imagecopy($this->im, $this->im,
$i-1, sin($k+$i/$xp) * ($this->scale*$this->Xamplitude),
$i, 0, 1, $this->height*$this->scale);
}
// Y-axis wave generation
$k = rand(0, 100);
$yp = $this->scale*$this->Yperiod*rand(1,2);
for ($i = 0; $i < ($this->height*$this->scale); $i++) {
imagecopy($this->im, $this->im,
sin($k+$i/$yp) * ($this->scale*$this->Yamplitude), $i-1,
0, $i, $this->width*$this->scale, 1);
}
}

Jak widzisz to losowe liczby od 1 do 2 i proste dwie funkcje.
Nie trzeba idealnie ich znać by rozszyfrowac kapcia. OCR który odpalisz na routerze spokojnie poradzi sobie z drobnymi zmianami. Niestety próbowałem uczyć OpenCV i brakło mi procesora, nauka tesseracta nie powiodła sie. Może źle konfigurowałem
Jeżeli uważasz to za możliwe, to ja bym zaczął od wyprostowania (wyznaczenie współczynników wygięcia), a następnie segmentacji - na litery. Ale nie mam pomysłu, jak się za to zabrać, choć szeryfy pomagają.
(31-08-2016 20:16)jakubd napisał(a): [ -> ]Jeżeli uważasz to za możliwe, to ja bym zaczął od wyprostowania (wyznaczenie współczynników wygięcia), a następnie segmentacji - na litery. Ale nie mam pomysłu, jak się za to zabrać, choć szeryfy pomagają.

Na początek nie wiem jak przeczytać pixel i zobaczyć jaki ma kolor.

Najprostszym sposobem to zsumowanie pixeli po x i po y
dostajemy tablicę z ilością pixeli poziomo i pionowo.
to pozwoli nam ocenić które wygięcie jest lepsze.
przerwy między literami będą widoczne na sumach pionowych

zaś poziomo zobaczymy linię i jeśli dane będą bardziej zwarte.

Teraz pytanie do Ciebie. Pomożesz napisać to w C?
a) obliczyć sumy pikseli (chodzi o to by to liczyc szybko, liczyłem w ruby, ale to wolne jest nie na router)
b) wylosować takie same liczby tylko odwrotnie skierowane i przekształcić obrazek

Oczywiście eksperymentalnie (może sieci neuronowe) trzeba by bylo nauczyć które wygięcie jest lepsze a które gorsze, ale nawet od biedy można po prostu zapuścic ocr i czy lepiej przeczyta (bez błedów) też może być taka funkcją.

to wszystko.
Liczenie sum pikseli nie ma sensu - znaki się nie tylko pokrzywione góra/dół, ale też na boki.
Nie zrobisz łatwo segmentacji - bo po to są linie przechodzące przez znaki.

Losowanie znaków - nie rozumiem po co.

To co trzeba zrobić, to znaleźć argumenty funkcji wykrzywiającej.
(09-09-2016 22:17)jakubd napisał(a): [ -> ]Liczenie sum pikseli nie ma sensu - znaki się nie tylko pokrzywione góra/dół, ale też na boki.
Nie zrobisz łatwo segmentacji - bo po to są linie przechodzące przez znaki.

Rozumiem, ze zakladamy repozytorium i probujemy? Pokaz mi szybkie sumowanie pixeli, a ja Ci pokaze ze to cos daje. To bedzie nasza funkcja wartosciujaca jak dobrze lub jak zle wyprostowalismy obrazek.
(10-09-2016 09:33)mikolaj napisał(a): [ -> ]
(09-09-2016 22:17)jakubd napisał(a): [ -> ]Liczenie sum pikseli nie ma sensu - znaki się nie tylko pokrzywione góra/dół, ale też na boki.
Nie zrobisz łatwo segmentacji - bo po to są linie przechodzące przez znaki.

Rozumiem, ze zakladamy repozytorium i probujemy? Pokaz mi szybkie sumowanie pixeli, a ja Ci pokaze ze to cos daje. To bedzie nasza funkcja wartosciujaca jak dobrze lub jak zle wyprostowalismy obrazek.

rozumiem
Są gotowe procedury do OpenCV, z tego co zobaczyłem - napisanie tego to kilka chwil na głupich forach.
Ja w tej chwili po prostu nie dysponuję czasem na to.
(14-09-2016 21:00)jakubd napisał(a): [ -> ]Są gotowe procedury do OpenCV, z tego co zobaczyłem - napisanie tego to kilka chwil na głupich forach.
Ja w tej chwili po prostu nie dysponuję czasem na to.

myslisz, ze wyzywanie kogoś i mówienie o głupich forach ma sens?
Sorry, zadziałała autokorekta w telefonie. Chodziło o różne fora - na których można znaleźć gotowe recepty na typ;owe zadania w OpenCV.
Przekierowanie