def getMyHand(self): img = self.selectMyHand() gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) thresh = cv2.threshold(gray, 60, 255, cv2.THRESH_BINARY)[1] cnts, hierarchy = cv2.findContours(thresh.copy(), cv2.RETR_LIST, cv2.CHAIN_APPROX_SIMPLE) cnts = contours.sort_contours(cnts, method="left-to-right")[0] locs = [] for c in cnts: peri = cv2.arcLength(c, True) approx = cv2.approxPolyDP(c, 0.02 * peri, True) x, y, w, h = cv2.boundingRect(approx) if 20 <= h < 40: rect = (x, y, w, h) locs.append(rect) cv2.rectangle(thresh, (x, y), (x + w, y + h), (0, 255, 0), 1) cv2.imshow("thresh", thresh) output = [] for (i, (x, y, w, h)) in enumerate(locs): roi = thresh[y:y + h, x:x + w] roi = cv2.resize(roi, (57, 88)) scores = [] for (digit, digitROI) in self.ocrRef.items(): result = cv2.matchTemplate(roi, digitROI, cv2.TM_CCOEFF) (_, score, _, _) = cv2.minMaxLoc(result) scores.append(score) output.append(Card(int(np.argmax(scores)), 0)) return output
def save_card(): if request.method == 'POST': if 'id' in request.form: card = Card.find_by_id(request.form['id']) else: card = Card() card.user = current_user.id card.word = request.form['word'] card.definition = request.form['definition'] card.save() return flask.redirect(url_for('admin_blueprint.card_form', card_id=card.id))
async def mau(websocket, path): # register(websocket) sends user_event() to websocket await register(websocket) try: async for message in websocket: data = json.loads(message) if data["action"] == "create_room": player = Player(data["name"], websocket) room = Room(player) ROOMS.append(room) await notify_users_about_rooms() elif data["action"] == "join_room": player_name = data["player_name"] player = Player(player_name, websocket) LONELY_USERS.remove(player.websocket) room = get_room_by_name(data["room_name"]) await room.add_player(player) await notify_users_about_rooms() elif data["action"] == "start_game": room = get_room_by_name(data["room_name"]) await room.start_round() elif data["action"] == "put_card": player_name = data["player_name"] card = data["card"] room = get_room_by_name(data["room_name"]) player = room.get_player_by_name(player_name) card = Card(card["number"], get_enum_from_suit_type(card["type"])) await room.round.play(player, card) elif data["action"] == "take_card": player_name = data["player_name"] room = get_room_by_name(data["room_name"]) player = room.get_player_by_name(player_name) await room.round.draw(player) else: logging.error("unsupported event: {}", data) finally: logging.info("unregistered"); await unregister(websocket)
def card_form(card_id=None): if card_id is None: card = Card() else: card = Card.find_by_id(card_id) return flask.render_template('admin/card_form.html', card=card)
def index(): user_cards = Card.all_for_current_user(current_user.id) return flask.render_template('admin/card_list.html', cards=user_cards)
def test_create_card(): newCard = Card( word='Banana', definition='Seriously?...its the worlds most popular fruit!') # a new card at 0 should still move to bucket 1 when marked wrong newCard.mark_wrong() assert newCard.bucket == 1 # a card in bucket 1 should not drop below 1 newCard.mark_wrong() assert newCard.bucket == 1 cardAvailable = (datetime.now() + timedelta(seconds=5)).timestamp() assert newCard.available.timestamp() == pytest.approx(cardAvailable) # every wrong answer should count assert newCard.wrong_count == 2 newCard.mark_right() assert newCard.bucket == 2 cardAvailable = (datetime.now() + timedelta(seconds=25)).timestamp() assert newCard.available.timestamp() == pytest.approx(cardAvailable) newCard.mark_right() assert newCard.bucket == 3 cardAvailable = (datetime.now() + timedelta(minutes=2)).timestamp() assert newCard.available.timestamp() == pytest.approx(cardAvailable) newCard.mark_right() assert newCard.bucket == 4 cardAvailable = (datetime.now() + timedelta(minutes=10)).timestamp() assert newCard.available.timestamp() == pytest.approx(cardAvailable) newCard.mark_right() assert newCard.bucket == 5 cardAvailable = (datetime.now() + timedelta(hours=1)).timestamp() assert newCard.available.timestamp() == pytest.approx(cardAvailable) # marking the card right should not add to the wrong count assert newCard.wrong_count == 2 newCard.mark_right() assert newCard.bucket == 6 cardAvailable = (datetime.now() + timedelta(hours=5)).timestamp() assert newCard.available.timestamp() == pytest.approx(cardAvailable) newCard.mark_wrong() assert newCard.bucket == 5 cardAvailable = (datetime.now() + timedelta(hours=1)).timestamp() assert newCard.available.timestamp() == pytest.approx(cardAvailable) assert newCard.wrong_count == 3 newCard.mark_right() assert newCard.bucket == 6 cardAvailable = (datetime.now() + timedelta(hours=5)).timestamp() assert newCard.available.timestamp() == pytest.approx(cardAvailable) newCard.mark_right() assert newCard.bucket == 7 cardAvailable = (datetime.now() + timedelta(days=1)).timestamp() assert newCard.available.timestamp() == pytest.approx(cardAvailable) newCard.mark_right() assert newCard.bucket == 8 cardAvailable = (datetime.now() + timedelta(days=5)).timestamp() assert newCard.available.timestamp() == pytest.approx(cardAvailable) newCard.mark_right() assert newCard.bucket == 9 cardAvailable = (datetime.now() + timedelta(days=25)).timestamp() assert newCard.available.timestamp() == pytest.approx(cardAvailable) newCard.mark_right() assert newCard.bucket == 10 cardAvailable = (datetime.now() + timedelta(days=121)).timestamp() assert newCard.available.timestamp() == pytest.approx(cardAvailable) newCard.mark_right() assert newCard.bucket == 11 daysInOneHundredAndFiftyYears = math.floor(365.4 * 150) cardStillNotAvailable = ( datetime.now() + timedelta(days=daysInOneHundredAndFiftyYears)).timestamp() assert newCard.available.timestamp() > cardStillNotAvailable # a card should never go higher than bucket 11 even if a user manages to mark it # right when its in bucket 11 (should actually never be seen) newCard.mark_right() assert newCard.bucket == 11 newCard.mark_right() newCard.mark_right() newCard.mark_right() newCard.mark_right() newCard.mark_right() assert newCard.bucket == 11
def mark_wrong(card_id=None): if card_id is not None: card = Card.find_by_id(card_id) card.mark_wrong() card.save() return flask.redirect(flask.url_for('userspace_blueprint.index'))
def index(): next_card = Card.get_next(current_user.id) return flask.render_template('cards.html', card=next_card, user=current_user)
def build(self): for suit in [Suits.HEARTS, Suits.SPADES, Suits.DIAMONDS, Suits.CLUBS]: for value in range(1, 14): self.cards.append(Card(value, suit))