[
  {
    "path": "LICENSE",
    "content": "MIT License\n\nCopyright (c) 2023 Andrej Marinchenko\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n"
  },
  {
    "path": "README.chinese.md",
    "content": "<p>\n  <img  src=\"https://img.shields.io/github/stars/BEPb/image_to_ascii\" />\n  <img src=\"https://img.shields.io/github/contributors/BEPb/image_to_ascii\" />\n  <img src=\"https://img.shields.io/github/last-commit/BEPb/image_to_ascii\" />\n  <img src=\"https://visitor-badge.laobi.icu/badge?page_id=BEPb.image_to_ascii\" />\n  <img src=\"https://img.shields.io/github/languages/count/BEPb/image_to_ascii\" />\n  <img src=\"https://img.shields.io/github/languages/top/BEPb/image_to_ascii\" />\n\n  <img src=\"https://img.shields.io/badge/license-MIT-blue.svg?color=f64152\" />\n  <img  src=\"https://img.shields.io/github/issues/BEPb/image_to_ascii\" />\n  <img  src=\"https://img.shields.io/github/issues-pr/BEPb/image_to_ascii\" />\n</p>\n\n\n# 将图像转换为 .txt 文件\nRead in other languages: [English](README.md), [हिन्दी](README.hindi.md), [Português](README.portuguese.md), [Русский](README.ru.md)\n\n## 怎么运行的？\n\n一切都很简单：你要么下载一个图片文件，要么在运行 python 脚本时指定它的链接，然后\n输出你得到一个文本文件，你可以立即在命令行上查看它的外观\n你转换的结果。\n\n## 准备和使用机器人的程序\n\n* 克隆存储库或从 github 下载存档或在命令行上使用以下命令\n\n   ```commandline\n   $ cmd\n   $ git clone https://github.com/BEPb/image_to_ascii\n   $ cd image_to_ascii\n   ```\n\n### 应用存储库\n* 从文件安装依赖项，为此，在命令行中输入以下代码：\n\n```shell\n$ pip3 install -r requirements.txt\n````\n\n* 程序启动的一般形式：\n\n```shell\n$ python3 img_to_txt_rus.py [file/url] [size]\n```\n\n*参数：\n\n```shell\n[file/url]：本地文件路径或在线图片URL。\n[size]：输出txt图片的字符宽度——整数，size越大图片越清晰。\n```\n\n### 例子\n```shell\n$ python3 img_to_txt.py https://i.postimg.cc/t4Cmn7wC/py.png\n```\n通过执行此命令，您将在当前“文本”文件夹中获得一个名为“out.txt”的文件，您将在控制台中看到该行的输出：\n\n<img src=\"./pictures/py.png\" alt=\"Bot logo\" width=\"300\" height=\"356.5\">\n\n<img src=\"./pictures/png.png\" alt=\"Bot logo\" width=\"600\" height=\"600\">\n\n\n## 视频到文本转换器\n原理类似，只是生成的文本文件不存在。\n\n```commandline\ncd C:\\Users\\root\\PycharmProjects\\image_to_ascii \npython video_to_txt.py animations\\filin.gif 150\n```\n\n<img src=\"./animations/filin.gif\" alt=\"Bot logo\" width=\"800\" height=\"600\">\n\n<img src=\"./animations/gif.gif\" alt=\"Bot logo\" width=\"800\" height=\"600\">\n\n\n\n### License\n[MIT licence](LICENSE)\n"
  },
  {
    "path": "README.hindi.md",
    "content": "<p>\n  <img  src=\"https://img.shields.io/github/stars/BEPb/image_to_ascii\" />\n  <img src=\"https://img.shields.io/github/contributors/BEPb/image_to_ascii\" />\n  <img src=\"https://img.shields.io/github/last-commit/BEPb/image_to_ascii\" />\n  <img src=\"https://visitor-badge.laobi.icu/badge?page_id=BEPb.image_to_ascii\" />\n  <img src=\"https://img.shields.io/github/languages/count/BEPb/image_to_ascii\" />\n  <img src=\"https://img.shields.io/github/languages/top/BEPb/image_to_ascii\" />\n\n  <img src=\"https://img.shields.io/badge/license-MIT-blue.svg?color=f64152\" />\n  <img  src=\"https://img.shields.io/github/issues/BEPb/image_to_ascii\" />\n  <img  src=\"https://img.shields.io/github/issues-pr/BEPb/image_to_ascii\" />\n</p>\n\n\n# एक छवि को एक .txt फ़ाइल में कनवर्ट करना\nRead in other languages: [English](README.md), [Русский](README.ru.md), [中國人](README.chinese.md), [Português](README.portuguese.md)\n\n## यह काम किस प्रकार करता है?\n\nसब कुछ बहुत सरल है: आप या तो चित्र फ़ाइल डाउनलोड करते हैं या पायथन स्क्रिप्ट चलाते समय इसका लिंक निर्दिष्ट करते हैं, और\nआउटपुट आपको एक टेक्स्ट फ़ाइल मिलती है, और आप तुरंत कमांड लाइन पर देख सकते हैं कि यह कैसा दिखेगा\nआपके रूपांतरण का परिणाम।\n\n## बॉट तैयार करने और उसके साथ काम करने की प्रक्रिया\n\n* रिपॉजिटरी को क्लोन करें या जीथब से आर्काइव डाउनलोड करें या कमांड लाइन पर निम्न कमांड का उपयोग करें\n\n   ```commandline\n   $ cmd\n   $ git clone https://github.com/BEPb/image_to_ascii\n   $ cd image_to_ascii\n   ```\n\n### रिपॉजिटरी को लागू करना\n* एक फ़ाइल से निर्भरताएँ स्थापित करें, इसके लिए कमांड लाइन में निम्न कोड दर्ज करें:\n\n```shell\n$ pip3 install -r requirements.txt\n````\n\n* प्रोग्राम लॉन्च का सामान्य रूप:\n\n```shell\n$ python3 img_to_txt_rus.py [file/url] [size]\n```\n\n* तर्क:\n\n```shell\n[file/url]: स्थानीय फ़ाइल पथ या ऑनलाइन छवि URL।\n[size]: वर्णों में आउटपुट txt छवि की चौड़ाई - एक पूर्णांक, आकार जितना बड़ा होगा, चित्र उतना ही स्पष्ट होगा।\n```\n\n### उदाहरण\n```shell\n$ python3 img_to_txt.py https://i.postimg.cc/t4Cmn7wC/py.png\n```\nइस कमांड को क्रियान्वित करने पर, आपको वर्तमान 'टेक्स्ट' फोल्डर में `out.txt` नाम की एक फाइल मिलेगी और आप कंसोल में लाइन का आउटपुट देखेंगे:\n\n\n<img src=\"./pictures/py.png\" alt=\"Bot logo\" width=\"300\" height=\"356.5\">\n\n<img src=\"./pictures/png.png\" alt=\"Bot logo\" width=\"600\" height=\"600\">\n\n\n## वीडियो से टेक्स्ट कन्वर्टर\nसिद्धांत समान है, सिवाय इसके कि परिणामी पाठ फ़ाइल मौजूद नहीं है।\n\n```commandline\ncd C:\\Users\\root\\PycharmProjects\\image_to_ascii \npython video_to_txt.py animations\\filin.gif 150\n```\n\n<img src=\"./animations/filin.gif\" alt=\"Bot logo\" width=\"800\" height=\"600\">\n\n<img src=\"./animations/gif.gif\" alt=\"Bot logo\" width=\"800\" height=\"600\">\n\n\n\n### License\n[MIT licence](LICENSE)\n"
  },
  {
    "path": "README.md",
    "content": "<p>\n  <img  src=\"https://img.shields.io/github/stars/BEPb/image_to_ascii\" />\n  <img src=\"https://img.shields.io/github/contributors/BEPb/image_to_ascii\" />\n  <img src=\"https://img.shields.io/github/last-commit/BEPb/image_to_ascii\" />\n  <img src=\"https://visitor-badge.laobi.icu/badge?page_id=BEPb.image_to_ascii\" />\n  <img src=\"https://img.shields.io/github/languages/count/BEPb/image_to_ascii\" />\n  <img src=\"https://img.shields.io/github/languages/top/BEPb/image_to_ascii\" />\n\n  <img src=\"https://img.shields.io/badge/license-MIT-blue.svg?color=f64152\" />\n  <img  src=\"https://img.shields.io/github/issues/BEPb/image_to_ascii\" />\n  <img  src=\"https://img.shields.io/github/issues-pr/BEPb/image_to_ascii\" />\n</p>\n\n\n# Converting an image to a .txt file\nRead in other languages: [Русский](README.ru.md), [हिन्दी](README.hindi.md), [中國人](README.chinese.md), [Português](README.portuguese.md)\n\n## How it works?\n\nEverything is very simple: you either download a picture file or specify its link when running a python script, and\noutput you get a text file, and you can immediately view on the command line how it will look\nthe result of your conversion.\n\n## Procedure for preparing and working with the bot\n\n* Clone the repository or download the archive from github or using the following commands on the command line\n\n   ```commandline\n   $ cmd\n   $ git clone https://github.com/BEPb/image_to_ascii\n   $ cd image_to_ascii\n   ```\n\n### Applying the repository\n* Install dependencies from a file, for this, enter the following code in the command line：\n\n```shell\n$ pip3 install -r requirements.txt\n````\n\n* general form of program launch：\n\n```shell\n$ python3 img_to_txt_rus.py [file/url] [size]\n```\n\n* arguments:\n\n```shell\n[file/url]: Local file path or online image URL.\n[size]: The width of the output txt image in characters - an integer, The larger the size, the clearer the picture.\n```\n\n### Example\n```shell\n$ python3 img_to_txt.py https://i.postimg.cc/t4Cmn7wC/py.png\n```\nBy executing this command, you will get a file in the current 'texts' folder named `out.txt` and you will see the output of the line in the console:\n\n\n<img src=\"./pictures/py.png\" alt=\"Bot logo\" width=\"300\" height=\"356.5\">\n\n<img src=\"./pictures/png.png\" alt=\"Bot logo\" width=\"600\" height=\"600\">\n\n\n## Video to Text Converter\nThe principle is similar, except that the resulting text file does not exist.\n\n```commandline\ncd C:\\Users\\root\\PycharmProjects\\image_to_ascii \npython video_to_txt.py animations\\filin.gif 150\n```\n\n<img src=\"./animations/filin.gif\" alt=\"Bot logo\" width=\"800\" height=\"600\">\n\n<img src=\"./animations/gif.gif\" alt=\"Bot logo\" width=\"800\" height=\"600\">\n\n\n\n### License\n[MIT licence](LICENSE)\n"
  },
  {
    "path": "README.portuguese.md",
    "content": "<p>\n  <img  src=\"https://img.shields.io/github/stars/BEPb/image_to_ascii\" />\n  <img src=\"https://img.shields.io/github/contributors/BEPb/image_to_ascii\" />\n  <img src=\"https://img.shields.io/github/last-commit/BEPb/image_to_ascii\" />\n  <img src=\"https://visitor-badge.laobi.icu/badge?page_id=BEPb.image_to_ascii\" />\n  <img src=\"https://img.shields.io/github/languages/count/BEPb/image_to_ascii\" />\n  <img src=\"https://img.shields.io/github/languages/top/BEPb/image_to_ascii\" />\n\n  <img src=\"https://img.shields.io/badge/license-MIT-blue.svg?color=f64152\" />\n  <img  src=\"https://img.shields.io/github/issues/BEPb/image_to_ascii\" />\n  <img  src=\"https://img.shields.io/github/issues-pr/BEPb/image_to_ascii\" />\n</p>\n\n\n# Convertendo uma imagem para um arquivo de texto\nLeia em outros idiomas: [Русский](README.ru.md), [हिन्दी](README.hindi.md), [中國人](README.chinese.md), [English](README.md)\n\n## Como funciona\n\nTudo é muito simples: você baixa um arquivo de imagem ou especifica seu link ao executar um script python e\nsaída, você obtém um arquivo de texto e pode visualizar imediatamente na linha de comando como ele ficará\no resultado da sua conversão.\n\n## Processo para preparar e trabalhar com o bot\n\n* Clone o repositório ou baixe o arquivo do GitHub ou use os seguintes comandos na linha de comando\n\n   ```commandline\n   $ cmd\n   $ git clone https://github.com/BEPb/image_to_ascii\n   $ cd image_to_ascii\n   ```\n\n### Aplicando o repositório\n* Instale as dependências de um arquivo, para isto, insira o seguinte código na linha de comando:\n\n```shell\n$ pip3 install -r requirements.txt\n````\n\n* Meio geral de inicializar o programa\n\n```shell\n$ python3 img_to_txt_rus.py [file/url] [size]\n```\n\n* Argumentos:\n\n```shell\n[file/url]: Arquivo local ou uma URL de imagem online.\n[size]: A largura do texto de saída em caracteres - um número inteiro, Quanto maior o tamanho, mais clara a imagem.\n```\n\n### Exemplo\n```shell\n$ python3 img_to_txt.py https://i.postimg.cc/t4Cmn7wC/py.png\n```\n\nAo executar este comando, você receberá um arquivo na atual pasta 'texts' chamado `out.txt` e você verá a saída no console:\n\n\n<img src=\"./pictures/py.png\" alt=\"Bot logo\" width=\"300\" height=\"356.5\">\n\n<img src=\"./pictures/png.png\" alt=\"Bot logo\" width=\"600\" height=\"600\">\n\n\n## Conversor de vído para texto\nO princípio é similar, exceto que o arquivo de texto resultante não existe. \n\n```commandline\ncd C:\\Users\\root\\PycharmProjects\\image_to_ascii \npython video_to_txt.py animations\\filin.gif 150\n```\n\n<img src=\"./animations/filin.gif\" alt=\"Bot logo\" width=\"800\" height=\"600\">\n\n<img src=\"./animations/gif.gif\" alt=\"Bot logo\" width=\"800\" height=\"600\">\n\n\n\n### Licença\n[Licença MIT](LICENSE)"
  },
  {
    "path": "README.ru.md",
    "content": "<p>\n  <img  src=\"https://img.shields.io/github/stars/BEPb/image_to_ascii\" />\n  <img src=\"https://img.shields.io/github/contributors/BEPb/image_to_ascii\" />\n  <img src=\"https://img.shields.io/github/last-commit/BEPb/image_to_ascii\" />\n  <img src=\"https://visitor-badge.laobi.icu/badge?page_id=BEPb.image_to_ascii\" />\n  <img src=\"https://img.shields.io/github/languages/count/BEPb/image_to_ascii\" />\n  <img src=\"https://img.shields.io/github/languages/top/BEPb/image_to_ascii\" />\n\n  <img src=\"https://img.shields.io/badge/license-MIT-blue.svg?color=f64152\" />\n  <img  src=\"https://img.shields.io/github/issues/BEPb/image_to_ascii\" />\n  <img  src=\"https://img.shields.io/github/issues-pr/BEPb/image_to_ascii\" />\n</p>\n\n\n# Преобразования изображения в txt-файл\nЧитать на других языках: [English](README.md), [हिन्दी](README.hindi.md), [中國人](README.chinese.md), [Português](README.portuguese.md)\n\n\n## Как это работает?\n\nВсе очень просто: вы либо скачиваете файл-картинку или указываете ее ссылку при запуске скрипта на питоне, а на \nвыходе получаете текстовый файл, а также сразу сможете просмотреть в командной строке как это будет выглядесть \nрезультат Вашего преобразования.\n\n## Порядок подготовки и работы с ботом\n\n* Клонировать репозиторий либо скачать архив из github или при помощи следующих команд в командной строке\n   ```commandline\n   $ cmd\n   $ git clone https://github.com/BEPb/image_to_ascii\n   $ cd image_to_ascii\n   ```\n\n\n### Применение репозитория\n* Устанавливаем зависимости из файла, для этого в командной строке введите следующий код：\n\n```shell\n$ pip3 install -r requirements.txt\n````\n\n* общая форма запуска программы：\n\n```shell\n$ python3 img_to_txt_rus.py [file/url] [size]\n```\n\n* аргументы:\n\n```shell\n[file/url]: Путь к локальному файлу или URL-адрес онлайн-изображения.\n[size]: Ширина вывода txt изображения в символах - целое число, Чем больше размер, тем четче картинка .\n```\n\n### Пример\n```shell\n$ python3 img_to_txt_rus.py https://i.postimg.cc/t4Cmn7wC/py.png\n```\nВыполнив эту команду, вы получите файл в текущей папке 'texts' с именем `out.txt`, и вы увидите вывод строки в консоли:\n\n<img src=\"./pictures/py.png\" alt=\"Bot logo\" width=\"300\" height=\"356.5\">\n\n<img src=\"./pictures/png.png\" alt=\"Bot logo\" width=\"600\" height=\"600\">\n\n\n## Программа преобразования видео в текст\nПринцип аналагичный, за исключением того, что итогового текстового файла не существует\n\n```commandline\ncd C:\\Users\\root\\PycharmProjects\\image_to_ascii  # переходим в дирректорию со скриптом\npython video_to_txt_rus.py animations\\filin.gif 150  # запускаем скрипт\n```\n\n<img src=\"./animations/filin.gif\" alt=\"Bot logo\" width=\"800\" height=\"600\">\n\n<img src=\"./animations/gif.gif\" alt=\"Bot logo\" width=\"800\" height=\"600\">\n\n\n\n### Лицензия\n[MIT licence](LICENSE)\n"
  },
  {
    "path": "img_to_txt.py",
    "content": "\"\"\"\nPython 3.10 image to text conversion program\nThe image can be downloaded both from a file and from the Internet.\nFile name img_to_txt_rus.py\n\nVersion: 0.1\nAuthor: Andrej Marinchenko\nDate: 2023-02-11\n\"\"\"\n\nfrom PIL import Image\nimport numpy as np\nimport requests\nimport sys\n\ntxt_file = f'texts/out.txt'\n# img_file = ['-', f'pictures/superman.jpg', 90]\nimg_file = ['-', f'pictures/py.jpg', 80]\n\nabc = '##@@MMBB88NNHHOOGGPPEEXXFFVVYY22ZZCC77LLjjll11rrii;;;:::....  '\nl = 256 / len(abc)\n\n\ndef remove_transparency(im, bg_colour=(255, 255, 255)):\n    if im.mode in ('RGBA', 'LA') or (im.mode == 'P' and 'transparency' in im.info):\n        alpha = im.convert('RGBA').split()[-1]\n        bg = Image.new(\"RGBA\", im.size, bg_colour + (255,))\n        bg.paste(im, mask=alpha)\n        return bg\n    else:\n        return im\n\ndef pixel_to_black(fp, weight):\n    try:\n        img = Image.open(fp)\n    except:\n        print('Please enter the correct path or image URL.')\n        return\n    img = remove_transparency(img)\n    img = img.convert(\"L\")\n    im_w, im_h = img.size\n    img = np.array(img)\n    h, w = img.shape\n    weight_w = weight if w >= weight else w\n    weight_h = weight if h >= weight else h\n    weight = weight_w if weight_w < weight_h else weight_h\n    t_w = weight\n    t_h = weight / (im_w / im_h) / 2\n    width_times = int(w / t_w) if int(w / t_w) != 0 else 1\n    high_times = int(h / t_h) if int(h / t_h) != 0 else 1\n    tmp_high = []\n    for high_index in range(int(h / high_times)):\n        tmp_width = []\n        for width_index in range(int(w / width_times)):\n            tmp_block = []\n            for y in range((high_index * high_times), ((high_index + 1) * high_times)):\n                for x in range(width_index * width_times, (width_index + 1) * width_times):\n                    tmp_block.append(img[y, x])\n            avg_tmp_block = sum(tmp_block) / len(tmp_block)\n            tmp_width.append(avg_tmp_block)\n        tmp_high.append(tmp_width)\n    return tmp_high\n\ndef black_to_alphabet(rgb_list):\n    tmp_high = ''\n    for i in rgb_list:\n        tmp_width = ''\n        for ii in i:\n            a = abc[int(ii / l)]\n            tmp_width += a\n        tmp_width += '\\n'\n        tmp_high += tmp_width\n    return tmp_high\n\ndef paint(uri, weight):\n    if uri.startswith('http'):\n        img = get_img(uri)\n    else:\n        img = uri\n    rgb_list = pixel_to_black(img, weight)\n    if not rgb_list:\n        return\n    s = black_to_alphabet(rgb_list)\n    with open(txt_file, 'w', encoding='utf-8') as f:\n        f.write(s)\n    return s\n\ndef get_img(url):\n    response = requests.get(url)\n    if response.status_code == 200:\n        with open(f'pictures/temp.png', 'wb') as f:\n            for chunk in response.iter_content(1024):\n                f.write(chunk)\n            return f'pictures/temp.png'\n\ndef main(args):\n    try:\n        uri = args[1]\n        assert type(uri) == str\n    except:\n        uri = 'https://i.postimg.cc/t4Cmn7wC/py.png'\n    try:\n        weight = int(args[2])\n        assert type(weight) == int\n    except:\n        weight = 80\n    s = paint(uri, weight=weight)\n    if not s:\n        return\n    print(s)\n\nif __name__ == '__main__':\n    main(sys.argv)\n    # main(img_file)"
  },
  {
    "path": "img_to_txt_rus.py",
    "content": "\"\"\"\nPython 3.10 программа преобразования картинки в текст\nКартинку можно загрузить как из файла так и из интернета\nНазвание файла img_to_txt_rus.py\n\nVersion: 0.1\nAuthor: Andrej Marinchenko\nDate: 2023-02-11\n\"\"\"\n\nfrom PIL import Image\nimport numpy as np\nimport requests\nimport sys\n\ntxt_file = f'texts/out.txt'\n# img_file = ['-', f'pictures/superman.jpg', 90]  # указываем адрес файла изображения для обработки и его конечный размер\nimg_file = ['-', f'pictures/py.jpg', 80]  # указываем адрес файла изображения для обработки и его конечный размер\n\nabc = '##@@MMBB88NNHHOOGGPPEEXXFFVVYY22ZZCC77LLjjll11rrii;;;:::....  '\nl = 256 / len(abc)\n\n# функция определяет тип изображения\ndef remove_transparency(im, bg_colour=(255, 255, 255)):\n    # Обрабатывать только в том случае, если изображение имеет прозрачность\n    if im.mode in ('RGBA', 'LA') or (im.mode == 'P' and 'transparency' in im.info):\n\n        # Необходимо преобразовать в RGBA, если формат LA из-за ошибки в PIL\n        alpha = im.convert('RGBA').split()[-1]\n\n        # Создайте новое фоновое изображение нашего матового цвета.\n        # Должен быть RGBA, потому что вставка требует, чтобы оба изображения имели одинаковый формат\n        bg = Image.new(\"RGBA\", im.size, bg_colour + (255,))\n        bg.paste(im, mask=alpha)\n        return bg\n    else:\n        return im\n\n# преобразование картинки\ndef pixel_to_black(fp, weight):\n    try:\n        img = Image.open(fp)\n    except:\n        print('Введите правильный путь или URL изображения, пожалуйста.')\n        return\n    img = remove_transparency(img)\n    img = img.convert(\"L\")\n    im_w, im_h = img.size\n    img = np.array(img)\n    h, w = img.shape\n    # ширина\n    weight_w = weight if w >= weight else w\n    weight_h = weight if h >= weight else h\n    weight = weight_w if weight_w < weight_h else weight_h\n    # Максимальная ширина символа\n    t_w = weight\n    # Максимальная высота символов\n    t_h = weight / (im_w / im_h) / 2\n    width_times = int(w / t_w) if int(w / t_w) != 0 else 1\n    high_times = int(h / t_h) if int(h / t_h) != 0 else 1\n\n    tmp_high = []\n    for high_index in range(int(h / high_times)):\n        tmp_width = []\n        for width_index in range(int(w / width_times)):\n            tmp_block = []\n            for y in range((high_index * high_times), ((high_index + 1) * high_times)):\n                for x in range(width_index * width_times, (width_index + 1) * width_times):\n                    tmp_block.append(img[y, x])\n            avg_tmp_block = sum(tmp_block) / len(tmp_block)\n            tmp_width.append(avg_tmp_block)\n        tmp_high.append(tmp_width)\n    return tmp_high\n\n\ndef black_to_alphabet(rgb_list):\n    tmp_high = ''\n    for i in rgb_list:\n        tmp_width = ''\n        for ii in i:\n            a = abc[int(ii / l)]\n            tmp_width += a\n        tmp_width += '\\n'\n        tmp_high += tmp_width\n    return tmp_high\n\n# функция преобразования изображения в текст\ndef paint(uri, weight):\n    if uri.startswith('http'):  # если указана ссылка в интернете, то скачиваем изображение\n        print('Распознана ссылка')\n        img = get_img(uri)\n    else:  # иначе указана ссылка на локальное изображение (файл)\n        print('Распознан файл')\n        img = uri\n    rgb_list = pixel_to_black(img, weight)\n    if not rgb_list:\n        return\n    s = black_to_alphabet(rgb_list)\n    with open(txt_file, 'w', encoding='utf-8') as f:\n        f.write(s)\n    return s\n\n# функция взятия изображения\ndef get_img(url):\n    print('Загрузка изображения из Интернета, пожалуйста, подождите.')\n    response = requests.get(url)\n    if response.status_code == 200:\n        with open(f'pictures/temp.png', 'wb') as f:\n            for chunk in response.iter_content(1024):\n                f.write(chunk)\n            return f'pictures/temp.png'\n\n'''Главная функция'''\ndef main(args):  # функция принимает аргументы\n    try:\n        print('Ваша ссылка принята')\n        uri = args[1]\n        assert type(uri) == str\n    except:\n        # изображение по умолчанию, в случае если не задано иное\n        print('Вы не указали ссылку на скачивание, по этой причине будет загружено изображение по умолчанию...')\n        uri = 'https://i.postimg.cc/t4Cmn7wC/py.png'\n    try:\n        weight = int(args[2])  # второй аргумент, это ширина изображения текста в символах\n        assert type(weight) == int  # проверяем что заданное число - целое\n    except:\n        weight = 80  # если ширина не задана, то по умолчанию 80 символов\n    s = paint(uri, weight=weight)\n    if not s:\n        return\n    print(s)  # печать в командной строке преобразованного изображения в текст\n\n# проверка на главную программу и запуск главной функции\nif __name__ == '__main__':\n    main(sys.argv)  # запускаем главную функцию с аргументами при запуске программы\n    # main(img_file)  # запускаем главную функцию с картинкой из папки\n"
  },
  {
    "path": "texts/out.txt",
    "content": "                                                                                   \n                                                                                   \n                                                                                   \n                                                                                   \n                                                                                   \n                                                                                   \n                                                                                   \n                                                                                   \n                                                                                   \n                                  .iljjjjjjjjjlr:                                  \n                                rYXXXXXXXXXXXXXXXVj.                               \n                               ZX7:.;YXXXXXXXXXXXXXY.                              \n                              1XXr   ZXXXXXXXXXXXXXXC                              \n                              LXXXY2FXXXXXXXXXXXXXXXY                              \n                              r7777777777YXXXXXXXXXXY                              \n                      ijC2222222222222222VXXXXXXXXXXY :::::..                      \n                    lFXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXY ;iiiiii;.                    \n                   7XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXC iiiiiiiii;                   \n                  :XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXY.:iiiiiiiiii.                  \n                  ;XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXYl.:iiiiiiiiiii:                  \n                  ;XXXXXXXXXXXXXXX27jlllllllll1i:.:iiiiiiiiiiiii:                  \n                  ;XXXXXXXXXXXXYr.::;;;;;;;;;;;iiiiiiiiiiiiiiiii:                  \n                  ;XXXXXXXXXXXl.;iiiiiiiiiiiiiiiiiiiiiiiiiiiiiii:                  \n                  .VXXXXXXXXXL ;iiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii.                  \n                   :YXXXXXXXX::iiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii:                   \n                     rZFXXXXX.:iiiiiiiiiiiiiiiiiiiiiiiiiiiiii:.                    \n                        .:;;; :iiiiiiiiii;..................                       \n                              :iiiiiiiiiiiiiiiiiiiii;                              \n                              :iiiiiiiiiiiiiii:..;ii;                              \n                              .iiiiiiiiiiiiii;    ii:                              \n                               .iiiiiiiiiiiiii;::;i:                               \n                                 .;iiiiiiiiiiiii;:.                                \n                                     .........                                     \n                                                                                   \n                                                                                   \n                                                                                   \n                                                                                   \n                                                                                   \n                                                                                   \n                                                                                   \n                                                                                   \n"
  },
  {
    "path": "video_to_txt.py",
    "content": "\"\"\"\nPython 3.10 программа преобразования видео в текст\nвидео можно загрузить как из файла так и из интернета\nНазвание файла video_to_txt.py\n\nVersion: 0.1\nAuthor: Andrej Marinchenko\nDate: 2023-02-11\n\"\"\"\nimport cv2\nfrom PIL import Image\nimport numpy as np\nimport time\nimport sys\n\nabc = '@MWNHB8$06XFVYZ27>1jli!;:,. '\nl = 256 / len(abc)\n\ndef remove_transparency(im, bg_colour=(255, 255, 255)):\n    if im.mode in ('RGBA', 'LA') or (im.mode == 'P' and 'transparency' in im.info):\n        alpha = im.convert('RGBA').split()[-1]\n        bg = Image.new(\"RGBA\", im.size, bg_colour + (255,))\n        bg.paste(im, mask=alpha)\n        return bg\n\n    else:\n        return im\n\ndef img2pixel(img, charwidth=100):\n    img = img.convert(\"L\")\n    w, h = img.size\n    img = img.resize((charwidth, int(charwidth * (h / w) / 2.4)))\n    data = np.array(img)\n    return data\n\n\ndef pixel2char(data):\n    chars = '\\n\\n'\n    for row in data:\n        for pixel in row:\n            a = abc[int(pixel / l)]\n            chars += a\n        chars += '\\n'\n    return chars + '\\n'\n\n\ndef main(args):\n    start = time.time()\n    if len(args) != 3:\n        return\n    vcap = cv2.VideoCapture(args[1])\n    width = vcap.get(cv2.CAP_PROP_FRAME_WIDTH)  # вещественное число\n    height = vcap.get(cv2.CAP_PROP_FRAME_HEIGHT)  # вещественное число\n    fps = vcap.get(cv2.CAP_PROP_FPS)\n    print(width, height, fps)\n\n    currentframe = 0\n    while (True):\n        t1 = time.time()\n        ret, frame = vcap.read()\n        if ret:\n            pilimg = Image.fromarray(frame)\n            data = img2pixel(pilimg, charwidth=int(args[2]))\n            s = pixel2char(data=data)\n            print(s)\n            currentframe += 1\n        else:\n            break\n\n        time2sleep = (1 / fps) - (time.time() - t1)\n        if time2sleep > 0: time.sleep(time2sleep)\n\n    # Освободите пространство и окна\n    vcap.release()\n    cv2.destroyAllWindows()\n\nif __name__ == '__main__':\n    main(sys.argv)\n"
  },
  {
    "path": "video_to_txt_rus.py",
    "content": "\"\"\"\nPython 3.10 программа преобразования видео в текст\nвидео можно загрузить как из файла так и из интернета\nНазвание файла video_to_txt_rus.py\n\nVersion: 0.1\nAuthor: Andrej Marinchenko\nDate: 2023-02-11\n\"\"\"\nimport cv2\nfrom PIL import Image\nimport numpy as np\nimport time\nimport sys\n\nabc = '@MWNHB8$06XFVYZ27>1jli!;:,. '\nl = 256 / len(abc)\n\n\ndef remove_transparency(im, bg_colour=(255, 255, 255)):\n    if im.mode in ('RGBA', 'LA') or (im.mode == 'P' and 'transparency' in im.info):\n        alpha = im.convert('RGBA').split()[-1]\n        bg = Image.new(\"RGBA\", im.size, bg_colour + (255,))\n        bg.paste(im, mask=alpha)\n        return bg\n\n    else:\n        return im\n\n\ndef img2pixel(img, charwidth=100):\n    img = img.convert(\"L\")\n    w, h = img.size\n    img = img.resize((charwidth, int(charwidth * (h / w) / 2.4)))\n    data = np.array(img)\n    return data\n\n\ndef pixel2char(data):\n    chars = '\\n\\n'\n    for row in data:\n        for pixel in row:\n            a = abc[int(pixel / l)]\n            chars += a\n        chars += '\\n'\n    return chars + '\\n'\n\n\ndef main(args):\n    start = time.time()\n    if len(args) != 3:\n        print(\"Использование: video_to_txt ширина символа видеопути\")\n        return\n\n    # Получите информацию о ширине, высоте и частоте кадров видео\n    vcap = cv2.VideoCapture(args[1])\n    width = vcap.get(cv2.CAP_PROP_FRAME_WIDTH)  # вещественное число\n    height = vcap.get(cv2.CAP_PROP_FRAME_HEIGHT)  # вещественное число\n    fps = vcap.get(cv2.CAP_PROP_FPS)\n    print(width, height, fps)\n\n    # начать цикл по кадрам\n    currentframe = 0\n    while (True):\n        t1 = time.time()\n        ret, frame = vcap.read()\n        if ret:\n            pilimg = Image.fromarray(frame)\n            data = img2pixel(pilimg, charwidth=int(args[2]))\n            s = pixel2char(data=data)\n            print(s)\n            currentframe += 1\n        else:\n            break\n\n        # Время сна составляет одну долю секунды от кадров в секунду минус время, в течение которого этот кадр уже использовался.\n        time2sleep = (1 / fps) - (time.time() - t1)\n        if time2sleep > 0: time.sleep(time2sleep)\n\n    # Освободите пространство и окна\n    vcap.release()\n    cv2.destroyAllWindows()\n    print(\"Прошедшее время:\", time.time() - start)\n\n\nif __name__ == '__main__':\n    main(sys.argv)\n"
  }
]