├── LICENSE
├── README.chinese.md
├── README.hindi.md
├── README.md
├── README.portuguese.md
├── README.ru.md
├── animations
├── filin.gif
└── gif.gif
├── img_to_txt.py
├── img_to_txt_rus.py
├── pictures
├── png.png
├── py.png
├── superman.jpg
└── temp.png
├── requirements.txt
├── texts
└── out.txt
├── video_to_txt.py
└── video_to_txt_rus.py
/LICENSE:
--------------------------------------------------------------------------------
1 | MIT License
2 |
3 | Copyright (c) 2023 Andrej Marinchenko
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy
6 | of this software and associated documentation files (the "Software"), to deal
7 | in the Software without restriction, including without limitation the rights
8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 | copies of the Software, and to permit persons to whom the Software is
10 | furnished to do so, subject to the following conditions:
11 |
12 | The above copyright notice and this permission notice shall be included in all
13 | copies or substantial portions of the Software.
14 |
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21 | SOFTWARE.
22 |
--------------------------------------------------------------------------------
/README.chinese.md:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 | # 将图像转换为 .txt 文件
16 | Read in other languages: [English](README.md), [हिन्दी](README.hindi.md), [Português](README.portuguese.md), [Русский](README.ru.md)
17 |
18 | ## 怎么运行的?
19 |
20 | 一切都很简单:你要么下载一个图片文件,要么在运行 python 脚本时指定它的链接,然后
21 | 输出你得到一个文本文件,你可以立即在命令行上查看它的外观
22 | 你转换的结果。
23 |
24 | ## 准备和使用机器人的程序
25 |
26 | * 克隆存储库或从 github 下载存档或在命令行上使用以下命令
27 |
28 | ```commandline
29 | $ cmd
30 | $ git clone https://github.com/BEPb/image_to_ascii
31 | $ cd image_to_ascii
32 | ```
33 |
34 | ### 应用存储库
35 | * 从文件安装依赖项,为此,在命令行中输入以下代码:
36 |
37 | ```shell
38 | $ pip3 install -r requirements.txt
39 | ````
40 |
41 | * 程序启动的一般形式:
42 |
43 | ```shell
44 | $ python3 img_to_txt_rus.py [file/url] [size]
45 | ```
46 |
47 | *参数:
48 |
49 | ```shell
50 | [file/url]:本地文件路径或在线图片URL。
51 | [size]:输出txt图片的字符宽度——整数,size越大图片越清晰。
52 | ```
53 |
54 | ### 例子
55 | ```shell
56 | $ python3 img_to_txt.py https://i.postimg.cc/t4Cmn7wC/py.png
57 | ```
58 | 通过执行此命令,您将在当前“文本”文件夹中获得一个名为“out.txt”的文件,您将在控制台中看到该行的输出:
59 |
60 |
61 |
62 |
63 |
64 |
65 | ## 视频到文本转换器
66 | 原理类似,只是生成的文本文件不存在。
67 |
68 | ```commandline
69 | cd C:\Users\root\PycharmProjects\image_to_ascii
70 | python video_to_txt.py animations\filin.gif 150
71 | ```
72 |
73 |
74 |
75 |
76 |
77 |
78 |
79 | ### License
80 | [MIT licence](LICENSE)
81 |
--------------------------------------------------------------------------------
/README.hindi.md:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 | # एक छवि को एक .txt फ़ाइल में कनवर्ट करना
16 | Read in other languages: [English](README.md), [Русский](README.ru.md), [中國人](README.chinese.md), [Português](README.portuguese.md)
17 |
18 | ## यह काम किस प्रकार करता है?
19 |
20 | सब कुछ बहुत सरल है: आप या तो चित्र फ़ाइल डाउनलोड करते हैं या पायथन स्क्रिप्ट चलाते समय इसका लिंक निर्दिष्ट करते हैं, और
21 | आउटपुट आपको एक टेक्स्ट फ़ाइल मिलती है, और आप तुरंत कमांड लाइन पर देख सकते हैं कि यह कैसा दिखेगा
22 | आपके रूपांतरण का परिणाम।
23 |
24 | ## बॉट तैयार करने और उसके साथ काम करने की प्रक्रिया
25 |
26 | * रिपॉजिटरी को क्लोन करें या जीथब से आर्काइव डाउनलोड करें या कमांड लाइन पर निम्न कमांड का उपयोग करें
27 |
28 | ```commandline
29 | $ cmd
30 | $ git clone https://github.com/BEPb/image_to_ascii
31 | $ cd image_to_ascii
32 | ```
33 |
34 | ### रिपॉजिटरी को लागू करना
35 | * एक फ़ाइल से निर्भरताएँ स्थापित करें, इसके लिए कमांड लाइन में निम्न कोड दर्ज करें:
36 |
37 | ```shell
38 | $ pip3 install -r requirements.txt
39 | ````
40 |
41 | * प्रोग्राम लॉन्च का सामान्य रूप:
42 |
43 | ```shell
44 | $ python3 img_to_txt_rus.py [file/url] [size]
45 | ```
46 |
47 | * तर्क:
48 |
49 | ```shell
50 | [file/url]: स्थानीय फ़ाइल पथ या ऑनलाइन छवि URL।
51 | [size]: वर्णों में आउटपुट txt छवि की चौड़ाई - एक पूर्णांक, आकार जितना बड़ा होगा, चित्र उतना ही स्पष्ट होगा।
52 | ```
53 |
54 | ### उदाहरण
55 | ```shell
56 | $ python3 img_to_txt.py https://i.postimg.cc/t4Cmn7wC/py.png
57 | ```
58 | इस कमांड को क्रियान्वित करने पर, आपको वर्तमान 'टेक्स्ट' फोल्डर में `out.txt` नाम की एक फाइल मिलेगी और आप कंसोल में लाइन का आउटपुट देखेंगे:
59 |
60 |
61 |
62 |
63 |
64 |
65 |
66 | ## वीडियो से टेक्स्ट कन्वर्टर
67 | सिद्धांत समान है, सिवाय इसके कि परिणामी पाठ फ़ाइल मौजूद नहीं है।
68 |
69 | ```commandline
70 | cd C:\Users\root\PycharmProjects\image_to_ascii
71 | python video_to_txt.py animations\filin.gif 150
72 | ```
73 |
74 |
75 |
76 |
77 |
78 |
79 |
80 | ### License
81 | [MIT licence](LICENSE)
82 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 | # Converting an image to a .txt file
16 | Read in other languages: [Русский](README.ru.md), [हिन्दी](README.hindi.md), [中國人](README.chinese.md), [Português](README.portuguese.md)
17 |
18 | ## How it works?
19 |
20 | Everything is very simple: you either download a picture file or specify its link when running a python script, and
21 | output you get a text file, and you can immediately view on the command line how it will look
22 | the result of your conversion.
23 |
24 | ## Procedure for preparing and working with the bot
25 |
26 | * Clone the repository or download the archive from github or using the following commands on the command line
27 |
28 | ```commandline
29 | $ cmd
30 | $ git clone https://github.com/BEPb/image_to_ascii
31 | $ cd image_to_ascii
32 | ```
33 |
34 | ### Applying the repository
35 | * Install dependencies from a file, for this, enter the following code in the command line:
36 |
37 | ```shell
38 | $ pip3 install -r requirements.txt
39 | ````
40 |
41 | * general form of program launch:
42 |
43 | ```shell
44 | $ python3 img_to_txt_rus.py [file/url] [size]
45 | ```
46 |
47 | * arguments:
48 |
49 | ```shell
50 | [file/url]: Local file path or online image URL.
51 | [size]: The width of the output txt image in characters - an integer, The larger the size, the clearer the picture.
52 | ```
53 |
54 | ### Example
55 | ```shell
56 | $ python3 img_to_txt.py https://i.postimg.cc/t4Cmn7wC/py.png
57 | ```
58 | By 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:
59 |
60 |
61 |
62 |
63 |
64 |
65 |
66 | ## Video to Text Converter
67 | The principle is similar, except that the resulting text file does not exist.
68 |
69 | ```commandline
70 | cd C:\Users\root\PycharmProjects\image_to_ascii
71 | python video_to_txt.py animations\filin.gif 150
72 | ```
73 |
74 |
75 |
76 |
77 |
78 |
79 |
80 | ### License
81 | [MIT licence](LICENSE)
82 |
--------------------------------------------------------------------------------
/README.portuguese.md:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 | # Convertendo uma imagem para um arquivo de texto
16 | Leia em outros idiomas: [Русский](README.ru.md), [हिन्दी](README.hindi.md), [中國人](README.chinese.md), [English](README.md)
17 |
18 | ## Como funciona
19 |
20 | Tudo é muito simples: você baixa um arquivo de imagem ou especifica seu link ao executar um script python e
21 | saída, você obtém um arquivo de texto e pode visualizar imediatamente na linha de comando como ele ficará
22 | o resultado da sua conversão.
23 |
24 | ## Processo para preparar e trabalhar com o bot
25 |
26 | * Clone o repositório ou baixe o arquivo do GitHub ou use os seguintes comandos na linha de comando
27 |
28 | ```commandline
29 | $ cmd
30 | $ git clone https://github.com/BEPb/image_to_ascii
31 | $ cd image_to_ascii
32 | ```
33 |
34 | ### Aplicando o repositório
35 | * Instale as dependências de um arquivo, para isto, insira o seguinte código na linha de comando:
36 |
37 | ```shell
38 | $ pip3 install -r requirements.txt
39 | ````
40 |
41 | * Meio geral de inicializar o programa
42 |
43 | ```shell
44 | $ python3 img_to_txt_rus.py [file/url] [size]
45 | ```
46 |
47 | * Argumentos:
48 |
49 | ```shell
50 | [file/url]: Arquivo local ou uma URL de imagem online.
51 | [size]: A largura do texto de saída em caracteres - um número inteiro, Quanto maior o tamanho, mais clara a imagem.
52 | ```
53 |
54 | ### Exemplo
55 | ```shell
56 | $ python3 img_to_txt.py https://i.postimg.cc/t4Cmn7wC/py.png
57 | ```
58 |
59 | Ao executar este comando, você receberá um arquivo na atual pasta 'texts' chamado `out.txt` e você verá a saída no console:
60 |
61 |
62 |
63 |
64 |
65 |
66 |
67 | ## Conversor de vído para texto
68 | O princípio é similar, exceto que o arquivo de texto resultante não existe.
69 |
70 | ```commandline
71 | cd C:\Users\root\PycharmProjects\image_to_ascii
72 | python video_to_txt.py animations\filin.gif 150
73 | ```
74 |
75 |
76 |
77 |
78 |
79 |
80 |
81 | ### Licença
82 | [Licença MIT](LICENSE)
--------------------------------------------------------------------------------
/README.ru.md:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 | # Преобразования изображения в txt-файл
16 | Читать на других языках: [English](README.md), [हिन्दी](README.hindi.md), [中國人](README.chinese.md), [Português](README.portuguese.md)
17 |
18 |
19 | ## Как это работает?
20 |
21 | Все очень просто: вы либо скачиваете файл-картинку или указываете ее ссылку при запуске скрипта на питоне, а на
22 | выходе получаете текстовый файл, а также сразу сможете просмотреть в командной строке как это будет выглядесть
23 | результат Вашего преобразования.
24 |
25 | ## Порядок подготовки и работы с ботом
26 |
27 | * Клонировать репозиторий либо скачать архив из github или при помощи следующих команд в командной строке
28 | ```commandline
29 | $ cmd
30 | $ git clone https://github.com/BEPb/image_to_ascii
31 | $ cd image_to_ascii
32 | ```
33 |
34 |
35 | ### Применение репозитория
36 | * Устанавливаем зависимости из файла, для этого в командной строке введите следующий код:
37 |
38 | ```shell
39 | $ pip3 install -r requirements.txt
40 | ````
41 |
42 | * общая форма запуска программы:
43 |
44 | ```shell
45 | $ python3 img_to_txt_rus.py [file/url] [size]
46 | ```
47 |
48 | * аргументы:
49 |
50 | ```shell
51 | [file/url]: Путь к локальному файлу или URL-адрес онлайн-изображения.
52 | [size]: Ширина вывода txt изображения в символах - целое число, Чем больше размер, тем четче картинка .
53 | ```
54 |
55 | ### Пример
56 | ```shell
57 | $ python3 img_to_txt_rus.py https://i.postimg.cc/t4Cmn7wC/py.png
58 | ```
59 | Выполнив эту команду, вы получите файл в текущей папке 'texts' с именем `out.txt`, и вы увидите вывод строки в консоли:
60 |
61 |
62 |
63 |
64 |
65 |
66 | ## Программа преобразования видео в текст
67 | Принцип аналагичный, за исключением того, что итогового текстового файла не существует
68 |
69 | ```commandline
70 | cd C:\Users\root\PycharmProjects\image_to_ascii # переходим в дирректорию со скриптом
71 | python video_to_txt_rus.py animations\filin.gif 150 # запускаем скрипт
72 | ```
73 |
74 |
75 |
76 |
77 |
78 |
79 |
80 | ### Лицензия
81 | [MIT licence](LICENSE)
82 |
--------------------------------------------------------------------------------
/animations/filin.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/BEPb/image_to_ascii/874ab21a88cb946e194add62fb8d4878978b573e/animations/filin.gif
--------------------------------------------------------------------------------
/animations/gif.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/BEPb/image_to_ascii/874ab21a88cb946e194add62fb8d4878978b573e/animations/gif.gif
--------------------------------------------------------------------------------
/img_to_txt.py:
--------------------------------------------------------------------------------
1 | """
2 | Python 3.10 image to text conversion program
3 | The image can be downloaded both from a file and from the Internet.
4 | File name img_to_txt_rus.py
5 |
6 | Version: 0.1
7 | Author: Andrej Marinchenko
8 | Date: 2023-02-11
9 | """
10 |
11 | from PIL import Image
12 | import numpy as np
13 | import requests
14 | import sys
15 |
16 | txt_file = f'texts/out.txt'
17 | # img_file = ['-', f'pictures/superman.jpg', 90]
18 | img_file = ['-', f'pictures/py.jpg', 80]
19 |
20 | abc = '##@@MMBB88NNHHOOGGPPEEXXFFVVYY22ZZCC77LLjjll11rrii;;;:::.... '
21 | l = 256 / len(abc)
22 |
23 |
24 | def remove_transparency(im, bg_colour=(255, 255, 255)):
25 | if im.mode in ('RGBA', 'LA') or (im.mode == 'P' and 'transparency' in im.info):
26 | alpha = im.convert('RGBA').split()[-1]
27 | bg = Image.new("RGBA", im.size, bg_colour + (255,))
28 | bg.paste(im, mask=alpha)
29 | return bg
30 | else:
31 | return im
32 |
33 | def pixel_to_black(fp, weight):
34 | try:
35 | img = Image.open(fp)
36 | except:
37 | print('Please enter the correct path or image URL.')
38 | return
39 | img = remove_transparency(img)
40 | img = img.convert("L")
41 | im_w, im_h = img.size
42 | img = np.array(img)
43 | h, w = img.shape
44 | weight_w = weight if w >= weight else w
45 | weight_h = weight if h >= weight else h
46 | weight = weight_w if weight_w < weight_h else weight_h
47 | t_w = weight
48 | t_h = weight / (im_w / im_h) / 2
49 | width_times = int(w / t_w) if int(w / t_w) != 0 else 1
50 | high_times = int(h / t_h) if int(h / t_h) != 0 else 1
51 | tmp_high = []
52 | for high_index in range(int(h / high_times)):
53 | tmp_width = []
54 | for width_index in range(int(w / width_times)):
55 | tmp_block = []
56 | for y in range((high_index * high_times), ((high_index + 1) * high_times)):
57 | for x in range(width_index * width_times, (width_index + 1) * width_times):
58 | tmp_block.append(img[y, x])
59 | avg_tmp_block = sum(tmp_block) / len(tmp_block)
60 | tmp_width.append(avg_tmp_block)
61 | tmp_high.append(tmp_width)
62 | return tmp_high
63 |
64 | def black_to_alphabet(rgb_list):
65 | tmp_high = ''
66 | for i in rgb_list:
67 | tmp_width = ''
68 | for ii in i:
69 | a = abc[int(ii / l)]
70 | tmp_width += a
71 | tmp_width += '\n'
72 | tmp_high += tmp_width
73 | return tmp_high
74 |
75 | def paint(uri, weight):
76 | if uri.startswith('http'):
77 | img = get_img(uri)
78 | else:
79 | img = uri
80 | rgb_list = pixel_to_black(img, weight)
81 | if not rgb_list:
82 | return
83 | s = black_to_alphabet(rgb_list)
84 | with open(txt_file, 'w', encoding='utf-8') as f:
85 | f.write(s)
86 | return s
87 |
88 | def get_img(url):
89 | response = requests.get(url)
90 | if response.status_code == 200:
91 | with open(f'pictures/temp.png', 'wb') as f:
92 | for chunk in response.iter_content(1024):
93 | f.write(chunk)
94 | return f'pictures/temp.png'
95 |
96 | def main(args):
97 | try:
98 | uri = args[1]
99 | assert type(uri) == str
100 | except:
101 | uri = 'https://i.postimg.cc/t4Cmn7wC/py.png'
102 | try:
103 | weight = int(args[2])
104 | assert type(weight) == int
105 | except:
106 | weight = 80
107 | s = paint(uri, weight=weight)
108 | if not s:
109 | return
110 | print(s)
111 |
112 | if __name__ == '__main__':
113 | main(sys.argv)
114 | # main(img_file)
--------------------------------------------------------------------------------
/img_to_txt_rus.py:
--------------------------------------------------------------------------------
1 | """
2 | Python 3.10 программа преобразования картинки в текст
3 | Картинку можно загрузить как из файла так и из интернета
4 | Название файла img_to_txt_rus.py
5 |
6 | Version: 0.1
7 | Author: Andrej Marinchenko
8 | Date: 2023-02-11
9 | """
10 |
11 | from PIL import Image
12 | import numpy as np
13 | import requests
14 | import sys
15 |
16 | txt_file = f'texts/out.txt'
17 | # img_file = ['-', f'pictures/superman.jpg', 90] # указываем адрес файла изображения для обработки и его конечный размер
18 | img_file = ['-', f'pictures/py.jpg', 80] # указываем адрес файла изображения для обработки и его конечный размер
19 |
20 | abc = '##@@MMBB88NNHHOOGGPPEEXXFFVVYY22ZZCC77LLjjll11rrii;;;:::.... '
21 | l = 256 / len(abc)
22 |
23 | # функция определяет тип изображения
24 | def remove_transparency(im, bg_colour=(255, 255, 255)):
25 | # Обрабатывать только в том случае, если изображение имеет прозрачность
26 | if im.mode in ('RGBA', 'LA') or (im.mode == 'P' and 'transparency' in im.info):
27 |
28 | # Необходимо преобразовать в RGBA, если формат LA из-за ошибки в PIL
29 | alpha = im.convert('RGBA').split()[-1]
30 |
31 | # Создайте новое фоновое изображение нашего матового цвета.
32 | # Должен быть RGBA, потому что вставка требует, чтобы оба изображения имели одинаковый формат
33 | bg = Image.new("RGBA", im.size, bg_colour + (255,))
34 | bg.paste(im, mask=alpha)
35 | return bg
36 | else:
37 | return im
38 |
39 | # преобразование картинки
40 | def pixel_to_black(fp, weight):
41 | try:
42 | img = Image.open(fp)
43 | except:
44 | print('Введите правильный путь или URL изображения, пожалуйста.')
45 | return
46 | img = remove_transparency(img)
47 | img = img.convert("L")
48 | im_w, im_h = img.size
49 | img = np.array(img)
50 | h, w = img.shape
51 | # ширина
52 | weight_w = weight if w >= weight else w
53 | weight_h = weight if h >= weight else h
54 | weight = weight_w if weight_w < weight_h else weight_h
55 | # Максимальная ширина символа
56 | t_w = weight
57 | # Максимальная высота символов
58 | t_h = weight / (im_w / im_h) / 2
59 | width_times = int(w / t_w) if int(w / t_w) != 0 else 1
60 | high_times = int(h / t_h) if int(h / t_h) != 0 else 1
61 |
62 | tmp_high = []
63 | for high_index in range(int(h / high_times)):
64 | tmp_width = []
65 | for width_index in range(int(w / width_times)):
66 | tmp_block = []
67 | for y in range((high_index * high_times), ((high_index + 1) * high_times)):
68 | for x in range(width_index * width_times, (width_index + 1) * width_times):
69 | tmp_block.append(img[y, x])
70 | avg_tmp_block = sum(tmp_block) / len(tmp_block)
71 | tmp_width.append(avg_tmp_block)
72 | tmp_high.append(tmp_width)
73 | return tmp_high
74 |
75 |
76 | def black_to_alphabet(rgb_list):
77 | tmp_high = ''
78 | for i in rgb_list:
79 | tmp_width = ''
80 | for ii in i:
81 | a = abc[int(ii / l)]
82 | tmp_width += a
83 | tmp_width += '\n'
84 | tmp_high += tmp_width
85 | return tmp_high
86 |
87 | # функция преобразования изображения в текст
88 | def paint(uri, weight):
89 | if uri.startswith('http'): # если указана ссылка в интернете, то скачиваем изображение
90 | print('Распознана ссылка')
91 | img = get_img(uri)
92 | else: # иначе указана ссылка на локальное изображение (файл)
93 | print('Распознан файл')
94 | img = uri
95 | rgb_list = pixel_to_black(img, weight)
96 | if not rgb_list:
97 | return
98 | s = black_to_alphabet(rgb_list)
99 | with open(txt_file, 'w', encoding='utf-8') as f:
100 | f.write(s)
101 | return s
102 |
103 | # функция взятия изображения
104 | def get_img(url):
105 | print('Загрузка изображения из Интернета, пожалуйста, подождите.')
106 | response = requests.get(url)
107 | if response.status_code == 200:
108 | with open(f'pictures/temp.png', 'wb') as f:
109 | for chunk in response.iter_content(1024):
110 | f.write(chunk)
111 | return f'pictures/temp.png'
112 |
113 | '''Главная функция'''
114 | def main(args): # функция принимает аргументы
115 | try:
116 | print('Ваша ссылка принята')
117 | uri = args[1]
118 | assert type(uri) == str
119 | except:
120 | # изображение по умолчанию, в случае если не задано иное
121 | print('Вы не указали ссылку на скачивание, по этой причине будет загружено изображение по умолчанию...')
122 | uri = 'https://i.postimg.cc/t4Cmn7wC/py.png'
123 | try:
124 | weight = int(args[2]) # второй аргумент, это ширина изображения текста в символах
125 | assert type(weight) == int # проверяем что заданное число - целое
126 | except:
127 | weight = 80 # если ширина не задана, то по умолчанию 80 символов
128 | s = paint(uri, weight=weight)
129 | if not s:
130 | return
131 | print(s) # печать в командной строке преобразованного изображения в текст
132 |
133 | # проверка на главную программу и запуск главной функции
134 | if __name__ == '__main__':
135 | main(sys.argv) # запускаем главную функцию с аргументами при запуске программы
136 | # main(img_file) # запускаем главную функцию с картинкой из папки
137 |
--------------------------------------------------------------------------------
/pictures/png.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/BEPb/image_to_ascii/874ab21a88cb946e194add62fb8d4878978b573e/pictures/png.png
--------------------------------------------------------------------------------
/pictures/py.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/BEPb/image_to_ascii/874ab21a88cb946e194add62fb8d4878978b573e/pictures/py.png
--------------------------------------------------------------------------------
/pictures/superman.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/BEPb/image_to_ascii/874ab21a88cb946e194add62fb8d4878978b573e/pictures/superman.jpg
--------------------------------------------------------------------------------
/pictures/temp.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/BEPb/image_to_ascii/874ab21a88cb946e194add62fb8d4878978b573e/pictures/temp.png
--------------------------------------------------------------------------------
/requirements.txt:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/BEPb/image_to_ascii/874ab21a88cb946e194add62fb8d4878978b573e/requirements.txt
--------------------------------------------------------------------------------
/texts/out.txt:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 | .iljjjjjjjjjlr:
11 | rYXXXXXXXXXXXXXXXVj.
12 | ZX7:.;YXXXXXXXXXXXXXY.
13 | 1XXr ZXXXXXXXXXXXXXXC
14 | LXXXY2FXXXXXXXXXXXXXXXY
15 | r7777777777YXXXXXXXXXXY
16 | ijC2222222222222222VXXXXXXXXXXY :::::..
17 | lFXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXY ;iiiiii;.
18 | 7XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXC iiiiiiiii;
19 | :XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXY.:iiiiiiiiii.
20 | ;XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXYl.:iiiiiiiiiii:
21 | ;XXXXXXXXXXXXXXX27jlllllllll1i:.:iiiiiiiiiiiii:
22 | ;XXXXXXXXXXXXYr.::;;;;;;;;;;;iiiiiiiiiiiiiiiii:
23 | ;XXXXXXXXXXXl.;iiiiiiiiiiiiiiiiiiiiiiiiiiiiiii:
24 | .VXXXXXXXXXL ;iiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii.
25 | :YXXXXXXXX::iiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii:
26 | rZFXXXXX.:iiiiiiiiiiiiiiiiiiiiiiiiiiiiii:.
27 | .:;;; :iiiiiiiiii;..................
28 | :iiiiiiiiiiiiiiiiiiiii;
29 | :iiiiiiiiiiiiiii:..;ii;
30 | .iiiiiiiiiiiiii; ii:
31 | .iiiiiiiiiiiiii;::;i:
32 | .;iiiiiiiiiiiii;:.
33 | .........
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 |
--------------------------------------------------------------------------------
/video_to_txt.py:
--------------------------------------------------------------------------------
1 | """
2 | Python 3.10 программа преобразования видео в текст
3 | видео можно загрузить как из файла так и из интернета
4 | Название файла video_to_txt.py
5 |
6 | Version: 0.1
7 | Author: Andrej Marinchenko
8 | Date: 2023-02-11
9 | """
10 | import cv2
11 | from PIL import Image
12 | import numpy as np
13 | import time
14 | import sys
15 |
16 | abc = '@MWNHB8$06XFVYZ27>1jli!;:,. '
17 | l = 256 / len(abc)
18 |
19 | def remove_transparency(im, bg_colour=(255, 255, 255)):
20 | if im.mode in ('RGBA', 'LA') or (im.mode == 'P' and 'transparency' in im.info):
21 | alpha = im.convert('RGBA').split()[-1]
22 | bg = Image.new("RGBA", im.size, bg_colour + (255,))
23 | bg.paste(im, mask=alpha)
24 | return bg
25 |
26 | else:
27 | return im
28 |
29 | def img2pixel(img, charwidth=100):
30 | img = img.convert("L")
31 | w, h = img.size
32 | img = img.resize((charwidth, int(charwidth * (h / w) / 2.4)))
33 | data = np.array(img)
34 | return data
35 |
36 |
37 | def pixel2char(data):
38 | chars = '\n\n'
39 | for row in data:
40 | for pixel in row:
41 | a = abc[int(pixel / l)]
42 | chars += a
43 | chars += '\n'
44 | return chars + '\n'
45 |
46 |
47 | def main(args):
48 | start = time.time()
49 | if len(args) != 3:
50 | return
51 | vcap = cv2.VideoCapture(args[1])
52 | width = vcap.get(cv2.CAP_PROP_FRAME_WIDTH) # вещественное число
53 | height = vcap.get(cv2.CAP_PROP_FRAME_HEIGHT) # вещественное число
54 | fps = vcap.get(cv2.CAP_PROP_FPS)
55 | print(width, height, fps)
56 |
57 | currentframe = 0
58 | while (True):
59 | t1 = time.time()
60 | ret, frame = vcap.read()
61 | if ret:
62 | pilimg = Image.fromarray(frame)
63 | data = img2pixel(pilimg, charwidth=int(args[2]))
64 | s = pixel2char(data=data)
65 | print(s)
66 | currentframe += 1
67 | else:
68 | break
69 |
70 | time2sleep = (1 / fps) - (time.time() - t1)
71 | if time2sleep > 0: time.sleep(time2sleep)
72 |
73 | # Освободите пространство и окна
74 | vcap.release()
75 | cv2.destroyAllWindows()
76 |
77 | if __name__ == '__main__':
78 | main(sys.argv)
79 |
--------------------------------------------------------------------------------
/video_to_txt_rus.py:
--------------------------------------------------------------------------------
1 | """
2 | Python 3.10 программа преобразования видео в текст
3 | видео можно загрузить как из файла так и из интернета
4 | Название файла video_to_txt_rus.py
5 |
6 | Version: 0.1
7 | Author: Andrej Marinchenko
8 | Date: 2023-02-11
9 | """
10 | import cv2
11 | from PIL import Image
12 | import numpy as np
13 | import time
14 | import sys
15 |
16 | abc = '@MWNHB8$06XFVYZ27>1jli!;:,. '
17 | l = 256 / len(abc)
18 |
19 |
20 | def remove_transparency(im, bg_colour=(255, 255, 255)):
21 | if im.mode in ('RGBA', 'LA') or (im.mode == 'P' and 'transparency' in im.info):
22 | alpha = im.convert('RGBA').split()[-1]
23 | bg = Image.new("RGBA", im.size, bg_colour + (255,))
24 | bg.paste(im, mask=alpha)
25 | return bg
26 |
27 | else:
28 | return im
29 |
30 |
31 | def img2pixel(img, charwidth=100):
32 | img = img.convert("L")
33 | w, h = img.size
34 | img = img.resize((charwidth, int(charwidth * (h / w) / 2.4)))
35 | data = np.array(img)
36 | return data
37 |
38 |
39 | def pixel2char(data):
40 | chars = '\n\n'
41 | for row in data:
42 | for pixel in row:
43 | a = abc[int(pixel / l)]
44 | chars += a
45 | chars += '\n'
46 | return chars + '\n'
47 |
48 |
49 | def main(args):
50 | start = time.time()
51 | if len(args) != 3:
52 | print("Использование: video_to_txt ширина символа видеопути")
53 | return
54 |
55 | # Получите информацию о ширине, высоте и частоте кадров видео
56 | vcap = cv2.VideoCapture(args[1])
57 | width = vcap.get(cv2.CAP_PROP_FRAME_WIDTH) # вещественное число
58 | height = vcap.get(cv2.CAP_PROP_FRAME_HEIGHT) # вещественное число
59 | fps = vcap.get(cv2.CAP_PROP_FPS)
60 | print(width, height, fps)
61 |
62 | # начать цикл по кадрам
63 | currentframe = 0
64 | while (True):
65 | t1 = time.time()
66 | ret, frame = vcap.read()
67 | if ret:
68 | pilimg = Image.fromarray(frame)
69 | data = img2pixel(pilimg, charwidth=int(args[2]))
70 | s = pixel2char(data=data)
71 | print(s)
72 | currentframe += 1
73 | else:
74 | break
75 |
76 | # Время сна составляет одну долю секунды от кадров в секунду минус время, в течение которого этот кадр уже использовался.
77 | time2sleep = (1 / fps) - (time.time() - t1)
78 | if time2sleep > 0: time.sleep(time2sleep)
79 |
80 | # Освободите пространство и окна
81 | vcap.release()
82 | cv2.destroyAllWindows()
83 | print("Прошедшее время:", time.time() - start)
84 |
85 |
86 | if __name__ == '__main__':
87 | main(sys.argv)
88 |
--------------------------------------------------------------------------------