Jak odczytać cyfry z obrazka?

0

dvdvdvd.png

Witam, co nalezy użyć by odczytać z tego obrazka te cyfry ?
OCR? openCV ?

8

Captcha jest po to żeby rozwiązywali ja ludzie.

1

Jeśli znasz konkretną czcionkę to możesz wyszukiwać wzorce w openCV. Ja kiedyś znalazłem stronę, która tekst z obrazka miała zapisany w adresie do obrazka (w base64), wszystko zależy od kontekstu i chęci, generalnie polecam znaleźć sobie ciekawsze hobby.

3

Captcha przypomina tę na jednym popularnym forum warezowym. Nie dość, że pytający i tak pobiera coś za free, to jeszcze musi koniecznie oszukiwać na captchy? Logika gimbusów.

0

@olesio
to nie ma sluzyc do pobierania plikow, to ma bardziej charytatywny cel :D

chętnie __**zapłace **__komuś za napisanie kodu który rozpozna cyfry z takiego obrazka

2

Nie musisz płacić, dam Ci za darmo: 5 6 1 7 8

1

Well, po to twórca systemu wprowadził takie zabezpieczenia dostępu, żeby ludzie nie używali botów/skryptów i prawdopodobnie ma w regulaminie, że jest to nielegalne. Więc sory, ale nie.

3

Pracowałem kiedyś z takim zewnętrznym systemem rozpoznawania captchy. Wysyłało się obrazek restem do serwera w Indiach i po kilku sekundach przychodziła zwrotka plain textem. Wysoka skuteczność :).

0

zamów przepisywanie captchy u chińczyków
za grosza przepiszą Ci okolo 5 kodów - nie jest to drogie

0

udalo mi sie napisac taki kod, ale tu jeszcze daleka droga i wgl zagmatwany ten kod...
na razie rozpoznaje 1 litere...

moze ktoś coś doradzi ? :D

Imports System.Runtime.InteropServices
Imports System.Drawing.Imaging
Public Class Form1
    Dim bm As New Bitmap(100, 20, Imaging.PixelFormat.Format24bppRgb)
    Dim str4 As String = "QWERTYUIOPASDFGHJKLZXCVBNM"


    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
        Dim g As Graphics = Graphics.FromImage(bm)
        g.DrawString("T", New Font("Arial", 14), Brushes.White, 0, 0)
        PictureBox1.Image = bm
        g.Dispose()
        ' bm.Save("./bmp")
        ' bm = New Bitmap("./bmp")
        Dim clr(bm.Width - 1, bm.Height - 1) As Color
        For i = 0 To bm.Width - 1
            For j = 0 To bm.Height - 1
                clr(i, j) = bm.GetPixel(i, j)
            Next
        Next

        ' PictureBox1.Image = tmp3(1)

        Dim tmp As String = ""
        For j = 0 To bm.Height - 1
            Dim tmp2 As String = ""
            For i = 0 To bm.Width - 1
                If clr(i, j).R = 255 AndAlso clr(i, j).G = 255 AndAlso clr(i, j).B = 255 Then
                    tmp2 += "x"
                Else
                    tmp2 += " "
                End If
            Next
            If Trim(tmp2) <> "" Then
                tmp += Trim(tmp2) + vbCrLf
            End If
        Next
        TextBox1.Text = Trim(tmp.Remove(tmp.Length - 2, 2))


        For Each str5 In str4.ToCharArray
            Dim Bitm As New Bitmap(20, 20)
            Dim g3 As Graphics = Graphics.FromImage(Bitm)
            g3.DrawString(CStr(str5), New Font("Arial", 14), Brushes.White, 0, 0)
            ' PictureBox1.Image = bm
            g3.Dispose()
            Dim tmp6 As String = ""
            For j = 0 To 19
                Dim tmp2 As String = ""
                For i = 0 To 19
                    If Bitm.GetPixel(i, j).R = 255 AndAlso Bitm.GetPixel(i, j).G = 255 AndAlso Bitm.GetPixel(i, j).B = 255 Then
                        tmp2 += "x"
                    Else
                        tmp2 += " "
                    End If
                Next
                If Trim(tmp2) <> "" Then
                    tmp6 += Trim(tmp2) + vbCrLf
                End If
            Next
            Try
                Dim a() As String = Split(TextBox1.Text, vbCrLf)
                Dim b() As String = Split(Trim(tmp6.Remove(tmp.Length - 2, 2)), vbCrLf)
                If a(0).StartsWith(b(0)) AndAlso a.Last.StartsWith(b.Last) AndAlso a.Count = b.Count AndAlso a(Int(a.Count / 2)).StartsWith(b(Int(b.Count / 2))) Then
                    MsgBox(str5)
                End If
            Catch
            End Try
        Next
    End Sub

    Private Sub PictureBox1_MouseMove(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles PictureBox1.MouseMove
        Try
            Me.Text = bm.GetPixel(e.X, e.Y).ToString
        Catch
        End Try
    End Sub
End Class
2

moze ktoś coś doradzi ?

Użyj sieci neuronowych?

0

a w jaki sposob mozna chociazby oczyscic obraz z tych linii ?

@kAzek

0

Można oczyścić obrazek z linii, wystarczy, że twój program będzie rozpoznawał, że to linia i zamieniał je na kolor tła

0

Obrazek z lini można dość łatwo oczyścić algorytmem erozji z przetwarzania obrazów. Cyfry też trochę na tym ucierpią, ale raczej nie na tyle żeby był problem z ich odczytaniem prez ocr.

0

ten przyklad kodu captcha wydaje sie prosty do zlamania, ale moze mi sie tylko wydaje. Wrzuc wiecej zdjec

1

autor captchy chyba dla ułatwienia zrobił każdą cyferkę w innym kolorze
wystarczy że przeanalizujesz obraz znajdując kolory najczęściej występujące i tylko te zostawisz i już masz same cyfry
potem wystarczy że rozdzielisz obraz po kolorze i przytniesz go
na koniec wystarczy porównać otrzymane obrazki (wyseparowane cyfry) ze wzorcami przyjmując jakiś margines błędu

ogólnie łatwe do zrobienia i nie trzeba żadnych sieci neuronowych - za 200 zł mogę Ci napisać

0

@mca64
kjkj.png

fsadsafdfdsa napisał(a):

autor captchy chyba dla ułatwienia zrobił każdą cyferkę w innym kolorze
wystarczy że przeanalizujesz obraz znajdując kolory najczęściej występujące i tylko te zostawisz i już masz same cyfry
potem wystarczy że rozdzielisz obraz po kolorze i przytniesz go
na koniec wystarczy porównać otrzymane obrazki (wyseparowane cyfry) ze wzorcami przyjmując jakiś margines błędu

ogólnie łatwe do zrobienia i nie trzeba żadnych sieci neuronowych - za 200 zł mogę Ci napisać

podaj do siebie kontakt e-mail / gg / skype

1 użytkowników online, w tym zalogowanych: 0, gości: 1