1. C# / Говнокод #17822

    +354

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    14. 14
    15. 15
    16. 16
    17. 17
    18. 18
    19. 19
    20. 20
    21. 21
    22. 22
    23. 23
    24. 24
    25. 25
    26. 26
    27. 27
    28. 28
    29. 29
    30. 30
    31. 31
    32. 32
    33. 33
    34. 34
    35. 35
    36. 36
    37. 37
    38. 38
    39. 39
    40. 40
    41. 41
    42. 42
    43. 43
    44. 44
    45. 45
    46. 46
    47. 47
    48. 48
    49. 49
    50. 50
    51. 51
    52. 52
    53. 53
    54. 54
    55. 55
    56. 56
    57. 57
    58. 58
    59. 59
    60. 60
    61. 61
    62. 62
    63. 63
    64. 64
    65. 65
    66. 66
    67. 67
    68. 68
    69. 69
    70. 70
    71. 71
    72. 72
    73. 73
    74. 74
    75. 75
    76. 76
    77. 77
    78. 78
    79. 79
    80. 80
    81. 81
    82. 82
    83. 83
    84. 84
    85. 85
    86. 86
    87. 87
    88. 88
    89. 89
    private ChessField Recognize()
            {
                var output = new ChessField();
                for (int x = 0; x < 8; x++)
                {
                    for (int y = 0; y < 8; y++)
                    {
                        var xs = x*50;
                        var ys = y*50;
    
                        if (IsNeutral(bitmap.GetPixel(xs + 25, ys + 33)) && IsNeutral(bitmap.GetPixel(xs + 8, ys + 40)))
                        {
                            output.figures[y,x].kindOfFigure = Figure.KindOfFigure.Empty;
                        }
                        else
                        {
                            if ((IsWhite(bitmap.GetPixel(xs + 25, ys + 34)) ||
                                IsWhite(bitmap.GetPixel(xs + 30, ys + 25))) && !IsBlack(bitmap.GetPixel(xs + 9, ys + 42)))
                            {
                                output.figures[y, x].color = Figure.Color.White;
                                //white rec
    
                                
                                if (IsBlack(bitmap.GetPixel(xs + 25, ys + 7)))
                                {
                                    output.figures[y, x].kindOfFigure = Figure.KindOfFigure.King;
                                    continue;
                                }
                                if (!IsWhite(bitmap.GetPixel(xs + 25, ys + 32)))
                                {
                                    output.figures[y, x].kindOfFigure = Figure.KindOfFigure.Queen;
                                    continue;
                                }
                                if (IsBlack(bitmap.GetPixel(xs + 25, ys + 22)))
                                {
                                    output.figures[y, x].kindOfFigure = Figure.KindOfFigure.Bishop;
                                    continue;
                                }
                                if (IsBlack(bitmap.GetPixel(xs + 25, ys + 27)))
                                {
                                    output.figures[y, x].kindOfFigure = Figure.KindOfFigure.Knight;
                                    continue;
                                }
                                if (IsWhite(bitmap.GetPixel(xs + 15, ys + 15)))
                                {
                                    output.figures[y, x].kindOfFigure = Figure.KindOfFigure.Rook;
                                    continue;
                                }
                                output.figures[y, x].kindOfFigure = Figure.KindOfFigure.Pawn;
    
                            }
                            else
                            {
                                output.figures[y, x].color = Figure.Color.Black;
                                //black rec
                                if (!IsBlack(bitmap.GetPixel(xs + 25, ys + 25)))
                                {
                                    output.figures[y, x].kindOfFigure = Figure.KindOfFigure.Bishop;
                                    continue;
                                }
                                if (!IsBlack(bitmap.GetPixel(xs + 25, ys + 28))||
                                    !IsBlack(bitmap.GetPixel(xs + 25, ys + 29)))
                                {
                                    output.figures[y, x].kindOfFigure = Figure.KindOfFigure.Knight;
                                    continue;
                                }
                                if (!IsBlack(bitmap.GetPixel(xs + 25, ys + 36)))
                                {
                                    output.figures[y, x].kindOfFigure = Figure.KindOfFigure.Rook;
                                    continue;
                                }
                                if (!IsBlack(bitmap.GetPixel(xs + 25, ys + 31)))
                                {
                                    output.figures[y, x].kindOfFigure = Figure.KindOfFigure.King;
                                    continue;
                                }
                                if (!IsBlack(bitmap.GetPixel(xs + 25, ys + 33)))
                                {
                                    output.figures[y, x].kindOfFigure = Figure.KindOfFigure.Queen;
                                    continue;
                                }
                                output.figures[y, x].kindOfFigure = Figure.KindOfFigure.Pawn;
                            }
                        }
    
                    }
                }
                return output;
            }

    4 часа ночи, вино, кофе, чужой курсач, распознание шахматных фигур со скриншота типа этого

    http://download.hdd.tomsk.ru/preview/xjntlwtz.jpg

    естесно поле уже вырезано и поджато под 400 на 400 пикселей

    Запостил: kegdan, 20 Марта 2015

    Комментарии (10) RSS

    • Ибо нех писать код в 4 ночи.
      Ответить
      • у нас почти шесть, и мне часов до десяти тут сидеть
        http://www.youtube.com/watch?v=0WiIr8RgwjA
        Ответить
    • > распознание шахматных фигур
      По уникальным пикселям что ли? Несерьезно как-то... Я по началу думал, что оно по криво повёрнутой фотке с говномобилки распознает...
      Ответить
      • Зато быстро и работает. И намертво прибито к набору фигур. В общем то в этом и говно.

        Научник велел юзать opencv, собственно пока человек пишущий курсач разобрался "что скачать - куда воткнуть что бы с жабой было хорошо" я уже все распознал

        следущий шаг - найти есть ли мат
        Ответить
        • > юзать opencv
          Ну да. Это интересней будет. Вообще, в идеале, распознать бы реальную доску с камеры...

          > найти есть ли мат
          1) Распознай текст
          2) Циклом или регулярочкой найди всякие "хуй", "пизда" и прочее
          Ответить
          • >>Циклом или регулярочкой найди всякие "хуй", "пизда" и прочее

            ага, работа работ. Сплошные переборы

            Но для курсача сойдет.
            Ответить
          • >2) Циклом или регулярочкой найди всякие "хуй", "пизда"
            ..."путин"
            Ответить
          • >>Вообще, в идеале, распознать бы реальную доску с камеры...

            Курсач 3 курса. Там с рисунка распознать - и то круто. На самом деле это я из проги нарезал, в оригинальной задаче было что то типа: есть пешки, король унд ферзь и на картине не стилизованные фигуры, а просто конруты, залитые белым или черным и мат считается даже если можно закрыться или срубить шахующую фигуру

            Но вроде как научник решил, что это слишком просто и усложнил задачу (вроде как все фигуры, остальное хз)

            Самое интересно научник преподает компграф, и основная часть курсача должна быть именно по распознанию.
            Ответить
    • >4 часа ночи,
      >вино, кофе,
      А вы батенька гурман.

      >распознание шахматных фигур
      "- А почему от тебя водкой пахнет?
      - А чем же от меня должно пахнуть? Шахматами?" (с)
      Ответить

    Добавить комментарий