LINUX.ORG.RU

Бот для телеграмм на питон(получение картинки с веб камеры)

 , ,


0

1

День добрый, на балконе лежит raspbery которая работает в качестве моста между ethernet и wifi, решил нагрузить её полезным функционалом. Хочу чтобы по запросу бот в телеграмм присылал фото с веб камеры(камера смотрит на дорогу и видно пробки полезно когда едешь домой и планируешь маршрут). Нашел на гитхабе пример (https://github.com/ericho/robotina). Собственно сам я в Python 0. Поэтому прошу помощи.

Код работает фото отсылает НО, видимо настройки с которыми делается фото не оптимальные, вечером картинка приходит нормальная, видно дорогу. а днем когда света больше картинка полностью засвеченная. Вопросов два 1. Как сделать авторизацию бота (добавить список пользователей которым можно пользоваться ботом) желательно отдельным файлом в котором прописать id пользователей. 2. Основная задача это как получать нормальную не засвеченную картинку. как то передавать параметры может яркость контрастность. Еще раз повторюсь в питон 0, если не затруднит поподробнее и попроще. В дальнейшем конечно хотелось бы функционал расширить, например передавать температуру в помещении, или например не фото а видео присылать, ну это уже мечты.

Может у кого то есть готовые наработки и он поделится, могу заплатить немного если нужно? В общем приму любую помощь.

фото днем и вечером https://itmages.ru/image/view/5711697/59f55459 https://itmages.ru/image/view/5711696/406cf949

  GNU nano 2.2.6                                  Файл: robotina.py                                                                         
""" A simple Telegram bot to get photos from a camera """
import cv2
import telepot
import time
TOKEN = "*****:********"
PHOTO = 'test.png'
CAM_PORT = 0
bot = telepot.Bot(TOKEN)
#def help_cmd(bot, update):
 #   text = ('/start command activates a motion capture mode.\n'
#            '/stop  command does the opposite.\n'
#            '/shot is used to get an actual snapshot.')
 #   bot.sendMessage(chat_id=update.message.chat_id, text=text)
#$config = {
#       cv2.CV_CAP_PROP_BRIGHTNESS: 50,
#       camera.CV_CAP_PROP_CONTRAST: 50,
#       camera.CV_CAP_PROP_SATURATION: 50,
#}
#for param, value in config.iteritems():
#       cv2.SetCaptureProperty(capture, param, value)
#
#
def take_photo():
    camera = cv2.VideoCapture(CAM_PORT)
#    camera.set(16,90)
    # Wait some time to get ligth in the camera
    time.sleep(1)
    rc, image = camera.read()
    if rc:
        cv2.imwrite(PHOTO, image)
    del(camera)
    return rc
def send_photo(chat_id, photo_path, caption):
    with open(photo_path, 'rb') as photo:
        bot.sendPhoto(chat_id, photo, caption)
def handle_messages(msg):
    """ The entry point to the message reception """
    content_type, chat_type, chat_id = telepot.glance(msg)
    print(content_type, chat_type, chat_id)
    if content_type == 'text':
        text = msg['text']
        if text == '/getphoto':
            if take_photo():
                send_photo(chat_id, PHOTO, 'This is a test caption')
            else:
                bot.SendMessage(chat_id, 'A problem occurred taking the photo')
        else:
            #error_msg = "No se de que me hablas!"
            error_msg = "I don't know what are you talking about!"
            bot.sendMessage(chat_id, error_msg)
bot.message_loop(handle_messages)
print('Listen messages...')
while True:
    time.sleep(5)
 

А почему бы тебе просто не пробросить камеру в инет через тот же motion . Будешь наблюдать хоть в риалтайме.

Siado ★★★★★ ()

А если motion не вариант - то welcome в Job :).

ei-grad ★★★★★ ()
Ответ на: комментарий от Siado

Реализацию с motion , я такое делал раньше. Но во первых избыточно для моих целей, да ресурсов пи маловато, во вторых в прошлый раз у меня вебка сдохла полагаю что от того что была включена 24/7.

Timuridze ()
Ответ на: комментарий от Timuridze

Тогда тут варианта два. Либо разобраться с питоновой библиотекой, которая дает тебе доступ к камере - попробовать потыкать параметры. Да и вообще разобраться в чем причина засветки - в библиотеке и параметрах, или в самой вебкамере.

Либо немножко хайпанутькостыльнуть и воспользоваться софтом навроде fswebcam через os.call() или subprocess для получения изображения

Siado ★★★★★ ()

если проблема с самой камерой, то можно просто делать постобработку снимка, дергая тотже imagemagik с каким нить фильтром типа «автокоррекция контрастности».

genryRar ★★ ()
Ответ на: комментарий от genryRar

Я думаю что века не успевает установить режим сьемки подобрать параметры, fswebcam пробовал, скорее всего на этом варианте остановлюсь.

Timuridze ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.