예제 #1
0
            public List <String> process(Image image, int id, Rectangle rect, TableIdentifier parent, bool isMySeat)
            {
                // colors
                Image reduced  = reducer.reduceColors(image);
                Image inverted = inverter.invert(reduced);
                Image replaced = replacer.replace(inverted);

                // text
                List <String> textLines = identifyLines(replaced, rect, parent);

                // if highlighted
                if (isMySeat && textLines.Count == 0)
                {
                    // smaller rect
                    Image smallerImage = reduced.crop(15, reduced.width - 15, 1, reduced.height - 1);

                    // not inverted
                    Image notInverted = replacer.replace(smallerImage);
                    textLines = identifyLines(notInverted, rect, parent);
                }

                return(textLines);
            }
예제 #2
0
            public TableControl process(Image image, int position, Rectangle rect, TableIdentifier parent)
            {
                // crop
                image = crop(image, rect);

                // colors
                Image reduced  = reducer.reduceColors(image);
                Image inverted = inverter.invert(reduced);
                Image replaced = replacer.replace(inverted);

                // image
                parent.renderImage(inker.replace(replaced), rect);

                // partition
                List <List <Image> > lines = HorizontalPartitioner.partition(replaced);

                // ## action ##
                TableControl.ControlType type = TableControl.ControlType.NONE;
                if (lines.Count >= 1)
                {
                    // read chars
                    String actionText = "";
                    foreach (Image chars in lines[0])
                    {
                        List <Image> combos = CharDecomposer.decompose(chars, 0);
                        foreach (Image chr in combos)
                        {
                            Image character = ImageCropper.crop(chr);
                            actionText += identifyChars(character);
                        }
                    }
                    if (actionText == "Fold")
                    {
                        type = TableControl.ControlType.FOLD;
                    }
                    else if (actionText == "Check")
                    {
                        type = TableControl.ControlType.CHECK;
                    }
                    else if (actionText.StartsWith("Cal"))
                    {
                        type = TableControl.ControlType.CALL;
                    }
                    else if (actionText == "Bet")
                    {
                        type = TableControl.ControlType.BET;
                    }
                    else if (actionText.StartsWith("Raise"))
                    {
                        type = TableControl.ControlType.RAISE;
                    }
                    else if (actionText.StartsWith("Post"))
                    {
                        type = TableControl.ControlType.POST_BLIND;
                    }
                }

                // ## amount ##
                double amount = 0.0;

                if (lines.Count >= 2)
                {
                    // read chars
                    String amountText = "";
                    foreach (Image chars in lines[1])
                    {
                        List <Image> combos = CharDecomposer.decompose(chars, 0);
                        foreach (Image chr in combos)
                        {
                            Image character = ImageCropper.crop(chr);
                            amountText += identifyChars(character);
                        }
                    }

                    // format
                    amountText = amountText.Replace("$", "").Replace("?", "").Trim();

                    // money
                    amount = TextTools.ParseDouble(amountText);
                }


                return(new TableControl(type, position, amount));
            }
예제 #3
0
            public double process(Image image, Rectangle rect, TableIdentifier parent)
            {
                // colors
                Image reduced  = reducer.reduceColors(image);
                Image inverted = inverter.invert(reduced);
                Image replaced = replacer.replace(inverted);

                // image
                parent.renderImage(inker.replace(replaced), rect);

                // partition
                List <List <Image> > lines = HorizontalPartitioner.partition(replaced);

                if (lines.Count == 0)
                {
                    return(Player.NO_BET);
                }

                // chars
                String textLine = "";

                foreach (Image chars in lines[0])
                {
                    List <Image> combos = CharDecomposer.decompose(chars);
                    foreach (Image chr in combos)
                    {
                        Image character = ImageCropper.crop(chr);
                        textLine += identifyChars(character);
                    }
                }

                // check for digit
                if (!TextTools.ContainsDigit(textLine))
                {
                    return(Player.NO_BET);
                }

                // sanity check
                if (!textLine.Contains("$"))
                {
                    throw new ArgumentException("bet text has no dollar sign");
                }

                // replace all non-numeric chars
                textLine = textLine.Trim();
                string numericTextLine = textLine;

                foreach (char chr in textLine)
                {
                    if (!TextTools.IsNumeric(chr) && !TextTools.IsPoint(chr))
                    {
                        numericTextLine = numericTextLine.Replace(chr.ToString(), "");
                    }
                }


                // sanity check (sometimes some pixels are identifier as '.')
                if (numericTextLine.StartsWith("."))
                {
                    numericTextLine = numericTextLine.Substring(1);
                }

                // money
                return(TextTools.ParseDouble(numericTextLine));
            }
예제 #4
0
        public Image next()
        {
            Image image = iterator.next();

            return(inverter.invert(image));;
        }