def start(update, context):
context.chat_data['board'] = chess.Board()
update.message.reply_photo(photo=get_board(context.chat_data['board']))
def move(update, context):
if not context.args:
update.message.reply_text('Please specify a move!')
return
move = context.args[0]
board = context.chat_data['board']
try:
board.push_san(move)
board_image = get_board(board)
if board_image is not None:
send_image(context.bot, update, board_image)
else:
update.message.reply_text('Error: Failed to parse SVG image')
except ValueError:
update.message.reply_text('Invalid move!')
def get_board(board):
board_string = chess.svg.board(board=board)
board_string = board_string.replace('\n', '')
output = BytesIO()
try:
cairosvg.svg2png(bytestring=board_string, write_to=output)
except ET.ParseError:
print("Error: Failed to parse SVG image")
return None
output.seek(0)
return output.getvalue()
def send_image(bot, update, image):
bio = BytesIO()
bio.name = 'image.png'
try:
svg2png(image, write_to=bio)
except ET.ParseError:
print("Error: Failed to parse SVG image")
update.message.reply_text('Error: Failed to parse SVG image')
return
bio.seek(0)
bot.send_photo(chat_id=update.message.chat_id, photo=bio)
from typing import Any
class MyClass:
def __init__(self, param: str):
self.param = param
def __getattr__(self, attr: str) -> Any:
# Здесь можно создать любой атрибут в зависимости от переданного имени
if attr == 'name':
return 'John Doe'
elif attr == 'age':
return 30
else:
raise AttributeError(f"'{type(self).__name__}' object has no attribute '{attr}'")
import cv2
# загружаем файл видео
cap = cv2.VideoCapture('video.mp4')
# создаем объект HOG для обнаружения людей
hog = cv2.HOGDescriptor()
hog.setSVMDetector(cv2.HOGDescriptor_getDefaultPeopleDetector())
# инициализируем счетчик
count = 0
# начинаем чтение видео кадр за кадром
while True:
ret, frame = cap.read()
if not ret:
break
# обнаруживаем людей на кадре
boxes, weights = hog.detectMultiScale(frame)
# рисуем прямоугольники вокруг обнаруженных людей
for box in boxes:
x, y, w, h = box
cv2.rectangle(frame, (x, y), (x+w, y+h), (0, 255, 0), 2)
# увеличиваем счетчик на количество обнаруженных людей
count += len(boxes)
# выводим количество обнаруженных людей на кадре
cv2.putText(frame, f"Count: {count}", (50, 50), cv2.FONT_HERSHEY_SIMPLEX, 1, (0, 0, 255), 2)
# показываем кадр
cv2.imshow('frame', frame)
# останавливаем цикл, если нажата клавиша "q"
if cv2.waitKey(1) == ord('q'):
break
# освобождаем ресурсы
cap.release()
cv2.destroyAllWindows()