如何在不保存文件的情况下从 Telegram 获取照片文件的字节数?

How to get the bytes of a photo file from Telegram without saving the file?

提问人:Jun_Pegas 提问时间:10/31/2023 最后编辑:CallMeStagJun_Pegas 更新时间:10/31/2023 访问量:58

问:

我正在开发一个电报机器人,它可以接收带有条形码的照片。 我通过 Telebot 模块与 Telegram API 交互 对照片进行处理,识别条形码并将其存储在数据库中。 卡在一个地方。 电报中的照片以字节格式下载。 这张照片可以保存为png格式,然后使用opencv模块由条形码处理和识别。 但是 openCV 模块已经可以与 DOWNLOADED 映像一起使用。 如何在不保存图像的情况下将字节数据类型传递给 openCV 模块?

我将字节码格式化为一个 numpy 数组。 但是 opencv 无法看到和识别条形码。 我保存了图像。然后我通过openCV打开它,条形码被识别出来。 但是我想在不保存的情况下传输图像。

your text

import telebot as tb
from config import token
import scanner
import cv2
import numpy as np
from pyzbar.pyzbar import decode
import base64
import PIL.Image as Image
import io


bot = tb.TeleBot(token)
bot.set_my_commands([
    tb.types.BotCommand("/start", "Start")])


@bot.message_handler(commands=['start'])
def start_bot(message):
    bot.send_message(message.chat.id, 'Start Bot')

@bot.message_handler(func=lambda m: True, content_types=['photo'])
def get_broadcast_picture(message):
    file_path = bot.get_file(message.photo[1].file_id).file_path
    file = bot.download_file(file_path)
    result_code = scanner_bar_cv2(file)
    bot.send_message(message.chat.id, result_code)

def scanner_bar_cv2(name_file: bytes):
    nparr = np.fromstring(name_file, np.uint8)
    r = cv2.imdecode(nparr, cv2.IMREAD_UNCHANGED)
    # img = cv2.imread(path)
    bd = cv2.barcode.BarcodeDetector()
    img = bd.detectAndDecode(r)



if __name__ == "__main__":
    bot.polling(non_stop=True, timeout=123)
python 码扫描器 py-telegram-bot-api

评论

0赞 Christoph Rackwitz 10/31/2023
“name_file”,这是文件的名称,还是文件的实际内容?-- 我在这里是因为你标记了 opencv。不要指望我知道这个电报的东西。你的问题是理解电报 API,所以这真的不是 opencv 问题。
0赞 Jun_Pegas 10/31/2023
name_file是内容,字节。我的问题是如何在 openCV 中发送带有电报图像的字节。
0赞 Christoph Rackwitz 10/31/2023
你已经知道了。将 A 变成 numpy 数组,然后使用 .那不是你的问题。我不会进一步回应。这个电报的东西对我不感兴趣。bytesimdecode()
0赞 BlackJack 11/11/2023
和 调用之间有一个明显的区别:flags 参数。你不给它,根据文档,它使用另一个默认值,而不是你给的显式默认值。imdecode()imread()imread()imdecode()

答: 暂无答案